ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IDEzOGFjNjkuLjRhNmRmMGEgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMSwxMCArMSwxMCBAQAogIyB0aGlzIGlzIG5vdyB0aGUgZGVmYXVsdCBGcmVlVHlwZSBidWlsZCBmb3IgQW5kcm9pZAogIwogaWZuZGVmIFVTRV9GUkVFVFlQRQotVVNFX0ZSRUVUWVBFIDo9IDIuNi4yCitVU0VfRlJFRVRZUEUgOj0gMi43CiBlbmRpZgogCi1pZmVxICgkKFVTRV9GUkVFVFlQRSksMi42LjIpCitpZmVxICgkKFVTRV9GUkVFVFlQRSksMi43KQogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIApkaWZmIC0tZ2l0IGEvTk9USUNFIGIvTk9USUNFCmluZGV4IDlkMTE0YTEuLjQ4NjBjY2EgMTAwNjQ0Ci0tLSBhL05PVElDRQorKysgYi9OT1RJQ0UKQEAgLTUyLDcgKzUyLDcgQEAKICAgZW5jb3VyYWdlIHlvdSB0byB1c2UgdGhlIGZvbGxvd2luZyB0ZXh0OgogCiAgICAiIiIgIAotICAgIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGNvcHlyaWdodCCpIDx5ZWFyPiBUaGUgRnJlZVR5cGUKKyAgICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBjb3B5cmlnaHQgwqkgPHllYXI+IFRoZSBGcmVlVHlwZQogICAgIFByb2plY3QgKHd3dy5mcmVldHlwZS5vcmcpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICIiIgogCmRpZmYgLS1naXQgYS9SRUFETUUuYW5kcm9pZCBiL1JFQURNRS5hbmRyb2lkCmluZGV4IGMzMTM5ZDUuLjNmNTk5YTAgMTAwNjQ0Ci0tLSBhL1JFQURNRS5hbmRyb2lkCisrKyBiL1JFQURNRS5hbmRyb2lkCkBAIC0xLDE2ICsxLDIxIEBACi1OYW1lOiBGcmVlVHlwZQotVmVyc2lvbjogMi42LjIgKyB1cGRhdGUKLVJldmlzaW9uOiBhNTEyYjBmZTdhOGQ5ZGIwZTVhYTljMGE0ZGIxZTkyY2I4NjE3MjJkCitGcmVldHlwZQogCi1Mb2NhbCBtb2RpZmljYXRpb25zOgorVGhlIGZvbGxvd2luZyBtb2R1bGVzIGFyZSBkaXNhYmxlZCBpbiBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oOgorICB0MQorICB0MWNpZAorICBwZnIKKyAgdDQyCisgIHdpbmZudAorICBwY2YKKyAgcHNhdXgKKyAgYmRmCiAKLTEuIERyb3AgdW51c2VkIGJ1aWxkIGZpbGVzIChKYW1maWxlcywge21vZHVsZSxydWxlc30ubWspIAotMi4gRHJvcCBzcmMgZGlyZWN0b3JpZXMgZm9yIHVudXNlZCBtb2R1bGVzOiAKLSAgIGJkZiwgY2lkLCBwY2YsIHBmciwgdHlwZTEsIHR5cGU0Miwgd2luZm9udHMKLTMuIERyb3Agc3JjL3tiemlwMix0b29scyxsencsb3R2YWxpZCxneHZhbGlkfQotNC4gQ3VzdG9taXplIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL3tmdG1vZHVsZSxmdG9wdGlvbn0uaCBieSBhcHBseWluZwotICAgbW9kdWxlX29wdGlvbi5kaWZmCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRpc2FibGVkIGluIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmg6CiAKLVRvIGZhY2lsaWF0ZSBhbiBlYXNpZXIgdXBkYXRlLCBhbGwgdGhlIGZpbGVzIGluIHNyYy97YmFzZSxhdXRvZml0fSBhcmUga2VwdAotZXZlbiBpZiBzb21lIG9mIHRoZW0gYXJlIGZvciBkcm9wcGVkIG1vZHVsZXMvb3B0aW9ucy4gQW5kcm9pZC5tayBjYW4gYmUgdXNlZAotdG8gY29udHJvbCBleGFjdGx5IHdoYXQncyBidWlsdC4KKyAgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKKyAgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9uIGlzIGVuYWJsZWQgdG8gc3VwcG9ydCBjb2xvciBmb250cy4KKworICBGVF9DT05GSUdfT1BUSU9OX1VTRV9QTkcKZGlmZiAtLWdpdCBhL1JFQURNRS52ZXJzaW9uIGIvUkVBRE1FLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1NzAyNQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS52ZXJzaW9uCkBAIC0wLDAgKzEsMyBAQAorVVJMOiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9mcmVldHlwZS9mcmVldHlwZTIuZ2l0L2NvbW1pdC8/aWQ9YzM4YmU1MmIKK1ZlcnNpb246IGMzOGJlNTJiZjhkZTNiMTY5OWQ3NDkzMmI4NDliZjE1MDI2NTgxOWUgKDIuNyArIHVwZGF0ZSkKK0J1Z0NvbXBvbmVudDogNzU5NzAKZGlmZiAtLWdpdCBhL2J1aWxkcy9mdDJ1bml4LmggYi9idWlsZHMvZnQydW5peC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTNiOGQ5Li4wMDAwMDAwCi0tLSBhL2J1aWxkcy9mdDJ1bml4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdDJidWlsZC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQnVpbGQgbWFjcm9zIG9mIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAwMSwgMjAwMywgMjAwNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGlzIGEgVW5peC1zcGVjaWZpYyB2ZXJzaW9uIG9mIDxmdDJidWlsZC5oPiB0aGF0IHNob3VsZCBiZSB1c2VkICAgKi8KLSAgLyogZXhjbHVzaXZlbHkgKmFmdGVyKiBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJdCBhc3N1bWVzIHRoYXQgYC91c3IvbG9jYWwvaW5jbHVkZS9mcmVldHlwZTInIChvciB3aGF0ZXZlciBpcyAgICAgICAgKi8KLSAgLyogcmV0dXJuZWQgYnkgdGhlIGBmcmVldHlwZS1jb25maWcgLS1jZmxhZ3MnIG9yIGBwa2ctY29uZmlnIC0tY2ZsYWdzJyAgICovCi0gIC8qIGNvbW1hbmQpIGlzIGluIHlvdXIgY29tcGlsYXRpb24gaW5jbHVkZSBwYXRoLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGluIHRoaXMgcmVsZWFzZS4gIEhvd2V2ZXIsIGZvciAgICovCi0gIC8qIGEgZnV0dXJlIEZyZWVUeXBlIDIgcmVsZWFzZSwgdGhlIGZvbGxvd2luZyBpbnN0YWxsYXRpb24gY2hhbmdlcyB3aWxsICAqLwotICAvKiBiZSBwZXJmb3JtZWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgLSBUaGUgY29udGVudHMgb2YgYGZyZWV0eXBlLTIueC9pbmNsdWRlL2ZyZWV0eXBlJyB3aWxsIGJlIGluc3RhbGxlZCAqLwotICAvKiAgICAgdG8gYC91c3IvbG9jYWwvaW5jbHVkZS9mcmVldHlwZTInIGluc3RlYWQgb2YgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGAvdXNyL2xvY2FsL2luY2x1ZGUvZnJlZXR5cGUyL2ZyZWV0eXBlJy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gVGhpcyBmaWxlIHdpbGwgI2luY2x1ZGUgPGZyZWV0eXBlMi9jb25maWcvZnRoZWFkZXIuaD4sIGluc3RlYWQgICAgKi8KLSAgLyogICAgIG9mIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gVGhlIGNvbnRlbnRzIG9mIGBmdGhlYWRlci5oJyB3aWxsIGJlIHByb2Nlc3NlZCB3aXRoIGBzZWQnIHRvICAgICAgKi8KLSAgLyogICAgIHJlcGxhY2UgYWxsIGA8ZnJlZXR5cGUveHh4Picgd2l0aCBgPGZyZWV0eXBlMi94eHg+Jy4gICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gQWRkaW5nIGAvdXNyL2xvY2FsL2luY2x1ZGUvZnJlZXR5cGUyJyB0byB5b3VyIGNvbXBpbGF0aW9uIGluY2x1ZGUgKi8KLSAgLyogICAgIHBhdGggd2lsbCBub3QgYmUgbmVjZXNzYXJ5IGFueW1vcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGVzZSBjaGFuZ2VzIHdpbGwgYmUgdHJhbnNwYXJlbnQgdG8gY2xpZW50IGFwcGxpY2F0aW9ucyB3aGljaCB1c2UgICAgKi8KLSAgLyogZnJlZXR5cGUtY29uZmlnIChvciBwa2ctY29uZmlnKS4gIE5vIG1vZGlmaWNhdGlvbnMgd2lsbCBiZSBuZWNlc3NhcnkgICovCi0gIC8qIHRvIGNvbXBpbGUgd2l0aCB0aGUgbmV3IHNjaGVtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZUMl9CVUlMRF9VTklYX0hfXwotI2RlZmluZSBfX0ZUMl9CVUlMRF9VTklYX0hfXwotCi0gIC8qIGA8cHJlZml4Pi9pbmNsdWRlL2ZyZWV0eXBlMicgbXVzdCBiZSBpbiB5b3VyIGN1cnJlbnQgaW5jbHVzaW9uIHBhdGggKi8KLSNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4KLQotI2VuZGlmIC8qIF9fRlQyX0JVSUxEX1VOSVhfSF9fICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAppbmRleCBkNGQ3OTkzLi4xNTdhNzA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQU5TSS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTM1LDggKzM1LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRDT05GSUdfSF9fCi0jZGVmaW5lIF9fRlRDT05GSUdfSF9fCisjaWZuZGVmIEZUQ09ORklHX0hfCisjZGVmaW5lIEZUQ09ORklHX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfQ09ORklHX09QVElPTlNfSApAQCAtMjc1LDcgKzI3NSwxMyBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNlbGlmICFkZWZpbmVkKCBfX1NURENfXyApIHx8IGRlZmluZWQoIEZUX0NPTkZJR19PUFRJT05fRk9SQ0VfSU5UNjQgKQogCi0jaWYgZGVmaW5lZCggX01TQ19WRVIgKSAmJiBfTVNDX1ZFUiA+PSA5MDAgIC8qIFZpc3VhbCBDKysgKGFuZCBJbnRlbCBDKyspICovCisjaWYgZGVmaW5lZCggX19TVERDX1ZFUlNJT05fXyApICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisjZGVmaW5lIEZUX0xPTkc2NAorI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKKyNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CisKKyNlbGlmIGRlZmluZWQoIF9NU0NfVkVSICkgJiYgX01TQ19WRVIgPj0gOTAwICAvKiBWaXN1YWwgQysrIChhbmQgSW50ZWwgQysrKSAqLwogCiAgIC8qIHRoaXMgY29tcGlsZXIgcHJvdmlkZXMgdGhlIF9faW50NjQgdHlwZSAqLwogI2RlZmluZSBGVF9MT05HNjQKQEAgLTMwOSw3ICszMTUsNyBAQAogI2RlZmluZSBGVF9JTlQ2NCAgIGxvbmcgbG9uZyBpbnQKICNkZWZpbmUgRlRfVUlOVDY0ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CiAKLSNlbmRpZiAvKiBfTVNDX1ZFUiAqLworI2VuZGlmIC8qIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCAqLwogCiAjZW5kaWYgLyogRlRfU0laRU9GX0xPTkcgPT0gKDY0IC8gRlRfQ0hBUl9CSVQpICovCiAKQEAgLTQ2MSw3ICs0NjcsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0ZUQ09ORklHX0hfXyAqLworI2VuZGlmIC8qIEZUQ09ORklHX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaAppbmRleCA1NWY4MzNkLi42OGUxNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQnVpbGQgbWFjcm9zIG9mIHRoZSBGcmVlVHlwZSAyIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE1LDggKzE1LDggQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRfSEVBREVSX0hfXwotI2RlZmluZSBfX0ZUX0hFQURFUl9IX18KKyNpZm5kZWYgRlRIRUFERVJfSF8KKyNkZWZpbmUgRlRIRUFERVJfSF8KIAogCiAgIC8qQCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzUzLDggKzc1Myw3IEBACiAgICAqICAgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0gKICAgICoKICAgICogQGRlc2NyaXB0aW9uOgotICAgKiAgIEEgbWFjcm8gdXNlZCBpbiAjaW5jbHVkZSBzdGF0ZW1lbnRzIHRvIG5hbWUgdGhlIGZpbGUgY29udGFpbmluZyB0aGUKLSAgICogICBGcmVlVHlwZX4yIEFQSSB3aGljaCBwZXJmb3JtcyBjb2xvciBmaWx0ZXJpbmcgZm9yIHN1YnBpeGVsIHJlbmRlcmluZy4KKyAgICogICBEZXByZWNhdGVkLgogICAgKi8KICNkZWZpbmUgRlRfVU5QQVRFTlRFRF9ISU5USU5HX0ggIDxmcmVldHlwZS90dHVucGF0Lmg+CiAKQEAgLTc2Niw3ICs3NjUsNyBAQAogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgQSBtYWNybyB1c2VkIGluICNpbmNsdWRlIHN0YXRlbWVudHMgdG8gbmFtZSB0aGUgZmlsZSBjb250YWluaW5nIHRoZQotICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIGNvbG9yIGZpbHRlcmluZyBmb3Igc3VicGl4ZWwgcmVuZGVyaW5nLgorICAgKiAgIEZyZWVUeXBlfjIgQVBJIHdoaWNoIHBlcmZvcm1zIGluY3JlbWVudGFsIGdseXBoIGxvYWRpbmcuCiAgICAqLwogI2RlZmluZSBGVF9JTkNSRU1FTlRBTF9IICA8ZnJlZXR5cGUvZnRpbmNyZW0uaD4KIApAQCAtODI4LDcgKzgyNyw3IEBACiAjZW5kaWYgLyogRlQyX0JVSUxEX0xJQlJBUlkgKi8KIAogCi0jZW5kaWYgLyogX19GVDJfQlVJTERfSF9fICovCisjZW5kaWYgLyogRlRIRUFERVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCmluZGV4IDM4MTk1ODYuLjk0Y2NmN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBVc2VyLXNlbGVjdGFibGUgY29uZmlndXJhdGlvbiBtYWNyb3MgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRPUFRJT05fSF9fCi0jZGVmaW5lIF9fRlRPUFRJT05fSF9fCisjaWZuZGVmIEZUT1BUSU9OX0hfCisjZGVmaW5lIEZUT1BUSU9OX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03Nyw2ICs3NywzNiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogSWYgeW91IGVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBGcmVlVHlwZSByZWNvZ25pemVzIGFuICAgICAgICovCisgIC8qIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBgRlJFRVRZUEVfUFJPUEVSVElFUycsIHdoaWNoIGNhbiBiZSB1c2VkICAqLworICAvKiB0byBjb250cm9sIHRoZSB2YXJpb3VzIGZvbnQgZHJpdmVycyBhbmQgbW9kdWxlcy4gIFRoZSBjb250cm9sbGFibGUgICAgKi8KKyAgLyogcHJvcGVydGllcyBhcmUgbGlzdGVkIGluIHRoZSBzZWN0aW9uIGBDb250cm9sbGluZyBGcmVlVHlwZSBNb2R1bGVzJyAgICovCisgIC8qIGluIHRoZSByZWZlcmVuY2UncyB0YWJsZSBvZiBjb250ZW50czsgY3VycmVudGx5IHRoZXJlIGFyZSBwcm9wZXJ0aWVzICAqLworICAvKiBmb3IgdGhlIGF1dG8taGludGVyIChmaWxlIGBmdGF1dG9oLmgnKSwgQ0ZGIChmaWxlIGBmdGNmZmRydi5oJyksIGFuZCAgKi8KKyAgLyogVHJ1ZVR5cGUgKGZpbGUgYGZ0dHRkcnYuaCcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBgRlJFRVRZUEVfUFJPUEVSVElFUycgaGFzIHRoZSBmb2xsb3dpbmcgc3ludGF4IGZvcm0gKGJyb2tlbiBoZXJlIGludG8gKi8KKyAgLyogbXVsdGlwbGUgbGluZXMgZm9yIGJldHRlciByZWFkYWJpbGl0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIDxvcHRpb25hbCB3aGl0ZXNwYWNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICA8bW9kdWxlLW5hbWUxPiAnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgPHByb3BlcnR5LW5hbWUxPiAnPScgPHByb3BlcnR5LXZhbHVlMT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIDx3aGl0ZXNwYWNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICA8bW9kdWxlLW5hbWUyPiAnOicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgPHByb3BlcnR5LW5hbWUyPiAnPScgPHByb3BlcnR5LXZhbHVlMj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBGUkVFVFlQRV9QUk9QRVJUSUVTPXRydWV0eXBlOmludGVycHJldGVyLXZlcnNpb249MzUgXCAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBjZmY6bm8tc3RlbS1kYXJrZW5pbmc9MSBcICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUyAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBVbmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgc3ViLXBpeGVsIHJlbmRlcmluZyAgKi8KICAgLyogKGEuay5hLiBMQ0QgcmVuZGVyaW5nLCBvciBDbGVhclR5cGUpIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxpYnJhcnkuICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDkyLDcgKzUyMiwyMSBAQAogICAvKiAgIGNvZGUgd2lsbCBiZSB1c2VkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgU2V0dGluZyB0aGlzIG1hY3JvIGlzIG5lZWRlZCBmb3Igc3lzdGVtcyB0aGF0IHByb2hpYml0IGFkZHJlc3MgICAgICAqLwotICAvKiAgIGZpeHVwcywgc3VjaCBhcyBCUkVXLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBmaXh1cHMsIHN1Y2ggYXMgQlJFVy4gIFtOb3RlIHRoYXQgc3RhbmRhcmQgY29tcGlsZXJzIGxpa2UgZ2NjIG9yICAgICovCisgIC8qICAgY2xhbmcgaGFuZGxlIFBJQyBnZW5lcmF0aW9uIGF1dG9tYXRpY2FsbHk7IHlvdSBkb24ndCBoYXZlIHRvIHNldCAgICAqLworICAvKiAgIEZUX0NPTkZJR19PUFRJT05fUElDLCB3aGljaCBpcyBvbmx5IG5lY2Vzc2FyeSBmb3IgdmVyeSBzcGVjaWFsICAgICAgKi8KKyAgLyogICBjb21waWxlcnMuXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgIE5vdGUgdGhhdCBGVF9DT05GSUdfT1BUSU9OX1BJQyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgZm9yIGFsbCAgICAgKi8KKyAgLyogICBtb2R1bGVzIChzZWUgYG1vZHVsZXMuY2ZnJyBmb3IgYSBjb21wbGV0ZSBsaXN0KS4gIEZvciBidWlsZGluZyB3aXRoICovCisgIC8qICAgRlRfQ09ORklHX09QVElPTl9QSUMgc3VwcG9ydCwgZG8gdGhlIGZvbGxvd2luZy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIDAuIENsb25lIHRoZSByZXBvc2l0b3J5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAxLiBEZWZpbmUgRlRfQ09ORklHX09QVElPTl9QSUMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgMi4gUmVtb3ZlIGFsbCBzdWJkaXJlY3RvcmllcyBpbiBgc3JjJyB0aGF0IGRvbid0IGhhdmUgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIEZUX0NPTkZJR19PUFRJT05fUElDIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAzLiBDb21tZW50IG91dCB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGVzIGluIGBtb2R1bGVzLmNmZycuICAgICAgICAqLworICAvKiAgICAgNC4gQ29tcGlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fUElDICovCiAKQEAgLTU4Niw3MyArNjMwLDUzIEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogRGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyBpZiB5b3Ugd2FudCB0byBjb21waWxlICAgICAgICovCi0gIC8qIEVYUEVSSU1FTlRBTCBzdWJwaXhlbCBoaW50aW5nIHN1cHBvcnQgaW50byB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhpcyAqLwotICAvKiByZXBsYWNlcyB0aGUgbmF0aXZlIFRydWVUeXBlIGhpbnRpbmcgbWVjaGFuaXNtIHdoZW4gYW55dGhpbmcgYnV0ICAgICAgKi8KLSAgLyogRlRfUkVOREVSX01PREVfTU9OTyBpcyByZXF1ZXN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCBpbnRvIHRoZSBUcnVlVHlwZSBkcml2ZXIuICBUaGlzIG1vZGlmaWVzIHRoZSAqLworICAvKiBUcnVlVHlwZSBoaW50aW5nIG1lY2hhbmlzbSB3aGVuIGFueXRoaW5nIGJ1dCBGVF9SRU5ERVJfTU9ERV9NT05PIGlzICAgKi8KKyAgLyogcmVxdWVzdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBFbmFibGluZyB0aGlzIGNhdXNlcyB0aGUgVHJ1ZVR5cGUgZHJpdmVyIHRvIGlnbm9yZSBpbnN0cnVjdGlvbnMgdW5kZXIgKi8KLSAgLyogY2VydGFpbiBjb25kaXRpb25zLiAgVGhpcyBpcyBkb25lIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZ3VpZGUgaGVyZSwgICovCi0gIC8qIHdpdGggc29tZSBtaW5vciBkaWZmZXJlbmNlczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBJbiBwYXJ0aWN1bGFyLCBpdCBtb2RpZmllcyB0aGUgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdG8gaW50ZXJwcmV0IChvciAgKi8KKyAgLyogbm90KSBpbnN0cnVjdGlvbnMgaW4gYSBjZXJ0YWluIHdheSBzbyB0aGF0IGFsbCBUcnVlVHlwZSBmb250cyBsb29rICAgICovCisgIC8qIGxpa2UgdGhleSBkbyBpbiBhIFdpbmRvd3MgQ2xlYXJUeXBlIChEaXJlY3RXcml0ZSkgZW52aXJvbm1lbnQuICBTZWUgICAqLworICAvKiBbMV0gZm9yIGEgdGVjaG5pY2FsIG92ZXJ2aWV3IG9uIHdoYXQgdGhpcyBtZWFucy4gIFNlZSBgdHRpbnRlcnAuaCcgICAgKi8KKyAgLyogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgTEVBTiBvcHRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHggKi8KKyAgLyogVGhlcmUgYXJlIHRocmVlIG9wdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBCeSB1bmRlZmluaW5nIHRoaXMsIHlvdSBvbmx5IGNvbXBpbGUgdGhlIGNvZGUgbmVjZXNzYXJ5IHRvIGhpbnQgICAgICAgKi8KLSAgLyogVHJ1ZVR5cGUgZ2x5cGhzIHdpdGggbmF0aXZlIFRUIGhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDEuIFRoaXMgb3B0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYEluZmluYWxpdHknIG1vbmlrZXIuICAgICAgICAgICAqLworICAvKiAgICBDb250cmlidXRlZCBieSBhbiBpbmRpdmlkdWFsIG5pY2tuYW1lZCBJbmZpbmFsaXR5IHdpdGggdGhlIGdvYWwgb2YgKi8KKyAgLyogICAgbWFraW5nIFRydWVUeXBlIGZvbnRzIHJlbmRlciBiZXR0ZXIgdGhhbiBvbiBXaW5kb3dzLiAgQSBoaWdoICAgICAgICovCisgIC8qICAgIGFtb3VudCBvZiBjb25maWd1cmFiaWxpdHkgYW5kIGZsZXhpYmlsaXR5LCBkb3duIHRvIHJ1bGVzIGZvciAgICAgICAqLworICAvKiAgICBzaW5nbGUgZ2x5cGhzIGluIGZvbnRzLCBidXQgYWxzbyB2ZXJ5IHNsb3cuICBJdHMgZXhwZXJpbWVudGFsIGFuZCAgKi8KKyAgLyogICAgc2xvdyBuYXR1cmUgYW5kIHRoZSBvcmlnaW5hbCBkZXZlbG9wZXIgbG9zaW5nIGludGVyZXN0IG1lYW50IHRoYXQgICovCisgIC8qICAgIHRoaXMgb3B0aW9uIHdhcyBuZXZlciBlbmFibGVkIGluIGRlZmF1bHQgYnVpbGRzLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICBUaGlzIG9wdGlvbiByZXF1aXJlcyBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSIHRvIGJlICAgICovCi0gIC8qICAgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAyLiBUaGUgbmV3IGRlZmF1bHQgbW9kZSBmb3IgdGhlIFRydWVUeXBlIGRyaXZlci4gIFRoZSBJbmZpbmFsaXR5IGNvZGUgKi8KKyAgLyogICAgYmFzZSB3YXMgc3RyaXBwZWQgdG8gdGhlIGJhcmUgbWluaW11bSBhbmQgYWxsIGNvbmZpZ3VyYWJpbGl0eSAgICAgICovCisgIC8qICAgIHJlbW92ZWQgaW4gdGhlIG5hbWUgb2Ygc3BlZWQgYW5kIHNpbXBsaWNpdHkuICBUaGUgY29uZmlndXJhYmlsaXR5ICAqLworICAvKiAgICB3YXMgbWFpbmx5IGFpbWVkIGF0IGxlZ2FjeSBmb250cyBsaWtlIEFyaWFsLCBUaW1lcyBOZXcgUm9tYW4sIG9yICAgKi8KKyAgLyogICAgQ291cmllci4gIExlZ2FjeSBmb250cyBhcmUgZm9udHMgdGhhdCBtb2RpZnkgdmVydGljYWwgc3RlbXMgdG8gICAgICovCisgIC8qICAgIGFjaGlldmUgY2xlYW4gYmxhY2stYW5kLXdoaXRlIGJpdG1hcHMuICBUaGUgbmV3IG1vZGUgZm9jdXNlcyBvbiAgICAqLworICAvKiAgICBhcHBseWluZyBhIG1pbmltYWwgc2V0IG9mIHJ1bGVzIHRvIGFsbCBmb250cyBpbmRpc2NyaW1pbmF0ZWx5IHNvICAgKi8KKyAgLyogICAgdGhhdCBtb2Rlcm4gYW5kIHdlYiBmb250cyByZW5kZXIgd2VsbCB3aGlsZSBsZWdhY3kgZm9udHMgcmVuZGVyICAgICovCisgIC8qICAgIG9rYXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogMy4gQ29tcGlsZSBib3RoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJZiB5b3UgZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HLCBhIHNwZWNpYWwgdmVyc2lvbiAgKi8KLSAgLyogb2YgdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyIGlzIHVzZWQgdGhhdCBkb2Vzbid0IGltcGxlbWVudCAgICovCi0gIC8qIGFueSBvZiB0aGUgcGF0ZW50ZWQgb3Bjb2RlcyBhbmQgYWxnb3JpdGhtcy4gIFRoZSBwYXRlbnRzIHJlbGF0ZWQgdG8gICAqLwotICAvKiBUcnVlVHlwZSBoaW50aW5nIGhhdmUgZXhwaXJlZCB3b3JsZHdpZGUgc2luY2UgTWF5IDIwMTA7IHRoaXMgb3B0aW9uICAgKi8KLSAgLyogaXMgbm93IGRlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIEJ5IHVuZGVmaW5pbmcgdGhlc2UsIHlvdSBnZXQgcmVuZGVyaW5nIGJlaGF2aW9yIGxpa2Ugb24gV2luZG93cyAgICAgICAqLworICAvKiB3aXRob3V0IENsZWFyVHlwZSwgaS5lLiwgV2luZG93cyBYUCB3aXRob3V0IENsZWFyVHlwZSBlbmFibGVkIGFuZCAgICAgKi8KKyAgLyogV2luOXggKGludGVycHJldGVyIHZlcnNpb24gdjM1KS4gIE9yIG5vdCwgZGVwZW5kaW5nIG9uIGhvdyBtdWNoICAgICAgICovCisgIC8qIGhpbnRpbmcgYmxvb2QgYW5kIHRlc3RpbmcgdGVhcnMgdGhlIGZvbnQgZGVzaWduZXIgcHV0IGludG8gYSBnaXZlbiAgICAqLworICAvKiBmb250LiAgSWYgeW91IGRlZmluZSBvbmUgb3IgYm90aCBzdWJwaXhlbCBoaW50aW5nIG9wdGlvbnMsIHlvdSBjYW4gICAgKi8KKyAgLyogc3dpdGNoIGJldHdlZW4gYmV0d2VlbiB2MzUgYW5kIHRoZSBvbmVzIHlvdSBkZWZpbmUuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgdGhlIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HIG1hY3JvIGlzICppZ25vcmVkKiAgKi8KLSAgLyogaWYgeW91IGRlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSOyBpbiBvdGhlciB3b3JkcywgICovCi0gIC8qIGVpdGhlciBkZWZpbmUgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiBvciAgICAgICAgICAgICAgICAqLwotICAvKiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyBidXQgbm90IGJvdGggYXQgdGhlIHNhbWUgdGltZS4gICAgKi8KKyAgLyogVGhpcyBvcHRpb24gcmVxdWlyZXMgVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiB0byBiZSAgICAgICovCisgIC8qIGRlZmluZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBtYWNybyBpcyBvbmx5IHVzZWZ1bCBmb3IgYSBzbWFsbCBudW1iZXIgb2YgZm9udCBmaWxlcyAobW9zdGx5ICAgICovCi0gIC8qIGZvciBBc2lhbiBzY3JpcHRzKSB0aGF0IHJlcXVpcmUgYnl0ZWNvZGUgaW50ZXJwcmV0YXRpb24gdG8gcHJvcGVybHkgICAqLwotICAvKiBsb2FkIGdseXBocy4gIEZvciBhbGwgb3RoZXIgZm9udHMsIHRoaXMgcHJvZHVjZXMgdW5wbGVhc2FudCByZXN1bHRzLCAgKi8KLSAgLyogdGh1cyB0aGUgdW5wYXRlbnRlZCBpbnRlcnByZXRlciBpcyBuZXZlciB1c2VkIHRvIGxvYWQgZ2x5cGhzIGZyb20gICAgICovCi0gIC8qIFRydWVUeXBlIGZvbnRzIHVubGVzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyBpcyB1c2VkLiAgICAgICAqLworICAvKiBbMV0gaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHggKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgLSBUaGUgdW5wYXRlbnRlZCBpbnRlcnByZXRlciBpcyBleHBsaWNpdGx5IGFjdGl2YXRlZCBieSB0aGUgdXNlciAgICAqLwotICAvKiAgICAgdGhyb3VnaCB0aGUgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORyBwYXJhbWV0ZXIgdGFnICAgICAgICAgKi8KLSAgLyogICAgIHdoZW4gb3BlbmluZyB0aGUgRlRfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgIC0gRnJlZVR5cGUgZGV0ZWN0cyB0aGF0IHRoZSBGVF9GYWNlIGNvcnJlc3BvbmRzIHRvIG9uZSBvZiB0aGUgICAgICAgKi8KLSAgLyogICAgIGB0cmljaycgZm9udHMgKGUuZy4sIGBNaW5nbGl1JykgaXQga25vd3MgYWJvdXQuICBUaGUgZm9udCBlbmdpbmUgICovCi0gIC8qICAgICBjb250YWlucyBhIGhhcmQtY29kZWQgbGlzdCBvZiBmb250IG5hbWVzIGFuZCBvdGhlciBtYXRjaGluZyAgICAgICAqLwotICAvKiAgICAgcGFyYW1ldGVycyAoc2VlIGZ1bmN0aW9uIGB0dF9mYWNlX2luaXQnIGluIGZpbGUgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIGBzcmMvdHJ1ZXR5cGUvdHRvYmpzLmMnKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBIZXJlIGEgc2FtcGxlIGNvZGUgc25pcHBldCBmb3IgdXNpbmcgRlRfUEFSQU1fVEFHX1VOUEFURU5URURfSElOVElORy4gKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgRlRfUGFyYW1ldGVyICBwYXJhbWV0ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIEZUX09wZW5fQXJncyAgb3Blbl9hcmdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgIHBhcmFtZXRlci50YWcgPSBGVF9QQVJBTV9UQUdfVU5QQVRFTlRFRF9ISU5USU5HOyAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgb3Blbl9hcmdzLmZsYWdzICAgICAgPSBGVF9PUEVOX1BBVEhOQU1FIHwgRlRfT1BFTl9QQVJBTVM7ICAgICAgICAgKi8KLSAgLyogICAgIG9wZW5fYXJncy5wYXRobmFtZSAgID0gbXlfZm9udF9wYXRobmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBvcGVuX2FyZ3MubnVtX3BhcmFtcyA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgb3Blbl9hcmdzLnBhcmFtcyAgICAgPSAmcGFyYW1ldGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBlcnJvciA9IEZUX09wZW5fRmFjZSggbGlicmFyeSwgJm9wZW5fYXJncywgaW5kZXgsICZmYWNlICk7ICAgICAgICAqLwotICAvKiAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyAqLworLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgIDEgICAgICAgICAqLworLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgIDIgICAgICAgICAqLworLyogI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgICggMSB8IDIgKSAqLwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04NDMsNyArODY3LDcgQEAKICAgLyogYHdhcnBpbmcnIHByb3BlcnR5IG9mIHRoZSBhdXRvLWhpbnRlciAoc2VlIGZpbGUgYGZ0YXV0b2guaCcgZm9yIG1vcmUgICovCiAgIC8qIGluZm9ybWF0aW9uOyBieSBkZWZhdWx0IGl0IGlzIHN3aXRjaGVkIG9mZikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9VU0VfV0FSUEVSICovCisjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgogCiAgIC8qICovCiAKQEAgLTg1NiwxNCArODgwLDE5IEBACiAKIAogICAvKgotICAgKiBUaGlzIG1hY3JvIGlzIGRlZmluZWQgaWYgZWl0aGVyIHVucGF0ZW50ZWQgb3IgbmF0aXZlIFRydWVUeXBlCi0gICAqIGhpbnRpbmcgaXMgcmVxdWVzdGVkIGJ5IHRoZSBkZWZpbml0aW9ucyBhYm92ZS4KKyAgICogVGhpcyBtYWNybyBpcyBkZWZpbmVkIGlmIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIGlzIHJlcXVlc3RlZCBieSB0aGUKKyAgICogZGVmaW5pdGlvbnMgYWJvdmUuCiAgICAqLwogI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKICNkZWZpbmUgIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgotI3VuZGVmICAgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSNlbGlmIGRlZmluZWQgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSNkZWZpbmUgIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorCisjaWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICYgMQorI2RlZmluZSAgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyNlbmRpZgorCisjaWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICYgMgorI2RlZmluZSAgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyNlbmRpZgogI2VuZGlmCiAKIApAQCAtODk4LDcgKzkyNyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fRlRPUFRJT05fSF9fICovCisjZW5kaWYgLyogRlRPUFRJT05fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdHN0ZGxpYi5oCmluZGV4IDRiNDcxZDQuLjZlZWZhOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0c3RkbGliLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRzdGRsaWIuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEFOU0ktc3BlY2lmaWMgbGlicmFyeSBhbmQgaGVhZGVyIGNvbmZpZ3VyYXRpb24gZmlsZSAoc3BlY2lmaWNhdGlvbiAgICovCiAvKiAgICBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsMTQgKzIzLDEzIEBACiAgIC8qIEZyZWVUeXBlIG5vcm1hbGx5IHJlcXVpcmVzLiAgSXQgYWxzbyBkZWZpbmVzIG1hY3JvcyB0byByZW5hbWUgdGhlICAgICAqLwogICAvKiBzdGFuZGFyZCBmdW5jdGlvbnMgd2l0aGluIHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIExvYWQgYSBmaWxlIHdoaWNoIGRlZmluZXMgX19GVFNURExJQl9IX18gYmVmb3JlIHRoaXMgb25lIHRvIG92ZXJyaWRlICAqLwotICAvKiBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTG9hZCBhIGZpbGUgd2hpY2ggZGVmaW5lcyBGVFNURExJQl9IXyBiZWZvcmUgdGhpcyBvbmUgdG8gb3ZlcnJpZGUgaXQuICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRTVERMSUJfSF9fCi0jZGVmaW5lIF9fRlRTVERMSUJfSF9fCisjaWZuZGVmIEZUU1RETElCX0hfCisjZGVmaW5lIEZUU1RETElCX0hfCiAKIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgpAQCAtNjQsNiArNjMsNyBAQAogI2RlZmluZSBGVF9JTlRfTUFYICAgICBJTlRfTUFYCiAjZGVmaW5lIEZUX0lOVF9NSU4gICAgIElOVF9NSU4KICNkZWZpbmUgRlRfVUlOVF9NQVggICAgVUlOVF9NQVgKKyNkZWZpbmUgRlRfTE9OR19NSU4gICAgTE9OR19NSU4KICNkZWZpbmUgRlRfTE9OR19NQVggICAgTE9OR19NQVgKICNkZWZpbmUgRlRfVUxPTkdfTUFYICAgVUxPTkdfTUFYCiAKQEAgLTE0Miw3ICsxNDIsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jZGVmaW5lIGZ0X2F0b2wgIGF0b2wKKyNkZWZpbmUgZnRfc3RydG9sICBzdHJ0b2wKKyNkZWZpbmUgZnRfZ2V0ZW52ICBnZXRlbnYKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTY4LDcgKzE2OSw3IEBACiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIAotI2VuZGlmIC8qIF9fRlRTVERMSUJfSF9fICovCisjZW5kaWYgLyogRlRTVERMSUJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaAppbmRleCBmNjg3MThkLi4xMDUwM2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGhpZ2gtbGV2ZWwgQVBJIGFuZCBjb21tb24gdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GUkVFVFlQRV9IX18KLSNkZWZpbmUgX19GUkVFVFlQRV9IX18KKyNpZm5kZWYgRlJFRVRZUEVfSF8KKyNkZWZpbmUgRlJFRVRZUEVfSF8KIAogCiAjaWZuZGVmIEZUX0ZSRUVUWVBFX0gKQEAgLTE0MSw3ICsxNDEsNiBAQAogICAvKiAgICBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19ISU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0hBU19IT1JJWk9OVEFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9IQVNfVkVSVElDQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTY1MiwxMSArNjUxLDExIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9FTkNPRElOR19TSklTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBDb3JyZXNwb25kcyB0byBKYXBhbmVzZSBTSklTIGVuY29kaW5nLiAgTW9yZSBpbmZvIGF0ICAgICAgICAgICAgICovCi0gIC8qICAgICAgYXQgYGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hpZnRfSklTJy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoaWZ0X0pJUycuICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICBTZWUgbm90ZSBvbiBtdWx0aS1ieXRlIGVuY29kaW5ncyBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9FTkNPRElOR19HQjIzMTIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byBhbiBlbmNvZGluZyBzeXN0ZW0gZm9yIFNpbXBsaWZpZWQgQ2hpbmVzZSBhcyB1c2VkICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYW4gZW5jb2Rpbmcgc3lzdGVtIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgYXMgICAgICAqLwogICAvKiAgICAgIHVzZWQgaW4gbWFpbmxhbmQgQ2hpbmEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0VOQ09ESU5HX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtOTUyLDYgKzk1MSwxMCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZXMgaW4gdGhlIGZhY2UuICBJdCBpcyBzZXQgdG8gTlVMTCBpZiAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVyZSBpcyBubyBiaXRtYXAgc3RyaWtlLiAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCBGcmVlVHlwZSB0cmllcyB0byBzYW5pdGl6ZSB0aGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2UgZGF0YSBzaW5jZSB0aGV5IGFyZSBzb21ldGltZXMgc2xvcHB5ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgaW5jb3JyZWN0LCBidXQgdGhpcyBjYW4gZWFzaWx5IGZhaWwuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgbnVtX2NoYXJtYXBzICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGNoYXJtYXBzIGluIHRoZSBmYWNlLiAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBjaGFybWFwcyAgICAgICAgICAgIDo6IEFuIGFycmF5IG9mIHRoZSBjaGFybWFwcyBvZiB0aGUgZmFjZS4gICAgICAgKi8KQEAgLTExMDQsNyArMTEwNyw3IEBACiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19TQ0FMQUJMRSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIG91dGxpbmUgZ2x5cGhzLiAgVGhpcyBkb2Vzbid0ICAgKi8KICAgLyogICAgICBwcmV2ZW50IGJpdG1hcCBzdHJpa2VzLCBpLmUuLCBhIGZhY2UgY2FuIGhhdmUgYm90aCB0aGlzIGFuZCAgICAgICovCi0gIC8qICAgICAgYW5kIEBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgc2V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGJpdG1hcCBzdHJpa2VzLiAgU2VlIGFsc28gdGhlICAgKi8KQEAgLTEyMjMsNyArMTIyNiw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfSE9SSVpPTlRBTCggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTIzNyw3ICsxMjQwLDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19WRVJUSUNBTCggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjUxLDcgKzEyNTQsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSEFTX0tFUk5JTkcoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0tFUk5JTkcgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0tFUk5JTkcgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNjYsNyArMTI2OSw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9JU19TQ0FMQUJMRSggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMjg1LDcgKzEyODgsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfU0ZOVCggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMwMCw3ICsxMzAzLDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0lTX0ZJWEVEX1dJRFRIKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCApCisgICAgICAgICAgKCAoZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzMTUsNyArMTMxOCw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfRklYRURfU0laRVMoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM0MSw3ICsxMzQ0LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19HTFlQSF9OQU1FUyggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzU2LDcgKzEzNTksMjEgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9JU19OQU1FRF9JTlNUQU5DRSggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgaXMgYSBuYW1lZCBpbnN0YW5jZQorICAgKiAgIG9mIGEgR1ggdmFyaWF0aW9uIGZvbnQuCisgICAqCisgICAqLworI2RlZmluZSBGVF9JU19OQU1FRF9JTlNUQU5DRSggZmFjZSApIFwKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9pbmRleCAmIDB4N0ZGRjAwMDBMICkKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzc0LDcgKzEzOTEsNyBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlRfSVNfQ0lEX0tFWUVEKCBmYWNlICkgXAotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgKQorICAgICAgICAgICggKGZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTM4OCw3ICsxNDA1LDcgQEAKICAgICoKICAgICovCiAjZGVmaW5lIEZUX0lTX1RSSUNLWSggZmFjZSApIFwKLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVFJJQ0tZICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKQogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE0MDIsNyArMTQxOSw3IEBACiAgICAqCiAgICAqLwogI2RlZmluZSBGVF9IQVNfQ09MT1IoIGZhY2UgKSBcCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0NPTE9SICkKKyAgICAgICAgICAoIChmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19DT0xPUiApCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE5NDIsNyArMTk1OSw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBJZiB0aGUgQEZUX09QRU5fTUVNT1JZIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IHRoaXMgaXMgYSAgICAgICAgICAgKi8KICAgLyogICAgbWVtb3J5IGZpbGUgb2YgYG1lbW9yeV9zaXplJyBieXRlcywgbG9jYXRlZCBhdCBgbWVtb3J5X2FkZHJlc3MnLiAgICovCi0gIC8qICAgIFRoZSBkYXRhIGFyZSBhcmUgbm90IGNvcGllZCwgYW5kIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yICAgICAqLworICAvKiAgICBUaGUgZGF0YSBhcmUgbm90IGNvcGllZCwgYW5kIHRoZSBjbGllbnQgaXMgcmVzcG9uc2libGUgZm9yICAgICAgICAgKi8KICAgLyogICAgcmVsZWFzaW5nIGFuZCBkZXN0cm95aW5nIHRoZW0gX2FmdGVyXyB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvICAgICovCiAgIC8qICAgIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTIzMzIsMTcgKzIzNDksMjYgQEAKICAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSBzdXBwb3J0ZWQgc2l6ZSByZXF1ZXN0IHR5cGVzLiAgICovCisgIC8qICAgIEFuIGVudW1lcmF0aW9uIHR5cGUgdGhhdCBsaXN0cyB0aGUgc3VwcG9ydGVkIHNpemUgcmVxdWVzdCB0eXBlcywgICAqLworICAvKiAgICBpLmUuLCB3aGF0IGlucHV0IHNpemUgKGluIGZvbnQgdW5pdHMpIG1hcHMgdG8gdGhlIHJlcXVlc3RlZCBvdXRwdXQgKi8KKyAgLyogICAgc2l6ZSAoaW4gcGl4ZWxzLCBhcyBjb21wdXRlZCBmcm9tIHRoZSBhcmd1bWVudHMgb2YgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9TaXplX1JlcXVlc3QpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBub21pbmFsIHNpemUuICBUaGUgYHVuaXRzX3Blcl9FTScgZmllbGQgb2YgQEZUX0ZhY2VSZWMgaXMgICAgKi8KICAgLyogICAgICB1c2VkIHRvIGRldGVybWluZSBib3RoIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHNjYWxpbmcgZm91bmQgaW4gbW9zdCBhcHBsaWNhdGlvbnMuICBJbiAgICAgKi8KKyAgLyogICAgICBwYXJ0aWN1bGFyLCB1c2UgdGhpcyBzaXplIHJlcXVlc3QgdHlwZSBmb3IgVHJ1ZVR5cGUgZm9udHMgaWYgICAgICovCisgIC8qICAgICAgdGhleSBwcm92aWRlIG9wdGljYWwgc2NhbGluZyBvciBzb21ldGhpbmcgc2ltaWxhci4gIE5vdGUsICAgICAgICAqLworICAvKiAgICAgIGhvd2V2ZXIsIHRoYXQgYHVuaXRzX3Blcl9FTScgaXMgYSByYXRoZXIgYWJzdHJhY3QgdmFsdWUgd2hpY2ggICAgKi8KKyAgLyogICAgICBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGdseXBocyBpbiBhIGZvbnQuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICBUaGUgcmVhbCBkaW1lbnNpb24uICBUaGUgc3VtIG9mIHRoZSB0aGUgYGFzY2VuZGVyJyBhbmQgKG1pbnVzICAgICovCi0gIC8qICAgICAgb2YpIHRoZSBgZGVzY2VuZGVyJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lICAqLwotICAvKiAgICAgIGJvdGggc2NhbGluZyB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgcmVhbCBkaW1lbnNpb24uICBUaGUgc3VtIG9mIHRoZSBgYXNjZW5kZXInIGFuZCAobWludXMgb2YpICAgICovCisgIC8qICAgICAgdGhlIGBkZXNjZW5kZXInIGZpZWxkcyBvZiBARlRfRmFjZVJlYyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgYm90aCAqLworICAvKiAgICAgIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX0JCT1ggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBmb250IGJvdW5kaW5nIGJveC4gIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBgYmJveCcgZmllbGQgKi8KQEAgLTIzOTIsMjIgKzI0MTgsMjkgQEAKICAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHR5cGUgICAgICAgICAgIDo6IFNlZSBARlRfU2l6ZV9SZXF1ZXN0X1R5cGUuICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgd2lkdGggICAgICAgICAgOjogVGhlIGRlc2lyZWQgd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICAgICAgICAgIDo6IFRoZSBkZXNpcmVkIHdpZHRoLCBnaXZlbiBhcyBhIDI2LjYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICBwb2ludCB2YWx1ZSAod2l0aCA3MnB0ID0gMWluKS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGhlaWdodCAgICAgICAgIDo6IFRoZSBkZXNpcmVkIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgICA6OiBUaGUgZGVzaXJlZCBoZWlnaHQsIGdpdmVuIGFzIGEgMjYuNiBmcmFjdGlvbmFsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgcG9pbnQgdmFsdWUgKHdpdGggNzJwdCA9IDFpbikuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLiAgSWYgc2V0IHRvIHplcm8sICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgMjYuNiBmcmFjdGlvbmFsIHBpeGVsICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIChkcGksIGkuZS4sIHBpeGVscyBwZXIgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgaW5jaCkuICBJZiBzZXQgdG8gemVybywgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIDI2LjYgZnJhY3Rpb25hbCAqcGl4ZWwqIHZhbHVlLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdmVydFJlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24uICBJZiBzZXQgdG8gemVybywgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGBoZWlnaHQnIGlzIHRyZWF0ZWQgYXMgYSAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydFJlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24gKGRwaSwgaS5lLiwgcGl4ZWxzIHBlciAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIGluY2gpLiAgSWYgc2V0IHRvIHplcm8sIGBoZWlnaHQnIGlzIHRyZWF0ZWQgYXMgYSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAyNi42IGZyYWN0aW9uYWwgKnBpeGVsKiB2YWx1ZS4gICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBJZiBgd2lkdGgnIGlzIHplcm8sIHRoZW4gdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwgKi8KICAgLyogICAgdG8gdGhlIHZlcnRpY2FsIHNjYWxpbmcgdmFsdWUsIGFuZCB2aWNlIHZlcnNhLiAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgdHlwZScgaXMgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTLCBgd2lkdGgnIGFuZCBgaGVpZ2h0JyBhcmUgKi8KKyAgLyogICAgaW50ZXJwcmV0ZWQgZGlyZWN0bHkgYXMgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlcywgd2l0aG91dCAgICovCisgIC8qICAgIGFueSBmdXJ0aGVyIG1vZGlmaWNhdGlvbiwgYW5kIGJvdGggYGhvcmlSZXNvbHV0aW9uJyBhbmQgICAgICAgICAgICAqLworICAvKiAgICBgdmVydFJlc29sdXRpb24nIGFyZSBpZ25vcmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX1JlcXVlc3RSZWNfCiAgIHsKICAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgdHlwZTsKQEAgLTI1NzksNiArMjYxMiwxMCBAQAogICAvKiAgICBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBnbHlwaCBpbiB0aGUgZm9udCkuICBTZWUgdGhlIGRpc2N1c3Npb24gKi8KICAgLyogICAgb2YgdGhlIEBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGZsYWcgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB5b3UgcmVjZWl2ZSBgRlRfRXJyX0dseXBoX1Rvb19CaWcnLCB0cnkgZ2V0dGluZyB0aGUgZ2x5cGggICAgICAgKi8KKyAgLyogICAgb3V0bGluZSBhdCBFTSBzaXplLCB0aGVuIHNjYWxlIGl0IG1hbnVhbGx5IGFuZCBmaWxsIGl0IGFzIGEgICAgICAgICovCisgIC8qICAgIGdyYXBoaWNzIG9wZXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX0xvYWRfR2x5cGgoIEZUX0ZhY2UgICBmYWNlLAogICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2x5cGhfaW5kZXgsCkBAIC0yODU2LDcgKzI4OTMsNyBAQAogICAgKgogICAgKiAgIElmIEBGVF9MT0FEX1JFTkRFUiBpcyBhbHNvIHNldCwgdGhlIGdseXBoIGlzIHJlbmRlcmVkIGluIHRoZQogICAgKiAgIGNvcnJlc3BvbmRpbmcgbW9kZSAoaS5lLiwgdGhlIG1vZGUgdGhhdCBtYXRjaGVzIHRoZSB1c2VkIGFsZ29yaXRobQotICAgKiAgIGJlc3QpLiAgQW4gZXhlcHRpb24gaXMgRlRfTE9BRF9UQVJHRVRfTU9OTyBzaW5jZSBpdCBpbXBsaWVzCisgICAqICAgYmVzdCkuICBBbiBleGNlcHRpb24gaXMgRlRfTE9BRF9UQVJHRVRfTU9OTyBzaW5jZSBpdCBpbXBsaWVzCiAgICAqICAgQEZUX0xPQURfTU9OT0NIUk9NRS4KICAgICoKICAgICogICBZb3UgY2FuIHVzZSBhIGhpbnRpbmcgYWxnb3JpdGhtIHRoYXQgZG9lc24ndCBjb3JyZXNwb25kIHRvIHRoZSBzYW1lCkBAIC0zMjc0LDcgKzMzMTEsNyBAQAogICAvKiAgICBgLm5vdGRlZicpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgYW4gZXJyb3IgaWYgdGhlIGNvbmZpZyBtYWNybyAgICAgICAgICAqLwotICAvKiAgICBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgbm90IGRlZmluZWQgaW4gYGZ0b3B0aW9ucy5oJy4gKi8KKyAgLyogICAgYEZUX0NPTkZJR19PUFRJT05fTk9fR0xZUEhfTkFNRVMnIGlzIG5vdCBkZWZpbmVkIGluIGBmdG9wdGlvbi5oJy4gICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKICAgRlRfR2V0X0dseXBoX05hbWUoIEZUX0ZhY2UgICAgIGZhY2UsCkBAIC00MTcyLDggKzQyMDksOCBAQAogICAgKgogICAgKi8KICNkZWZpbmUgRlJFRVRZUEVfTUFKT1IgIDIKLSNkZWZpbmUgRlJFRVRZUEVfTUlOT1IgIDYKLSNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDIKKyNkZWZpbmUgRlJFRVRZUEVfTUlOT1IgIDcKKyNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDAKIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNDIxOCwyMCArNDI1NSwxMyBAQAogICAvKiAgICBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBQYXJzZSBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIG9mIGEgVHJ1ZVR5cGUgZm9udCBmaWxlIHRvIGNoZWNrICAgKi8KLSAgLyogICAgd2hldGhlciBhbnkgb2YgdGhlIHBhdGVudGVkIG9wY29kZXMgYXJlIHVzZWQuICBUaGlzIGlzIG9ubHkgdXNlZnVsICovCi0gIC8qICAgIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdXNlIHRoZSB1bnBhdGVudGVkIGhpbnRlciB3aXRoICAgICAgICAgICAqLwotICAvKiAgICBmb250cyB0aGF0IGRvICpub3QqIHVzZSB0aGVzZSBvcGNvZGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHBhcnNlcyAqYWxsKiBnbHlwaCBpbnN0cnVjdGlvbnMgaW4gdGhlICAgICAqLwotICAvKiAgICBmb250IGZpbGUsIHdoaWNoIG1heSBiZSBzbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVwcmVjYXRlZCwgZG9lcyBub3RoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZmFjZSA6OiBBIGZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgMX5pZiB0aGlzIGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IHVzZXMgb25lIG9mIHRoZSBwYXRlbnRlZCAgICAgICAgICovCi0gIC8qICAgIG9wY29kZXMsIDB+b3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBTaW5jZSBNYXkgMjAxMCwgVHJ1ZVR5cGUgaGludGluZyBpcyBubyBsb25nZXIgcGF0ZW50ZWQuICAgICAgICAgICAgKi8KQEAgLTQyNDksOSArNDI3OSw3IEBACiAgIC8qICAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIEVuYWJsZSBvciBkaXNhYmxlIHRoZSB1bnBhdGVudGVkIGhpbnRlciBmb3IgYSBnaXZlbiBmYWNlLiAgICAgICAgICAqLwotICAvKiAgICBPbmx5IGVuYWJsZSBpdCBpZiB5b3UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZhY2UgZG9lc24ndCAgICAgICAgKi8KLSAgLyogICAgdXNlIGFueSBwYXRlbnRlZCBvcGNvZGVzIChzZWUgQEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMpLiAgICAgICovCisgIC8qICAgIERlcHJlY2F0ZWQsIGRvZXMgbm90aGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGZhY2UgIDo6IEEgZmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNDI1OSw5ICs0Mjg3LDcgQEAKICAgLyogICAgdmFsdWUgOjogTmV3IGJvb2xlYW4gc2V0dGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIG9sZCBzZXR0aW5nIHZhbHVlLiAgVGhpcyB3aWxsIGFsd2F5cyBiZSBmYWxzZSBpZiB0aGlzIGlzIG5vdCAgICovCi0gIC8qICAgIGFuIFNGTlQgZm9udCwgb3IgaWYgdGhlIHVucGF0ZW50ZWQgaGludGVyIGlzIG5vdCBjb21waWxlZCBpbiB0aGlzICAqLwotICAvKiAgICBpbnN0YW5jZSBvZiB0aGUgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQWx3YXlzIHJldHVybnMgZmFsc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgU2luY2UgTWF5IDIwMTAsIFRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLiAgICAgICAgICAgICovCkBAIC00Mjc4LDcgKzQzMDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZSRUVUWVBFX0hfXyAqLworI2VuZGlmIC8qIEZSRUVUWVBFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YWR2YW5jLmgKaW5kZXggYjRkMmFlZC4uMDIzZGQ4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGFkdmFuYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRhZHZhbmMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRBRFZBTkNfSF9fCi0jZGVmaW5lIF9fRlRBRFZBTkNfSF9fCisjaWZuZGVmIEZUQURWQU5DX0hfCisjZGVmaW5lIEZUQURWQU5DX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xODEsNyArMTgxLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEFEVkFOQ19IX18gKi8KKyNlbmRpZiAvKiBGVEFEVkFOQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGF1dG9oLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaAppbmRleCBkMGY2NDQ1Li40OGZmMWFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YXV0b2guaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNvbnRyb2xsaW5nIHRoZSBhdXRvLWhpbnRlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRBVVRPSF9IX18KLSNkZWZpbmUgX19GVEFVVE9IX0hfXworI2lmbmRlZiBGVEFVVE9IX0hfCisjZGVmaW5lIEZUQVVUT0hfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0yMTksOCArMjE5LDggQEAKICAgICogICAgICAgVSswRjAwIC0gVSswRkZGICAvLyBUaWJldGFuCiAgICAqICAgICAgIFUrMTkwMCAtIFUrMTk0RiAgLy8gTGltYnUKICAgICogICAgICAgVSsxQjgwIC0gVSsxQkJGICAvLyBTdW5kYW5lc2UKLSAgICogICAgICAgVSsxQzgwIC0gVSsxQ0RGICAvLyBNZWV0ZWkgTWF5YWsKICAgICogICAgICAgVStBODAwIC0gVStBODJGICAvLyBTeWxvdGkgTmFncmkKKyAgICogICAgICAgVStBQkMwIC0gVStBQkZGICAvLyBNZWV0ZWkgTWF5ZWsKICAgICogICAgICBVKzExODAwIC0gVSsxMThERiAvLyBTaGFyYWRhCiAgICAqICAgICB9CiAgICAqCkBAIC00MjgsNiArNDI4LDkgQEAKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIDEgYW5kIDAgZm9yIGBvbicgYW5kIGBvZmYnLCByZXNwZWN0aXZlbHkpLgorICAgKgogICAgKiAgIFRoZSB3YXJwaW5nIGNvZGUgY2FuIGFsc28gY2hhbmdlIGFkdmFuY2Ugd2lkdGhzLiAgSGF2ZSBhIGxvb2sgYXQgdGhlCiAgICAqICAgYGxzYl9kZWx0YScgYW5kIGByc2JfZGVsdGEnIGZpZWxkcyBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUKICAgICogICBmb3IgZGV0YWlscyBvbiBpbXByb3ZpbmcgaW50ZXItZ2x5cGggZGlzdGFuY2VzIHdoaWxlIHJlbmRlcmluZy4KQEAgLTQ3Myw2ICs0NzYsOSBAQAogICAgKiAgIFRoZSBzbWFsbGVyIHRoZSBzaXplIChlc3BlY2lhbGx5IDlwcGVtIGFuZCBkb3duKSwgdGhlIGhpZ2hlciB0aGUgbG9zcwogICAgKiAgIG9mIGVtYm9sZGVuaW5nIHZlcnN1cyB0aGUgQ0ZGIGRyaXZlci4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSBzaW1pbGFyIHRvIHRoZSBDRkYgZHJpdmVyLgorICAgKgogICAgKi8KIAogCkBAIC00ODksNiArNDk1LDggQEAKICAgICogICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSXyogI2RlZmluZXMgZm9yIGNvbnNpc3RlbmN5LgogICAgKiAgIE5vdGUgdGhlIGRpZmZlcmVuY2VzIGRlc2NyaWJlZCBpbiBAbm8tc3RlbS1kYXJrZW5pbmdbYXV0b2ZpdF0uCiAgICAqCisgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgc2V0IHZpYSB0aGUgYEZSRUVUWVBFX1BST1BFUlRJRVMnIGVudmlyb25tZW50CisgICAqICAgdmFyaWFibGUgc2ltaWxhciB0byB0aGUgQ0ZGIGRyaXZlci4KICAgICovCiAKIApAQCAtNDk3LDcgKzUwNSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRBVVRPSF9IX18gKi8KKyNlbmRpZiAvKiBGVEFVVE9IX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJib3guaAppbmRleCA5ZDlkMDQwLi4yYTRkMjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmJveC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiYm94LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgZXhhY3QgYmJveCBjb21wdXRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI3LDggKzI3LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQkJPWF9IX18KLSNkZWZpbmUgX19GVEJCT1hfSF9fCisjaWZuZGVmIEZUQkJPWF9IXworI2RlZmluZSBGVEJCT1hfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTkwLDcgKzkwLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEJCT1hfSF9fICovCisjZW5kaWYgLyogRlRCQk9YX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0YmRmLmgKaW5kZXggMGJkYWJmNC4uMDE2ZGJhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiZGYuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBCREYtc3BlY2lmaWMgc3RyaW5ncyAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRCREZfSF9fCi0jZGVmaW5lIF9fRlRCREZfSF9fCisjaWZuZGVmIEZUQkRGX0hfCisjZGVmaW5lIEZUQkRGX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMjA0LDcgKzIwNCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRCREZfSF9fICovCisjZW5kaWYgLyogRlRCREZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiaXRtYXAuaAppbmRleCA0NmNjNDdiLi4wZWFjN2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Yml0bWFwLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEJJVE1BUF9IX18KLSNkZWZpbmUgX19GVEJJVE1BUF9IX18KKyNpZm5kZWYgRlRCSVRNQVBfSF8KKyNkZWZpbmUgRlRCSVRNQVBfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTIzNCw3ICsyMzQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQklUTUFQX0hfXyAqLworI2VuZGlmIC8qIEZUQklUTUFQX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oCmluZGV4IGMyNWY5NDYuLmI3ZjJlZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRiemlwMi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEJ6aXAyLWNvbXByZXNzZWQgc3RyZWFtIHN1cHBvcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgSm9lbCBLbGluZ2hlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEJaSVAyX0hfXwotI2RlZmluZSBfX0ZUQlpJUDJfSF9fCisjaWZuZGVmIEZUQlpJUDJfSF8KKyNkZWZpbmUgRlRCWklQMl9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTk2LDcgKzk2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEJaSVAyX0hfXyAqLworI2VuZGlmIC8qIEZUQlpJUDJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjYWNoZS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKaW5kZXggNjg1MjViYi4uODgzYzg4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQ2FjaGUgc3Vic3lzdGVtIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQ0FDSEVfSF9fCi0jZGVmaW5lIF9fRlRDQUNIRV9IX18KKyNpZm5kZWYgRlRDQUNIRV9IXworI2RlZmluZSBGVENBQ0hFX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03NDksNyArNzQ5LDcgQEAKICAgLyogICAgYWdseXBoIDo6IFRoZSBjb3JyZXNwb25kaW5nIEBGVF9HbHlwaCBvYmplY3QuICAwfmluIGNhc2Ugb2YgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYW5vZGUgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlICovCisgIC8qICAgIGFub2RlICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyBjYWNoZSAgICAqLwogICAvKiAgICAgICAgICAgICAgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAoc2VlIG5vdGUgICAgKi8KICAgLyogICAgICAgICAgICAgIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODAyLDcgKzgwMiw3IEBACiAgIC8qICAgIGFnbHlwaCAgICAgOjogVGhlIGNvcnJlc3BvbmRpbmcgQEZUX0dseXBoIG9iamVjdC4gIDB+aW4gY2FzZSBvZiAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgIGZhaWx1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGFub2RlICAgICAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICBjYWNoZSBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50ICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgKHNlZSBub3RlIGJlbG93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTk1Nyw3ICs5NTcsNyBAQAogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc2JpdCAgIDo6IEEgaGFuZGxlIHRvIGEgc21hbGwgYml0bWFwIGRlc2NyaXB0b3IuICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm9kZSAgOjogVXNlZCB0byByZXR1cm4gdGhlIGFkZHJlc3Mgb2Ygb2YgdGhlIGNvcnJlc3BvbmRpbmcgY2FjaGUgKi8KKyAgLyogICAgYW5vZGUgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNhY2hlICAgICovCiAgIC8qICAgICAgICAgICAgICBub2RlIGFmdGVyIGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50IChzZWUgbm90ZSAgICAqLwogICAvKiAgICAgICAgICAgICAgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgc2JpdCAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNtYWxsIGJpdG1hcCBkZXNjcmlwdG9yLiAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBhbm9kZSAgICAgIDo6IFVzZWQgdG8gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIG9mIHRoZSBjb3JyZXNwb25kaW5nICAgKi8KKyAgLyogICAgYW5vZGUgICAgICA6OiBVc2VkIHRvIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgY29ycmVzcG9uZGluZyAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgY2FjaGUgbm9kZSBhZnRlciBpbmNyZW1lbnRpbmcgaXRzIHJlZmVyZW5jZSBjb3VudCAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUQ0FDSEVfSF9fICovCisjZW5kaWYgLyogRlRDQUNIRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNmZmRydi5oCmluZGV4IDg1MDAzNDYuLjhmODhjYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjZmZkcnYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2ZmZHJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgQ0ZGIGRyaXZlciAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQ0ZGRFJWX0hfXwotI2RlZmluZSBfX0ZUQ0ZGRFJWX0hfXworI2lmbmRlZiBGVENGRkRSVl9IXworI2RlZmluZSBGVENGRkRSVl9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTg5LDcgKzg5LDcgQEAKICAgICogICBmZWF0dXJlcyBwcmVzZXJ2ZSB0aGUgZGVzaWduJ3Mgd2VpZ2h0IGFuZCBzcGFjaW5nIG11Y2ggYmV0dGVyIHRoYW4KICAgICogICBhbGlhc2VkIHR5cGUgd291bGQuCiAgICAqCi0gICAqICAgMikgQWxpZ21lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKKyAgICogICAyKSBBbGlnbm1lbnQgaW4gdGhlIHZlcnRpY2FsIGRpcmVjdGlvbjogV2VpZ2h0cyBhbmQgc3BhY2luZyBhbG9uZyB0aGUKICAgICogICB5fmF4aXMgYXJlIGxlc3MgY3JpdGljYWw7IHdoYXQgaXMgbXVjaCBtb3JlIGltcG9ydGFudCBpcyB0aGUgdmlzdWFsCiAgICAqICAgYWxpZ25tZW50IG9mIHJlbGF0ZWQgZmVhdHVyZXMgKGxpa2UgY2FwLWhlaWdodCBhbmQgeC1oZWlnaHQpLiAgVGhlCiAgICAqICAgc2Vuc2Ugb2YgYWxpZ25tZW50IGZvciB0aGVzZSBpcyBlbmhhbmNlZCBieSB0aGUgc2hhcnBuZXNzIG9mIGdyaWQtZml0CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICogICB0byBtaW5pbWl6ZSBkaXN0b3J0aW9uLgogICAgKgogICAgKiBAb3JkZXI6Ci0gICAqICAgaGludGluZy1lbmdpbmUKKyAgICogICBoaW50aW5nLWVuZ2luZVtjZmZdCiAgICAqICAgbm8tc3RlbS1kYXJrZW5pbmdbY2ZmXQogICAgKiAgIGRhcmtlbmluZy1wYXJhbWV0ZXJzW2NmZl0KICAgICoKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICoKICAgICogQHByb3BlcnR5OgotICAgKiAgIGhpbnRpbmctZW5naW5lCisgICAqICAgaGludGluZy1lbmdpbmVbY2ZmXQogICAgKgogICAgKiBAZGVzY3JpcHRpb246CiAgICAqICAgVGhhbmtzIHRvIEFkb2JlLCB3aGljaCBjb250cmlidXRlZCBhIG5ldyBoaW50aW5nIChhbmQgcGFyc2luZykKQEAgLTE0OCw2ICsxNDgsOCBAQAogICAgKiBAbm90ZToKICAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgogICAgKgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgYGFkb2JlJyBvciBgZnJlZXR5cGUnKS4KICAgICovCiAKIApAQCAtMTU3LDggKzE1OSw4IEBACiAgICAqICAgRlRfQ0ZGX0hJTlRJTkdfWFhYCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBBIGxpc3Qgb2YgY29uc3RhbnRzIHVzZWQgZm9yIHRoZSBAaGludGluZy1lbmdpbmUgcHJvcGVydHkgdG8gc2VsZWN0Ci0gICAqICAgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBDRkYgZm9udHMuCisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIGZvciB0aGUgQGhpbnRpbmctZW5naW5lW2NmZl0gcHJvcGVydHkgdG8KKyAgICogICBzZWxlY3QgdGhlIGhpbnRpbmcgZW5naW5lIGZvciBDRkYgZm9udHMuCiAgICAqCiAgICAqIEB2YWx1ZXM6CiAgICAqICAgRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEUgOjoKQEAgLTE5OSw2ICsyMDEsOSBAQAogICAgKiBAbm90ZToKICAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VkIHdpdGggQEZUX1Byb3BlcnR5X0dldCBhbHNvLgogICAgKgorICAgKiAgIFRoaXMgcHJvcGVydHkgY2FuIGJlIHNldCB2aWEgdGhlIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBlbnZpcm9ubWVudAorICAgKiAgIHZhcmlhYmxlICh1c2luZyB2YWx1ZXMgMSBhbmQgMCBmb3IgYG9uJyBhbmQgYG9mZicsIHJlc3BlY3RpdmVseSkuCisgICAqCiAgICAqLwogCiAKQEAgLTI0OCw2ICsyNTMsMTQgQEAKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSwgdXNpbmcgZWlnaHQgY29tbWEtc2VwYXJhdGVkIGludGVnZXJzIHdpdGhvdXQgc3BhY2VzLiAgSGVyZQorICAgKiAgIHRoZSBhYm92ZSBleGFtcGxlLCB1c2luZyBgXCcgdG8gYnJlYWsgdGhlIGxpbmUgZm9yIHJlYWRhYmlsaXR5LgorICAgKgorICAgKiAgIHsKKyAgICogICAgIEZSRUVUWVBFX1BST1BFUlRJRVM9XAorICAgKiAgICAgY2ZmOmRhcmtlbmluZy1wYXJhbWV0ZXJzPTUwMCwzMDAsMTAwMCwyMDAsMTUwMCwxMDAsMjAwMCwwCisgICAqICAgfQogICAgKi8KIAogICAvKiAqLwpAQCAtMjU2LDcgKzI2OSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fRlRDRkZEUlZfSF9fICovCisjZW5kaWYgLyogRlRDRkZEUlZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRjaWQuaAppbmRleCAwNTc0MWM4Li5lMWJjOWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIENJRCBmb250IGluZm9ybWF0aW9uIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGVyZWcgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVENJRF9IX18KLSNkZWZpbmUgX19GVENJRF9IX18KKyNpZm5kZWYgRlRDSURfSF8KKyNkZWZpbmUgRlRDSURfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC05Nyw4ICs5Nyw4IEBACiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKICAgICogICAgUmV0cmlldmUgdGhlIHR5cGUgb2YgdGhlIGlucHV0IGZhY2UsIENJRCBrZXllZCBvciBub3QuICBJbgotICAgKiAgICBjb25zdHJhc3QgdG8gdGhlIEBGVF9JU19DSURfS0VZRUQgbWFjcm8gdGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gICAqICAgIHN1Y2Nlc3NmdWxseSBhbHNvIGZvciBDSUQta2V5ZWQgZm9udHMgaW4gYW4gU05GVCB3cmFwcGVyLgorICAgKiAgICBjb250cmFzdCB0byB0aGUgQEZUX0lTX0NJRF9LRVlFRCBtYWNybyB0aGlzIGZ1bmN0aW9uIHJldHVybnMKKyAgICogICAgc3VjY2Vzc2Z1bGx5IGFsc28gZm9yIENJRC1rZXllZCBmb250cyBpbiBhbiBTRk5UIHdyYXBwZXIuCiAgICAqCiAgICAqIEBpbnB1dDoKICAgICogICAgZmFjZSA6OgpAQCAtMTYyLDcgKzE2Miw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRDSURfSF9fICovCisjZW5kaWYgLyogRlRDSURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJkZWYuaAppbmRleCAzYmY0ZTYzLi4zZjUzZGQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyZGVmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGVycmRlZi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0ZXJyb3JzLmgKaW5kZXggMDUwN2I5YS4uZTE1YmZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGVycm9ycy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRlcnJvcnMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlIGhhbmRsaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzIsMTMgKzcyLDEzIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIFRoaXMgbWFjcm8gZW5kcyB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgQWRkaXRpb25hbGx5LCB5b3UgaGF2ZSB0byB1bmRlZmluZSBgX19GVEVSUk9SU19IX18nIGJlZm9yZSAgICAgICAgICAqLwotICAvKiAgICNpbmNsdWRpbmcgdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICBBZGRpdGlvbmFsbHksIHlvdSBoYXZlIHRvIHVuZGVmaW5lIGBGVEVSUk9SU19IXycgYmVmb3JlICNpbmNsdWRpbmcgICovCisgIC8qICAgdGhpcyBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICBIZXJlIGlzIGEgc2ltcGxlIGV4YW1wbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICN1bmRlZiBfX0ZURVJST1JTX0hfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAjdW5kZWYgRlRFUlJPUlNfSF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgI2RlZmluZSBGVF9FUlJPUkRFRiggZSwgdiwgcyApICB7IGUsIHMgfSwgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICNkZWZpbmUgRlRfRVJST1JfU1RBUlRfTElTVCAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAjZGVmaW5lIEZUX0VSUk9SX0VORF9MSVNUICAgICAgIHsgMCwgTlVMTCB9IH07ICAgICAgICAgICAgICAgICAgICAqLwpAQCAtOTksNyArOTksMTcgQEAKIAogICAvKiAqLwogCi0jaWZuZGVmIF9fRlRFUlJPUlNfSF9fCisgIC8qIEluIHByZXZpb3VzIEZyZWVUeXBlIHZlcnNpb25zIHdlIHVzZWQgYF9fRlRFUlJPUlNfSF9fJy4gIEhvd2V2ZXIsICovCisgIC8qIHVzaW5nIHR3byBzdWNjZXNzaXZlIHVuZGVyc2NvcmVzIGluIGEgbm9uLXN5c3RlbSBzeW1ib2wgbmFtZSAgICAgICovCisgIC8qIHZpb2xhdGVzIHRoZSBDIChhbmQgQysrKSBzdGFuZGFyZCwgc28gaXQgd2FzIGNoYW5nZWQgdG8gdGhlICAgICAgICovCisgIC8qIGN1cnJlbnQgZm9ybS4gIEluIHNwaXRlIG9mIHRoaXMsIHdlIGhhdmUgdG8gbWFrZSAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgI3VuZGVmaW5lIF9fRlRFUlJPUlNfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHdvcmsgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWYgISggZGVmaW5lZCggRlRFUlJPUlNfSF8gKSAmJiBkZWZpbmVkICggX19GVEVSUk9SU19IX18gKSApCisjZGVmaW5lIEZURVJST1JTX0hfCiAjZGVmaW5lIF9fRlRFUlJPUlNfSF9fCiAKIApAQCAtMjEwLDcgKzIyMCw3IEBACiAjdW5kZWYgRlRfRVJSX1BSRUZJWAogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0ZURVJST1JTX0hfXyAqLworI2VuZGlmIC8qICEoRlRFUlJPUlNfSF8gJiYgX19GVEVSUk9SU19IX18pICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Zm50Zm10LmgKaW5kZXggMWY4ZmYyOC4uYmQ0MjMyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGZudGZtdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRmbnRmbXQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRGTlRGTVRfSF9fCi0jZGVmaW5lIF9fRlRGTlRGTVRfSF9fCisjaWZuZGVmIEZURk5URk1UX0hfCisjZGVmaW5lIEZURk5URk1UX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtODksNCArODksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZURk5URk1UX0hfXyAqLworI2VuZGlmIC8qIEZURk5URk1UX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaAppbmRleCA5YTliNjMyLi4zZjViM2JjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2FzcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnYXNwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWNjZXNzIG9mIFRydWVUeXBlJ3MgYGdhc3AnIHRhYmxlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfRlRfR0FTUF9IXwotI2RlZmluZSBfRlRfR0FTUF9IXworI2lmbmRlZiBGVEdBU1BfSF8KKyNkZWZpbmUgRlRHQVNQX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMTIzLDcgKzEyMyw3IEBACiAgIC8qICovCiAKIAotI2VuZGlmIC8qIF9GVF9HQVNQX0hfICovCisjZW5kaWYgLyogRlRHQVNQX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z2x5cGguaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCmluZGV4IDgwM2FkMzkuLmQ5ODQwYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgZ2x5cGhzIChzcGVjaWZpY2F0aW9uKS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yOSw4ICsyOSw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdMWVBIX0hfXwotI2RlZmluZSBfX0ZUR0xZUEhfSF9fCisjaWZuZGVmIEZUR0xZUEhfSF8KKyNkZWZpbmUgRlRHTFlQSF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNTk0LDcgKzU5NCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRHTFlQSF9IX18gKi8KKyNlbmRpZiAvKiBGVEdMWVBIX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3h2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCmluZGV4IDBlOWFjMWQuLmE1OGU4NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRneHZhbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHlwZUdYL0FBVCB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgTWFzYXRha2UgWUFNQVRPLCBSZWRoYXQgSy5LLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNSw4ICsyNSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdYVkFMX0hfXwotI2RlZmluZSBfX0ZUR1hWQUxfSF9fCisjaWZuZGVmIEZUR1hWQUxfSF8KKyNkZWZpbmUgRlRHWFZBTF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTM1MSw3ICszNTEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUR1hWQUxfSF9fICovCisjZW5kaWYgLyogRlRHWFZBTF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmgKaW5kZXggYjNhNTMyZC4uMzkzMmNlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGd6aXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0Z3ppcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEd6aXAtY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdaSVBfSF9fCi0jZGVmaW5lIF9fRlRHWklQX0hfXworI2lmbmRlZiBGVEdaSVBfSF8KKyNkZWZpbmUgRlRHWklQX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMTE3LDExICsxMTcsMTEgQEAKICAgKgogICAqIEBpbm91dDoKICAgKiAgIG91dHB1dF9sZW4gOjoKLSAgKiAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGlzIHRoZSB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKLSAgKiAgICAgb3V0cHV0IGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCi0gICogICAgIHVuY29tcHJlc3NlZCBkYXRhIChzbyB0aGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBiZQotICAqICAgICBrbm93biBpbiBhZHZhbmNlKS4gIEFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCBgb3V0cHV0X2xlbicgaXMgdGhlCi0gICogICAgIHNpemUgb2YgdGhlIHVzZWQgZGF0YSBpbiBgb3V0cHV0Jy4KKyAgKiAgICAgQmVmb3JlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCB0aGlzIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBvdXRwdXQKKyAgKiAgICAgYnVmZmVyLCB3aGljaCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBlbnRpcmUgdW5jb21wcmVzc2VkCisgICogICAgIGRhdGEgKHNvIHRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtdXN0IGJlIGtub3duIGluCisgICogICAgIGFkdmFuY2UpLiAgQWZ0ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24sIGBvdXRwdXRfbGVuJyBpcyB0aGUgc2l6ZSBvZgorICAqICAgICB0aGUgdXNlZCBkYXRhIGluIGBvdXRwdXQnLgogICAqCiAgICogQHJldHVybjoKICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEdaSVBfSF9fICovCisjZW5kaWYgLyogRlRHWklQX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW1hZ2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oCmluZGV4IDgyZjI4NGMuLjRmODZjNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgRnJlZVR5cGUgZ2x5cGggaW1hZ2UgZm9ybWF0cyBhbmQgZGVmYXVsdCByYXN0ZXIgaW50ZXJmYWNlICAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCwxMiArMjQsMTIgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUSU1BR0VfSF9fCi0jZGVmaW5lIF9fRlRJTUFHRV9IX18KKyNpZm5kZWYgRlRJTUFHRV9IXworI2RlZmluZSBGVElNQUdFX0hfCiAKIAotICAvKiBfU1RBTkRBTE9ORV8gaXMgZnJvbSBmdGdyYXlzLmMgKi8KLSNpZm5kZWYgX1NUQU5EQUxPTkVfCisgIC8qIFNUQU5EQUxPTkVfIGlzIGZyb20gZnRncmF5cy5jICovCisjaWZuZGVmIFNUQU5EQUxPTkVfCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNlbmRpZgogCkBAIC03NDcsNyArNzQ3LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBBIHJhc3RlciBpcyBhIHNjYW4gY29udmVydGVyLCBpbiBjaGFyZ2Ugb2YgcmVuZGVyaW5nIGFuIG91dGxpbmUgaW50byAgKi8KLSAgLyogYSBhIGJpdG1hcC4gIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgcHVibGljIEFQSSBmb3IgcmFzdGVycy4gICAgICAgICovCisgIC8qIGEgYml0bWFwLiAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBwdWJsaWMgQVBJIGZvciByYXN0ZXJzLiAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogTm90ZSB0aGF0IGluIEZyZWVUeXBlIDIsIGFsbCByYXN0ZXJzIGFyZSBub3cgZW5jYXBzdWxhdGVkIHdpdGhpbiAgICAgICovCiAgIC8qIHNwZWNpZmljIG1vZHVsZXMgY2FsbGVkIGByZW5kZXJlcnMnLiAgU2VlIGBmdHJlbmRlci5oJyBmb3IgbW9yZSAgICAgICAqLwpAQCAtODYwLDE2ICs4NjAsNiBAQAogICAvKiAgICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyaXRlIGFudGktYWxpYXNlZCBvdXRsaW5lcyBkaXJlY3RseSB0byBhICAgICAgKi8KICAgLyogICAgZ2l2ZW4gYmFja2dyb3VuZCBiaXRtYXAsIGFuZCBldmVuIHBlcmZvcm0gdHJhbnNsdWNlbmN5LiAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICBOb3RlIHRoYXQgdGhlIGBjb3VudCcgZmllbGQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBhIGZpeGVkIHZhbHVlICAgKi8KLSAgLyogICAgZGVmaW5lZCBieSB0aGUgYEZUX01BWF9HUkFZX1NQQU5TJyBjb25maWd1cmF0aW9uIG1hY3JvIGluICAgICAgICAgICovCi0gIC8qICAgIGBmdG9wdGlvbi5oJy4gIEJ5IGRlZmF1bHQsIHRoaXMgdmFsdWUgaXMgc2V0IHRvfjMyLCB3aGljaCBtZWFucyAgICAqLwotICAvKiAgICB0aGF0IGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMzJ+c3BhbnMgb24gYSBnaXZlbiBzY2FubGluZSwgdGhlICAgICAgKi8KLSAgLyogICAgY2FsbGJhY2sgaXMgY2FsbGVkIHNldmVyYWwgdGltZXMgd2l0aCB0aGUgc2FtZSBgeScgcGFyYW1ldGVyIGluICAgICovCi0gIC8qICAgIG9yZGVyIHRvIGRyYXcgYWxsIGNhbGxiYWNrcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3RoZXJ3aXNlLCB0aGUgY2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgc2Nhbi1saW5lLCBhbmQgICAgICovCi0gIC8qICAgIG9ubHkgZm9yIHRob3NlIHNjYW5saW5lcyB0aGF0IGRvIGhhdmUgYGdyYXknIHBpeGVscyBvbiB0aGVtLiAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgdHlwZWRlZiB2b2lkCiAgICgqRlRfU3BhbkZ1bmMpKCBpbnQgICAgICAgICAgICAgeSwKICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBjb3VudCwKQEAgLTEyMDMsNyArMTE5Myw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRJTUFHRV9IX18gKi8KKyNlbmRpZiAvKiBGVElNQUdFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0aW5jcmVtLmgKaW5kZXggODQwYWYyNS4uNDZiNThiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGluY3JlbS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRpbmNyZW0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBpbmNyZW1lbnRhbCBsb2FkaW5nIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRJTkNSRU1fSF9fCi0jZGVmaW5lIF9fRlRJTkNSRU1fSF9fCisjaWZuZGVmIEZUSU5DUkVNX0hfCisjZGVmaW5lIEZUSU5DUkVNX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRJTkNSRU1fSF9fICovCisjZW5kaWYgLyogRlRJTkNSRU1fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsY2RmaWwuaAppbmRleCBhOWRkM2VhLi5lMDZhODk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGNkZmlsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdGxjZGZpbC5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVF9MQ0RfRklMVEVSX0hfXwotI2RlZmluZSBfX0ZUX0xDRF9GSUxURVJfSF9fCisjaWZuZGVmIEZUTENERklMX0hfCisjZGVmaW5lIEZUTENERklMX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtNTcsNyArNTcsOCBAQAogICAgKiAgIE5vdGUgdGhhdCBubyBmaWx0ZXIgaXMgYWN0aXZlIGJ5IGRlZmF1bHQsIGFuZCB0aGF0IHRoaXMgZnVuY3Rpb24gaXMKICAgICogICAqbm90KiBpbXBsZW1lbnRlZCBpbiBkZWZhdWx0IGJ1aWxkcyBvZiB0aGUgbGlicmFyeS4gIFlvdSBuZWVkIHRvCiAgICAqICAgI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX1JFTkRFUklORyBpbiB5b3VyIGBmdG9wdGlvbi5oJyBmaWxlCi0gICAqICAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXQuCisgICAqICAgaW4gb3JkZXIgdG8gYWN0aXZhdGUgaXQgYW5kIGV4cGxpY2l0bHkgY2FsbCBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIKKyAgICogICB0byBlbmFibGUgaXQuCiAgICAqCiAgICAqICAgQSBmaWx0ZXIgc2hvdWxkIGhhdmUgdHdvIHByb3BlcnRpZXM6CiAgICAqCkBAIC0xMDIsNiArMTAzLDE4IEBACiAgICAqICAgLSBbMHgwOCAweDREIDB4NTYgMHg0RCAweDA4XSBpcyBiZXZlbGVkLCBub3JtYWxpemVkIGFuZCwgYWxtb3N0CiAgICAqICAgICBiYWxhbmNlZC4KICAgICoKKyAgICogICBUaGUgZmlsdGVyIGFmZmVjdHMgZ2x5cGggYml0bWFwcyByZW5kZXJlZCB0aHJvdWdoIEBGVF9SZW5kZXJfR2x5cGgsCisgICAqICAgQEZUX0xvYWRfR2x5cGgsIGFuZCBARlRfTG9hZF9DaGFyLiAgSXQgZG9lcyBfbm90XyBhZmZlY3QgdGhlIG91dHB1dAorICAgKiAgIG9mIEBGVF9PdXRsaW5lX1JlbmRlciBhbmQgQEZUX091dGxpbmVfR2V0X0JpdG1hcC4KKyAgICoKKyAgICogICBJZiB0aGlzIGZlYXR1cmUgaXMgYWN0aXZhdGVkLCB0aGUgZGltZW5zaW9ucyBvZiBMQ0QgZ2x5cGggYml0bWFwcyBhcmUKKyAgICogICBlaXRoZXIgd2lkZXIgb3IgdGFsbGVyIHRoYW4gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICogICBvdXRsaW5lIHdpdGggcmVnYXJkIHRvIHRoZSBwaXhlbCBncmlkLiAgRm9yIGV4YW1wbGUsIGZvcgorICAgKiAgIEBGVF9SRU5ERVJfTU9ERV9MQ0QsIHRoZSBmaWx0ZXIgYWRkcyAzfnN1YnBpeGVscyB0byB0aGUgbGVmdCwgYW5kCisgICAqICAgM35zdWJwaXhlbHMgdG8gdGhlIHJpZ2h0LiAgVGhlIGJpdG1hcCBvZmZzZXQgdmFsdWVzIGFyZSBhZGp1c3RlZAorICAgKiAgIGFjY29yZGluZ2x5LCBzbyBjbGllbnRzIHNob3VsZG4ndCBuZWVkIHRvIG1vZGlmeSB0aGVpciBsYXlvdXQgYW5kCisgICAqICAgZ2x5cGggcG9zaXRpb25pbmcgY29kZSB3aGVuIGVuYWJsaW5nIHRoZSBmaWx0ZXIuCisgICAqCiAgICAqICAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhhdCBsaW5lYXIgYWxwaGEgYmxlbmRpbmcgYW5kIGdhbW1hCiAgICAqICAgY29ycmVjdGlvbiBpcyBjcml0aWNhbCBmb3IgY29ycmVjdGx5IHJlbmRlcmluZyBnbHlwaHMgb250byBzdXJmYWNlcwogICAgKiAgIHdpdGhvdXQgYXJ0aWZhY3RzIGFuZCBldmVuIG1vcmUgY3JpdGljYWwgd2hlbiBzdWJwaXhlbCByZW5kZXJpbmcgaXMKQEAgLTEzNyw3ICsxNTAsOCBAQAogICAgKiAgICAgdGhhdCBpcyBtb3JlIGZvcmdpdmluZyB0byBzY3JlZW5zIHdpdGggbm9uLWlkZWFsIGdhbW1hIGN1cnZlcyBhbmQKICAgICogICAgIHZpZXdpbmcgYW5nbGVzLiAgTm90ZSB0aGF0IHdoaWxlIGNvbG9yLWZyaW5naW5nIGlzIHJlZHVjZWQsIGl0IGNhbgogICAgKiAgICAgb25seSBiZSBtaW5pbWl6ZWQgYnkgdXNpbmcgbGluZWFyIGFscGhhIGJsZW5kaW5nIGFuZCBnYW1tYQotICAgKiAgICAgY29ycmVjdGlvbiB0byByZW5kZXIgZ2x5cGhzIG9udG8gc3VyZmFjZXMuCisgICAqICAgICBjb3JyZWN0aW9uIHRvIHJlbmRlciBnbHlwaHMgb250byBzdXJmYWNlcy4gIFRoZSBkZWZhdWx0IGZpbHRlcgorICAgKiAgICAgd2VpZ2h0cyBhcmUgWzB4MDggMHg0RCAweDU2IDB4NEQgMHgwOF0uCiAgICAqCiAgICAqICAgRlRfTENEX0ZJTFRFUl9MSUdIVCA6OgogICAgKiAgICAgVGhlIGxpZ2h0IGZpbHRlciBpcyBhIHZhcmlhbnQgdGhhdCBpcyBzaGFycGVyIGF0IHRoZSBjb3N0IG9mCkBAIC0xNDcsNyArMTYxLDggQEAKICAgICogICAgIGlzIGxlc3MgZm9yZ2l2aW5nIHRvIHNjcmVlbnMgd2l0aCBub24taWRlYWwgZ2FtbWEgY3VydmVzIGFuZAogICAgKiAgICAgdmlld2luZyBhbmdsZXMuICBUaGlzIGZpbHRlciB3b3JrcyBiZXN0IHdoZW4gdGhlIHJlbmRlcmluZyBzeXN0ZW0KICAgICogICAgIHVzZXMgbGluZWFyIGFscGhhIGJsZW5kaW5nIGFuZCBnYW1tYSBjb3JyZWN0aW9uIHRvIHJlbmRlciBnbHlwaHMKLSAgICogICAgIG9udG8gc3VyZmFjZXMuCisgICAqICAgICBvbnRvIHN1cmZhY2VzLiAgVGhlIGxpZ2h0IGZpbHRlciB3ZWlnaHRzIGFyZQorICAgKiAgICAgWzB4MDAgMHg1NSAweDU2IDB4NTUgMHgwMF0uCiAgICAqCiAgICAqICAgRlRfTENEX0ZJTFRFUl9MRUdBQ1kgOjoKICAgICogICAgIFRoaXMgZmlsdGVyIGNvcnJlc3BvbmRzIHRvIHRoZSBvcmlnaW5hbCBsaWJYZnQgY29sb3IgZmlsdGVyLiAgSXQKQEAgLTIxOCwyMiArMjMzLDYgQEAKICAgICogICBkZWZpbmVkIGluIHlvdXIgYnVpbGQgb2YgdGhlIGxpYnJhcnksIHdoaWNoIHNob3VsZCBjb3JyZXNwb25kIHRvIGFsbAogICAgKiAgIGRlZmF1bHQgYnVpbGRzIG9mIEZyZWVUeXBlLgogICAgKgotICAgKiAgIFRoZSBmaWx0ZXIgYWZmZWN0cyBnbHlwaCBiaXRtYXBzIHJlbmRlcmVkIHRocm91Z2ggQEZUX1JlbmRlcl9HbHlwaCwKLSAgICogICBARlRfT3V0bGluZV9HZXRfQml0bWFwLCBARlRfTG9hZF9HbHlwaCwgYW5kIEBGVF9Mb2FkX0NoYXIuCi0gICAqCi0gICAqICAgSXQgZG9lcyBfbm90XyBhZmZlY3QgdGhlIG91dHB1dCBvZiBARlRfT3V0bGluZV9SZW5kZXIgYW5kCi0gICAqICAgQEZUX091dGxpbmVfR2V0X0JpdG1hcC4KLSAgICoKLSAgICogICBJZiB0aGlzIGZlYXR1cmUgaXMgYWN0aXZhdGVkLCB0aGUgZGltZW5zaW9ucyBvZiBMQ0QgZ2x5cGggYml0bWFwcyBhcmUKLSAgICogICBlaXRoZXIgbGFyZ2VyIG9yIHRhbGxlciB0aGFuIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nCi0gICAqICAgb3V0bGluZSB3aXRoIHJlZ2FyZHMgdG8gdGhlIHBpeGVsIGdyaWQuICBGb3IgZXhhbXBsZSwgZm9yCi0gICAqICAgQEZUX1JFTkRFUl9NT0RFX0xDRCwgdGhlIGZpbHRlciBhZGRzIHVwIHRvIDN+cGl4ZWxzIHRvIHRoZSBsZWZ0LCBhbmQKLSAgICogICB1cCB0byAzfnBpeGVscyB0byB0aGUgcmlnaHQuCi0gICAqCi0gICAqICAgVGhlIGJpdG1hcCBvZmZzZXQgdmFsdWVzIGFyZSBhZGp1c3RlZCBjb3JyZWN0bHksIHNvIGNsaWVudHMgc2hvdWxkbid0Ci0gICAqICAgbmVlZCB0byBtb2RpZnkgdGhlaXIgbGF5b3V0IGFuZCBnbHlwaCBwb3NpdGlvbmluZyBjb2RlIHdoZW4gZW5hYmxpbmcKLSAgICogICB0aGUgZmlsdGVyLgotICAgKgogICAgKiBAc2luY2U6CiAgICAqICAgMi4zLjAKICAgICovCkBAIC0yNDgsMTAgKzI0Nyw4IEBACiAgICAqICAgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXJXZWlnaHRzCiAgICAqCiAgICAqIEBkZXNjcmlwdGlvbjoKLSAgICogICBVc2UgdGhpcyBmdW5jdGlvbiB0byBvdmVycmlkZSB0aGUgZmlsdGVyIHdlaWdodHMgc2VsZWN0ZWQgYnkKLSAgICogICBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIuICBCeSBkZWZhdWx0LCBGcmVlVHlwZSB1c2VzIHRoZSBxdWludHVwbGUKLSAgICogICAoMHgwMCwgMHg1NSwgMHg1NiwgMHg1NSwgMHgwMCkgZm9yIEZUX0xDRF9GSUxURVJfTElHSFQsIGFuZCAoMHgwOCwKLSAgICogICAweDRELCAweDU2LCAweDRELCAweDA4KSBmb3IgRlRfTENEX0ZJTFRFUl9ERUZBVUxULgorICAgKiAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZW5hYmxlIExDRCBmaWx0ZXIgd2l0aCBjdXN0b20gd2VpZ2h0cywKKyAgICogICBpbnN0ZWFkIG9mIHVzaW5nIHByZXNldHMgaW4gQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyLgogICAgKgogICAgKiBAaW5wdXQ6CiAgICAqICAgbGlicmFyeSA6OgpAQCAtMjcxLDkgKzI2OCw2IEBACiAgICAqICAgZGVmaW5lZCBpbiB5b3VyIGJ1aWxkIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCBzaG91bGQgY29ycmVzcG9uZCB0byBhbGwKICAgICogICBkZWZhdWx0IGJ1aWxkcyBvZiBGcmVlVHlwZS4KICAgICoKLSAgICogICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciB0byBoYXZlCi0gICAqICAgYW55IGVmZmVjdC4KLSAgICoKICAgICogQHNpbmNlOgogICAgKiAgIDIuNC4wCiAgICAqLwpAQCAtMjg2LDcgKzI4MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRfTENEX0ZJTFRFUl9IX18gKi8KKyNlbmRpZiAvKiBGVExDREZJTF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsaXN0LmgKaW5kZXggMTJiNDhjNy4uODJmNDM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGxpc3QuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bGlzdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEdlbmVyaWMgbGlzdCBzdXBwb3J0IGZvciBGcmVlVHlwZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNCw4ICsyNCw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVExJU1RfSF9fCi0jZGVmaW5lIF9fRlRMSVNUX0hfXworI2lmbmRlZiBGVExJU1RfSF8KKyNkZWZpbmUgRlRMSVNUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNzAsNyArMjcwLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVExJU1RfSF9fICovCisjZW5kaWYgLyogRlRMSVNUX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bHp3LmgKaW5kZXggZDNlYzI4ZS4uNTgyZTJjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdGx6dy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRsencuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBMWlctY29tcHJlc3NlZCBzdHJlYW0gc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRMWldfSF9fCi0jZGVmaW5lIF9fRlRMWldfSF9fCisjaWZuZGVmIEZUTFpXX0hfCisjZGVmaW5lIEZUTFpXX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfRlJFRVRZUEVfSApAQCAtOTMsNyArOTMsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUTFpXX0hfXyAqLworI2VuZGlmIC8qIEZUTFpXX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bWFjLmgKaW5kZXggMTRjNTVjZi4uYWRiMTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1hYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtYWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBZGRpdGlvbmFsIE1hYy1zcGVjaWZpYyBBUEkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjUsOCArMjUsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRNQUNfSF9fCi0jZGVmaW5lIF9fRlRNQUNfSF9fCisjaWZuZGVmIEZUTUFDX0hfCisjZGVmaW5lIEZUTUFDX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNjgsNyArMjY4LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19GVE1BQ19IX18gKi8KKyNlbmRpZiAvKiBGVE1BQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaAppbmRleCA5NmRkNjZlLi5iNWQ2ODU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBNdWx0aXBsZSBNYXN0ZXIgZm9udCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRNTV9IX18KLSNkZWZpbmUgX19GVE1NX0hfXworI2lmbmRlZiBGVE1NX0hfCisjZGVmaW5lIEZUTU1fSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE5NSwxMSArMTk1LDE1IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAod2hlcmUgZXZlcnkgZ2x5cGggY291bGQgaGF2ZSBhIGRpZmZlcmVudCAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIGRlc2lnbnMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIG51bV9uYW1lZHN0eWxlcyA6OiBUaGUgbnVtYmVyIG9mIG5hbWVkIHN0eWxlczsgb25seSBtZWFuaW5nZnVsIGZvciAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgR1ggdGhhdCBhbGxvd3MgY2VydGFpbiBkZXNpZ24gY29vcmRpbmF0ZXMgdG8gICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgIGhhdmUgYSBzdHJpbmcgSUQgKGluIHRoZSBgbmFtZScgdGFibGUpICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbS4gIFRoZSBmb250IGNhbiB0ZWxsIHRoZSAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgdXNlciB0aGF0LCBmb3IgZXhhbXBsZSwgV2VpZ2h0PTEuNSBpcyBgQm9sZCcuICAgKi8KKyAgLyogICAgbnVtX25hbWVkc3R5bGVzIDo6IFRoZSBudW1iZXIgb2YgbmFtZWQgc3R5bGVzOyBhIGBuYW1lZCBzdHlsZScgaXMgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBhIHR1cGxlIG9mIGRlc2lnbiBjb29yZGluYXRlcyB0aGF0IGhhcyBhIHN0cmluZyAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgSUQgKGluIHRoZSBgbmFtZScgdGFibGUpIGFzc29jaWF0ZWQgd2l0aCBpdC4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIFRoZSBmb250IGNhbiB0ZWxsIHRoZSB1c2VyIHRoYXQsIGZvciBleGFtcGxlLCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBbV2VpZ2h0PTEuNSxXaWR0aD0xLjFdIGlzIGBCb2xkJy4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgIEZvciBUeXBlIDEgTXVsdGlwbGUgTWFzdGVycyBmb250cywgdGhpcyB2YWx1ZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBpcyBhbHdheXMgemVybyBiZWNhdXNlIHRoZSBmb3JtYXQgZG9lcyBub3QgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBuYW1lZCBzdHlsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGF4aXMgICAgICAgICAgICA6OiBBbiBheGlzIGRlc2NyaXB0b3IgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgR1ggZm9udHMgY29udGFpbiBzbGlnaHRseSBtb3JlIGRhdGEgdGhhbiBNTS4gICAgKi8KQEAgLTM3OCw3ICszODIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUTU1fSF9fICovCisjZW5kaWYgLyogRlRNTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGFwaS5oCmluZGV4IDg5ZDkzNDcuLmI0ZDI3NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RhcGkuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kYXBpLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUTU9EQVBJX0hfXwotI2RlZmluZSBfX0ZUTU9EQVBJX0hfXworI2lmbmRlZiBGVE1PREFQSV9IXworI2RlZmluZSBGVE1PREFQSV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNjEzLDEyICs2MTMsNyBAQAogICAgKiAgICAgICBUaGUgbGlicmFyeSBkb2Vzbid0IGltcGxlbWVudCBhbnkga2luZCBvZiBieXRlY29kZSBpbnRlcnByZXRlci4KICAgICoKICAgICogICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1VOUEFURU5URUQgOjoKLSAgICogICAgICAgVGhlIGxpYnJhcnkgaW1wbGVtZW50cyBhIGJ5dGVjb2RlIGludGVycHJldGVyIHRoYXQgZG9lc24ndAotICAgKiAgICAgICBzdXBwb3J0IHRoZSBwYXRlbnRlZCBvcGVyYXRpb25zIG9mIHRoZSBUcnVlVHlwZSB2aXJ0dWFsIG1hY2hpbmUuCi0gICAqCi0gICAqICAgICAgIEl0cyBtYWluIHVzZSBpcyB0byBsb2FkIGNlcnRhaW4gQXNpYW4gZm9udHMgdGhhdCBwb3NpdGlvbiBhbmQKLSAgICogICAgICAgc2NhbGUgZ2x5cGggY29tcG9uZW50cyB3aXRoIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4gIEl0IHByb2R1Y2VzCi0gICAqICAgICAgIGJhZCBvdXRwdXQgZm9yIG1vc3Qgb3RoZXIgZm9udHMuCisgICAqICAgICAgIERlcHJlY2F0ZWQgYW5kIHJlbW92ZWQuCiAgICAqCiAgICAqICAgICBGVF9UUlVFVFlQRV9FTkdJTkVfVFlQRV9QQVRFTlRFRCA6OgogICAgKiAgICAgICBUaGUgbGlicmFyeSBpbXBsZW1lbnRzIGEgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgdGhhdCBjb3ZlcnMKQEAgLTY2Niw3ICs2NjEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUTU9EQVBJX0hfXyAqLworI2VuZGlmIC8qIEZUTU9EQVBJX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0bW9kZXJyLmgKaW5kZXggOWQ3Zjk4MS4uMmE3NjcxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdG1vZGVyci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRtb2RlcnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBtb2R1bGUgZXJyb3Igb2Zmc2V0cyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAvKiB3aXRoIHNvbWV0aGluZyBsaWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgI3VuZGVmIF9fRlRNT0RFUlJfSF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICN1bmRlZiBGVE1PREVSUl9IXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAjZGVmaW5lIEZUX01PREVSUkRFRiggZSwgdiwgcyApICB7IEZUX01vZF9FcnJfICMjIGUsIHMgfSwgICAgICAgICAqLwogICAvKiAgICAgI2RlZmluZSBGVF9NT0RFUlJfU1RBUlRfTElTVCAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICNkZWZpbmUgRlRfTU9ERVJSX0VORF9MSVNUICAgICAgIHsgMCwgMCB9IH07ICAgICAgICAgICAgICAgICAgICAgICovCkBAIC05MSw4ICs5MSw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE1PREVSUl9IX18KLSNkZWZpbmUgX19GVE1PREVSUl9IX18KKyNpZm5kZWYgRlRNT0RFUlJfSF8KKyNkZWZpbmUgRlRNT0RFUlJfSF8KIAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTg4LDcgKzE4OCw3IEBACiAjdW5kZWYgRlRfTkVFRF9FWFRFUk5fQwogCiAKLSNlbmRpZiAvKiBfX0ZUTU9ERVJSX0hfXyAqLworI2VuZGlmIC8qIEZUTU9ERVJSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3R2YWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oCmluZGV4IGU3NDRiNzEuLjNlNmUxOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdHZhbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBPcGVuVHlwZSB0YWJsZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw4ICsyNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE9UVkFMX0hfXwotI2RlZmluZSBfX0ZUT1RWQUxfSF9fCisjaWZuZGVmIEZUT1RWQUxfSF8KKyNkZWZpbmUgRlRPVFZBTF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTEwNiwxMiArMTA2LDEyIEBACiAjZGVmaW5lIEZUX1ZBTElEQVRFX0pTVEYgIDB4MTAwMAogI2RlZmluZSBGVF9WQUxJREFURV9NQVRIICAweDIwMDAKIAotI2RlZmluZSBGVF9WQUxJREFURV9PVCAgRlRfVkFMSURBVEVfQkFTRSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dERUYgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9WQUxJREFURV9HUE9TIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfVkFMSURBVEVfR1NVQiB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0pTVEYgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9WQUxJREFURV9NQVRICisjZGVmaW5lIEZUX1ZBTElEQVRFX09UICAoIEZUX1ZBTElEQVRFX0JBU0UgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dERUYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dQT1MgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0dTVUIgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX0pTVEYgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1ZBTElEQVRFX01BVEggKQogCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgKgpAQCAtMTk4LDcgKzE5OCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRPVFZBTF9IX18gKi8KKyNlbmRpZiAvKiBGVE9UVkFMX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0b3V0bG4uaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCmluZGV4IGI2ZWM3MGQuLmVmNjZkNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgU3VwcG9ydCBmb3IgdGhlIEZUX091dGxpbmUgdHlwZSB1c2VkIHRvIHN0b3JlIGdseXBoIHNoYXBlcyBvZiAgICAgICAgKi8KIC8qICAgIG1vc3Qgc2NhbGFibGUgZm9udCBmb3JtYXRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE9VVExOX0hfXwotI2RlZmluZSBfX0ZUT1VUTE5fSF9fCisjaWZuZGVmIEZUT1VUTE5fSF8KKyNkZWZpbmUgRlRPVVRMTl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMTE1LDYgKzExNSwxMCBAQAogICAvKiAgICBvdXRsaW5lIGZvciBzdHJva2luZyBwdXJwb3NlcyAob3RoZXJ3aXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBhICAgICAgKi8KICAgLyogICAgdmlzaWJsZSBkb3Qgd2hlbiByb3VuZCBjYXBzIGFyZSB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTaW1pbGFybHksIHRoZSBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3MgZm9yIGFuIGVtcHR5IG91dGxpbmUgYWxzbyAgKi8KKyAgLyogICAgKGRvaW5nIG5vdGhpbmcsIHRoaXMgaXMsIG5vdCBjYWxsaW5nIGFueSBlbWl0dGVyKTsgaWYgbmVjZXNzYXJ5LCAgICovCisgIC8qICAgIHlvdSBzaG91bGQgZmlsdGVyIHRoaXMgb3V0LCB0b28uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfRVhQT1JUKCBGVF9FcnJvciApCiAgIEZUX091dGxpbmVfRGVjb21wb3NlKCBGVF9PdXRsaW5lKiAgICAgICAgICAgICAgb3V0bGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX091dGxpbmVfRnVuY3MqICBmdW5jX2ludGVyZmFjZSwKQEAgLTIxMyw2ICsyMTcsMTAgQEAKICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIGVtcHR5IG91dGxpbmUsIG9yIGFuIG91dGxpbmUgd2l0aCBhIHNpbmdsZSBwb2ludCBvbmx5IGlzIGFsc28gICAqLworICAvKiAgICB2YWxpZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQogICBGVF9PdXRsaW5lX0NoZWNrKCBGVF9PdXRsaW5lKiAgb3V0bGluZSApOwogCkBAIC01NjMsNyArNTcxLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVE9VVExOX0hfXyAqLworI2VuZGlmIC8qIEZUT1VUTE5fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaAppbmRleCBhMWMwMmEyLi4yZTFiZmYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0cGZyLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHBmci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFBGUl9IX18KLSNkZWZpbmUgX19GVFBGUl9IX18KKyNpZm5kZWYgRlRQRlJfSF8KKyNkZWZpbmUgRlRQRlJfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0xNjYsNyArMTY2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFBGUl9IX18gKi8KKyNlbmRpZiAvKiBGVFBGUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHJlbmRlci5oCmluZGV4IGVjOGRhNzAuLjlmN2VkOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRyZW5kZXIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0cmVuZGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgcmVuZGVyZXIgbW9kdWxlcyBwdWJsaWMgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUUkVOREVSX0hfXwotI2RlZmluZSBfX0ZUUkVOREVSX0hfXworI2lmbmRlZiBGVFJFTkRFUl9IXworI2RlZmluZSBGVFJFTkRFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjI2LDcgKzIyNiw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRSRU5ERVJfSF9fICovCisjZW5kaWYgLyogRlRSRU5ERVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzaXplcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKaW5kZXggYmVmODQyNC4uNTVlMGQ1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNpemVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc2l6ZSBvYmplY3RzIG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI1LDggKzI1LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU0laRVNfSF9fCi0jZGVmaW5lIF9fRlRTSVpFU19IX18KKyNpZm5kZWYgRlRTSVpFU19IXworI2RlZmluZSBGVFNJWkVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xNTMsNyArMTUzLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFNJWkVTX0hfXyAqLworI2VuZGlmIC8qIEZUU0laRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzbmFtZXMuaAppbmRleCAwZjdmYmUxLi5hN2I1MWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c25hbWVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHNuYW1lcy5oCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xOSw4ICsxOSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVF9TRk5UX05BTUVTX0hfXwotI2RlZmluZSBfX0ZUX1NGTlRfTkFNRVNfSF9fCisjaWZuZGVmIEZUU05BTUVTX0hfCisjZGVmaW5lIEZUU05BTUVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVF9TRk5UX05BTUVTX0hfXyAqLworI2VuZGlmIC8qIEZUU05BTUVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmgKaW5kZXggN2ViYjFlNy4uYjNiOTkyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHN0cm9rZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnRzdHJva2UuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBwYXRoIHN0cm9rZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRfU1RST0tFX0hfXwotI2RlZmluZSBfX0ZUX1NUUk9LRV9IX18KKyNpZm5kZWYgRlRTVFJPS0VfSF8KKyNkZWZpbmUgRlRTVFJPS0VfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9PVVRMSU5FX0gKQEAgLTc3NCw3ICs3NzQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUX1NUUk9LRV9IX18gKi8KKyNlbmRpZiAvKiBGVFNUUk9LRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5bnRoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAppbmRleCBmYmNiYWQ4Li5mZGZjYjY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNDEsOCArNDEsOCBAQAogICAvKiBhZGFwdGVkIHRvIHRoZSBwYXJ0aWN1bGFyIG5lZWRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCiAKLSNpZm5kZWYgX19GVFNZTlRIX0hfXwotI2RlZmluZSBfX0ZUU1lOVEhfSF9fCisjaWZuZGVmIEZUU1lOVEhfSF8KKyNkZWZpbmUgRlRTWU5USF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNzgsNyArNzgsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUU1lOVEhfSF9fICovCisjZW5kaWYgLyogRlRTWU5USF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHN5c3RlbS5oCmluZGV4IDJiYzk5OTkuLmE3NWY5NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnRzeXN0ZW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgbG93LWxldmVsIHN5c3RlbSBpbnRlcmZhY2UgZGVmaW5pdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU1lTVEVNX0hfXwotI2RlZmluZSBfX0ZUU1lTVEVNX0hfXworI2lmbmRlZiBGVFNZU1RFTV9IXworI2RlZmluZSBGVFNZU1RFTV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAqICAgICBUaGUgc3RyZWFtIHNpemUgaW4gYnl0ZXMuCiAgICAqCiAgICAqICAgICBJbiBjYXNlIG9mIGNvbXByZXNzZWQgc3RyZWFtcyB3aGVyZSB0aGUgc2l6ZSBpcyB1bmtub3duIGJlZm9yZQotICAgKiAgICAgYWN0dWFsbHkgZG9pbmcgdGhlIGRlY29tcHJlc3Npb24sIHRoZSB2YWx1ZSBpcyBzZXQgdG8gMHg3RkZGRkZGRi4gCisgICAqICAgICBhY3R1YWxseSBkb2luZyB0aGUgZGVjb21wcmVzc2lvbiwgdGhlIHZhbHVlIGlzIHNldCB0byAweDdGRkZGRkZGLgogICAgKiAgICAgKE5vdGUgdGhhdCB0aGlzIHNpemUgdmFsdWUgY2FuIG9jY3VyIGZvciBub3JtYWwgc3RyZWFtcyBhbHNvOyBpdCBpcwogICAgKiAgICAgdGh1cyBqdXN0IGEgaGludC4pCiAgICAqCkBAIC0zNDksNyArMzQ5LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFNZU1RFTV9IX18gKi8KKyNlbmRpZiAvKiBGVFNZU1RFTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHRyaWdvbi5oCmluZGV4IDQ4NWVjNTEuLmY3ODliNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0cmlnb24uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHJpZ29uLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdHJpZ29ub21ldHJpYyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUVFJJR09OX0hfXwotI2RlZmluZSBfX0ZUVFJJR09OX0hfXworI2lmbmRlZiBGVFRSSUdPTl9IXworI2RlZmluZSBGVFRSSUdPTl9IXwogCiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICiAKQEAgLTM0NCw3ICszNDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUVFJJR09OX0hfXyAqLworI2VuZGlmIC8qIEZUVFJJR09OX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0dHRkcnYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oCmluZGV4IGRjMDA4MWEuLjIyMTg2ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvZnR0dGRydi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb250cm9sbGluZyB0aGUgVHJ1ZVR5cGUgZHJpdmVyICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFRURFJWX0hfXwotI2RlZmluZSBfX0ZUVFREUlZfSF9fCisjaWZuZGVmIEZUVFREUlZfSF8KKyNkZWZpbmUgRlRUVERSVl9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKQEAgLTEzOCwzMSArMTM4LDM3IEBACiAgICAqICAgaW50ZXJwcmV0ZXItdmVyc2lvbgogICAgKgogICAgKiBAZGVzY3JpcHRpb246Ci0gICAqICAgQ3VycmVudGx5LCB0d28gdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgcmVwcmVzZW50aW5nIHRoZSBieXRlY29kZQotICAgKiAgIGludGVycHJldGVyIHdpdGggYW5kIHdpdGhvdXQgc3VicGl4ZWwgaGludGluZyBzdXBwb3J0LAotICAgKiAgIHJlc3BlY3RpdmVseS4gIFRoZSBkZWZhdWx0IGlzIHN1YnBpeGVsIHN1cHBvcnQgaWYKLSAgICogICBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgaXMgZGVmaW5lZCwgYW5kIG5vIHN1YnBpeGVsCi0gICAqICAgc3VwcG9ydCBvdGhlcndpc2UgKHNpbmNlIGl0IGlzbid0IGF2YWlsYWJsZSB0aGVuKS4KKworICAgKiAgIEN1cnJlbnRseSwgdGhyZWUgdmVyc2lvbnMgYXJlIGF2YWlsYWJsZSwgdHdvIHJlcHJlc2VudGluZyB0aGUKKyAgICogICBieXRlY29kZSBpbnRlcnByZXRlciB3aXRoIHN1YnBpeGVsIGhpbnRpbmcgc3VwcG9ydCAob2xkIGBJbmZpbmFsaXR5JworICAgKiAgIGNvZGUgYW5kIG5ldyBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgYG1pbmltYWwnIGNvZGUpIGFuZAorICAgKiAgIG9uZSB3aXRob3V0LCByZXNwZWN0aXZlbHkuICBUaGUgZGVmYXVsdCBpcyBzdWJwaXhlbCBzdXBwb3J0IGlmCisgICAqICAgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HIGlzIGRlZmluZWQsIGFuZCBubyBzdWJwaXhlbCBzdXBwb3J0CisgICAqICAgb3RoZXJ3aXNlIChzaW5jZSBpdCBpc24ndCBhdmFpbGFibGUgdGhlbikuCiAgICAqCiAgICAqICAgSWYgc3VicGl4ZWwgaGludGluZyBpcyBvbiwgbWFueSBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgYmVoYXZlCiAgICAqICAgZGlmZmVyZW50bHkgY29tcGFyZWQgdG8gQi9XIG9yIGdyYXlzY2FsZSByZW5kZXJpbmcgKGV4Y2VwdCBpZiBgbmF0aXZlCi0gICAqICAgQ2xlYXJUeXBlJyBpcyBzZWxlY3RlZCBieSB0aGUgZm9udCkuICBUaGUgbWFpbiBpZGVhIGlzIHRvIHJlbmRlciBhdCBhCi0gICAqICAgbXVjaCBpbmNyZWFzZWQgaG9yaXpvbnRhbCByZXNvbHV0aW9uLCB0aGVuIHNhbXBsaW5nIGRvd24gdGhlIGNyZWF0ZWQKLSAgICogICBvdXRwdXQgdG8gc3VicGl4ZWwgcHJlY2lzaW9uLiAgSG93ZXZlciwgbWFueSBvbGRlciBmb250cyBhcmUgbm90Ci0gICAqICAgc3VpdGVkIHRvIHRoaXMgYW5kIG11c3QgYmUgc3BlY2lhbGx5IHRha2VuIGNhcmUgb2YgYnkgYXBwbHlpbmcKLSAgICogICAoaGFyZGNvZGVkKSBmb250LXNwZWNpZmljIHR3ZWFrcy4KKyAgICogICBDbGVhclR5cGUnIGlzIHNlbGVjdGVkIGJ5IHRoZSBmb250KS4gIE1pY3Jvc29mdCdzIG1haW4gaWRlYSBpcyB0bworICAgKiAgIHJlbmRlciBhdCBhIG11Y2ggaW5jcmVhc2VkIGhvcml6b250YWwgcmVzb2x1dGlvbiwgdGhlbiBzYW1wbGluZyBkb3duCisgICAqICAgdGhlIGNyZWF0ZWQgb3V0cHV0IHRvIHN1YnBpeGVsIHByZWNpc2lvbi4gIEhvd2V2ZXIsIG1hbnkgb2xkZXIgZm9udHMKKyAgICogICBhcmUgbm90IHN1aXRlZCB0byB0aGlzIGFuZCBtdXN0IGJlIHNwZWNpYWxseSB0YWtlbiBjYXJlIG9mIGJ5CisgICAqICAgYXBwbHlpbmcgKGhhcmRjb2RlZCkgdHdlYWtzIGluIE1pY3Jvc29mdCdzIGludGVycHJldGVyLgogICAgKgogICAgKiAgIERldGFpbHMgb24gc3VicGl4ZWwgaGludGluZyBhbmQgc29tZSBvZiB0aGUgbmVjZXNzYXJ5IHR3ZWFrcyBjYW4gYmUKICAgICogICBmb3VuZCBpbiBHcmVnIEhpdGNoY29jaydzIHdoaXRlcGFwZXIgYXQKLSAgICogICBgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgnLgorICAgKiAgIGBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5cGUuYXNweCcuIAorICAgKiAgIE5vdGUgdGhhdCBGcmVlVHlwZSBjdXJyZW50bHkgZG9lc24ndCByZWFsbHkgYHN1YnBpeGVsIGhpbnQnICg2eDEsIDZ4MiwKKyAgICogICBvciA2eDUgc3VwZXJzYW1wbGluZykgbGlrZSBkaXNjdXNzZWQgaW4gdGhlIHBhcGVyLiAgRGVwZW5kaW5nIG9uIHRoZQorICAgKiAgIGNob3NlbiBpbnRlcnByZXRlciwgaXQgc2ltcGx5IGlnbm9yZXMgaW5zdHJ1Y3Rpb25zIG9uIHZlcnRpY2FsIHN0ZW1zCisgICAqICAgdG8gYXJyaXZlIGF0IHZlcnkgc2ltaWxhciByZXN1bHRzLgogICAgKgotICAgKiAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb2RlIGRlbW9uc3RyYXRlcyBob3cgdG8gYWN0aXZhdGUgc3VicGl4ZWwKKyAgICogICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29kZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGRlYWN0aXZhdGUgc3VicGl4ZWwKICAgICogICBoaW50aW5nIChvbWl0dGluZyB0aGUgZXJyb3IgaGFuZGxpbmcpLgogICAgKgogICAgKiAgIHsKICAgICogICAgIEZUX0xpYnJhcnkgIGxpYnJhcnk7CiAgICAqICAgICBGVF9GYWNlICAgICBmYWNlOwotICAgKiAgICAgRlRfVUludCAgICAgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7CisgICAqICAgICBGVF9VSW50ICAgICBpbnRlcnByZXRlcl92ZXJzaW9uID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zNTsKICAgICoKICAgICoKICAgICogICAgIEZUX0luaXRfRnJlZVR5cGUoICZsaWJyYXJ5ICk7CkBAIC0xNzUsNiArMTgxLDggQEAKICAgICogQG5vdGU6CiAgICAqICAgVGhpcyBwcm9wZXJ0eSBjYW4gYmUgdXNlZCB3aXRoIEBGVF9Qcm9wZXJ0eV9HZXQgYWxzby4KICAgICoKKyAgICogICBUaGlzIHByb3BlcnR5IGNhbiBiZSBzZXQgdmlhIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycgZW52aXJvbm1lbnQKKyAgICogICB2YXJpYWJsZSAodXNpbmcgdmFsdWVzIGAzNScsIGAzOCcsIG9yIGA0MCcpLgogICAgKi8KIAogCkBAIC0xOTcsOSArMjA1LDE5IEBACiAgICAqCiAgICAqICAgVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCA6OgogICAgKiAgICAgVmVyc2lvbn4zOCBjb3JyZXNwb25kcyB0byBNUyByYXN0ZXJpemVyIHYuMS45OyBpdCBpcyByb3VnaGx5Ci0gICAqICAgICBlcXVpdmFsZW50IHRvIHRoZSBoaW50aW5nIHByb3ZpZGVkIGJ5IERpcmVjdFdyaXRlIENsZWFyVHlwZSAoYXMKLSAgICogICAgIGNhbiBiZSBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIHRoZSBJbnRlcm5ldCBFeHBsb3Jlcn45IHJ1bm5pbmcgb24KLSAgICogICAgIFdpbmRvd3N+NykuCisgICAqICAgICBlcXVpdmFsZW50IHRvIHRoZSBoaW50aW5nIHByb3ZpZGVkIGJ5IERpcmVjdFdyaXRlIENsZWFyVHlwZSAoYXMgY2FuCisgICAqICAgICBiZSBmb3VuZCwgZm9yIGV4YW1wbGUsIGluIHRoZSBJbnRlcm5ldCBFeHBsb3Jlcn45IHJ1bm5pbmcgb24KKyAgICogICAgIFdpbmRvd3N+NykuICBJdCBpcyB1c2VkIGluIEZyZWVUeXBlIHRvIHNlbGVjdCB0aGUgYEluZmluYWxpdHknCisgICAqICAgICBzdWJwaXhlbCBoaW50aW5nIGNvZGUuICBUaGUgY29kZSBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZQorICAgKiAgICAgdmVyc2lvbi4KKyAgICoKKyAgICogICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwIDo6CisgICAqICAgICBWZXJzaW9ufjQwIGNvcnJlc3BvbmRzIHRvIE1TIHJhc3Rlcml6ZXIgdi4yLjE7IGl0IGlzIHJvdWdobHkKKyAgICogICAgIGVxdWl2YWxlbnQgdG8gdGhlIGhpbnRpbmcgcHJvdmlkZWQgYnkgRGlyZWN0V3JpdGUgQ2xlYXJUeXBlIChhcyBjYW4KKyAgICogICAgIGJlIGZvdW5kLCBmb3IgZXhhbXBsZSwgaW4gTWljcm9zb2Z0J3MgRWRnZSBCcm93c2VyIG9uIFdpbmRvd3N+MTApLiAKKyAgICogICAgIEl0IGlzIHVzZWQgaW4gRnJlZVR5cGUgdG8gc2VsZWN0IHRoZSBgbWluaW1hbCcgc3VicGl4ZWwgaGludGluZworICAgKiAgICAgY29kZSwgYSBzdHJpcHBlZC1kb3duIGFuZCBoaWdoZXIgcGVyZm9ybWFuY2UgdmVyc2lvbiBvZiB0aGUKKyAgICogICAgIGBJbmZpbmFsaXR5JyBjb2RlLgogICAgKgogICAgKiBAbm90ZToKICAgICogICBUaGlzIHByb3BlcnR5IGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyCkBAIC0yMDcsOSArMjI1LDkgQEAKICAgICogICBnZXQgcmFzdGVyaXplZCEgIEluIHBhcnRpY3VsYXIsIGl0IGRvZXMgbm90IGNvbnRyb2wgc3VicGl4ZWwgY29sb3IKICAgICogICBmaWx0ZXJpbmcuCiAgICAqCi0gICAqICAgSWYgRnJlZVR5cGUgaGFzIG5vdCBiZWVuIGNvbXBpbGVkIHdpdGggY29uZmlndXJhdGlvbiBvcHRpb24KLSAgICogICBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcsIHNlbGVjdGluZyB2ZXJzaW9ufjM4IGNhdXNlcyBhbgotICAgKiAgIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBlcnJvci4KKyAgICogICBJZiBGcmVlVHlwZSBoYXMgbm90IGJlZW4gY29tcGlsZWQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24KKyAgICogICBGVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcsIHNlbGVjdGluZyB2ZXJzaW9ufjM4IG9yfjQwIGNhdXNlcworICAgKiAgIGFuIGBGVF9FcnJfVW5pbXBsZW1lbnRlZF9GZWF0dXJlJyBlcnJvci4KICAgICoKICAgICogICBEZXBlbmRpbmcgb24gdGhlIGdyYXBoaWNzIGZyYW1ld29yaywgTWljcm9zb2Z0IHVzZXMgZGlmZmVyZW50CiAgICAqICAgYnl0ZWNvZGUgYW5kIHJlbmRlcmluZyBlbmdpbmVzLiAgQXMgYSBjb25zZXF1ZW5jZSwgdGhlIHZlcnNpb24KQEAgLTI5MCwxMyArMzA4LDE0IEBACiAgICAqICAgdGhlIHZlcnNpb25+MSBnYXNwIHRhYmxlIGV4Y2x1c2l2ZWx5IChsaWtlIENvbG9yIENsZWFyVHlwZSksIHdoaWxlCiAgICAqICAgdjEuNiBvbmx5IHJlc3BlY3RzIHRoZSB2YWx1ZXMgb2YgdmVyc2lvbn4wIChiaXRzIDAgYW5kfjEpLgogICAgKgotICAgKiAgIEZyZWVUeXBlIGRvZXNuJ3QgcHJvdmlkZSBhbGwgY2FwYWJpbGl0aWVzIG9mIHRoZSBtb3N0IHJlY2VudAotICAgKiAgIENsZWFyVHlwZSBpbmNhcm5hdGlvbiwgdGh1cyB3ZSBpZGVudGlmeSBvdXIgc3VicGl4ZWwgc3VwcG9ydCBhcwotICAgKiAgIHZlcnNpb25+MzguCisgICAqICAgS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZlYXR1cmVzIG9mIHRoZSBhYm92ZSBpbnRlcnByZXRlciB2ZXJzaW9ucworICAgKiAgIG1pZ2h0IG5vdCBtYXAgZXhhY3RseSB0byBGcmVlVHlwZSBmZWF0dXJlcyBvciBiZWhhdmlvciBiZWNhdXNlIGl0IGlzCisgICAqICAgYSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBsaWJyYXJ5IHdpdGggZGlmZmVyZW50IGludGVybmFscy4KICAgICoKICAgICovCiAjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgIDM1CiAjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggIDM4CisjZGVmaW5lIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgIDQwCiAKICAvKiAqLwogCkBAIC0zMDQsNyArMzIzLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19GVFRURFJWX0hfXyAqLworI2VuZGlmIC8qIEZUVFREUlZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKaW5kZXggNzA2YTFiZS4uMjY3M2U3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgc2ltcGxlIHR5cGVzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUVFlQRVNfSF9fCi0jZGVmaW5lIF9fRlRUWVBFU19IX18KKyNpZm5kZWYgRlRUWVBFU19IXworI2RlZmluZSBGVFRZUEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01OTYsNyArNTk2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFRZUEVTX0hfXyAqLworI2VuZGlmIC8qIEZUVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvZnR3aW5mbnQuaAppbmRleCBjYWVkYWExLi5hMWE3MTViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2Z0d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgZm50LXNwZWNpZmljIGRhdGEuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFdJTkZOVF9IX18KLSNkZWZpbmUgX19GVFdJTkZOVF9IX18KKyNpZm5kZWYgRlRXSU5GTlRfSF8KKyNkZWZpbmUgRlRXSU5GTlRfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0yNjQsNyArMjY0LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFdJTkZOVF9IX18gKi8KKyNlbmRpZiAvKiBGVFdJTkZOVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oCmluZGV4IDhkNWE5NzcuLjdlZjgyYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvYXV0b2hpbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2F1dG9oaW50LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBgYXV0b2hpbnQnIG1vZHVsZS1zcGVjaWZpYyBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI0LDggKzI0LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FVVE9ISU5UX0hfXwotI2RlZmluZSBfX0FVVE9ISU5UX0hfXworI2lmbmRlZiBBVVRPSElOVF9IXworI2RlZmluZSBBVVRPSElOVF9IXwogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BVVRPSElOVF9IX18gKi8KKyNlbmRpZiAvKiBBVVRPSElOVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmgKaW5kZXggYTc2NjgyYi4uOGE4ODRmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGNhbGMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Y2FsYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFyaXRobWV0aWMgY29tcHV0YXRpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVENBTENfSF9fCi0jZGVmaW5lIF9fRlRDQUxDX0hfXworI2lmbmRlZiBGVENBTENfSF8KKyNkZWZpbmUgRlRDQUxDX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MTIsNyArNDEyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVENBTENfSF9fICovCisjZW5kaWYgLyogRlRDQUxDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZGVidWcuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCmluZGV4IDIxNmM3MzAuLmQxMTA0NTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkZWJ1Zy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIERlYnVnZ2luZyBhbmQgbG9nZ2luZyBjb21wb25lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMSw4ICsyMSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVERFQlVHX0hfXwotI2RlZmluZSBfX0ZUREVCVUdfSF9fCisjaWZuZGVmIEZUREVCVUdfSF8KKyNkZWZpbmUgRlRERUJVR19IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMjQ5LDcgKzI0OSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRERUJVR19IX18gKi8KKyNlbmRpZiAvKiBGVERFQlVHX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0ZHJpdmVyLmgKaW5kZXggMTY4NTZkMy4uOTAyZjAyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGRyaXZlci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBmb250IGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlREUklWRVJfSF9fCi0jZGVmaW5lIF9fRlREUklWRVJfSF9fCisjaWZuZGVmIEZURFJJVkVSX0hfCisjZGVmaW5lIEZURFJJVkVSX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC02NywxNSArNjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgICAgIGxvYWRfZmxhZ3MgKTsKIAogCi0gIHR5cGVkZWYgRlRfVUludAotICAoKkZUX0NoYXJNYXBfQ2hhckluZGV4RnVuYykoIEZUX0NoYXJNYXAgIGNoYXJtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgY2hhcmNvZGUgKTsKLQotICB0eXBlZGVmIEZUX0xvbmcKLSAgKCpGVF9DaGFyTWFwX0NoYXJOZXh0RnVuYykoIEZUX0NoYXJNYXAgIGNoYXJtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICBjaGFyY29kZSApOwotCi0KICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKkZUX0ZhY2VfR2V0S2VybmluZ0Z1bmMpKCBGVF9GYWNlICAgICBmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLApAQCAtMjEzLDcgKzIwNCw3IEBACiAgIC8qICAgIEFuZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYSBgZGVzdHJveScgZnVuY3Rpb24gbmVlZHMgdG8gYmUgICAqLwogICAvKiAgICBjYWxsZWQgdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBmY2luaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zIGEgICAqLworICAvKiAgICBgZnRpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyBhICAgKi8KICAgLyogICAgbWVjaGFuaXNtIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zIGZvciB0aGUgZGVmYXVsdCBtb2R1bGVzICAgICAgICAgICovCiAgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQwMyw3ICszOTQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZURFJJVkVSX0hfXyAqLworI2VuZGlmIC8qIEZURFJJVkVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0Z2xvYWRyLmgKaW5kZXggOTcwZGQ3MC4uYmViZjVkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdGdsb2Fkci5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRHTE9BRFJfSF9fCi0jZGVmaW5lIF9fRlRHTE9BRFJfSF9fCisjaWZuZGVmIEZUR0xPQURSX0hfCisjZGVmaW5lIEZUR0xPQURSX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zNiwyNCArMzYsNiBAQAogICAvKiAgICBUaGUgZ2x5cGggbG9hZGVyIGlzIGFuIGludGVybmFsIG9iamVjdCB1c2VkIHRvIGxvYWQgc2V2ZXJhbCBnbHlwaHMgKi8KICAgLyogICAgdG9nZXRoZXIgKGZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBjb21wb3NpdGVzKS4gICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIGdseXBoIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgaGlnaC1sZXZlbCBBUEksICovCi0gIC8qICAgIGhlbmNlIHRoZSBmb3J3YXJkIHN0cnVjdHVyZSBkZWNsYXJhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgdHlwZWRlZiBzdHJ1Y3QgRlRfR2x5cGhMb2FkZXJSZWNfKiAgRlRfR2x5cGhMb2FkZXIgOwotCi0KLSNpZiAwICAvKiBtb3ZlZCB0byBmcmVldHlwZS5oIGluIHZlcnNpb24gMi4yICovCi0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMgICAgICAgICAgMQotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1hZX1ZBTFVFUyAgICAgIDIKLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEICAgICAgICA0Ci0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfU0NBTEUgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1hZX1NDQUxFICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR18yWDIgICAgICAgICAgICAgICAgICAweDgwCi0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfVVNFX01ZX01FVFJJQ1MgICAgICAweDIwMAotI2VuZGlmCi0KLQogICB0eXBlZGVmIHN0cnVjdCAgRlRfU3ViR2x5cGhSZWNfCiAgIHsKICAgICBGVF9JbnQgICAgIGluZGV4OwpAQCAtODksNyArNzEsNyBAQAogCiAgICAgdm9pZCogICAgICAgICAgICBvdGhlcjsgICAgICAgICAgICAvKiBmb3IgcG9zc2libGUgZnV0dXJlIGV4dGVuc2lvbj8gKi8KIAotICB9IEZUX0dseXBoTG9hZGVyUmVjOworICB9IEZUX0dseXBoTG9hZGVyUmVjLCAqRlRfR2x5cGhMb2FkZXI7CiAKIAogICAvKiBjcmVhdGUgbmV3IGVtcHR5IGdseXBoIGxvYWRlciAqLwpAQCAtMTY2LDcgKzE0OCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRHTE9BRFJfSF9fICovCisjZW5kaWYgLyogRlRHTE9BRFJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMmY5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0aGFzaC5oCkBAIC0wLDAgKzEsMTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBmdGhhc2guaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSGFzaGluZyBmdW5jdGlvbnMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IDIwMDAgQ29tcHV0aW5nIFJlc2VhcmNoIExhYnMsIE5ldyBNZXhpY28gU3RhdGUgVW5pdmVyc2l0eQorICogQ29weXJpZ2h0IDIwMDEtMjAxNQorICogICBGcmFuY2VzY28gWmFwcGEgTmFyZGVsbGkKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT01QVVRJTkcgUkVTRUFSQ0ggTEFCIE9SIE5FVyBNRVhJQ08gU1RBVEUgVU5JVkVSU0lUWSBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVAorICogT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCisgKiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIFRoaXMgZmlsZSBpcyBiYXNlZCBvbiBjb2RlIGZyb20gYmRmLmMsdiAxLjIyIDIwMDAvMDMvMTYgMjA6MDg6NTAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgdGFrZW4gZnJvbSBNYXJrIExlaXNoZXIncyB4bWJkZmVkIHBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgRlRIQVNIX0hfCisjZGVmaW5lIEZUSEFTSF9IXworCisKKyNpbmNsdWRlIDxmdDJidWlsZC5oPgorI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAorCisKK0ZUX0JFR0lOX0hFQURFUgorCisKKyAgdHlwZWRlZiB1bmlvbiAgRlRfSGFzaGtleV8KKyAgeworICAgIEZUX0ludCAgICAgICBudW07CisgICAgY29uc3QgY2hhciogIHN0cjsKKworICB9IEZUX0hhc2hrZXk7CisKKworICB0eXBlZGVmIHN0cnVjdCAgRlRfSGFzaG5vZGVSZWNfCisgIHsKKyAgICBGVF9IYXNoa2V5ICBrZXk7CisgICAgc2l6ZV90ICAgICAgZGF0YTsKKworICB9IEZUX0hhc2hub2RlUmVjOworCisgIHR5cGVkZWYgc3RydWN0IEZUX0hhc2hub2RlUmVjXyAgKkZUX0hhc2hub2RlOworCisKKyAgdHlwZWRlZiBGVF9VTG9uZworICAoKkZUX0hhc2hfTG9va3VwRnVuYykoIEZUX0hhc2hrZXkqICBrZXkgKTsKKworICB0eXBlZGVmIEZUX0Jvb2wKKyAgKCpGVF9IYXNoX0NvbXBhcmVGdW5jKSggRlRfSGFzaGtleSogIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2hrZXkqICBiICk7CisKKworICB0eXBlZGVmIHN0cnVjdCAgRlRfSGFzaFJlY18KKyAgeworICAgIEZUX1VJbnQgIGxpbWl0OworICAgIEZUX1VJbnQgIHNpemU7CisgICAgRlRfVUludCAgdXNlZDsKKworICAgIEZUX0hhc2hfTG9va3VwRnVuYyAgIGxvb2t1cDsKKyAgICBGVF9IYXNoX0NvbXBhcmVGdW5jICBjb21wYXJlOworCisgICAgRlRfSGFzaG5vZGUqICB0YWJsZTsKKworICB9IEZUX0hhc2hSZWM7CisKKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfSGFzaFJlY18gICpGVF9IYXNoOworCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9zdHJfaW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApOworCisgIEZUX0Vycm9yCisgIGZ0X2hhc2hfbnVtX2luaXQoIEZUX0hhc2ggICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKTsKKworICB2b2lkCisgIGZ0X2hhc2hfc3RyX2ZyZWUoIEZUX0hhc2ggICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKTsKKworI2RlZmluZSBmdF9oYXNoX251bV9mcmVlICBmdF9oYXNoX3N0cl9mcmVlCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9zdHJfaW5zZXJ0KCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICBtZW1vcnkgKTsKKworICBGVF9FcnJvcgorICBmdF9oYXNoX251bV9pbnNlcnQoIEZUX0ludCAgICAgbnVtLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgKTsKKworICBzaXplX3QqCisgIGZ0X2hhc2hfc3RyX2xvb2t1cCggY29uc3QgY2hhciogIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9IYXNoICAgICAgaGFzaCApOworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9udW1fbG9va3VwKCBGVF9JbnQgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgaGFzaCApOworCisKK0ZUX0VORF9IRUFERVIKKworCisjZW5kaWYgLyogRlRIQVNIX0hfICovCisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKaW5kZXggYzBjNTUzYi4uZmMzM2IyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgbWVtb3J5IG1hbmFnZW1lbnQgbWFjcm9zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRNRU1PUllfSF9fCi0jZGVmaW5lIF9fRlRNRU1PUllfSF9fCisjaWZuZGVmIEZUTUVNT1JZX0hfCisjZGVmaW5lIEZUTUVNT1JZX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC02NSwxMyArNjUsMTUgQEAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiAKLSAgZXh0ZXJuICJDKysiCitleHRlcm4gIkMrKyIKK3sKICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGlubGluZSBUKgogICBjcGx1c3BsdXNfdHlwZW9mKCAgICAgICAgVCosCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgICp2ICkKICAgewogICAgIHJldHVybiBzdGF0aWNfY2FzdCA8VCo+ICggdiApOwogICB9Cit9CiAKICNkZWZpbmUgRlRfQVNTSUdOUCggcCwgdmFsICkgIChwKSA9IGNwbHVzcGx1c190eXBlb2YoIChwKSwgKHZhbCkgKQogCkBAIC0xMDYsMTAgKzEwOCwxMiBAQAogCiAgIC8qCiAgICAqICBUaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgcmV0dXJuIGEgcG9pbnRlciwgYW5kIHRoZSBlcnJvciBjb2RlCi0gICAqICBpcyB3cml0dGVuIHRvIHRocm91Z2ggdGhlIGBwX2Vycm9yJyBwYXJhbWV0ZXIuICBTZWUgYmVsb3cgZm9yCi0gICAqICBmb3IgZG9jdW1lbnRhdGlvbi4KKyAgICogIGlzIHdyaXR0ZW4gdG8gdGhyb3VnaCB0aGUgYHBfZXJyb3InIHBhcmFtZXRlci4KICAgICovCiAKKyAgLyogVGhlIGBxJyB2YXJpYW50cyBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IChgcScgZm9yIGBxdWljaycpIGRvbid0IGZpbGwgKi8KKyAgLyogdGhlIGFsbG9jYXRlZCBvciByZWFsbG9jYXRlZCBtZW1vcnkgd2l0aCB6ZXJvIGJ5dGVzLiAgICAgICAgICAgICAgICAgKi8KKwogICBGVF9CQVNFKCBGVF9Qb2ludGVyICkKICAgZnRfbWVtX2FsbG9jKCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIHNpemUsCkBAIC0xNDEsNiArMTQ1LDkgQEAKICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICBQICk7CiAKIAorICAvKiBUaGUgYFEnIHZhcmlhbnRzIG9mIHRoZSBtYWNyb3MgYmVsb3cgKGBRJyBmb3IgYHF1aWNrJykgZG9uJ3QgZmlsbCAqLworICAvKiB0aGUgYWxsb2NhdGVkIG9yIHJlYWxsb2NhdGVkIG1lbW9yeSB3aXRoIHplcm8gYnl0ZXMuICAgICAgICAgICAgICAqLworCiAjZGVmaW5lIEZUX01FTV9BTExPQyggcHRyLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX2FsbG9jKCBtZW1vcnksICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKHNpemUpLCBcCkBAIC0zODAsNyArMzg3LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVE1FTU9SWV9IX18gKi8KKyNlbmRpZiAvKiBGVE1FTU9SWV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgKaW5kZXggOWEzMzNmYy4uMGE5ZjJkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdG9ianMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwcml2YXRlIGJhc2UgY2xhc3NlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMyw4ICsyMyw4IEBACiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVE9CSlNfSF9fCi0jZGVmaW5lIF9fRlRPQkpTX0hfXworI2lmbmRlZiBGVE9CSlNfSF8KKyNkZWZpbmUgRlRPQkpTX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgRlRfUkVOREVSX0gKQEAgLTM0MSwxMiArMzQxLDYgQEAKICAgLyogICAgICB0aGlzIGRhdGEgd2hlbiBmaXJzdCBvcGVuZWQuICBUaGlzIGZpZWxkIGV4aXN0cyBvbmx5IGlmICAgICAgICAgICovCiAgIC8qICAgICAgQEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgaXMgZGVmaW5lZC4gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgaWdub3JlX3VucGF0ZW50ZWRfaGludGVyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgVGhpcyBib29sZWFuIGZsYWcgaW5zdHJ1Y3RzIHRoZSBnbHlwaCBsb2FkZXIgdG8gaWdub3JlIHRoZSAgICAgICAqLwotICAvKiAgICAgIG5hdGl2ZSBmb250IGhpbnRlciwgaWYgb25lIGlzIGZvdW5kLiAgVGhpcyBpcyBleGNsdXNpdmVseSB1c2VkICAgKi8KLSAgLyogICAgICBpbiB0aGUgY2FzZSB3aGVuIHRoZSB1bnBhdGVudGVkIGhpbnRlciBpcyBjb21waWxlZCB3aXRoaW4gdGhlICAgICovCi0gIC8qICAgICAgbGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcmVmY291bnQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgQSBjb3VudGVyIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gQEZUX0ZhY2Ugc3RydWN0dXJlIGlzICAqLwogICAvKiAgICAgIGNyZWF0ZWQuICBARlRfUmVmZXJlbmNlX0ZhY2UgaW5jcmVtZW50cyB0aGlzIGNvdW50ZXIsIGFuZCAgICAgICAgKi8KQEAgLTM2NSw3ICszNTksNiBAQAogICAgIEZUX0luY3JlbWVudGFsX0ludGVyZmFjZVJlYyogIGluY3JlbWVudGFsX2ludGVyZmFjZTsKICNlbmRpZgogCi0gICAgRlRfQm9vbCAgICAgICAgICAgICBpZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXI7CiAgICAgRlRfSW50ICAgICAgICAgICAgICByZWZjb3VudDsKIAogICB9IEZUX0ZhY2VfSW50ZXJuYWxSZWM7CkBAIC01MzksNiArNTMyLDE0IEBACiAgIGZ0X21vZHVsZV9nZXRfc2VydmljZSggRlRfTW9kdWxlICAgIG1vZHVsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgc2VydmljZV9pZCApOwogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgIEZUX0JBU0UoIEZUX0Vycm9yICkKKyAgZnRfcHJvcGVydHlfc3RyaW5nX3NldCggRlRfTGlicmFyeSAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyogICAgICAgIHZhbHVlICk7CisjZW5kaWYKKwogICAvKiAqLwogCiAKQEAgLTc3NSwxMyArNzc2LDYgQEAKICNkZWZpbmUgRlRfREVCVUdfSE9PS19UUlVFVFlQRSAgICAgICAgICAgIDAKIAogCi0gIC8qIFNldCB0aGlzIGRlYnVnIGhvb2sgdG8gYSBub24tbnVsbCBwb2ludGVyIHRvIGZvcmNlIHVucGF0ZW50ZWQgaGludGluZyAqLwotICAvKiBmb3IgYWxsIGZhY2VzIHdoZW4gYm90aCBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgYW5kICAgICAgICAgICAgICAgKi8KLSAgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgYXJlIGRlZmluZWQuICBUaGlzIGlzIG9ubHkgdXNlZCAgICovCi0gIC8qIGR1cmluZyBkZWJ1Z2dpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBGVF9ERUJVR19IT09LX1VOUEFURU5URURfSElOVElORyAgMQotCi0KICAgdHlwZWRlZiB2b2lkICAoKkZUX0JpdG1hcF9MY2RGaWx0ZXJGdW5jKSggRlRfQml0bWFwKiAgICAgIGJpdG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSApOwpAQCAtODQ3LDcgKzg0MSw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nIGNhbGxiYWNrIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgcGljX2NvbnRhaW5lciAgICA6OiBDb250YWlucyBnbG9iYWwgc3RydWN0cyBhbmQgdGFibGVzLCBpbnN0ZWFkICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgb2YgZGVmaW5pbmcgdGhlbSBnbG9iYWxsbHkuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgIG9mIGRlZmluaW5nIHRoZW0gZ2xvYmFsbHkuICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIHJlZmNvdW50ICAgICAgICAgOjogQSBjb3VudGVyIGluaXRpYWxpemVkIHRvfjEgYXQgdGhlIHRpbWUgYW4gICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9MaWJyYXJ5IHN0cnVjdHVyZSBpcyBjcmVhdGVkLiAgICAgICAgICAgICAgKi8KQEAgLTk4NSw4ICs5NzksOCBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBGVF9PdXRsaW5lX0Z1bmNzIHN0cnVjdC4gICAgICAgICAqLwotICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW50aW9uIHdpbGwgbmVlZCB0byAgKi8KLSAgLyogICAgYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICAgICovCisgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhbiBpbml0IGZ1bmN0aW9uIHdpbGwgbmVlZCAgICAqLworICAvKiAgICB0byBiZSBjYWxsZWQgd2l0aCBhIHByZS1hbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgKi8KICAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBub3QgZGVmaW5lZCB0aGUgc3RydWN0IHdpbGwgYmUgICAgICAgICovCiAgIC8qICAgIGFsbG9jYXRlZCBpbiB0aGUgZ2xvYmFsIHNjb3BlIChvciB0aGUgc2NvcGUgd2hlcmUgdGhlIG1hY3JvICAgICAgICAqLwogICAvKiAgICBpcyB1c2VkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEwNDQsOCArMTAzOCw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgVXNlZCB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlIG9mIEZUX1Jhc3Rlcl9GdW5jcyBzdHJ1Y3QuICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhbiBpbml0IGZ1bnRpb24gd2lsbCBuZWVkIHRvICAqLwotICAvKiAgICBiZSBjYWxsZWQgd2l0aCBhIHByZS1hbGxvY2F0ZWQgc3RydWN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGFuIGluaXQgZnVuY3Rpb24gd2lsbCBuZWVkICAgICovCisgIC8qICAgIHRvIGJlIGNhbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdHJ1Y3R1cmUgdG8gYmUgZmlsbGVkLiAgICAgICAgICAqLwogICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIG5vdCBkZWZpbmVkIHRoZSBzdHJ1Y3Qgd2lsbCBiZSAgICAgICAgKi8KICAgLyogICAgYWxsb2NhdGVkIGluIHRoZSBnbG9iYWwgc2NvcGUgKG9yIHRoZSBzY29wZSB3aGVyZSB0aGUgbWFjcm8gICAgICAgICovCiAgIC8qICAgIGlzIHVzZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTEwNCw4ICsxMDk4LDggQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfR2x5cGhfQ2xhc3Mgc3RydWN0LiAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGFuIGluaXQgZnVudGlvbiB3aWxsIG5lZWQgdG8gICovCi0gIC8qICAgIGJlIGNhbGxlZCB3aXRoIGEgcHJlLWFsbG9jYXRlZCBzdGN0dXJlIHRvIGJlIGZpbGxlZC4gICAgICAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYW4gaW5pdCBmdW5jdGlvbiB3aWxsIG5lZWQgICAgKi8KKyAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwcmUtYWxsb2NhdGVkIHN0cnVjdHVyZSB0byBiZSBmaWxsZWQuICAgICAgICAgICovCiAgIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgbm90IGRlZmluZWQgdGhlIHN0cnVjdCB3aWxsIGJlICAgICAgICAqLwogICAvKiAgICBhbGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBzY29wZSAob3IgdGhlIHNjb3BlIHdoZXJlIHRoZSBtYWNybyAgICAgICAgKi8KICAgLyogICAgaXMgdXNlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTc4LDExICsxMTcyLDExIEBACiAgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICBVc2VkIHRvIGluaXRpYWxpemUgYW4gaW5zdGFuY2Ugb2YgRlRfUmVuZGVyZXJfQ2xhc3Mgc3RydWN0LiAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIFdoZW4gRlRfQ09ORklHX09QVElPTl9QSUMgaXMgZGVmaW5lZCBhIGBjcmVhdGUnIGZ1bnRpb24gd2lsbCBuZWVkICAqLwotICAvKiAgICB0byBiZSBjYWxsZWQgd2l0aCBhIHBvaW50ZXIgd2hlcmUgdGhlIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgaXMgICAgICAgKi8KKyAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVuY3Rpb24gd2lsbCAgICAgICovCisgIC8qICAgIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAqLwogICAvKiAgICByZXR1cm5lZC4gIEFuZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQgYSBgZGVzdHJveScgZnVuY3Rpb24gICAgKi8KICAgLyogICAgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIHJlbGVhc2UgdGhhdCBhbGxvY2F0aW9uLiAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgIGBmY2luaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zICAgICAqLworICAvKiAgICBgZnRpbml0LmMnIChmdF9jcmVhdGVfZGVmYXVsdF9tb2R1bGVfY2xhc3NlcykgYWxyZWFkeSBjb250YWlucyAgICAgKi8KICAgLyogICAgYSBtZWNoYW5pc20gdG8gY2FsbCB0aGVzZSBmdW5jdGlvbnMgZm9yIHRoZSBkZWZhdWx0IG1vZHVsZXMgICAgICAgICovCiAgIC8qICAgIGRlc2NyaWJlZCBpbiBgZnRtb2R1bGUuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzODIsMTEgKzEzNzYsMTEgQEAKICAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIFVzZWQgdG8gaW5pdGlhbGl6ZSBhbiBpbnN0YW5jZSBvZiBhbiBGVF9Nb2R1bGVfQ2xhc3Mgc3RydWN0LiAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgV2hlbiBGVF9DT05GSUdfT1BUSU9OX1BJQyBpcyBkZWZpbmVkIGEgYGNyZWF0ZScgZnVudGlvbiBuZWVkcyB0byAgICovCi0gIC8qICAgIGJlIGNhbGxlZCB3aXRoIGEgcG9pbnRlciB3aGVyZSB0aGUgYWxsb2NhdGVkIHN0cnVjdHVyZSBpcyAgICAgICAgICAqLworICAvKiAgICBXaGVuIEZUX0NPTkZJR19PUFRJT05fUElDIGlzIGRlZmluZWQgYSBgY3JlYXRlJyBmdW5jdGlvbiBuZWVkcyAgICAgKi8KKyAgLyogICAgdG8gYmUgY2FsbGVkIHdpdGggYSBwb2ludGVyIHdoZXJlIHRoZSBhbGxvY2F0ZWQgc3RydWN0dXJlIGlzICAgICAgICovCiAgIC8qICAgIHJldHVybmVkLiAgQW5kIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBhIGBkZXN0cm95JyBmdW5jdGlvbiAgICAqLwogICAvKiAgICBuZWVkcyB0byBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGF0IGFsbG9jYXRpb24uICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgYGZjaW5pdC5jJyAoZnRfY3JlYXRlX2RlZmF1bHRfbW9kdWxlX2NsYXNzZXMpIGFscmVhZHkgY29udGFpbnMgICAgICovCisgIC8qICAgIGBmdGluaXQuYycgKGZ0X2NyZWF0ZV9kZWZhdWx0X21vZHVsZV9jbGFzc2VzKSBhbHJlYWR5IGNvbnRhaW5zICAgICAqLwogICAvKiAgICBhIG1lY2hhbmlzbSB0byBjYWxsIHRoZXNlIGZ1bmN0aW9ucyBmb3IgdGhlIGRlZmF1bHQgbW9kdWxlcyAgICAgICAgKi8KICAgLyogICAgZGVzY3JpYmVkIGluIGBmdG1vZHVsZS5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTU2OCw3ICsxNTYyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVE9CSlNfSF9fICovCisjZW5kaWYgLyogRlRPQkpTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0cGljLmgKaW5kZXggN2Y5MTU0Zi4uNmQ4MDBhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHBpYy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyAoZGVjbGFyYXRpb24pLiAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsOCArMjMsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRQSUNfSF9fCi0jZGVmaW5lIF9fRlRQSUNfSF9fCisjaWZuZGVmIEZUUElDX0hfCisjZGVmaW5lIEZUUElDX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC02NSw3ICs2NSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRQSUNfSF9fICovCisjZW5kaWYgLyogRlRQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRyZm9yay5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKaW5kZXggZGE2MWNhNy4uYjkyMzQwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHJmb3JrLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MgYWNjZXNzb3IgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIxLDggKzIxLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUUkZPUktfSF9fCi0jZGVmaW5lIF9fRlRSRk9SS19IX18KKyNpZm5kZWYgRlRSRk9SS19IXworI2RlZmluZSBGVFJGT1JLX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMjcsNyArMjI3LDcgQEAKICAgLyogICAgc29ydF9ieV9yZXNfaWQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgQSBCb29sZWFuIHRvIHNvcnQgdGhlIGZyYWdtZW50ZWQgcmVzb3VyY2UgYnkgdGhlaXIgaWRzLiAgICAgICAgICAqLwogICAvKiAgICAgIFRoZSBmcmFnbWVudGVkIHJlc291cmNlcyBmb3IgYFBPU1QnIHJlc291cmNlIHNob3VsZCBiZSBzb3J0ZWQgICAgKi8KLSAgLyogICAgICB0byByZXN0b3JlIFR5cGUxIGZvbnQgcHJvcGVybHkuICBGb3IgYHNuZnQnIHJlc291cmNlcywgc29ydGluZyAgICovCisgIC8qICAgICAgdG8gcmVzdG9yZSBUeXBlMSBmb250IHByb3Blcmx5LiAgRm9yIGBzZm50JyByZXNvdXJjZXMsIHNvcnRpbmcgICAqLwogICAvKiAgICAgIG1heSBpbmR1Y2UgYSBkaWZmZXJlbnQgb3JkZXIgb2YgdGhlIGZhY2VzIGluIGNvbXBhcmlzb24gdG8gdGhhdCAgKi8KICAgLyogICAgICBieSBRdWlja0RyYXcgQVBJLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjYwLDcgKzI2MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRSRk9SS19IX18gKi8KKyNlbmRpZiAvKiBGVFJGT1JLX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHNlcnYuaAppbmRleCAxMWEwYzdmLi45MTg5NzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c2Vydi5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzZXJ2LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI4LDggKzI4LDggQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUU0VSVl9IX18KLSNkZWZpbmUgX19GVFNFUlZfSF9fCisjaWZuZGVmIEZUU0VSVl9IXworI2RlZmluZSBGVFNFUlZfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTc1Nyw3ICs3NTcsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUU0VSVl9IX18gKi8KKyNlbmRpZiAvKiBGVFNFUlZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRzdHJlYW0uaAppbmRleCAzODRlNWRmLi42ZDA0ODc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0c3RyZWFtLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9mdHN0cmVhbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFN0cmVhbSBoYW5kbGluZyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFNUUkVBTV9IX18KLSNkZWZpbmUgX19GVFNUUkVBTV9IX18KKyNpZm5kZWYgRlRTVFJFQU1fSF8KKyNkZWZpbmUgRlRTVFJFQU1fSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTUzMCw3ICs1MzAsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0ZUU1RSRUFNX0hfXyAqLworI2VuZGlmIC8qIEZUU1RSRUFNX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dHJhY2UuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCmluZGV4IDJiMGJmOWQuLmVmYjMzNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR0cmFjZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRyYWNpbmcgaGFuZGxpbmcgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0dmFsaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCmluZGV4IDljZGE2ZWUuLmFhYzkyYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnR2YWxpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHZhbGlkYXRpb24gc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFZBTElEX0hfXwotI2RlZmluZSBfX0ZUVkFMSURfSF9fCisjaWZuZGVmIEZUVkFMSURfSF8KKyNkZWZpbmUgRlRWQUxJRF9IXwogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0NPTkZJR19TVEFOREFSRF9MSUJSQVJZX0ggICAvKiBmb3IgZnRfc2V0am1wIGFuZCBmdF9sb25nam1wICovCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFZBTElEX0hfXyAqLworI2VuZGlmIC8qIEZUVkFMSURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvaW50ZXJuYWwuaAppbmRleCA4MDljZTU5Li44YzNjMTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2ludGVybmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9pbnRlcm5hbC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEludGVybmFsIGhlYWRlciBmaWxlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIEZUX0lOVEVSTkFMX01FTU9SWV9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaD4KICNkZWZpbmUgRlRfSU5URVJOQUxfREVCVUdfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdGRlYnVnLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX0NBTENfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRjYWxjLmg+CisjZGVmaW5lIEZUX0lOVEVSTkFMX0hBU0hfSCAgICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRoYXNoLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX0RSSVZFUl9IICAgICAgICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRkcml2ZXIuaD4KICNkZWZpbmUgRlRfSU5URVJOQUxfVFJBQ0VfSCAgICAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9mdHRyYWNlLmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX0dMWVBIX0xPQURFUl9IICAgICAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvZnRnbG9hZHIuaD4KQEAgLTQzLDcgKzQ0LDYgQEAKIAogI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0FVWF9IICAgICAgPGZyZWV0eXBlL2ludGVybmFsL3BzYXV4Lmg+CiAjZGVmaW5lIEZUX0lOVEVSTkFMX1BPU1RTQ1JJUFRfSElOVFNfSCAgICA8ZnJlZXR5cGUvaW50ZXJuYWwvcHNoaW50cy5oPgotI2RlZmluZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0dMT0JBTFNfSCAgPGZyZWV0eXBlL2ludGVybmFsL3BzZ2xvYmFsLmg+CiAKICNkZWZpbmUgRlRfSU5URVJOQUxfQVVUT0hJTlRfSCAgICAgICAgICAgIDxmcmVldHlwZS9pbnRlcm5hbC9hdXRvaGludC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzYXV4LmgKaW5kZXggMWM1Zjc4NC4uMTVkZWRmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2F1eC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvcHNhdXguaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1eGlsaWFyeSBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIFBvc3RTY3JpcHQgZm9udHMgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsMTMgKzE3LDE0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0FVWF9IX18KLSNkZWZpbmUgX19QU0FVWF9IX18KKyNpZm5kZWYgUFNBVVhfSF8KKyNkZWZpbmUgUFNBVVhfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfVFlQRTFfVFlQRVNfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAogCiAKQEAgLTY3OCw2ICs2NzksNyBAQAogICAgIEZUX0ludCAgICAgICAgICAgICAgIG51bV9zdWJyczsKICAgICBGVF9CeXRlKiogICAgICAgICAgICBzdWJyczsKICAgICBGVF9VSW50KiAgICAgICAgICAgICBzdWJyc19sZW47ICAgIC8qIGFycmF5IG9mIHN1YnJzIGxlbmd0aCAob3B0aW9uYWwpICovCisgICAgRlRfSGFzaCAgICAgICAgICAgICAgc3VicnNfaGFzaDsgICAvKiB1c2VkIGlmIGBudW1fc3VicnMnIHdhcyBtYXNzYWdlZCAqLwogCiAgICAgRlRfTWF0cml4ICAgICAgICAgICAgZm9udF9tYXRyaXg7CiAgICAgRlRfVmVjdG9yICAgICAgICAgICAgZm9udF9vZmZzZXQ7CkBAIC04NzEsNyArODczLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19QU0FVWF9IX18gKi8KKyNlbmRpZiAvKiBQU0FVWF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9wc2hpbnRzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaAppbmRleCAxMmFhYWJhLi5lNjBkYzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3BzaGludHMuaApAQCAtNiw3ICs2LDcgQEAKIC8qICAgIHJlY29yZGVycyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gIFRoZXNlIGFyZSB1c2VkIHRvIHN1cHBvcnQgbmF0aXZlICAgICovCiAvKiAgICBUMS9UMiBoaW50cyBpbiB0aGUgYHR5cGUxJywgYGNpZCcsIGFuZCBgY2ZmJyBmb250IGRyaXZlcnMuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsOCArMTgsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUFNISU5UU19IX18KLSNkZWZpbmUgX19QU0hJTlRTX0hfXworI2lmbmRlZiBQU0hJTlRTX0hfCisjZGVmaW5lIFBTSElOVFNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTcxNiw3ICs3MTYsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1BTSElOVFNfSF9fICovCisjZW5kaWYgLyogUFNISU5UU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmJkZi5oCmluZGV4IDg2NWI1MzYuLmMyNDQ3NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZiZGYuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2YmRmLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIEJERiBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWQkRGX0hfXwotI2RlZmluZSBfX1NWQkRGX0hfXworI2lmbmRlZiBTVkJERl9IXworI2RlZmluZSBTVkJERl9IXwogCiAjaW5jbHVkZSBGVF9CREZfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICkBAIC03Niw3ICs3Niw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZCREZfSF9fICovCisjZW5kaWYgLyogU1ZCREZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZjaWQuaAppbmRleCA0YTUzNWE2Li5kYmJlNjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Y2lkLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmNpZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBDSUQgZm9udCBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGVyZWsgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVkNJRF9IX18KLSNkZWZpbmUgX19TVkNJRF9IX18KKyNpZm5kZWYgU1ZDSURfSF8KKyNkZWZpbmUgU1ZDSURfSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAKQEAgLTg0LDcgKzg0LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVkNJRF9IX18gKi8KKyNlbmRpZiAvKiBTVkNJRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmZudGZtdC5oCmluZGV4IGY4YjM2MTcuLmJkMjk1YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZmbnRmbXQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Zm50Zm10LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGZvbnQgZm9ybWF0IHNlcnZpY2UgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWRk5URk1UX0hfXwotI2RlZmluZSBfX1NWRk5URk1UX0hfXworI2lmbmRlZiBTVkZOVEZNVF9IXworI2RlZmluZSBTVkZOVEZNVF9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKIApAQCAtNDksNyArNDksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWRk5URk1UX0hfXyAqLworI2VuZGlmIC8qIFNWRk5URk1UX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2Z2xkaWN0LmgKaW5kZXggZjc4YmNhNS4uZmZmMjliYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmdsZGljdC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZnbGRpY3QuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggZGljdGlvbmFyeSBzZXJ2aWNlcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZHTERJQ1RfSF9fCi0jZGVmaW5lIF9fU1ZHTERJQ1RfSF9fCisjaWZuZGVmIFNWR0xESUNUX0hfCisjZGVmaW5lIFNWR0xESUNUX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogCkBAIC04NSw0ICs4NSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZHTERJQ1RfSF9fICovCisjZW5kaWYgLyogU1ZHTERJQ1RfSF8gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZneHZhbC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKaW5kZXggNTljYzNiNy4uZmI4ZmZiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmd4dmFsLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIFRydWVUeXBlR1gvQUFUIHRhYmxlcyAoc3BlY2lmaWNhdGlvbikuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZCBIYXQgSy5LLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI1LDggKzI1LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWR1hWQUxfSF9fCi0jZGVmaW5lIF9fU1ZHWFZBTF9IX18KKyNpZm5kZWYgU1ZHWFZBTF9IXworI2RlZmluZSBTVkdYVkFMX0hfCiAKICNpbmNsdWRlIEZUX0dYX1ZBTElEQVRFX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1ZBTElEQVRFX0gKQEAgLTY2LDcgKzY2LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVkdYVkFMX0hfXyAqLworI2VuZGlmIC8qIFNWR1hWQUxfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2a2Vybi5oCmluZGV4IGJjMjZmMTUuLmE2MzZmMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZrZXJuLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdmtlcm4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgS2VybmluZyBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZLRVJOX0hfXwotI2RlZmluZSBfX1NWS0VSTl9IX18KKyNpZm5kZWYgU1ZLRVJOX0hfCisjZGVmaW5lIFNWS0VSTl9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICkBAIC00NSw3ICs0NSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZLRVJOX0hfXyAqLworI2VuZGlmIC8qIFNWS0VSTl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm1tLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaAppbmRleCBmMmNlY2ZiLi5iNzhhMTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2bW0uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgTXVsdGlwbGUgTWFzdGVycyBhbmQgR1ggdmFyIHNlcnZpY2VzIChzcGVjaWZpY2F0aW9uKS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZNTV9IX18KLSNkZWZpbmUgX19TVk1NX0hfXworI2lmbmRlZiBTVk1NX0hfCisjZGVmaW5lIFNWTU1fSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1NWTU1fSF9fICovCisjZW5kaWYgLyogU1ZNTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdm90dmFsLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAppbmRleCBhODJhNjQyLi5iYzkyOWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2b3R2YWwuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgT3BlblR5cGUgdmFsaWRhdGlvbiBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fU1ZPVFZBTF9IX18KLSNkZWZpbmUgX19TVk9UVkFMX0hfXworI2lmbmRlZiBTVk9UVkFMX0hfCisjZGVmaW5lIFNWT1RWQUxfSF8KIAogI2luY2x1ZGUgRlRfT1BFTlRZUEVfVkFMSURBVEVfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfVkFMSURBVEVfSApAQCAtNDksNyArNDksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1NWT1RWQUxfSF9fICovCisjZW5kaWYgLyogU1ZPVFZBTF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBmci5oCmluZGV4IGQ0ZWIxNjkuLmQwZjdjNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZwZnIuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cGZyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSW50ZXJuYWwgUEZSIHNlcnZpY2UgZnVuY3Rpb25zIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWUEZSX0hfXwotI2RlZmluZSBfX1NWUEZSX0hfXworI2lmbmRlZiBTVlBGUl9IXworI2RlZmluZSBTVlBGUl9IXwogCiAjaW5jbHVkZSBGVF9QRlJfSAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICkBAIC02MCw3ICs2MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZQRlJfSF9fICovCisjZW5kaWYgLyogU1ZQRlJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwb3N0bm0uaAppbmRleCBhODlmNzllLi5mMTI0MzgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cG9zdG5tLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBvc3RubS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IG5hbWUgc2VydmljZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlBPU1ROTV9IX18KLSNkZWZpbmUgX19TVlBPU1ROTV9IX18KKyNpZm5kZWYgU1ZQT1NUTk1fSF8KKyNkZWZpbmUgU1ZQT1NUTk1fSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAKQEAgLTc1LDcgKzc1LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlBPU1ROTV9IX18gKi8KKyNlbmRpZiAvKiBTVlBPU1ROTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwcm9wLmgKaW5kZXggYzlmMDdjZS4uNzVlNjI0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnByb3AuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHJvcC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwcm9wZXJ0eSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlBST1BfSF9fCi0jZGVmaW5lIF9fU1ZQUk9QX0hfXworI2lmbmRlZiBTVlBST1BfSF8KKyNkZWZpbmUgU1ZQUk9QX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0yOSw3ICsyOSw4IEBACiAgIHR5cGVkZWYgRlRfRXJyb3IKICAgKCpGVF9Qcm9wZXJ0aWVzX1NldEZ1bmMpKCBGVF9Nb2R1bGUgICAgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgdmFsdWVfaXNfc3RyaW5nICk7CiAKICAgdHlwZWRlZiBGVF9FcnJvcgogICAoKkZUX1Byb3BlcnRpZXNfR2V0RnVuYykoIEZUX01vZHVsZSAgICBtb2R1bGUsCkBAIC03NSw3ICs3Niw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZQUk9QX0hfXyAqLworI2VuZGlmIC8qIFNWUFJPUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzY21hcC5oCmluZGV4IDY2ZGE2ZTEuLjlhY2MyMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2NtYXAuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNjbWFwLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFBvc3RTY3JpcHQgY2hhcm1hcCBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWUFNDTUFQX0hfXwotI2RlZmluZSBfX1NWUFNDTUFQX0hfXworI2lmbmRlZiBTVlBTQ01BUF9IXworI2RlZmluZSBTVlBTQ01BUF9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKIApAQCAtMTcxLDcgKzE3MSw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZQU0NNQVBfSF9fICovCisjZW5kaWYgLyogU1ZQU0NNQVBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Zwc2luZm8uaAppbmRleCA3NTJhMjY2Li5mMmM4MDYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2cHNpbmZvLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnBzaW5mby5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBQb3N0U2NyaXB0IGluZm8gc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlBTSU5GT19IX18KLSNkZWZpbmUgX19TVlBTSU5GT19IX18KKyNpZm5kZWYgU1ZQU0lORk9fSF8KKyNkZWZpbmUgU1ZQU0lORk9fSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9UWVBFMV9UWVBFU19ICkBAIC0xMDUsNyArMTA1LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlBTSU5GT19IX18gKi8KKyNlbmRpZiAvKiBTVlBTSU5GT19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3ZzZm50LmgKaW5kZXggMjUyYWUxYy4uMGYzOGNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnNmbnQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2c2ZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBTRk5UIHRhYmxlIGxvYWRpbmcgc2VydmljZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVlNGTlRfSF9fCi0jZGVmaW5lIF9fU1ZTRk5UX0hfXworI2lmbmRlZiBTVlNGTlRfSF8KKyNkZWZpbmUgU1ZTRk5UX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFCTEVTX0gKQEAgLTk3LDcgKzk3LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlNGTlRfSF9fICovCisjZW5kaWYgLyogU1ZTRk5UX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRjbWFwLmgKaW5kZXggY2Q5NWI5YS4uNzcyYzcyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Y21hcC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgVHJ1ZVR5cGUvc2ZudCBjbWFwIGV4dHJhIGluZm9ybWF0aW9uIHNlcnZpY2UuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE1hc2F0YWtlIFlBTUFUTywgUmVkaGF0IEsuSy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTksOCArMTksOCBAQAogLyogRGV2ZWxvcG1lbnQgb2YgdGhpcyBzZXJ2aWNlIGlzIHN1cHBvcnQgb2YKICAgIEluZm9ybWF0aW9uLXRlY2hub2xvZ3kgUHJvbW90aW9uIEFnZW5jeSwgSmFwYW4uICovCiAKLSNpZm5kZWYgX19TVlRUQ01BUF9IX18KLSNkZWZpbmUgX19TVlRUQ01BUF9IX18KKyNpZm5kZWYgU1ZUVENNQVBfSF8KKyNkZWZpbmUgU1ZUVENNQVBfSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9UUlVFVFlQRV9UQUJMRVNfSApAQCAtMTAwLDcgKzEwMCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZUVENNQVBfSF9fICovCisjZW5kaWYgLyogU1ZUVENNQVBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGVuZy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKaW5kZXggMjcyZWU4Yy4uYzU1MDYxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0ZW5nLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIFRydWVUeXBlIGVuZ2luZSBxdWVyeSBzZXJ2aWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NWVFRFTkdfSF9fCi0jZGVmaW5lIF9fU1ZUVEVOR19IX18KKyNpZm5kZWYgU1ZUVEVOR19IXworI2RlZmluZSBTVlRURU5HX0hfCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAogI2luY2x1ZGUgRlRfTU9EVUxFX0gKQEAgLTQ3LDcgKzQ3LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19TVlRURU5HX0hfXyAqLworI2VuZGlmIC8qIFNWVFRFTkdfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z0dGdseWYuaAppbmRleCBmNWNiNzZhLi5jMzNlZGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2dHRnbHlmLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdnR0Z2x5Zi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBUcnVlVHlwZSBnbHlwaCBzZXJ2aWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNSw4ICsxNSw4IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBfX1NWVFRHTFlGX0hfXwotI2RlZmluZSBfX1NWVFRHTFlGX0hfXworI2lmbmRlZiBTVlRUR0xZRl9IXworI2RlZmluZSBTVlRUR0xZRl9IXwogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9TRVJWSUNFX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICkBAIC02Myw3ICs2Myw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU1ZUVEdMWUZfSF9fICovCisjZW5kaWYgLyogU1ZUVEdMWUZfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaCBiL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2VydmljZXMvc3Z3aW5mbnQuaAppbmRleCAwMDM2OTI5Li5jMmY2ZDRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL3NlcnZpY2VzL3N2d2luZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZXJ2aWNlcy9zdndpbmZudC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBXaW5kb3dzIEZOVC9GT05UIHNlcnZpY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TVldJTkZOVF9IX18KLSNkZWZpbmUgX19TVldJTkZOVF9IX18KKyNpZm5kZWYgU1ZXSU5GTlRfSF8KKyNkZWZpbmUgU1ZXSU5GTlRfSF8KIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfU0VSVklDRV9ICiAjaW5jbHVkZSBGVF9XSU5GT05UU19ICkBAIC00NCw3ICs0NCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fU1ZXSU5GTlRfSF9fICovCisjZW5kaWYgLyogU1ZXSU5GTlRfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvc2ZudC5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKaW5kZXggMzBmNTNiZi4uZTEzOTMxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC9zZm50LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBgc2ZudCcgZHJpdmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1NGTlRfSF9fCi0jZGVmaW5lIF9fU0ZOVF9IX18KKyNpZm5kZWYgU0ZOVF9IXworI2RlZmluZSBTRk5UX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03NDIsNyArNzQyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19TRk5UX0hfXyAqLworI2VuZGlmIC8qIFNGTlRfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdDF0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKaW5kZXggMDI5YWNjNC4uNDk0YzAxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90MXR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBUeXBlMS9UeXBlMiB0eXBlIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24gICAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDE0ICsxNywxNSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVDFUWVBFU19IX18KLSNkZWZpbmUgX19UMVRZUEVTX0hfXworI2lmbmRlZiBUMVRZUEVTX0hfCisjZGVmaW5lIFQxVFlQRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KICNpbmNsdWRlIEZUX1RZUEUxX1RBQkxFU19ICiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QT1NUU0NSSVBUX0hJTlRTX0gKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1NFUlZJQ0VfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfSEFTSF9ICiAjaW5jbHVkZSBGVF9TRVJWSUNFX1BPU1RTQ1JJUFRfQ01BUFNfSAogCiAKQEAgLTEwNyw2ICsxMDgsNyBAQAogICAgIEZUX0ludCAgICAgICAgICAgbnVtX3N1YnJzOwogICAgIEZUX0J5dGUqKiAgICAgICAgc3VicnM7CiAgICAgRlRfVUludCogICAgICAgICBzdWJyc19sZW47CisgICAgRlRfSGFzaCAgICAgICAgICBzdWJyc19oYXNoOwogCiAgICAgRlRfSW50ICAgICAgICAgICBudW1fZ2x5cGhzOwogICAgIEZUX1N0cmluZyoqICAgICAgZ2x5cGhfbmFtZXM7ICAgICAgIC8qIGFycmF5IG9mIGdseXBoIG5hbWVzICAgICAgICovCkBAIC0yNDksNyArMjUxLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UMVRZUEVTX0hfXyAqLworI2VuZGlmIC8qIFQxVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvdHR0eXBlcy5oIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKaW5kZXggMDAwYzVhOC4uMTc2NzEzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS9pbnRlcm5hbC90dHR5cGVzLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBCYXNpYyBTRk5UL1RydWVUeXBlIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAqLwogLyogICAgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDggKzE3LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUVFlQRVNfSF9fCi0jZGVmaW5lIF9fVFRUWVBFU19IX18KKyNpZm5kZWYgVFRUWVBFU19IXworI2RlZmluZSBUVFRZUEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xODUsNyArMTg1LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIENvbXBMZW5ndGggOjogQ29tcHJlc3NlZCB0YWJsZSBsZW5ndGggKGluIGJ5dGVzKS4gICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgT3JpZ0xlbmd0aCA6OiBVbm9tcHJlc3NlZCB0YWJsZSBsZW5ndGggKGluIGJ5dGVzKS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgIE9yaWdMZW5ndGggOjogVW5jb21wcmVzc2VkIHRhYmxlIGxlbmd0aCAoaW4gYnl0ZXMpLiAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgQ2hlY2tTdW0gICA6OiBUaGUgdGFibGUgY2hlY2tzdW0uICBUaGlzIHZhbHVlIGNhbiBiZSBpZ25vcmVkLiAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTIzMyw5ICsxMjMzLDYgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXJzIGZpZWxkIGlzIGFsc28gdXNlZCB0byBob29rICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWJ1Z2dlciBpbiBgdHRkZWJ1ZycuICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgdW5wYXRlbnRlZF9oaW50aW5nICAgOjogSWYgdHJ1ZSwgdXNlIG9ubHkgdW5wYXRlbnRlZCBtZXRob2RzIGluICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBieXRlY29kZSBpbnRlcnByZXRlci4gICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgZG9ibGVuZCAgICAgICAgICAgICAgOjogQSBib29sZWFuIHdoaWNoIGlzIHNldCBpZiB0aGUgZm9udCBzaG91bGQgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGJsZW5kZWQgKHRoaXMgaXMgZm9yIEdYIHZhcikuICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzMzQsMTAgKzEzMzEsNiBAQAogICAgIC8qIHVzZWQgdG8gaG9vayB0aGUgZGVidWdnZXIgZm9yIHRoZSBgdHRkZWJ1ZycgdXRpbGl0eS4gICAgICAgICovCiAgICAgVFRfSW50ZXJwcmV0ZXIgICAgICAgIGludGVycHJldGVyOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICAvKiBVc2UgdW5wYXRlbnRlZCBoaW50aW5nIG9ubHkuICovCi0gICAgRlRfQm9vbCAgICAgICAgICAgICAgIHVucGF0ZW50ZWRfaGludGluZzsKLSNlbmRpZgogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNzgsNiArMTM3MSw3IEBACiAgICAgRlRfVUxvbmcgICAgICAgICAgICAgIHNiaXRfdGFibGVfc2l6ZTsKICAgICBUVF9TYml0VGFibGVUeXBlICAgICAgc2JpdF90YWJsZV90eXBlOwogICAgIEZUX1VJbnQgICAgICAgICAgICAgICBzYml0X251bV9zdHJpa2VzOworICAgIEZUX1VJbnQqICAgICAgICAgICAgICBzYml0X3N0cmlrZV9tYXA7CiAKICAgICBGVF9CeXRlKiAgICAgICAgICAgICAga2Vybl90YWJsZTsKICAgICBGVF9VTG9uZyAgICAgICAgICAgICAga2Vybl90YWJsZV9zaXplOwpAQCAtMTM5MywxMiArMTM4NywxOCBAQAogICAgIEZUX1VMb25nICAgICAgICAgICAgICBob3J6X21ldHJpY3Nfb2Zmc2V0OwogICAgIEZUX1VMb25nICAgICAgICAgICAgICB2ZXJ0X21ldHJpY3Nfb2Zmc2V0OwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAvKiBzaW5jZSAyLjQuMTIgKi8KICAgICBGVF9VTG9uZyAgICAgICAgICAgICAgc3BoX2ZvdW5kX2Z1bmNfZmxhZ3M7IC8qIHNwZWNpYWwgZnVuY3Rpb25zIGZvdW5kICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgdGhpcyBmYWNlICAgICAgICAgICAqLwogICAgIEZUX0Jvb2wgICAgICAgICAgICAgICBzcGhfY29tcGF0aWJpbGl0eV9tb2RlOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKKyAgICAvKiBzaW5jZSAyLjcgKi8KKyAgICBGVF9VTG9uZyAgICAgICAgICAgICAgZWJkdF9zdGFydDsgIC8qIGVpdGhlciBgQ0JEVCcsIGBFQkRUJywgb3IgYGJkYXQnICovCisgICAgRlRfVUxvbmcgICAgICAgICAgICAgIGViZHRfc2l6ZTsKKyNlbmRpZgogCiAgIH0gVFRfRmFjZVJlYzsKIApAQCAtMTUyMyw3ICsxNTIzLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVFRZUEVTX0hfXyAqLworI2VuZGlmIC8qIFRUVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaCBiL2luY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaAppbmRleCBhNmVhNDE1Li5lMjcyMzI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL3QxdGFibGVzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90MXRhYmxlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgVHlwZSAxL1R5cGUgMiB0YWJsZXMgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UMVRBQkxFU19IX18KLSNkZWZpbmUgX19UMVRBQkxFU19IX18KKyNpZm5kZWYgVDFUQUJMRVNfSF8KKyNkZWZpbmUgVDFUQUJMRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTc1NSw3ICs3NTUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1QxVEFCTEVTX0hfXyAqLworI2VuZGlmIC8qIFQxVEFCTEVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0bmFtZWlkLmgKaW5kZXggYzk1ODVmMi4uY2U3MDdmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS90dG5hbWVpZC5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvdHRuYW1laWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBuYW1lIElEIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFROQU1FSURfSF9fCi0jZGVmaW5lIF9fVFROQU1FSURfSF9fCisjaWZuZGVmIFRUTkFNRUlEX0hfCisjZGVmaW5lIFRUTkFNRUlEX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xMjMxLDcgKzEyMzEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUTkFNRUlEX0hfXyAqLworI2VuZGlmIC8qIFRUTkFNRUlEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgKaW5kZXggMTU2OGY0MC4uMWMwNzVkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWJsZXMuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEJhc2ljIFNGTlQvVHJ1ZVR5cGUgdGFibGVzIGRlZmluaXRpb25zIGFuZCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRUQUJMRVNfSF9fCi0jZGVmaW5lIF9fVFRUQUJMRVNfSF9fCisjaWZuZGVmIFRUVEFCTEVTX0hfCisjZGVmaW5lIFRUVEFCTEVTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01ODcsNyArNTg3LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZUX1NGTlRfSEhFQSA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfSG9yaUhlYWRlciBzdHJ1Y3R1cmUuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfU0ZOVF9WSEVBIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9WZXJ0SGVhZGVyIHN0cnV0dXJlLiAgICAgICovCisgIC8qICAgIEZUX1NGTlRfVkhFQSA6OiBUbyBhY2Nlc3MgdGhlIGZvbnQncyBAVFRfVmVydEhlYWRlciBzdHJ1Y3R1cmUuICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgRlRfU0ZOVF9QT1NUIDo6IFRvIGFjY2VzcyB0aGUgZm9udCdzIEBUVF9Qb3N0c2NyaXB0IHN0cnVjdHVyZS4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtODIzLDcgKzgyMyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRUQUJMRVNfSF9fICovCisjZW5kaWYgLyogVFRUQUJMRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFncy5oCmluZGV4IDM4MzZjN2IuLmYzYzlhYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnJlZXR5cGUvdHR0YWdzLmgKKysrIGIvaW5jbHVkZS9mcmVldHlwZS90dHRhZ3MuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUYWdzIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgdGFibGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRBR1NfSF9fCi0jZGVmaW5lIF9fVFRBR1NfSF9fCisjaWZuZGVmIFRUQUdTX0hfCisjZGVmaW5lIFRUQUdTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0xMDUsNyArMTA1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVEFHU19IX18gKi8KKyNlbmRpZiAvKiBUVEFHU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS90dHVucGF0LmggYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaAppbmRleCA4ZWE1NTY4Li5jYTQ2NzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaAorKysgYi9pbmNsdWRlL2ZyZWV0eXBlL3R0dW5wYXQuaApAQCAtMiw5ICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0dW5wYXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBEZWZpbml0aW9ucyBmb3IgdGhlIHVucGF0ZW50ZWQgVHJ1ZVR5cGUgaGludGluZyBzeXN0ZW0gICAgICAgICAgICAgICAqLworLyogICAgRGVmaW5pdGlvbnMgZm9yIHRoZSB1bnBhdGVudGVkIFRydWVUeXBlIGhpbnRpbmcgc3lzdGVtLiAgICAgICAgICAgICAgKi8KKy8qICAgIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBXcml0dGVuIGJ5IEdyYWhhbSBBc2hlciA8Z3JhaGFtLmFzaGVyQGJ0aW50ZXJuZXQuY29tPiAgICAgICAgICAgICAgICAgICovCkBAIC0xOCw4ICsxOSw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFVOUEFUX0hfXwotI2RlZmluZSBfX1RUVU5QQVRfSF9fCisjaWZuZGVmIFRUVU5QQVRfSF8KKyNkZWZpbmUgVFRVTlBBVF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDEsOSArNDIsMTEgQEAKICAgKiAgIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcKICAgKgogICAqIEBkZXNjcmlwdGlvbjoKLSAgKiAgIEEgY29uc3RhbnQgdXNlZCBhcyB0aGUgdGFnIG9mIGFuIEBGVF9QYXJhbWV0ZXIgc3RydWN0dXJlIHRvIGluZGljYXRlCi0gICogICB0aGF0IHVucGF0ZW50ZWQgbWV0aG9kcyBvbmx5IHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBUcnVlVHlwZSBieXRlY29kZQotICAqICAgaW50ZXJwcmV0ZXIgZm9yIGEgdHlwZWZhY2Ugb3BlbmVkIGJ5IEBGVF9PcGVuX0ZhY2UuCisgICogICBEZXByZWNhdGVkLgorICAqCisgICogICBQcmV2aW91c2x5OiBBIGNvbnN0YW50IHVzZWQgYXMgdGhlIHRhZyBvZiBhbiBARlRfUGFyYW1ldGVyIHN0cnVjdHVyZSB0bworICAqICAgaW5kaWNhdGUgdGhhdCB1bnBhdGVudGVkIG1ldGhvZHMgb25seSBzaG91bGQgYmUgdXNlZCBieSB0aGUgVHJ1ZVR5cGUKKyAgKiAgIGJ5dGVjb2RlIGludGVycHJldGVyIGZvciBhIHR5cGVmYWNlIG9wZW5lZCBieSBARlRfT3Blbl9GYWNlLgogICAqCiAgICovCiAjZGVmaW5lIEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcgIEZUX01BS0VfVEFHKCAndScsICduJywgJ3AnLCAnYScgKQpAQCAtNTQsNyArNTcsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1RUVU5QQVRfSF9fICovCisjZW5kaWYgLyogVFRVTlBBVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mdDJidWlsZC5oIGIvaW5jbHVkZS9mdDJidWlsZC5oCmluZGV4IDQxOWI4MGEuLmM4OWNiNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZnQyYnVpbGQuaAorKysgYi9pbmNsdWRlL2Z0MmJ1aWxkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgMiBidWlsZCBhbmQgc2V0dXAgbWFjcm9zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMxLDEyICszMSwxMiBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlQyQlVJTERfSF9fCi0jZGVmaW5lIF9fRlQyQlVJTERfSF9fCisjaWZuZGVmIEZUMkJVSUxEX0hfCisjZGVmaW5lIEZUMkJVSUxEX0hfCiAKICNpbmNsdWRlIDxmcmVldHlwZS9jb25maWcvZnRoZWFkZXIuaD4KIAotI2VuZGlmIC8qIF9fRlQyQlVJTERfSF9fICovCisjZW5kaWYgLyogRlQyQlVJTERfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL21vZHVsZV9vcHRpb24uZGlmZiBiL21vZHVsZV9vcHRpb24uZGlmZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUwNzljZS4uMDAwMDAwMAotLS0gYS9tb2R1bGVfb3B0aW9uLmRpZmYKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1kaWZmIC0tZ2l0IGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaCBiL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmgKLWluZGV4IDc2ZDI3MWEuLmUxNDU3OTAgMTAwNjQ0Ci0tLS0gYS9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCi0rKysgYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG1vZHVsZS5oCi1AQCAtMTIsMTQgKzEyLDcgQEAKLSAKLSBGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIGF1dG9maXRfbW9kdWxlX2NsYXNzICkKLSBGVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHR0X2RyaXZlcl9jbGFzcyApCi0tRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0MV9kcml2ZXJfY2xhc3MgKQotIEZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgY2ZmX2RyaXZlcl9jbGFzcyApCi0tRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0MWNpZF9kcml2ZXJfY2xhc3MgKQotLUZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgcGZyX2RyaXZlcl9jbGFzcyApCi0tRlRfVVNFX01PRFVMRSggRlRfRHJpdmVyX0NsYXNzUmVjLCB0NDJfZHJpdmVyX2NsYXNzICkKLS1GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIHdpbmZudF9kcml2ZXJfY2xhc3MgKQotLUZUX1VTRV9NT0RVTEUoIEZUX0RyaXZlcl9DbGFzc1JlYywgcGNmX2RyaXZlcl9jbGFzcyApCi0tRlRfVVNFX01PRFVMRSggRlRfTW9kdWxlX0NsYXNzLCBwc2F1eF9tb2R1bGVfY2xhc3MgKQotIEZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgcHNuYW1lc19tb2R1bGVfY2xhc3MgKQotIEZUX1VTRV9NT0RVTEUoIEZUX01vZHVsZV9DbGFzcywgcHNoaW50ZXJfbW9kdWxlX2NsYXNzICkKLSBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcyApCi1AQCAtMjcsNiArMjAsNSBAQCBGVF9VU0VfTU9EVUxFKCBGVF9Nb2R1bGVfQ2xhc3MsIHNmbnRfbW9kdWxlX2NsYXNzICkKLSBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX3JlbmRlcmVyX2NsYXNzICkKLSBGVF9VU0VfTU9EVUxFKCBGVF9SZW5kZXJlcl9DbGFzcywgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyApCi0gRlRfVVNFX01PRFVMRSggRlRfUmVuZGVyZXJfQ2xhc3MsIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzICkKLS1GVF9VU0VfTU9EVUxFKCBGVF9Ecml2ZXJfQ2xhc3NSZWMsIGJkZl9kcml2ZXJfY2xhc3MgKQotIAotIC8qIEVPRiAqLwotZGlmZiAtLWdpdCBhL2luY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmggYi9pbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oCi1pbmRleCBiNDgxZjhmLi4zODE5NTg2IDEwMDY0NAotLS0tIGEvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAotKysrIGIvaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaAotQEAgLTIyNSw3ICsyMjUsNyBAQCBGVF9CRUdJTl9IRUFERVIKLSAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgLyogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyBgZmVhdHVyZScuICAgICAgICAgICAgICovCi0gICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS0vKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fVVNFX1BORyAqLwotKyNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9VU0VfUE5HCi0gCi0gCi0gICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUBAIC0zNzAsNyArMzcwLDcgQEAgRlRfQkVHSU5fSEVBREVSCi0gICAvKiBzdXBwbHkgZm9udCBkYXRhIGluY3JlbWVudGFsbHkgYXMgdGhlIGRvY3VtZW50IGlzIHBhcnNlZCwgc3VjaCAgICAgICAgKi8KLSAgIC8qIGFzIHRoZSBHaG9zdHNjcmlwdCBpbnRlcnByZXRlciBmb3IgdGhlIFBvc3RTY3JpcHQgbGFuZ3VhZ2UuICAgICAgICAgICAqLwotICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0tI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCi0rLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMICovCi0gCi0gCi0gICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLUBAIC04NDMsNyArODQzLDcgQEAgRlRfQkVHSU5fSEVBREVSCi0gICAvKiBgd2FycGluZycgcHJvcGVydHkgb2YgdGhlIGF1dG8taGludGVyIChzZWUgZmlsZSBgZnRhdXRvaC5oJyBmb3IgbW9yZSAgKi8KLSAgIC8qIGluZm9ybWF0aW9uOyBieSBkZWZhdWx0IGl0IGlzIHN3aXRjaGVkIG9mZikuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0tI2RlZmluZSBBRl9DT05GSUdfT1BUSU9OX1VTRV9XQVJQRVIKLSsvKiAjZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLwotIAotICAgLyogKi8KLSAKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMgYi9zcmMvYXV0b2ZpdC9hZmFuZ2xlcy5jCmluZGV4IDFiMWViMzEuLmI4NTZlNTcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYW5nbGVzLmMKKysrIGIvc3JjL2F1dG9maXQvYWZhbmdsZXMuYwpAQCAtNSw3ICs1LDcgQEAKIC8qICAgIFJvdXRpbmVzIHVzZWQgdG8gY29tcHV0ZSB2ZWN0b3IgYW5nbGVzIHdpdGggbGltaXRlZCBhY2N1cmFjeSAgICAgICAgICovCiAvKiAgICBhbmQgdmVyeSBoaWdoIHNwZWVkLiAgSXQgYWxzbyBjb250YWlucyBzb3J0aW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmMgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuYwppbmRleCAxMDRlZTE3Li43NzE5YzAyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuYworKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuYwpAQCAtNyw3ICs3LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzIsNiArMzIsMzIgQEAKICAgICAnXDAnLAogICAgICdceEQ5JywgJ1x4ODAnLCAgLyog2YAgKi8KICAgICAnXDAnLAorICAgICdceEQ0JywgJ1x4QjEnLCAnICcsICdceEQ1JywgJ1x4ODQnLCAnICcsICdceEQ1JywgJ1x4OTInLCAnICcsICdceEQ1JywgJ1x4OEQnLCAnICcsICdceEQ0JywgJ1x4QjInLCAnICcsICdceEQ0JywgJ1x4QjMnLCAnICcsICdceEQ0JywgJ1x4QjQnLCAnICcsICdceEQ1JywgJ1x4OTUnLCAgLyog1LEg1YQg1ZIg1Y0g1LIg1LMg1LQg1ZUgKi8KKyAgICAnXDAnLAorICAgICdceEQ1JywgJ1x4OTInLCAnICcsICdceEQ1JywgJ1x4ODgnLCAnICcsICdceEQ0JywgJ1x4QjQnLCAnICcsICdceEQ1JywgJ1x4ODMnLCAnICcsICdceEQ1JywgJ1x4ODcnLCAnICcsICdceEQ1JywgJ1x4OEQnLCAnICcsICdceEQ1JywgJ1x4OEYnLCAnICcsICdceEQ1JywgJ1x4OTUnLCAgLyog1ZIg1Ygg1LQg1YMg1Ycg1Y0g1Y8g1ZUgKi8KKyAgICAnXDAnLAorICAgICdceEQ1JywgJ1x4QTUnLCAnICcsICdceEQ1JywgJ1x4QTcnLCAnICcsICdceEQ1JywgJ1x4QUInLCAnICcsICdceEQ1JywgJ1x4QjQnLCAnICcsICdceEQ1JywgJ1x4QkUnLCAnICcsICdceEQ2JywgJ1x4ODYnLCAnICcsICdceEQ1JywgJ1x4QjMnLCAgLyog1aUg1acg1asg1bQg1b4g1oYg1bMgKi8KKyAgICAnXDAnLAorICAgICdceEQ1JywgJ1x4QTEnLCAnICcsICdceEQ1JywgJ1x4QjUnLCAnICcsICdceEQ2JywgJ1x4ODInLCAnICcsICdceEQ1JywgJ1x4QkQnLCAnICcsICdceEQ1JywgJ1x4QTMnLCAnICcsICdceEQ1JywgJ1x4QjcnLCAnICcsICdceEQ2JywgJ1x4ODAnLCAnICcsICdceEQ2JywgJ1x4ODUnLCAgLyog1aEg1bUg1oIg1b0g1aMg1bcg1oAg1oUgKi8KKyAgICAnXDAnLAorICAgICdceEQ1JywgJ1x4QjAnLCAnICcsICdceEQ1JywgJ1x4QjgnLCAnICcsICdceEQ1JywgJ1x4QjMnLCAnICcsICdceEQ1JywgJ1x4QTEnLCAnICcsICdceEQ1JywgJ1x4QTUnLCAnICcsICdceEQ1JywgJ1x4QUUnLCAnICcsICdceEQ1JywgJ1x4QkQnLCAnICcsICdceEQ2JywgJ1x4ODUnLCAgLyog1bAg1bgg1bMg1aEg1aUg1a4g1b0g1oUgKi8KKyAgICAnXDAnLAorICAgICdceEQ1JywgJ1x4QTInLCAnICcsICdceEQ1JywgJ1x4QTgnLCAnICcsICdceEQ1JywgJ1x4QUInLCAnICcsICdceEQ1JywgJ1x4QUMnLCAnICcsICdceEQ1JywgJ1x4QjInLCAnICcsICdceEQ1JywgJ1x4QkEnLCAnICcsICdceEQ2JywgJ1x4ODMnLCAnICcsICdceEQ2JywgJ1x4ODEnLCAgLyog1aIg1agg1asg1awg1bIg1bog1oMg1oEgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QTYnLCAnXHg4NScsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEExJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTQnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEFDJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QUQnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhCMicsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDk1JywgIC8qIOCmhSDgpqEg4KakIOCmqCDgpqwg4KatIOCmsiDgppUgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QTYnLCAnXHg4NycsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTAnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhCRicsICcgJywgJ1x4RTAnLCAnXHhBNycsICdceDgwJywgJyAnLCAnXHhFMCcsICdceEE3JywgJ1x4ODgnLCAnICcsICdceEUwJywgJ1x4QTcnLCAnXHg5NycsICAvKiDgpocg4KafIOCmoCDgpr8g4KeAIOCniCDgp5cgKi8KKyAgICAnXDAnLAorICAgICdceEUwJywgJ1x4QTYnLCAnXHg5MycsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDhGJywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QTEnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhBNCcsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEE2JywgJ1x4QUMnLCAnICcsICdceEUwJywgJ1x4QTYnLCAnXHhCMicsICcgJywgJ1x4RTAnLCAnXHhBNicsICdceDk1JywgIC8qIOCmkyDgpo8g4KahIOCmpCDgpqgg4KasIOCmsiDgppUgKi8KKyAgICAnXDAnLAorICAgICdceEUxJywgJ1x4OEYnLCAnXHg4NicsICcgJywgJ1x4RTEnLCAnXHg4RScsICdceEJCJywgJyAnLCAnXHhFMScsICdceDhFJywgJ1x4QUMnLCAnICcsICdceEUxJywgJ1x4OEYnLCAnXHg4MycsICcgJywgJ1x4RTEnLCAnXHg4RScsICdceEE0JywgJyAnLCAnXHhFMScsICdceDhGJywgJ1x4QTMnLCAnICcsICdceEUxJywgJ1x4OEUnLCAnXHhBNicsICcgJywgJ1x4RTEnLCAnXHg4RicsICdceDk1JywgIC8qIOGPhiDhjrsg4Y6sIOGPgyDhjqQg4Y+jIOGOpiDhj5UgKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QUUnLCAnXHg5MicsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEE0JywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4QjYnLCAnICcsICdceEVBJywgJ1x4QUQnLCAnXHhCNCcsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEJFJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4OTcnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHg5RCcsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEJGJywgIC8qIOqukiDqrqQg6q62IOqttCDqrb4g6q6XIOqunSDqrr8gKi8KKyAgICAnXDAnLAorICAgICdceEVBJywgJ1x4QUUnLCAnXHg5NicsICcgJywgJ1x4RUEnLCAnXHhBRCcsICdceEJDJywgJyAnLCAnXHhFQScsICdceEFFJywgJ1x4OTMnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhBMCcsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEIzJywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QjYnLCAnICcsICdceEVBJywgJ1x4QUUnLCAnXHhBNScsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceEJCJywgIC8qIOquliDqrbwg6q6TIOquoCDqrrMg6q22IOqupSDqrrsgKi8KKyAgICAnXDAnLAorICAgICdceEUxJywgJ1x4OEYnLCAnXHhCOCcsICcgJywgJ1x4RUEnLCAnXHhBRScsICdceDkwJywgJyAnLCAnXHhFQScsICdceEFEJywgJ1x4QjknLCAnICcsICdceEVBJywgJ1x4QUQnLCAnXHhCQicsICAvKiDhj7gg6q6QIOqtuSDqrbsgKi8KKyAgICAnXDAnLAogICAgICdceEQwJywgJ1x4OTEnLCAnICcsICdceEQwJywgJ1x4OTInLCAnICcsICdceEQwJywgJ1x4OTUnLCAnICcsICdceEQwJywgJ1x4OUYnLCAnICcsICdceEQwJywgJ1x4OTcnLCAnICcsICdceEQwJywgJ1x4OUUnLCAnICcsICdceEQwJywgJ1x4QTEnLCAnICcsICdceEQwJywgJ1x4QUQnLCAgLyog0JEg0JIg0JUg0J8g0Jcg0J4g0KEg0K0gKi8KICAgICAnXDAnLAogICAgICdceEQwJywgJ1x4OTEnLCAnICcsICdceEQwJywgJ1x4OTInLCAnICcsICdceEQwJywgJ1x4OTUnLCAnICcsICdceEQwJywgJ1x4QTgnLCAnICcsICdceEQwJywgJ1x4OTcnLCAnICcsICdceEQwJywgJ1x4OUUnLCAnICcsICdceEQwJywgJ1x4QTEnLCAnICcsICdceEQwJywgJ1x4QUQnLCAgLyog0JEg0JIg0JUg0Kgg0Jcg0J4g0KEg0K0gKi8KQEAgLTQ4LDYgKzc0LDMwIEBACiAgICAgJ1wwJywKICAgICAnXHhFMCcsICdceEE1JywgJ1x4ODEnLCAnICcsICdceEUwJywgJ1x4QTUnLCAnXHg4MycsICAvKiDgpYEg4KWDICovCiAgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDg4JywgJ1x4ODAnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg4MycsICcgJywgJ1x4RTEnLCAnXHg4QicsICdceDk4JywgJyAnLCAnXHhFMScsICdceDhEJywgJ1x4OTAnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHg4OScsICdceEEwJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OEInLCAnICcsICdceEUxJywgJ1x4OEInLCAnXHg5MCcsICAvKiDhiIAg4YiDIOGLmCDhjZAg4YibIOGJoCDhi4sg4YuQICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDg4JywgJ1x4ODgnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg5MCcsICcgJywgJ1x4RTEnLCAnXHg4OScsICdceEEwJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OTgnLCAnICcsICdceEUxJywgJ1x4ODgnLCAnXHg4MCcsICcgJywgJ1x4RTEnLCAnXHg4OCcsICdceEFBJywgJyAnLCAnXHhFMScsICdceDhCJywgJ1x4OTAnLCAnICcsICdceEUxJywgJ1x4OEMnLCAnXHhBOCcsICAvKiDhiIgg4YiQIOGJoCDhi5gg4YiAIOGIqiDhi5Ag4YyoICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgzJywgJ1x4OTInLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5MycsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDk0JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OTUnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5NycsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDk4JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OUQnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBNicsICAvKiDhg5Ig4YOTIOGDlCDhg5Ug4YOXIOGDmCDhg50g4YOmICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgzJywgJ1x4OTAnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5NicsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDlCJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTEnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBOCcsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEFCJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QUUnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5RScsICAvKiDhg5Ag4YOWIOGDmyDhg6Eg4YOoIOGDqyDhg64g4YOeICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgzJywgJ1x4QTEnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBRScsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEE1JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4OTYnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5QicsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEE4JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTknLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBQycsICAvKiDhg6Eg4YOuIOGDpSDhg5Yg4YObIOGDqCDhg6kg4YOsICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgzJywgJ1x4OTQnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHg5NScsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceDlGJywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTInLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBMycsICcgJywgJ1x4RTEnLCAnXHg4MycsICdceEE0JywgJyAnLCAnXHhFMScsICdceDgzJywgJ1x4QTUnLCAnICcsICdceEUxJywgJ1x4ODMnLCAnXHhBNycsICAvKiDhg5Qg4YOVIOGDnyDhg6Ig4YOjIOGDpCDhg6Ug4YOnICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgyJywgJ1x4QjEnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNycsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEI5JywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QkMnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNCcsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEE1JywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QjMnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhCQScsICAvKiDhgrEg4YKnIOGCuSDhgrwg4YKkIOGCpSDhgrMg4YK6ICovCisgICAgJ1wwJywKKyAgICAnXHhFMScsICdceDgyJywgJ1x4QTQnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNScsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEE3JywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QTgnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBNicsICcgJywgJ1x4RTEnLCAnXHg4MicsICdceEIxJywgJyAnLCAnXHhFMScsICdceDgyJywgJ1x4QUEnLCAnICcsICdceEUxJywgJ1x4ODInLCAnXHhBQicsICAvKiDhgqQg4YKlIOGCpyDhgqgg4YKmIOGCsSDhgqog4YKrICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEI0JywgJ1x4ODEnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5NycsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDgyJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4NScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDg3JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTQnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5NicsICAvKiDitIEg4rSXIOK0giDitIQg4rSFIOK0hyDitJQg4rSWICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEI0JywgJ1x4ODgnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4QycsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk2JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OEUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MycsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDg2JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OEInLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHhBMicsICAvKiDitIgg4rSMIOK0liDitI4g4rSDIOK0hiDitIsg4rSiICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEI0JywgJ1x4OTAnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5MScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDkzJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5OScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDlCJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4QTEnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHhBMycsICAvKiDitJAg4rSRIOK0kyDitJUg4rSZIOK0myDitKEg4rSjICovCisgICAgJ1wwJywKKyAgICAnXHhFMicsICdceEI0JywgJ1x4ODQnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4NScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDk0JywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTUnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg4MScsICcgJywgJ1x4RTInLCAnXHhCNCcsICdceDgyJywgJyAnLCAnXHhFMicsICdceEI0JywgJ1x4OTgnLCAnICcsICdceEUyJywgJ1x4QjQnLCAnXHg5RCcsICAvKiDitIQg4rSFIOK0lCDitJUg4rSBIOK0giDitJgg4rSdICovCisgICAgJ1wwJywKICAgICAnXHhDRScsICdceDkzJywgJyAnLCAnXHhDRScsICdceDkyJywgJyAnLCAnXHhDRScsICdceDk1JywgJyAnLCAnXHhDRScsICdceDk2JywgJyAnLCAnXHhDRScsICdceDk4JywgJyAnLCAnXHhDRScsICdceDlGJywgJyAnLCAnXHhDRScsICdceEE5JywgIC8qIM6TIM6SIM6VIM6WIM6YIM6fIM6pICovCiAgICAgJ1wwJywKICAgICAnXHhDRScsICdceDkyJywgJyAnLCAnXHhDRScsICdceDk0JywgJyAnLCAnXHhDRScsICdceDk2JywgJyAnLCAnXHhDRScsICdceDlFJywgJyAnLCAnXHhDRScsICdceDk4JywgJyAnLCAnXHhDRScsICdceDlGJywgIC8qIM6SIM6UIM6WIM6eIM6YIM6fICovCkBAIC01OCwxMiArMTA4LDM2IEBACiAgICAgJ1wwJywKICAgICAnXHhDRScsICdceEIyJywgJyAnLCAnXHhDRScsICdceEIzJywgJyAnLCAnXHhDRScsICdceEI3JywgJyAnLCAnXHhDRScsICdceEJDJywgJyAnLCAnXHhDRicsICdceDgxJywgJyAnLCAnXHhDRicsICdceDg2JywgJyAnLCAnXHhDRicsICdceDg3JywgJyAnLCAnXHhDRicsICdceDg4JywgIC8qIM6yIM6zIM63IM68IM+BIM+GIM+HIM+IICovCiAgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFBJywgJ1x4QTQnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHhBOCcsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDhCJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OEMnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5QicsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDlGJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4QjAnLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHhBNicsICAvKiDgqqQg4KqoIOCqiyDgqowg4KqbIOCqnyDgqrAg4KumICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFBJywgJ1x4OTYnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5NycsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDk4JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OUUnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg4NycsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDg4JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4QTAnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5QycsICAvKiDgqpYg4KqXIOCqmCDgqp4g4KqHIOCqiCDgqqAg4KqcICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFBJywgJ1x4ODgnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg4QScsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4ODAnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHhCMicsICdceEUwJywgJ1x4QUInLCAnXHg4MCcsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceEI2JywgJ1x4RTAnLCAnXHhBQicsICdceDhEJywgJ1x4RTAnLCAnXHhBQScsICdceDlBJywgJ1x4RTAnLCAnXHhBQScsICdceEJGJywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OUMnLCAnXHhFMCcsICdceEFBJywgJ1x4QkYnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHhCOCcsICdceEUwJywgJ1x4QUInLCAnXHg4MCcsICAvKiDgqogg4KqKIOCqvyDgq4Ag4Kqy4KuAIOCqtuCrjeCqmuCqvyDgqpzgqr8g4Kq44KuAICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFCJywgJ1x4ODEnLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHg4MycsICcgJywgJ1x4RTAnLCAnXHhBQicsICdceDg0JywgJyAnLCAnXHhFMCcsICdceEFBJywgJ1x4OTYnLCAnXHhFMCcsICdceEFCJywgJ1x4ODEnLCAnICcsICdceEUwJywgJ1x4QUEnLCAnXHg5QicsICdceEUwJywgJ1x4QUInLCAnXHg4MycsICcgJywgJ1x4RTAnLCAnXHhBQScsICdceDlCJywgJ1x4RTAnLCAnXHhBQicsICdceDg0JywgIC8qIOCrgSDgq4Mg4KuEIOCqluCrgSDgqpvgq4Mg4Kqb4KuEICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFCJywgJ1x4QTYnLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhBQicsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEFCJywgJ1x4QTknLCAnICcsICdceEUwJywgJ1x4QUInLCAnXHhBRCcsICAvKiDgq6Yg4KunIOCrqCDgq6kg4KutICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE4JywgJ1x4OTUnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5NycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDk5JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5QycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEE0JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhCOCcsICAvKiDgqJUg4KiXIOComSDgqJog4KicIOCopCDgqKcg4Ki4ICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE4JywgJ1x4OTUnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5NycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDk5JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5QycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEE0JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QTcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhCOCcsICAvKiDgqJUg4KiXIOComSDgqJog4KicIOCopCDgqKcg4Ki4ICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE4JywgJ1x4ODcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDg5JywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OEYnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5MycsICcgJywgJ1x4RTAnLCAnXHhBOScsICdceEIzJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QkYnLCAnICcsICdceEUwJywgJ1x4QTknLCAnXHg4MCcsICAvKiDgqIcg4KiIIOCoiSDgqI8g4KiTIOCpsyDgqL8g4KmAICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE4JywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg4RicsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceDkzJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4OTcnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHg5QycsICcgJywgJ1x4RTAnLCAnXHhBOCcsICdceEEwJywgJyAnLCAnXHhFMCcsICdceEE4JywgJ1x4QjAnLCAnICcsICdceEUwJywgJ1x4QTgnLCAnXHhCOCcsICAvKiDgqIUg4KiPIOCokyDgqJcg4KicIOCooCDgqLAg4Ki4ICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEE5JywgJ1x4QTYnLCAnICcsICdceEUwJywgJ1x4QTknLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhBOScsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEE5JywgJ1x4QTknLCAnICcsICdceEUwJywgJ1x4QTknLCAnXHhBRCcsICAvKiDgqaYg4KmnIOCpqCDgqakg4KmtICovCisgICAgJ1wwJywKICAgICAnXHhENycsICdceDkxJywgJyAnLCAnXHhENycsICdceDkzJywgJyAnLCAnXHhENycsICdceDk0JywgJyAnLCAnXHhENycsICdceDk3JywgJyAnLCAnXHhENycsICdceDlBJywgJyAnLCAnXHhENycsICdceDlCJywgJyAnLCAnXHhENycsICdceDlEJywgJyAnLCAnXHhENycsICdceEExJywgIC8qINeRINeTINeUINeXINeaINebINedINehICovCiAgICAgJ1wwJywKICAgICAnXHhENycsICdceDkxJywgJyAnLCAnXHhENycsICdceDk4JywgJyAnLCAnXHhENycsICdceDlCJywgJyAnLCAnXHhENycsICdceDlEJywgJyAnLCAnXHhENycsICdceEExJywgJyAnLCAnXHhENycsICdceEE2JywgIC8qINeRINeYINebINedINehINemICovCiAgICAgJ1wwJywKICAgICAnXHhENycsICdceEE3JywgJyAnLCAnXHhENycsICdceDlBJywgJyAnLCAnXHhENycsICdceDlGJywgJyAnLCAnXHhENycsICdceEEzJywgJyAnLCAnXHhENycsICdceEE1JywgIC8qINenINeaINefINejINelICovCiAgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEIyJywgJ1x4ODcnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHg4QScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceDkwJywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4QTMnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHhCOCcsICdceEUwJywgJ1x4QjInLCAnXHhCRScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceEE4JywgJ1x4RTAnLCAnXHhCMicsICdceEJFJywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4QTYnLCAnXHhFMCcsICdceEIyJywgJ1x4QkUnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHhCMCcsICdceEUwJywgJ1x4QjInLCAnXHhCRScsICAvKiDgsocg4LKKIOCykCDgsqMg4LK44LK+IOCyqOCyviDgsqbgsr4g4LKw4LK+ICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEIyJywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QjInLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhCMicsICdceDhFJywgJyAnLCAnXHhFMCcsICdceEIyJywgJ1x4QjInLCAnICcsICdceEUwJywgJ1x4QjMnLCAnXHhBNicsICcgJywgJ1x4RTAnLCAnXHhCMycsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEIzJywgJ1x4QUMnLCAnICcsICdceEUwJywgJ1x4QjMnLCAnXHhBRCcsICAvKiDgsoUg4LKJIOCyjiDgsrIg4LOmIOCzqCDgs6wg4LOtICovCisgICAgJ1wwJywKICAgICAnXHhFMScsICdceDlFJywgJ1x4ODEnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg5MScsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDkzJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4QTcnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHhBOScsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceEI2JywgIC8qIOGegSDhnpEg4Z6TIOGepyDhnqkg4Z62ICovCiAgICAgJ1wwJywKICAgICAnXHhFMScsICdceDlFJywgJ1x4ODAnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4ODAnLCAnICcsICdceEUxJywgJ1x4OUUnLCAnXHg4MCcsICdceEUxJywgJ1x4OUYnLCAnXHg5MicsICdceEUxJywgJ1x4OUUnLCAnXHg4MScsICcgJywgJ1x4RTEnLCAnXHg5RScsICdceDgwJywgJ1x4RTEnLCAnXHg5RicsICdceDkyJywgJ1x4RTEnLCAnXHg5RScsICdceDgyJywgJyAnLCAnXHhFMScsICdceDlFJywgJ1x4ODAnLCAnXHhFMScsICdceDlGJywgJ1x4OTInLCAnXHhFMScsICdceDlFJywgJ1x4OTAnLCAgLyog4Z6A4Z+S4Z6AIOGegOGfkuGegSDhnoDhn5LhnoIg4Z6A4Z+S4Z6QICovCkBAIC0xMTgsNiArMTkyLDEwIEBACiAgICAgJ1wwJywKICAgICAnXHhFMScsICdceEI1JywgJ1x4OTYnLCAnICcsICdceENBJywgJ1x4QjgnLCAnICcsICdceEUxJywgJ1x4QjUnLCAnXHg4RCcsICAvKiDhtZYgyrgg4bWNICovCiAgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI0JywgJ1x4OTInLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5RicsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEEwJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QjEnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEFBJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4OUEnLCAnXHhFMCcsICdceEI1JywgJ1x4OEQnLCAnXHhFMCcsICdceEI0JywgJ1x4OUEnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBQScsICdceEUwJywgJ1x4QjUnLCAnXHg4RCcsICdceEUwJywgJ1x4QjQnLCAnXHhBQScsICAvKiDgtJIg4LSfIOC0oCDgtLEg4LSaIOC0qiDgtJrgtY3gtJog4LSq4LWN4LSqICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI0JywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhBMCcsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceEE3JywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QjYnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHg5OCcsICcgJywgJ1x4RTAnLCAnXHhCNCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEI0JywgJ1x4QTUnLCAnICcsICdceEUwJywgJ1x4QjQnLCAnXHhCMicsICAvKiDgtJ8g4LSgIOC0pyDgtLYg4LSYIOC0miDgtKUg4LSyICovCisgICAgJ1wwJywKICAgICAnXHhFMScsICdceDgwJywgJ1x4ODEnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg4MicsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDg0JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OTInLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg5RCcsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceEE1JywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4OEEnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4QicsICAvKiDhgIEg4YCCIOGAhCDhgJIg4YCdIOGBpSDhgYog4YGLICovCiAgICAgJ1wwJywKICAgICAnXHhFMScsICdceDgwJywgJ1x4ODQnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg4RScsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDkyJywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4OTUnLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg5NycsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceDlEJywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4OEEnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4QicsICAvKiDhgIQg4YCOIOGAkiDhgJUg4YCXIOGAnSDhgYog4YGLICovCkBAIC0xMjYsNiArMjA0LDE2IEBACiAgICAgJ1wwJywKICAgICAnXHhFMScsICdceDgwJywgJ1x4ODknLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHg4QScsICcgJywgJ1x4RTEnLCAnXHg4MCcsICdceEE1JywgJyAnLCAnXHhFMScsICdceDgwJywgJ1x4QTknLCAnICcsICdceEUxJywgJ1x4ODAnLCAnXHhBOCcsICcgJywgJ1x4RTEnLCAnXHg4MScsICdceDgyJywgJyAnLCAnXHhFMScsICdceDgxJywgJ1x4ODUnLCAnICcsICdceEUxJywgJ1x4ODEnLCAnXHg4OScsICAvKiDhgIkg4YCKIOGApSDhgKkg4YCoIOGBgiDhgYUg4YGJICovCiAgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI2JywgJ1x4ODknLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceDlEJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QjMnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCNCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEJBJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QkQnLCAnICcsICdceEUwJywgJ1x4QjcnLCAnXHg4NicsICAvKiDgtokg4LaaIOC2nSDgtrMg4La0IOC2uiDgtr0g4LeGICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI2JywgJ1x4OTEnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHg5NCcsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceDlEJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QTInLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBNycsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEFFJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QjAnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCQicsICAvKiDgtpEg4LaUIOC2nSDgtqIg4LanIOC2riDgtrAg4La7ICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEI2JywgJ1x4QUYnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhCMycsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceDhCJywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QkQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBRCcsICdceEUwJywgJ1x4QjcnLCAnXHg5NicsICcgJywgJ1x4RTAnLCAnXHhCNicsICdceEFEJywgJ1x4RTAnLCAnXHhCNycsICdceDk0JywgJyAnLCAnXHhFMCcsICdceEI2JywgJ1x4QjYnLCAnXHhFMCcsICdceEI3JywgJ1x4OTQnLCAnICcsICdceEUwJywgJ1x4QjYnLCAnXHhBRicsICdceEUwJywgJ1x4QjcnLCAnXHg5NCcsICAvKiDgtq8g4LazIOC2iyDgtr0g4Lat4LeWIOC2reC3lCDgtrbgt5Qg4Lav4LeUICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFFJywgJ1x4ODknLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5MicsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDkzJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4QjEnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg4OCcsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDk1JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OTknLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5QScsICAvKiDgrokg4K6SIOCukyDgrrEg4K6IIOCulSDgrpkg4K6aICovCisgICAgJ1wwJywKKyAgICAnXHhFMCcsICdceEFFJywgJ1x4OTUnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg5QScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceEIyJywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4QjYnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHg4OScsICcgJywgJ1x4RTAnLCAnXHhBRScsICdceDk5JywgJyAnLCAnXHhFMCcsICdceEFFJywgJ1x4OUYnLCAnICcsICdceEUwJywgJ1x4QUUnLCAnXHhBQScsICAvKiDgrpUg4K6aIOCusiDgrrYg4K6JIOCumSDgrp8g4K6qICovCisgICAgJ1wwJywKICAgICAnXHhFMCcsICdceEIwJywgJ1x4ODcnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHg4QycsICcgJywgJ1x4RTAnLCAnXHhCMCcsICdceDk5JywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4OUUnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHhBMycsICcgJywgJ1x4RTAnLCAnXHhCMCcsICdceEIxJywgJyAnLCAnXHhFMCcsICdceEIxJywgJ1x4QUYnLCAgLyog4LCHIOCwjCDgsJkg4LCeIOCwoyDgsLEg4LGvICovCiAgICAgJ1wwJywKICAgICAnXHhFMCcsICdceEIwJywgJ1x4ODUnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHg5NScsICcgJywgJ1x4RTAnLCAnXHhCMCcsICdceDlBJywgJyAnLCAnXHhFMCcsICdceEIwJywgJ1x4QjAnLCAnICcsICdceEUwJywgJ1x4QjAnLCAnXHhCRCcsICcgJywgJ1x4RTAnLCAnXHhCMScsICdceEE4JywgJyAnLCAnXHhFMCcsICdceEIxJywgJ1x4QUMnLCAgLyog4LCFIOCwlSDgsJog4LCwIOCwvSDgsagg4LGsICovCkBAIC0xOTcsNiArMjg1LDI5IEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19BUkFCSUNfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0FSQUJJQ19KT0lOLCAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX1RPUCwgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfVE9QLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0hFQUQsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9CQVNFLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMLCAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfQ0FQSVRBTCwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwsICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKQEAgLTIxMiw2ICszMjMsMjMgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQkFTRSwgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9CRVRBX1RPUCwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LApAQCAtMjIwLDExICszNDgsMjkgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfRElHSVRfVE9QLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfSEVBRCwgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UsICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9ESUdJVF9UT1AsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX0xPTkcgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19LQU5OQURBX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QLCAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QLCAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fU1VCX1RPUCAgICB9LApAQCAtMjM2LDEzICszODIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19LSE1FUl9TWU1CT0xTX1dBTklOR19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19UT1AsICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19MQU9fQk9UVE9NLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19BU0NFTkRFUiwgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9LAotICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0xBUkdFX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCi0gICAgeyBBRl9CTFVFX1NUUklOR19MQU9fREVTQ0VOREVSLCAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCwgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQU9fQk9UVE9NLCAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19MQVJHRV9BU0NFTkRFUiwgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19MQU9fREVTQ0VOREVSLCAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9DQVBJVEFMX0JPVFRPTSwgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTExfRl9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfSwKQEAgLTI2NywxMiArNDEzLDIzIEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMLCAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0FTQ0VOREVSLCAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NWUFOTUFSX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsIDAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00sICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIHsgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfSwKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9LApkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbiBiL3NyYy9hdXRvZml0L2FmYmx1ZS5jaW4KaW5kZXggYjMwM2E0Yi4uMGMzY2FlOCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmNpbgorKysgYi9zcmMvYXV0b2ZpdC9hZmJsdWUuY2luCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGRhdGEgZm9yIGJsdWUgc3RyaW5ncyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0IGIvc3JjL2F1dG9maXQvYWZibHVlLmRhdAppbmRleCA1ZmZiODUyLi5mNWYwNGYyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmJsdWUuZGF0CisrKyBiL3NyYy9hdXRvZml0L2FmYmx1ZS5kYXQKQEAgLTIsNyArMiw3IEBACiAvLwogLy8gICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzLgogLy8KLS8vICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5CisvLyAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieQogLy8gIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4KIC8vCiAvLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLApAQCAtNjUsOCArNjUsOCBAQAogLy8gdmFsdWVzOyB0aGlzIGVzc2VudGlhbGx5IG1lYW5zIHRoYXQgdGhlIG1heGltdW0gdmFsdWVzIGNhbiBlYXNpbHkgYmUgdG9vCiAvLyBsYXJnZS4gIEdpdmVuIHRoYXQgdGhlIHB1cnBvc2Ugb2YgdGhvc2UgdmFsdWVzIGlzIHRvIGNyZWF0ZSBsb2NhbAogLy8gZml4ZWQtc2l6ZSBhcnJheXMgYXQgY29tcGlsZSB0aW1lIGZvciBmdXJ0aGVyIHByb2Nlc3Npbmcgb2YgdGhlIGJsdWUgem9uZQotLy8gZGF0YSwgdGhpcyBpc24ndCBhIHByb2JsZW0uICBOb3RlIHRoZSB0aGUgZmluYWwgemVybyBieXRlIG9mIGEgc3RyaW5nIGlzCi0vLyBub3QgY291bnRlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3VudCBob2xkcyB0aGUgbnVtYmVyIG9mIFVURi04IGVuY29kZWQKKy8vIGRhdGEsIHRoaXMgaXNuJ3QgYSBwcm9ibGVtLiAgTm90ZSB0aGUgZmluYWwgemVybyBieXRlIG9mIGEgc3RyaW5nIGlzIG5vdAorLy8gY291bnRlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjb3VudCBob2xkcyB0aGUgbnVtYmVyIG9mIFVURi04IGVuY29kZWQKIC8vIGNoYXJhY3RlcnMsIG5vdCBieXRlcy4KIAogCkBAIC04Niw2ICs4NiwzNSBAQAogICBBRl9CTFVFX1NUUklOR19BUkFCSUNfSk9JTgogICAgICLZgCIKIAorICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX1RPUAorICAgICLUsSDVhCDVkiDVjSDUsiDUsyDUtCDVlSIKKyAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9CT1RUT00KKyAgICAi1ZIg1Ygg1LQg1YMg1Ycg1Y0g1Y8g1ZUiCisgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0FTQ0VOREVSCisgICAgItWlINWnINWrINW0INW+INaGINWzIgorICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9UT1AKKyAgICAi1aEg1bUg1oIg1b0g1aMg1bcg1oAg1oUiCisgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTQorICAgICLVsCDVuCDVsyDVoSDVpSDVriDVvSDWhSIKKyAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfREVTQ0VOREVSCisgICAgItWiINWoINWrINWsINWyINW6INaDINaBIgorCisgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfQkFTRQorICAgICLgpoUg4KahIOCmpCDgpqgg4KasIOCmrSDgprIg4KaVIgorICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX1RPUAorICAgICLgpocg4KafIOCmoCDgpr8g4KeAIOCniCDgp5ciCisgIEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfSEVBRAorICAgICLgppMg4KaPIOCmoSDgpqQg4KaoIOCmrCDgprIg4KaVIgorCisgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwKKyAgICAi4Y+GIOGOuyDhjqwg4Y+DIOGOpCDhj6Mg4Y6mIOGPlSIKKyAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfQVNDRU5ERVIKKyAgICAi6q6SIOqupCDqrrYg6q20IOqtviDqrpcg6q6dIOquvyIKKyAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwKKyAgICAi6q6WIOqtvCDqrpMg6q6gIOqusyDqrbYg6q6lIOquuyIKKyAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfREVTQ0VOREVSCisgICAgIuGPuCDqrpAg6q25IOqtuyIKKwogICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUAogICAgICLQkSDQkiDQlSDQnyDQlyDQniDQoSDQrSIKICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfQ0FQSVRBTF9CT1RUT00KQEAgLTEwNyw2ICsxMzYsMzQgQEAKICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CT1RUT00KICAgICAi4KWBIOClgyIKIAorICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19UT1AKKyAgICAi4YiAIOGIgyDhi5gg4Y2QIOGImyDhiaAg4YuLIOGLkCIKKyAgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfQk9UVE9NCisgICAgIuGIiCDhiJAg4YmgIOGLmCDhiIAg4YiqIOGLkCDhjKgiCisKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX1RPUAorICAgICLhg5Ig4YOTIOGDlCDhg5Ug4YOXIOGDmCDhg50g4YOmIgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQk9UVE9NCisgICAgIuGDkCDhg5Yg4YObIOGDoSDhg6gg4YOrIOGDriDhg54iCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUgorICAgICLhg6Eg4YOuIOGDpSDhg5Yg4YObIOGDqCDhg6kg4YOsIgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSCisgICAgIuGDlCDhg5Ug4YOfIOGDoiDhg6Mg4YOkIOGDpSDhg6ciCisKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fQVNPTVRBVlJVTElfVE9QCisgICAgIuGCsSDhgqcg4YK5IOGCvCDhgqQg4YKlIOGCsyDhgroiCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX0JPVFRPTQorICAgICLhgqQg4YKlIOGCpyDhgqgg4YKmIOGCsSDhgqog4YKrIgorCisgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX1RPUAorICAgICLitIEg4rSXIOK0giDitIQg4rSFIOK0hyDitJQg4rSWIgorICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9CT1RUT00KKyAgICAi4rSIIOK0jCDitJYg4rSOIOK0gyDitIYg4rSLIOK0oiIKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIKKyAgICAi4rSQIOK0kSDitJMg4rSVIOK0mSDitJsg4rShIOK0oyIKKyAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSCisgICAgIuK0hCDitIUg4rSUIOK0lSDitIEg4rSCIOK0mCDitJ0iCisKICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AKICAgICAizpMgzpIgzpUgzpYgzpggzp8gzqkiCiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NCkBAIC0xMTgsNiArMTc1LDI4IEBACiAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUgogICAgICLOsiDOsyDOtyDOvCDPgSDPhiDPhyDPiCIKIAorICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9UT1AKKyAgICAi4KqkIOCqqCDgqosg4KqMIOCqmyDgqp8g4KqwIOCrpiIKKyAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NCisgICAgIuCqliDgqpcg4KqYIOCqniDgqocg4KqIIOCqoCDgqpwiCisgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0FTQ0VOREVSCisgICAgIuCqiCDgqoog4Kq/IOCrgCDgqrLgq4Ag4Kq24KuN4Kqa4Kq/IOCqnOCqvyDgqrjgq4AiCisgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0RFU0NFTkRFUgorICAgICLgq4Eg4KuDIOCrhCDgqpbgq4Eg4Kqb4KuDIOCqm+CrhCIKKyAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfRElHSVRfVE9QCisgICAgIuCrpiDgq6cg4KuoIOCrqSDgq60iCisKKyAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQkFTRQorICAgICLgqJUg4KiXIOComSDgqJog4KicIOCopCDgqKcg4Ki4IgorICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9IRUFECisgICAgIuColSDgqJcg4KiZIOComiDgqJwg4KikIOCopyDgqLgiCisgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUAorICAgICLgqIcg4KiIIOCoiSDgqI8g4KiTIOCpsyDgqL8g4KmAIgorICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9CT1RUT00KKyAgICAi4KiFIOCojyDgqJMg4KiXIOConCDgqKAg4KiwIOCouCIKKyAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfRElHSVRfVE9QCisgICAgIuCppiDgqacg4KmoIOCpqSDgqa0iCisKICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUAogICAgICLXkSDXkyDXlCDXlyDXmiDXmyDXnSDXoSIKICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0JPVFRPTQpAQCAtMTI1LDYgKzIwNCwxMSBAQAogICBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSCiAgICAgItenINeaINefINejINelIgogCisgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfVE9QCisgICAgIuCyhyDgsoog4LKQIOCyoyDgsrjgsr4g4LKo4LK+IOCypuCyviDgsrDgsr4iCisgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NCisgICAgIuCyhSDgsokg4LKOIOCysiDgs6Yg4LOoIOCzrCDgs60iCisKICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QCiAgICAgIuGegSDhnpEg4Z6TIOGepyDhnqkg4Z62IgogICBBRl9CTFVFX1NUUklOR19LSE1FUl9TVUJTQ1JJUFRfVE9QCkBAIC0xODgsNiArMjcyLDExIEBACiAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSCiAgICAgIuG1liDKuCDhtY0iCiAKKyAgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUAorICAgICLgtJIg4LSfIOC0oCDgtLEg4LSaIOC0qiDgtJrgtY3gtJog4LSq4LWN4LSqIgorICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NCisgICAgIuC0nyDgtKAg4LSnIOC0tiDgtJgg4LSaIOC0pSDgtLIiCisKICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9UT1AKICAgICAi4YCBIOGAgiDhgIQg4YCSIOGAnSDhgaUg4YGKIOGBiyIKICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00KQEAgLTE5Nyw2ICsyODYsMTggQEAKICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9ERVNDRU5ERVIKICAgICAi4YCJIOGAiiDhgKUg4YCpIOGAqCDhgYIg4YGFIOGBiSIKIAorICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX1RPUAorICAgICLgtokg4LaaIOC2nSDgtrMg4La0IOC2uiDgtr0g4LeGIgorICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTQorICAgICLgtpEg4LaUIOC2nSDgtqIg4LanIOC2riDgtrAg4La7IgorICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0RFU0NFTkRFUgorICAgICLgtq8g4LazIOC2iyDgtr0g4Lat4LeWIOC2reC3lCDgtrbgt5Qg4Lav4LeUIgorCisgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX1RPUAorICAgICLgrokg4K6SIOCukyDgrrEg4K6IIOCulSDgrpkg4K6aIgorICBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00KKyAgICAi4K6VIOCumiDgrrIg4K62IOCuiSDgrpkg4K6fIOCuqiIKKwogICBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QCiAgICAgIuCwhyDgsIwg4LCZIOCwniDgsKMg4LCxIOCxryIKICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTQpAQCAtMzg4LDYgKzQ4OSwzNSBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4sICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9ORVVUUkFMIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfQVJNTgorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9UT1AsICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fQ0FQSVRBTF9CT1RUT00sICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9CRU5HCisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX1RPUCwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0hFQUQsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UsIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX05FVVRSQUwgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9YX0hFSUdIVCAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0JFTkdBTElfQkFTRSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9DSEVSCisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMLCAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9DQVBJVEFMLCAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTF9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19DSEVST0tFRV9TTUFMTCwgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwsICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0NZUkwKICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQwNyw2ICs1MzcsMzAgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfRVRISQorICAgIHsgQUZfQkxVRV9TVFJJTkdfRVRISU9QSUNfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIC8vIGJsdWUgem9uZXMgZm9yIE10YXZydWxpIGFyZSBtaXNzaW5nIChub3QgeWV0IGRlZmluZWQgaW4gVW5pY29kZSkKKyAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPUgorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUiwgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICBBRl9CTFVFX1NUUklOR1NFVF9HRU9LCisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX0NBUElUQUxfQk9UVE9NLCAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQxNyw2ICs1NzEsMjUgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUiwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9HVUpSCisgICAgeyBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfRElHSVRfVE9QLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX0dVUlUKKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX1RPUCwgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0hFQUQsICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0JBU0UsICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fTkVVVFJBTCAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQk9UVE9NLCAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfRElHSVRfVE9QLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0hFQlIKICAgICB7IEFGX0JMVUVfU1RSSU5HX0hFQlJFV19UT1AsICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX0xPTkcgICB9CkBAIC00MjQsNiArNTk3LDExIEBACiAgICAgeyBBRl9CTFVFX1NUUklOR19IRUJSRVdfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfS05EQQorICAgIHsgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NLCAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVIKICAgICB7IEFGX0JMVUVfU1RSSU5HX0tITUVSX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fWF9IRUlHSFQgICB9CkBAIC00NDAsMTMgKzYxOCwxMyBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTwotICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX1RPUCwgICAgICAgICAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX0xBT19BU0NFTkRFUiwgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgICB9Ci0gICAgeyBBRl9CTFVFX1NUUklOR19MQU9fTEFSR0VfQVNDRU5ERVIsICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQotICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0RFU0NFTkRFUiwgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgeyBBRl9CTFVFX1NUUklOR19MQU9fVE9QLCAgICAgICAgICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0JPVFRPTSwgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0xBUkdFX0FTQ0VOREVSLCBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTEFPX0RFU0NFTkRFUiwgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVE4KICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QLCAgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgICAgICAgIH0KQEAgLTQ3OCw2ICs2NTYsMTEgQEAKICAgICB7IEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKKyAgQUZfQkxVRV9TVFJJTkdTRVRfTUxZTQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX1RPUCwgICAgQUZfQkxVRV9QUk9QRVJUWV9MQVRJTl9UT1AgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFMQVlBTEFNX0JPVFRPTSwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfTUFYLCAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIKICAgICB7IEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCAgICAgIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1hfSEVJR0hUICAgfQpAQCAtNDg2LDYgKzY2OSwyMCBAQAogICAgIHsgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAorICBBRl9CTFVFX1NUUklOR1NFVF9OT05FCisgICAgeyBBRl9CTFVFX1NUUklOR19NQVgsIDAgfQorCisgIEFGX0JMVUVfU1RSSU5HU0VUX1NJTkgKKyAgICB7IEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfVE9QLCAgICAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19TSU5IQUxBX0JPVFRPTSwgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHsgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9ERVNDRU5ERVIsIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgQUZfQkxVRV9TVFJJTkdTRVRfVEFNTAorICAgIHsgQUZfQkxVRV9TVFJJTkdfVEFNSUxfVE9QLCAgICBBRl9CTFVFX1BST1BFUlRZX0xBVElOX1RPUCB9CisgICAgeyBBRl9CTFVFX1NUUklOR19UQU1JTF9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICB7IEFGX0JMVUVfU1RSSU5HX01BWCwgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgIEFGX0JMVUVfU1RSSU5HU0VUX1RFTFUKICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9UT1AsICAgIEFGX0JMVUVfUFJPUEVSVFlfTEFUSU5fVE9QIH0KICAgICB7IEFGX0JMVUVfU1RSSU5HX1RFTFVHVV9CT1RUT00sIDAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oIGIvc3JjL2F1dG9maXQvYWZibHVlLmgKaW5kZXggMzRmOTBlOS4uNzVjM2FiNSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZibHVlLmgKKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmgKQEAgLTcsNyArNyw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgZGF0YSBmb3IgYmx1ZSBzdHJpbmdzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE5LDggKzE5LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGQkxVRV9IX18KLSNkZWZpbmUgX19BRkJMVUVfSF9fCisjaWZuZGVmIEFGQkxVRV9IXworI2RlZmluZSBBRkJMVUVfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTgwLDYzICs4MCwxMDcgQEAKICAgICBBRl9CTFVFX1NUUklOR19BUkFCSUNfVE9QID0gMCwKICAgICBBRl9CTFVFX1NUUklOR19BUkFCSUNfQk9UVE9NID0gMTgsCiAgICAgQUZfQkxVRV9TVFJJTkdfQVJBQklDX0pPSU4gPSAzMywKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19DQVBJVEFMX1RPUCA9IDM2LAotICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NID0gNjAsCi0gICAgQUZfQkxVRV9TVFJJTkdfQ1lSSUxMSUNfU01BTEwgPSA4NCwKLSAgICBBRl9CTFVFX1NUUklOR19DWVJJTExJQ19TTUFMTF9ERVNDRU5ERVIgPSAxMDgsCi0gICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9CQVNFID0gMTE3LAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfVE9QID0gMTQ5LAotICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfSEVBRCA9IDE4MSwKLSAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JPVFRPTSA9IDIxMywKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX1RPUCA9IDIyMSwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19DQVBJVEFMX0JPVFRPTSA9IDI0MiwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9CRVRBX1RPUCA9IDI2MCwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTCA9IDI3OCwKLSAgICBBRl9CTFVFX1NUUklOR19HUkVFS19TTUFMTF9ERVNDRU5ERVIgPSAzMDIsCi0gICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCA9IDMyNiwKLSAgICBBRl9CTFVFX1NUUklOR19IRUJSRVdfQk9UVE9NID0gMzUwLAotICAgIEFGX0JMVUVfU1RSSU5HX0hFQlJFV19ERVNDRU5ERVIgPSAzNjgsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfVE9QID0gMzgzLAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NVQlNDUklQVF9UT1AgPSA0MDcsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfQk9UVE9NID0gNDQ3LAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0RFU0NFTkRFUiA9IDQ3OSwKLSAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9MQVJHRV9ERVNDRU5ERVIgPSA1MTMsCi0gICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQVhJTkdfVE9QID0gNjAwLAotICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FOSU5HX0JPVFRPTSA9IDYwOCwKLSAgICBBRl9CTFVFX1NUUklOR19MQU9fVE9QID0gNjE2LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19CT1RUT00gPSA2NDgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFPX0FTQ0VOREVSID0gNjgwLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBT19MQVJHRV9BU0NFTkRFUiA9IDY5NiwKLSAgICBBRl9CTFVFX1NUUklOR19MQU9fREVTQ0VOREVSID0gNzA4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfVE9QID0gNzMyLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfQk9UVE9NID0gNzQ4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0ZfVE9QID0gNzY0LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMID0gNzc4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0RFU0NFTkRFUiA9IDc5MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX0NBUElUQUxfVE9QID0gODAyLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfQ0FQSVRBTF9CT1RUT00gPSA4MjIsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTF9GX1RPUCA9IDg0MiwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVUJTX1NNQUxMID0gODYyLAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVQlNfU01BTExfREVTQ0VOREVSID0gODk4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfQ0FQSVRBTF9UT1AgPSA5MTgsCi0gICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VQU19DQVBJVEFMX0JPVFRPTSA9IDk0OSwKLSAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TVVBTX1NNQUxMX0ZfVE9QID0gOTc4LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTEwgPSAxMDA0LAotICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSID0gMTAyOSwKLSAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCA9IDEwNDAsCi0gICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00gPSAxMDcyLAotICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIgPSAxMTA0LAotICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSID0gMTEzMiwKLSAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfVE9QID0gMTE2NCwKLSAgICBBRl9CTFVFX1NUUklOR19URUxVR1VfQk9UVE9NID0gMTE5MiwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX1RPUCA9IDEyMjAsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9CT1RUT00gPSAxMjQ0LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQVNDRU5ERVIgPSAxMjcyLAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfTEFSR0VfQVNDRU5ERVIgPSAxMjg0LAotICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfREVTQ0VOREVSID0gMTI5NiwKLSAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0RFU0NFTkRFUiA9IDEzMTIsCi0gICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9ESUdJVF9UT1AgPSAxMzIwLAotICAgIGFmX2JsdWVfMV8xID0gMTMzMSwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9DQVBJVEFMX1RPUCA9IDM2LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX0NBUElUQUxfQk9UVE9NID0gNjAsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQVNDRU5ERVIgPSA4NCwKKyAgICBBRl9CTFVFX1NUUklOR19BUk1FTklBTl9TTUFMTF9UT1AgPSAxMDUsCisgICAgQUZfQkxVRV9TVFJJTkdfQVJNRU5JQU5fU01BTExfQk9UVE9NID0gMTI5LAorICAgIEFGX0JMVUVfU1RSSU5HX0FSTUVOSUFOX1NNQUxMX0RFU0NFTkRFUiA9IDE1MywKKyAgICBBRl9CTFVFX1NUUklOR19CRU5HQUxJX0JBU0UgPSAxNzcsCisgICAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9UT1AgPSAyMDksCisgICAgQUZfQkxVRV9TVFJJTkdfQkVOR0FMSV9IRUFEID0gMjM3LAorICAgIEFGX0JMVUVfU1RSSU5HX0NIRVJPS0VFX0NBUElUQUwgPSAyNjksCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfQVNDRU5ERVIgPSAzMDEsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTEwgPSAzMzMsCisgICAgQUZfQkxVRV9TVFJJTkdfQ0hFUk9LRUVfU01BTExfREVTQ0VOREVSID0gMzY1LAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfVE9QID0gMzgxLAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX0NBUElUQUxfQk9UVE9NID0gNDA1LAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMID0gNDI5LAorICAgIEFGX0JMVUVfU1RSSU5HX0NZUklMTElDX1NNQUxMX0RFU0NFTkRFUiA9IDQ1MywKKyAgICBBRl9CTFVFX1NUUklOR19ERVZBTkFHQVJJX0JBU0UgPSA0NjIsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9UT1AgPSA0OTQsCisgICAgQUZfQkxVRV9TVFJJTkdfREVWQU5BR0FSSV9IRUFEID0gNTI2LAorICAgIEFGX0JMVUVfU1RSSU5HX0RFVkFOQUdBUklfQk9UVE9NID0gNTU4LAorICAgIEFGX0JMVUVfU1RSSU5HX0VUSElPUElDX1RPUCA9IDU2NiwKKyAgICBBRl9CTFVFX1NUUklOR19FVEhJT1BJQ19CT1RUT00gPSA1OTgsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTUtIRURSVUxJX1RPUCA9IDYzMCwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfQk9UVE9NID0gNjYyLAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX01LSEVEUlVMSV9BU0NFTkRFUiA9IDY5NCwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9NS0hFRFJVTElfREVTQ0VOREVSID0gNzI2LAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX0FTT01UQVZSVUxJX1RPUCA9IDc1OCwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9BU09NVEFWUlVMSV9CT1RUT00gPSA3OTAsCisgICAgQUZfQkxVRV9TVFJJTkdfR0VPUkdJQU5fTlVTS0hVUklfVE9QID0gODIyLAorICAgIEFGX0JMVUVfU1RSSU5HX0dFT1JHSUFOX05VU0tIVVJJX0JPVFRPTSA9IDg1NCwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9BU0NFTkRFUiA9IDg4NiwKKyAgICBBRl9CTFVFX1NUUklOR19HRU9SR0lBTl9OVVNLSFVSSV9ERVNDRU5ERVIgPSA5MTgsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9UT1AgPSA5NTAsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfQ0FQSVRBTF9CT1RUT00gPSA5NzEsCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTExfQkVUQV9UT1AgPSA5ODksCisgICAgQUZfQkxVRV9TVFJJTkdfR1JFRUtfU01BTEwgPSAxMDA3LAorICAgIEFGX0JMVUVfU1RSSU5HX0dSRUVLX1NNQUxMX0RFU0NFTkRFUiA9IDEwMzEsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VKQVJBVElfVE9QID0gMTA1NSwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9CT1RUT00gPSAxMDg3LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0FTQ0VOREVSID0gMTExOSwKKyAgICBBRl9CTFVFX1NUUklOR19HVUpBUkFUSV9ERVNDRU5ERVIgPSAxMTY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVSkFSQVRJX0RJR0lUX1RPUCA9IDEyMDIsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfQkFTRSA9IDEyMjIsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfSEVBRCA9IDEyNTQsCisgICAgQUZfQkxVRV9TVFJJTkdfR1VSTVVLSElfVE9QID0gMTI4NiwKKyAgICBBRl9CTFVFX1NUUklOR19HVVJNVUtISV9CT1RUT00gPSAxMzE4LAorICAgIEFGX0JMVUVfU1RSSU5HX0dVUk1VS0hJX0RJR0lUX1RPUCA9IDEzNTAsCisgICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX1RPUCA9IDEzNzAsCisgICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0JPVFRPTSA9IDEzOTQsCisgICAgQUZfQkxVRV9TVFJJTkdfSEVCUkVXX0RFU0NFTkRFUiA9IDE0MTIsCisgICAgQUZfQkxVRV9TVFJJTkdfS0FOTkFEQV9UT1AgPSAxNDI3LAorICAgIEFGX0JMVUVfU1RSSU5HX0tBTk5BREFfQk9UVE9NID0gMTQ3MSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9UT1AgPSAxNTAzLAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NVQlNDUklQVF9UT1AgPSAxNTI3LAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX0JPVFRPTSA9IDE1NjcsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfREVTQ0VOREVSID0gMTU5OSwKKyAgICBBRl9CTFVFX1NUUklOR19LSE1FUl9MQVJHRV9ERVNDRU5ERVIgPSAxNjMzLAorICAgIEFGX0JMVUVfU1RSSU5HX0tITUVSX1NZTUJPTFNfV0FYSU5HX1RPUCA9IDE3MjAsCisgICAgQUZfQkxVRV9TVFJJTkdfS0hNRVJfU1lNQk9MU19XQU5JTkdfQk9UVE9NID0gMTcyOCwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fVE9QID0gMTczNiwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fQk9UVE9NID0gMTc2OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQU9fQVNDRU5ERVIgPSAxODAwLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBT19MQVJHRV9BU0NFTkRFUiA9IDE4MTYsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFPX0RFU0NFTkRFUiA9IDE4MjgsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fQ0FQSVRBTF9UT1AgPSAxODUyLAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX0NBUElUQUxfQk9UVE9NID0gMTg2OCwKKyAgICBBRl9CTFVFX1NUUklOR19MQVRJTl9TTUFMTF9GX1RPUCA9IDE4ODQsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU01BTEwgPSAxODk4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NNQUxMX0RFU0NFTkRFUiA9IDE5MTIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19DQVBJVEFMX1RPUCA9IDE5MjIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19DQVBJVEFMX0JPVFRPTSA9IDE5NDIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTF9GX1RPUCA9IDE5NjIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTCA9IDE5ODIsCisgICAgQUZfQkxVRV9TVFJJTkdfTEFUSU5fU1VCU19TTUFMTF9ERVNDRU5ERVIgPSAyMDE4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfQ0FQSVRBTF9UT1AgPSAyMDM4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfQ0FQSVRBTF9CT1RUT00gPSAyMDY5LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfRl9UT1AgPSAyMDk4LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTEwgPSAyMTI0LAorICAgIEFGX0JMVUVfU1RSSU5HX0xBVElOX1NVUFNfU01BTExfREVTQ0VOREVSID0gMjE0OSwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fVE9QID0gMjE2MCwKKyAgICBBRl9CTFVFX1NUUklOR19NQUxBWUFMQU1fQk9UVE9NID0gMjIwNCwKKyAgICBBRl9CTFVFX1NUUklOR19NWUFOTUFSX1RPUCA9IDIyMzYsCisgICAgQUZfQkxVRV9TVFJJTkdfTVlBTk1BUl9CT1RUT00gPSAyMjY4LAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfQVNDRU5ERVIgPSAyMzAwLAorICAgIEFGX0JMVUVfU1RSSU5HX01ZQU5NQVJfREVTQ0VOREVSID0gMjMyOCwKKyAgICBBRl9CTFVFX1NUUklOR19TSU5IQUxBX1RPUCA9IDIzNjAsCisgICAgQUZfQkxVRV9TVFJJTkdfU0lOSEFMQV9CT1RUT00gPSAyMzkyLAorICAgIEFGX0JMVUVfU1RSSU5HX1NJTkhBTEFfREVTQ0VOREVSID0gMjQyNCwKKyAgICBBRl9CTFVFX1NUUklOR19UQU1JTF9UT1AgPSAyNDY4LAorICAgIEFGX0JMVUVfU1RSSU5HX1RBTUlMX0JPVFRPTSA9IDI1MDAsCisgICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX1RPUCA9IDI1MzIsCisgICAgQUZfQkxVRV9TVFJJTkdfVEVMVUdVX0JPVFRPTSA9IDI1NjAsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9UT1AgPSAyNTg4LAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfQk9UVE9NID0gMjYxMiwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0FTQ0VOREVSID0gMjY0MCwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0xBUkdFX0FTQ0VOREVSID0gMjY1MiwKKyAgICBBRl9CTFVFX1NUUklOR19USEFJX0RFU0NFTkRFUiA9IDI2NjQsCisgICAgQUZfQkxVRV9TVFJJTkdfVEhBSV9MQVJHRV9ERVNDRU5ERVIgPSAyNjgwLAorICAgIEFGX0JMVUVfU1RSSU5HX1RIQUlfRElHSVRfVE9QID0gMjY4OCwKKyAgICBhZl9ibHVlXzFfMSA9IDI2OTksCiAjaWZkZWYgQUZfQ09ORklHX09QVElPTl9DSksKICAgICBBRl9CTFVFX1NUUklOR19DSktfVE9QID0gYWZfYmx1ZV8xXzEgKyAxLAogICAgIEFGX0JMVUVfU1RSSU5HX0NKS19CT1RUT00gPSBhZl9ibHVlXzFfMSArIDIwMywKQEAgLTE5NiwyMCArMjQwLDMzIEBACiAgIHR5cGVkZWYgZW51bSAgQUZfQmx1ZV9TdHJpbmdzZXRfCiAgIHsKICAgICBBRl9CTFVFX1NUUklOR1NFVF9BUkFCID0gMCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9DWVJMID0gNCwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBID0gMTAsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfR1JFSyA9IDE2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hFQlIgPSAyMywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9LSE1SID0gMjcsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUyA9IDMzLAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBTyA9IDM2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVE4gPSA0MiwKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVRCID0gNDksCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUUCA9IDU2LAotICAgIEFGX0JMVUVfU1RSSU5HU0VUX01ZTVIgPSA2MywKLSAgICBBRl9CTFVFX1NUUklOR1NFVF9URUxVID0gNjgsCi0gICAgQUZfQkxVRV9TVFJJTkdTRVRfVEhBSSA9IDcxLAotICAgIGFmX2JsdWVfMl8xID0gNzksCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJNTiA9IDQsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfQkVORyA9IDExLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0NIRVIgPSAxNiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9DWVJMID0gMjMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfREVWQSA9IDI5LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0VUSEkgPSAzNSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HRU9SID0gMzgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPSyA9IDQzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dSRUsgPSA1MCwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9HVUpSID0gNTcsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VSVSA9IDYzLAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hFQlIgPSA2OSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9LTkRBID0gNzMsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfS0hNUiA9IDc2LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tITVMgPSA4MiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQU8gPSA4NSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9MQVROID0gOTEsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTEFUQiA9IDk4LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX0xBVFAgPSAxMDUsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfTUxZTSA9IDExMiwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9NWU1SID0gMTE1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX05PTkUgPSAxMjAsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSCA9IDEyMSwKKyAgICBBRl9CTFVFX1NUUklOR1NFVF9UQU1MID0gMTI1LAorICAgIEFGX0JMVUVfU1RSSU5HU0VUX1RFTFUgPSAxMjgsCisgICAgQUZfQkxVRV9TVFJJTkdTRVRfVEhBSSA9IDEzMSwKKyAgICBhZl9ibHVlXzJfMSA9IDEzOSwKICNpZmRlZiBBRl9DT05GSUdfT1BUSU9OX0NKSwogICAgIEFGX0JMVUVfU1RSSU5HU0VUX0hBTkkgPSBhZl9ibHVlXzJfMSArIDAsCiAgICAgYWZfYmx1ZV8yXzFfMSA9IGFmX2JsdWVfMl8xICsgMiwKQEAgLTI0NSw3ICszMDIsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0FGQkxVRV9IX18gKi8KKyNlbmRpZiAvKiBBRkJMVUVfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4gYi9zcmMvYXV0b2ZpdC9hZmJsdWUuaGluCmluZGV4IDFlYjkxNzIuLmRkNDRlNzcgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmYmx1ZS5oaW4KKysrIGIvc3JjL2F1dG9maXQvYWZibHVlLmhpbgpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBkYXRhIGZvciBibHVlIHN0cmluZ3MgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZCTFVFX0hfXwotI2RlZmluZSBfX0FGQkxVRV9IX18KKyNpZm5kZWYgQUZCTFVFX0hfCisjZGVmaW5lIEFGQkxVRV9IXwogCiAKIEZUX0JFR0lOX0hFQURFUgpAQCAtMTQwLDcgKzE0MCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQUZCTFVFX0hfXyAqLworI2VuZGlmIC8qIEFGQkxVRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuYyBiL3NyYy9hdXRvZml0L2FmY2prLmMKaW5kZXggNzNkNzVhZS4uNDgyM2MxZCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuYworKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICAgIGNvbnN0IGNoYXIqICBwOwogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIEZUX1VMb25nICBjaDsKKyAgICAgIEZUX1VMb25nICBjaCA9IDA7CiAjZW5kaWYKIAogICAgICAgcCAgICAgICAgICA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcnN0cmluZzsKQEAgLTk2NiwxNSArOTY2LDEyIEBACiAKICAgICAgIGlmICggc2VnMiApCiAgICAgICB7Ci0gICAgICAgIHNlZzItPm51bV9saW5rZWQrKzsKICAgICAgICAgaWYgKCBzZWcyLT5saW5rICE9IHNlZzEgKQogICAgICAgICB7CiAgICAgICAgICAgc2VnMS0+bGluayA9IE5VTEw7CiAKICAgICAgICAgICBpZiAoIHNlZzItPnNjb3JlIDwgZGlzdF90aHJlc2hvbGQgfHwgc2VnMS0+c2NvcmUgPCBzZWcyLT5zY29yZSAqIDQgKQogICAgICAgICAgICAgc2VnMS0+c2VyaWYgPSBzZWcyLT5saW5rOwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlZzItPm51bV9saW5rZWQtLTsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTEwOTEsNyArMTA4OCw3IEBACiAgICAgICAgIC8qIGluc2VydCBhIG5ldyBlZGdlIGluIHRoZSBsaXN0IGFuZCAqLwogICAgICAgICAvKiBzb3J0IGFjY29yZGluZyB0byB0aGUgcG9zaXRpb24gICAgKi8KICAgICAgICAgZXJyb3IgPSBhZl9heGlzX2hpbnRzX25ld19lZGdlKCBheGlzLCBzZWctPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUZfRGlyZWN0aW9uKXNlZy0+ZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9EaXJlY3Rpb24pc2VnLT5kaXIsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCAmZWRnZSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNTI4LDcgKzE1MjUsNyBAQAogICAgICAgfQogCiAgICAgICBpZiAoIGRpc3QgPCA1NCApCi0gICAgICAgIGRpc3QgKz0gKCA1NCAtIGRpc3QgKSAvIDIgOworICAgICAgICBkaXN0ICs9ICggNTQgLSBkaXN0ICkgLyAyOwogICAgICAgZWxzZSBpZiAoIGRpc3QgPCAzICogNjQgKQogICAgICAgewogICAgICAgICBGVF9Qb3MgIGRlbHRhOwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjamsuaCBiL3NyYy9hdXRvZml0L2FmY2prLmgKaW5kZXggZTM5NWU3NC4uNDBkMTE4NCAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZjamsuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmNqay5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIENKSyB3cml0aW5nIHN5c3RlbSAoc3BlY2lmaWNhdGlvbikuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRkNKS19IX18KLSNkZWZpbmUgX19BRkNKS19IX18KKyNpZm5kZWYgQUZDSktfSF8KKyNkZWZpbmUgQUZDSktfSF8KIAogI2luY2x1ZGUgImFmaGludHMuaCIKICNpbmNsdWRlICJhZmxhdGluLmgiCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRkNKS19IX18gKi8KKyNlbmRpZiAvKiBBRkNKS19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZjb3Zlci5oIGIvc3JjL2F1dG9maXQvYWZjb3Zlci5oCmluZGV4IDUyMGU4YTQuLjFjMzlhNzAgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmY292ZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmNvdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgY292ZXJhZ2VzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmZHVtbXkuYyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuYwppbmRleCA5MTQyYzc4Li5mMzk2MGM4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmMKKysrIGIvc3JjL2F1dG9maXQvYWZkdW1teS5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgQXV0by1maXR0ZXIgZHVtbXkgcm91dGluZXMgdG8gYmUgdXNlZCBpZiBubyBoaW50aW5nIHNob3VsZCBiZSAgICAgICAgKi8KIC8qICAgIHBlcmZvcm1lZCAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmR1bW15LmggYi9zcmMvYXV0b2ZpdC9hZmR1bW15LmgKaW5kZXggYjRmZGM3OC4uN2U1OGQxYSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZkdW1teS5oCisrKyBiL3NyYy9hdXRvZml0L2FmZHVtbXkuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGR1bW15IHJvdXRpbmVzIHRvIGJlIHVzZWQgaWYgbm8gaGludGluZyBzaG91bGQgYmUgICAgICAgICovCiAvKiAgICBwZXJmb3JtZWQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZEVU1NWV9IX18KLSNkZWZpbmUgX19BRkRVTU1ZX0hfXworI2lmbmRlZiBBRkRVTU1ZX0hfCisjZGVmaW5lIEFGRFVNTVlfSF8KIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKIApAQCAtMzQsNyArMzQsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0FGRFVNTVlfSF9fICovCisjZW5kaWYgLyogQUZEVU1NWV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZlcnJvcnMuaCBiL3NyYy9hdXRvZml0L2FmZXJyb3JzLmgKaW5kZXggN2I0MTZlNC4uNTNjMDFmNiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZlcnJvcnMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG9maXR0ZXIgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fQUZFUlJPUlNfSF9fCi0jZGVmaW5lIF9fQUZFUlJPUlNfSF9fCisjaWZuZGVmIEFGRVJST1JTX0hfCisjZGVmaW5lIEFGRVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgQUZfRXJyXwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19BRkVSUk9SU19IX18gKi8KKyNlbmRpZiAvKiBBRkVSUk9SU19IXyAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuYyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmMKaW5kZXggMzIyMzM1OC4uYWM2ZGNhZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZnbG9iYWwuYworKysgYi9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHJvdXRpbmVzIHRvIGNvbXB1dGUgZ2xvYmFsIGhpbnRpbmcgdmFsdWVzIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC00MiwxMiArNDIsMTMgQEAKIAogCiAjdW5kZWYgIFNDUklQVAotI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNzICkgXAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIEgsIHNzICkgICAgICAgICBcCiAgICAgICAgICAgQUZfREVGSU5FX1NDUklQVF9DTEFTUyggICAgICAgICAgIFwKICAgICAgICAgICAgIGFmXyAjIyBzICMjIF9zY3JpcHRfY2xhc3MsICAgICAgXAogICAgICAgICAgICAgQUZfU0NSSVBUXyAjIyBTLCAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBhZl8gIyMgcyAjIyBfdW5pcmFuZ2VzLCAgICAgICAgIFwKICAgICAgICAgICAgIGFmXyAjIyBzICMjIF9ub25iYXNlX3VuaXJhbmdlcywgXAorICAgICAgICAgICAgQUZfICMjIEgsICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBzcyApCiAKICNpbmNsdWRlICJhZnNjcmlwdC5oIgpAQCAtODMsNyArODQsNyBAQAogCiAKICN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc3MgKSBcCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3MgKSAgIFwKICAgICAgICAgICAmYWZfICMjIHMgIyMgX3NjcmlwdF9jbGFzcywKIAogICBGVF9MT0NBTF9BUlJBWV9ERUYoIEFGX1NjcmlwdENsYXNzICkKQEAgLTI0MCwyMyArMjQxLDIzIEBACiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIGdldCBnbHlwaHMgbm90IGRpcmVjdGx5IGFkZHJlc3NhYmxlIGJ5IGNtYXAgKi8KLSAgICAgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMgKTsKKyAgICAgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMsIDAgKTsKICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBoYW5kbGUgdGhlIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHQgc2NyaXB0IC4uLiAqLwotICAgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIGdsb2JhbHMsIEFGX1NUWUxFX0NMQVNTRVNfR0VUW2RmbHRdLCBnc3R5bGVzICk7Ci0KLSAgICAvKiAuLi4gYW5kIHRoZSByZW1haW5pbmcgZGVmYXVsdCBPcGVuVHlwZSBmZWF0dXJlcyAqLworICAgIC8qIGhhbmRsZSB0aGUgcmVtYWluaW5nIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgLi4uICovCiAgICAgZm9yICggc3MgPSAwOyBBRl9TVFlMRV9DTEFTU0VTX0dFVFtzc107IHNzKysgKQogICAgIHsKICAgICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzID0gQUZfU1RZTEVfQ0xBU1NFU19HRVRbc3NdOwogCiAKLSAgICAgIGlmICggc3MgIT0gZGZsdCAmJiBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgPT0gQUZfQ09WRVJBR0VfREVGQVVMVCApCi0gICAgICAgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIGdsb2JhbHMsIHN0eWxlX2NsYXNzLCBnc3R5bGVzICk7CisgICAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKyAgICAgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgc3R5bGVfY2xhc3MsIGdzdHlsZXMsIDAgKTsKICAgICB9CiAKKyAgICAvKiAuLi4gYW5kIGZpbmFsbHkgdGhlIGRlZmF1bHQgT3BlblR5cGUgZmVhdHVyZXMgb2YgdGhlIGRlZmF1bHQgc2NyaXB0ICovCisgICAgYWZfc2hhcGVyX2dldF9jb3ZlcmFnZSggZ2xvYmFscywgQUZfU1RZTEVfQ0xBU1NFU19HRVRbZGZsdF0sIGdzdHlsZXMsIDEgKTsKKwogICAgIC8qIG1hcmsgQVNDSUkgZGlnaXRzICovCiAgICAgZm9yICggaSA9IDB4MzA7IGkgPD0gMHgzOTsgaSsrICkKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oIGIvc3JjL2F1dG9maXQvYWZnbG9iYWwuaAppbmRleCA1YjRlNDM5Li5jZTZiOWU4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmdsb2JhbC5oCisrKyBiL3NyYy9hdXRvZml0L2FmZ2xvYmFsLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBBdXRvLWZpdHRlciByb3V0aW5lcyB0byBjb21wdXRlIGdsb2JhbCBoaW50aW5nIHZhbHVlcyAgICAgICAgICAgICAgICAqLwogLyogICAgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDggKzE3LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGR0xPQkFMX0hfXwotI2RlZmluZSBfX0FGR0xPQkFMX0hfXworI2lmbmRlZiBBRkdMT0JBTF9IXworI2RlZmluZSBBRkdMT0JBTF9IXwogCiAKICNpbmNsdWRlICJhZnR5cGVzLmgiCkBAIC0zNCw3ICszNCw3IEBACiAKIAogI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBBRl9ERUNMQVJFX1NDUklQVF9DTEFTUyggYWZfICMjIHMgIyMgX3NjcmlwdF9jbGFzcyApCiAKICNpbmNsdWRlICJhZnNjcmlwdC5oIgpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZHTE9CQUxfSF9fICovCisjZW5kaWYgLyogQUZHTE9CQUxfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmaGludHMuYyBiL3NyYy9hdXRvZml0L2FmaGludHMuYwppbmRleCA1NmM4MjIwLi4wZjdmNmU1IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmhpbnRzLmMKKysrIGIvc3JjL2F1dG9maXQvYWZoaW50cy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC05OSw2ICs5OSw3IEBACiAgIGFmX2F4aXNfaGludHNfbmV3X2VkZ2UoIEFGX0F4aXNIaW50cyAgYXhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICBmcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9EaXJlY3Rpb24gIGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICB0b3BfdG9fYm90dG9tX2hpbnRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICAgbWVtb3J5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9FZGdlICAgICAgKmFuZWRnZSApCiAgIHsKQEAgLTE1Myw3ICsxNTQsOCBAQAogCiAgICAgd2hpbGUgKCBlZGdlID4gZWRnZXMgKQogICAgIHsKLSAgICAgIGlmICggZWRnZVstMV0uZnBvcyA8IGZwb3MgKQorICAgICAgaWYgKCB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPyAoIGVkZ2VbLTFdLmZwb3MgPiBmcG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBlZGdlWy0xXS5mcG9zIDwgZnBvcyApICkKICAgICAgICAgYnJlYWs7CiAKICAgICAgIC8qIHdlIHdhbnQgdGhlIGVkZ2Ugd2l0aCBzYW1lIHBvc2l0aW9uIGFuZCBtaW5vciBkaXJlY3Rpb24gKi8KQEAgLTMwMiwxNiArMzA0LDE4IEBACiAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzKCBBRl9HbHlwaEhpbnRzICBoaW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgIHRvX3N0ZG91dCApCiAgIHsKLSAgICBBRl9Qb2ludCAgcG9pbnRzID0gaGludHMtPnBvaW50czsKLSAgICBBRl9Qb2ludCAgbGltaXQgID0gcG9pbnRzICsgaGludHMtPm51bV9wb2ludHM7Ci0gICAgQUZfUG9pbnQgIHBvaW50OworICAgIEFGX1BvaW50ICAgcG9pbnRzICA9IGhpbnRzLT5wb2ludHM7CisgICAgQUZfUG9pbnQgICBsaW1pdCAgID0gcG9pbnRzICsgaGludHMtPm51bV9wb2ludHM7CisgICAgQUZfUG9pbnQqICBjb250b3VyID0gaGludHMtPmNvbnRvdXJzOworICAgIEFGX1BvaW50KiAgY2xpbWl0ICA9IGNvbnRvdXIgKyBoaW50cy0+bnVtX2NvbnRvdXJzOworICAgIEFGX1BvaW50ICAgcG9pbnQ7CiAKIAogICAgIEFGX0RVTVAoKCAiVGFibGUgb2YgcG9pbnRzOlxuIiApKTsKIAogICAgIGlmICggaGludHMtPm51bV9wb2ludHMgKQotICAgICAgQUZfRFVNUCgoICIgIGluZGV4ICBoZWRnZSAgaHNlZyAgdmVkZ2UgIHZzZWcgIGZsYWdzIgotICAgICAgICAgICAgICAgICIgIHhvcmcgIHlvcmcgIHhzY2FsZSAgeXNjYWxlICAgeGZpdCAgICB5Zml0XG4iICkpOworICAgICAgQUZfRFVNUCgoICIgIGluZGV4ICBoZWRnZSAgaHNlZyAgdmVkZ2UgIHZzZWcgIGZsYWdzICIKKyAgICAgICAgICAgICAgICAiICB4b3JnICB5b3JnICB4c2NhbGUgIHlzY2FsZSAgIHhmaXQgICAgeWZpdCIgKSk7CiAgICAgZWxzZQogICAgICAgQUZfRFVNUCgoICIgIChub25lKVxuIiApKTsKIApAQCAtMzI0LDcgKzMyOCwxNCBAQAogICAgICAgY2hhciAgYnVmMVsxNl0sIGJ1ZjJbMTZdLCBidWYzWzE2XSwgYnVmNFsxNl07CiAKIAotICAgICAgQUZfRFVNUCgoICIgICU1ZCAgJTVzICU1cyAgJTVzICU1cyAgJXMgIgorICAgICAgLyogaW5zZXJ0IGV4dHJhIG5ld2xpbmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGNvbnRvdXIgKi8KKyAgICAgIGlmICggY29udG91ciA8IGNsaW1pdCAmJiAqY29udG91ciA9PSBwb2ludCApCisgICAgICB7CisgICAgICAgIEFGX0RVTVAoKCAiXG4iICkpOworICAgICAgICBjb250b3VyKys7CisgICAgICB9CisKKyAgICAgIEFGX0RVTVAoKCAiICAlNWQgICU1cyAlNXMgICU1cyAlNXMgICVzIgogICAgICAgICAgICAgICAgICIgJTVkICU1ZCAlNy4yZiAlNy4yZiAlNy4yZiAlNy4yZlxuIiwKICAgICAgICAgICAgICAgICBwb2ludF9pZHgsCiAgICAgICAgICAgICAgICAgYWZfcHJpbnRfaWR4KCBidWYxLApAQCAtMzMzLDggKzM0NCwxMSBAQAogICAgICAgICAgICAgICAgIGFmX3ByaW50X2lkeCggYnVmMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmX2dldF9lZGdlX2luZGV4KCBoaW50cywgc2VnbWVudF9pZHhfMCwgMCApICksCiAgICAgICAgICAgICAgICAgYWZfcHJpbnRfaWR4KCBidWY0LCBzZWdtZW50X2lkeF8wICksCi0gICAgICAgICAgICAgICAgKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX1dFQUtfSU5URVJQT0xBVElPTiApID8gIndlYWsiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiAtLSAiLAorICAgICAgICAgICAgICAgICggcG9pbnQtPmZsYWdzICYgQUZfRkxBR19ORUFSICkKKyAgICAgICAgICAgICAgICAgID8gIiBuZWFyICIKKyAgICAgICAgICAgICAgICAgIDogKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX1dFQUtfSU5URVJQT0xBVElPTiApCisgICAgICAgICAgICAgICAgICAgID8gIiB3ZWFrICIKKyAgICAgICAgICAgICAgICAgICAgOiAic3Ryb25nIiwKIAogICAgICAgICAgICAgICAgIHBvaW50LT5meCwKICAgICAgICAgICAgICAgICBwb2ludC0+ZnksCkBAIC00MDYsMjAgKzQyMCwxOSBAQAogICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9PSBBRl9ESU1FTlNJT05fSE9SWiA/ICJ2ZXJ0aWNhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaG9yaXpvbnRhbCIgKSk7CiAgICAgICBpZiAoIGF4aXMtPm51bV9zZWdtZW50cyApCi0gICAgICAgIEFGX0RVTVAoKCAiICBpbmRleCAgIHBvcyAgICBkaXIgICBmcm9tICAgdG8iCi0gICAgICAgICAgICAgICAgICAiICAgbGluayAgc2VyaWYgIGVkZ2UiCisgICAgICAgIEFGX0RVTVAoKCAiICBpbmRleCAgIHBvcyAgIGRlbHRhICAgZGlyICAgZnJvbSAgIHRvICIKKyAgICAgICAgICAgICAgICAgICIgIGxpbmsgIHNlcmlmICBlZGdlIgogICAgICAgICAgICAgICAgICAgIiAgaGVpZ2h0ICBleHRyYSAgICAgZmxhZ3NcbiIgKSk7CiAgICAgICBlbHNlCiAgICAgICAgIEFGX0RVTVAoKCAiICAobm9uZSlcbiIgKSk7CiAKICAgICAgIGZvciAoIHNlZyA9IHNlZ21lbnRzOyBzZWcgPCBsaW1pdDsgc2VnKysgKQotICAgICAgICBBRl9EVU1QKCggIiAgJTVkICAlNS4yZyAgJTVzICAlNGQgICU0ZCIKKyAgICAgICAgQUZfRFVNUCgoICIgICU1ZCAgJTVkICAlNWQgICU1cyAgJTRkICAlNGQiCiAgICAgICAgICAgICAgICAgICAiICAlNHMgICU1cyAgJTRzIgogICAgICAgICAgICAgICAgICAgIiAgJTZkICAlNWQgICUxMXNcbiIsCiAgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIHNlZywgc2VnbWVudHMgKSwKLSAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbiA9PSBBRl9ESU1FTlNJT05fSE9SWgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGludClzZWctPmZpcnN0LT5veCAvIDY0LjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChpbnQpc2VnLT5maXJzdC0+b3kgLyA2NC4wLAorICAgICAgICAgICAgICAgICAgc2VnLT5wb3MsCisgICAgICAgICAgICAgICAgICBzZWctPmRlbHRhLAogICAgICAgICAgICAgICAgICAgYWZfZGlyX3N0ciggKEFGX0RpcmVjdGlvbilzZWctPmRpciApLAogICAgICAgICAgICAgICAgICAgQUZfSU5ERVhfTlVNKCBzZWctPmZpcnN0LCBwb2ludHMgKSwKICAgICAgICAgICAgICAgICAgIEFGX0lOREVYX05VTSggc2VnLT5sYXN0LCBwb2ludHMgKSwKQEAgLTUzOSwxOCArNTUyLDI2IEBACiAgICAgICAgKiAgbm90ZTogQUZfRElNRU5TSU9OX0hPUlogY29ycmVzcG9uZHMgdG8gX3ZlcnRpY2FsXyBlZGdlcwogICAgICAgICogICAgICAgIHNpbmNlIHRoZXkgaGF2ZSBhIGNvbnN0YW50IFggY29vcmRpbmF0ZS4KICAgICAgICAqLwotICAgICAgQUZfRFVNUCgoICJUYWJsZSBvZiAlcyBlZGdlczpcbiIsCi0gICAgICAgICAgICAgICAgZGltZW5zaW9uID09IEFGX0RJTUVOU0lPTl9IT1JaID8gInZlcnRpY2FsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJob3Jpem9udGFsIiApKTsKKyAgICAgIGlmICggZGltZW5zaW9uID09IEFGX0RJTUVOU0lPTl9IT1JaICkKKyAgICAgICAgQUZfRFVNUCgoICJUYWJsZSBvZiAlcyBlZGdlcyAoMXB4PSUuMmZ1LCAxMHU9JS4yZnB4KTpcbiIsCisgICAgICAgICAgICAgICAgICAidmVydGljYWwiLAorICAgICAgICAgICAgICAgICAgNjU1MzYuMCAqIDY0LjAgLyBoaW50cy0+eF9zY2FsZSwKKyAgICAgICAgICAgICAgICAgIDEwLjAgKiBoaW50cy0+eF9zY2FsZSAvIDY1NTM2LjAgLyA2NC4wICkpOworICAgICAgZWxzZQorICAgICAgICBBRl9EVU1QKCggIlRhYmxlIG9mICVzIGVkZ2VzICgxcHg9JS4yZnUsIDEwdT0lLjJmcHgpOlxuIiwKKyAgICAgICAgICAgICAgICAgICJob3Jpem9udGFsIiwKKyAgICAgICAgICAgICAgICAgIDY1NTM2LjAgKiA2NC4wIC8gaGludHMtPnlfc2NhbGUsCisgICAgICAgICAgICAgICAgICAxMC4wICogaGludHMtPnlfc2NhbGUgLyA2NTUzNi4wIC8gNjQuMCApKTsKKwogICAgICAgaWYgKCBheGlzLT5udW1fZWRnZXMgKQotICAgICAgICBBRl9EVU1QKCggIiAgaW5kZXggICBwb3MgICAgZGlyICAgbGluayAgc2VyaWYiCi0gICAgICAgICAgICAgICAgICAiICBibHVlICBvcG9zICAgIHBvcyAgICAgIGZsYWdzXG4iICkpOworICAgICAgICBBRl9EVU1QKCggIiAgaW5kZXggICAgcG9zICAgICBkaXIgICBsaW5rICBzZXJpZiIKKyAgICAgICAgICAgICAgICAgICIgIGJsdWUgICAgb3BvcyAgICAgcG9zICAgICAgIGZsYWdzXG4iICkpOwogICAgICAgZWxzZQogICAgICAgICBBRl9EVU1QKCggIiAgKG5vbmUpXG4iICkpOwogCiAgICAgICBmb3IgKCBlZGdlID0gZWRnZXM7IGVkZ2UgPCBsaW1pdDsgZWRnZSsrICkKLSAgICAgICAgQUZfRFVNUCgoICIgICU1ZCAgJTUuMmcgICU1cyAgJTRzICAlNXMiCi0gICAgICAgICAgICAgICAgICAiICAgICVjICAgJTUuMmYgICU1LjJmICAlMTFzXG4iLAorICAgICAgICBBRl9EVU1QKCggIiAgJTVkICAlNy4yZiAgJTVzICAlNHMgICU1cyIKKyAgICAgICAgICAgICAgICAgICIgICAgJWMgICAlNy4yZiAgJTcuMmYgICUxMXNcbiIsCiAgICAgICAgICAgICAgICAgICBBRl9JTkRFWF9OVU0oIGVkZ2UsIGVkZ2VzICksCiAgICAgICAgICAgICAgICAgICAoaW50KWVkZ2UtPm9wb3MgLyA2NC4wLAogICAgICAgICAgICAgICAgICAgYWZfZGlyX3N0ciggKEFGX0RpcmVjdGlvbillZGdlLT5kaXIgKSwKQEAgLTgwMiwxOCArODIzLDI2IEBACiAgICAgICBBRl9Qb2ludCAgcG9pbnQ7CiAgICAgICBBRl9Qb2ludCAgcG9pbnRfbGltaXQgPSBwb2ludHMgKyBoaW50cy0+bnVtX3BvaW50czsKIAorICAgICAgLyogdmFsdWUgMjAgaW4gYG5lYXJfbGltaXQnIGlzIGhldXJpc3RpYyAqLworICAgICAgRlRfVUludCAgdW5pdHNfcGVyX2VtID0gaGludHMtPm1ldHJpY3MtPnNjYWxlci5mYWNlLT51bml0c19wZXJfRU07CisgICAgICBGVF9JbnQgICBuZWFyX2xpbWl0ICAgPSAyMCAqIHVuaXRzX3Blcl9lbSAvIDIwNDg7CisKIAogICAgICAgLyogY29tcHV0ZSBjb29yZGluYXRlcyAmIEJlemllciBmbGFncywgbmV4dCBhbmQgcHJldiAqLwogICAgICAgewogICAgICAgICBGVF9WZWN0b3IqICB2ZWMgICAgICAgICAgID0gb3V0bGluZS0+cG9pbnRzOwogICAgICAgICBjaGFyKiAgICAgICB0YWcgICAgICAgICAgID0gb3V0bGluZS0+dGFnczsKLSAgICAgICAgQUZfUG9pbnQgICAgZW5kICAgICAgICAgICA9IHBvaW50cyArIG91dGxpbmUtPmNvbnRvdXJzWzBdOworICAgICAgICBGVF9TaG9ydCAgICBlbmRwb2ludCAgICAgID0gb3V0bGluZS0+Y29udG91cnNbMF07CisgICAgICAgIEFGX1BvaW50ICAgIGVuZCAgICAgICAgICAgPSBwb2ludHMgKyBlbmRwb2ludDsKICAgICAgICAgQUZfUG9pbnQgICAgcHJldiAgICAgICAgICA9IGVuZDsKICAgICAgICAgRlRfSW50ICAgICAgY29udG91cl9pbmRleCA9IDA7CiAKIAogICAgICAgICBmb3IgKCBwb2ludCA9IHBvaW50czsgcG9pbnQgPCBwb2ludF9saW1pdDsgcG9pbnQrKywgdmVjKyssIHRhZysrICkKICAgICAgICAgeworICAgICAgICAgIEZUX1BvcyAgb3V0X3gsIG91dF95OworCisKICAgICAgICAgICBwb2ludC0+aW5fZGlyICA9IChGVF9DaGFyKUFGX0RJUl9OT05FOwogICAgICAgICAgIHBvaW50LT5vdXRfZGlyID0gKEZUX0NoYXIpQUZfRElSX05PTkU7CiAKQEAgLTgyMiw2ICs4NTEsOSBAQAogICAgICAgICAgIHBvaW50LT5veCA9IHBvaW50LT54ID0gRlRfTXVsRml4KCB2ZWMtPngsIHhfc2NhbGUgKSArIHhfZGVsdGE7CiAgICAgICAgICAgcG9pbnQtPm95ID0gcG9pbnQtPnkgPSBGVF9NdWxGaXgoIHZlYy0+eSwgeV9zY2FsZSApICsgeV9kZWx0YTsKIAorICAgICAgICAgIGVuZC0+ZnggPSAoRlRfU2hvcnQpb3V0bGluZS0+cG9pbnRzW2VuZHBvaW50XS54OworICAgICAgICAgIGVuZC0+ZnkgPSAoRlRfU2hvcnQpb3V0bGluZS0+cG9pbnRzW2VuZHBvaW50XS55OworCiAgICAgICAgICAgc3dpdGNoICggRlRfQ1VSVkVfVEFHKCAqdGFnICkgKQogICAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEZUX0NVUlZFX1RBR19DT05JQzoKQEAgLTgzNCw2ICs4NjYsMTIgQEAKICAgICAgICAgICAgIHBvaW50LT5mbGFncyA9IEFGX0ZMQUdfTk9ORTsKICAgICAgICAgICB9CiAKKyAgICAgICAgICBvdXRfeCA9IHBvaW50LT5meCAtIHByZXYtPmZ4OworICAgICAgICAgIG91dF95ID0gcG9pbnQtPmZ5IC0gcHJldi0+Znk7CisKKyAgICAgICAgICBpZiAoIEZUX0FCUyggb3V0X3ggKSArIEZUX0FCUyggb3V0X3kgKSA8IG5lYXJfbGltaXQgKQorICAgICAgICAgICAgcHJldi0+ZmxhZ3MgfD0gQUZfRkxBR19ORUFSOworCiAgICAgICAgICAgcG9pbnQtPnByZXYgPSBwcmV2OwogICAgICAgICAgIHByZXYtPm5leHQgID0gcG9pbnQ7CiAgICAgICAgICAgcHJldiAgICAgICAgPSBwb2ludDsKQEAgLTg0Miw4ICs4ODAsOSBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIGlmICggKytjb250b3VyX2luZGV4IDwgb3V0bGluZS0+bl9jb250b3VycyApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGVuZCAgPSBwb2ludHMgKyBvdXRsaW5lLT5jb250b3Vyc1tjb250b3VyX2luZGV4XTsKLSAgICAgICAgICAgICAgcHJldiA9IGVuZDsKKyAgICAgICAgICAgICAgZW5kcG9pbnQgPSBvdXRsaW5lLT5jb250b3Vyc1tjb250b3VyX2luZGV4XTsKKyAgICAgICAgICAgICAgZW5kICAgICAgPSBwb2ludHMgKyBlbmRwb2ludDsKKyAgICAgICAgICAgICAgcHJldiAgICAgPSBlbmQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NjksMTcgKzkwOCwxNSBAQAogICAgICAgICAgKiAgQ29tcHV0ZSBkaXJlY3Rpb25zIG9mIGBpbicgYW5kIGBvdXQnIHZlY3RvcnMuCiAgICAgICAgICAqCiAgICAgICAgICAqICBOb3RlIHRoYXQgZGlzdGFuY2VzIGJldHdlZW4gcG9pbnRzIHRoYXQgYXJlIHZlcnkgbmVhciB0byBlYWNoCi0gICAgICAgICAqICBvdGhlciBhcmUgYWNjdW11bGF0ZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGF1dG8taGludGVyCisgICAgICAgICAqICBvdGhlciBhcmUgYWNjdW11bGF0ZWQuICBJbiBvdGhlciB3b3JkcywgdGhlIGF1dG8taGludGVyIGVpdGhlcgogICAgICAgICAgKiAgcHJlcGVuZHMgdGhlIHNtYWxsIHZlY3RvcnMgYmV0d2VlbiBuZWFyIHBvaW50cyB0byB0aGUgZmlyc3QKLSAgICAgICAgICogIG5vbi1uZWFyIHZlY3Rvci4gIEFsbCBpbnRlcm1lZGlhdGUgcG9pbnRzIGFyZSB0YWdnZWQgYXMKLSAgICAgICAgICogIHdlYWs7IHRoZSBkaXJlY3Rpb25zIGFyZSBhZGp1c3RlZCBhbHNvIHRvIGJlIGVxdWFsIHRvIHRoZQotICAgICAgICAgKiAgYWNjdW11bGF0ZWQgb25lLgorICAgICAgICAgKiAgbm9uLW5lYXIgdmVjdG9yLCBvciB0aGUgc3VtIG9mIHNtYWxsIHZlY3RvciBsZW5ndGhzIGV4Y2VlZHMgYQorICAgICAgICAgKiAgdGhyZXNob2xkLCB0aHVzIGBncm91cGluZycgdGhlIHNtYWxsIHZlY3RvcnMuICBBbGwgaW50ZXJtZWRpYXRlCisgICAgICAgICAqICBwb2ludHMgYXJlIHRhZ2dlZCBhcyB3ZWFrOyB0aGUgZGlyZWN0aW9ucyBhcmUgYWRqdXN0ZWQgYWxzbyB0bworICAgICAgICAgKiAgYmUgZXF1YWwgdG8gdGhlIGFjY3VtdWxhdGVkIG9uZS4KICAgICAgICAgICovCiAKLSAgICAgICAgLyogdmFsdWUgMjAgaW4gYG5lYXJfbGltaXQnIGlzIGhldXJpc3RpYyAqLwotICAgICAgICBGVF9VSW50ICB1bml0c19wZXJfZW0gPSBoaW50cy0+bWV0cmljcy0+c2NhbGVyLmZhY2UtPnVuaXRzX3Blcl9FTTsKLSAgICAgICAgRlRfSW50ICAgbmVhcl9saW1pdCAgID0gMjAgKiB1bml0c19wZXJfZW0gLyAyMDQ4OwotICAgICAgICBGVF9JbnQgICBuZWFyX2xpbWl0MiAgPSAyICogbmVhcl9saW1pdCAtIDE7CisgICAgICAgIEZUX0ludCAgbmVhcl9saW1pdDIgPSAyICogbmVhcl9saW1pdCAtIDE7CiAKICAgICAgICAgQUZfUG9pbnQqICBjb250b3VyOwogICAgICAgICBBRl9Qb2ludCogIGNvbnRvdXJfbGltaXQgPSBoaW50cy0+Y29udG91cnMgKyBoaW50cy0+bnVtX2NvbnRvdXJzOwpAQCAtOTI2LDcgKzk2Myw3IEBACiAgICAgICAgICAgLyogbm93IGxvb3Agb3ZlciBhbGwgcG9pbnRzIG9mIHRoZSBjb250b3VyIHRvIGdldCAqLwogICAgICAgICAgIC8qIGBpbicgYW5kIGBvdXQnIHZlY3RvciBkaXJlY3Rpb25zICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgIGN1cnIgID0gZmlyc3Q7CisgICAgICAgICAgY3VyciA9IGZpcnN0OwogCiAgICAgICAgICAgLyoKICAgICAgICAgICAgKiAgV2UgYWJ1c2UgdGhlIGB1JyBhbmQgYHYnIGZpZWxkcyB0byBzdG9yZSBpbmRleCBkZWx0YXMgdG8gdGhlCkBAIC05NDksNyArOTg2LDcgQEAKIAogCiAgICAgICAgICAgICBwb2ludCA9IG5leHQ7Ci0gICAgICAgICAgICBuZXh0ID0gcG9pbnQtPm5leHQ7CisgICAgICAgICAgICBuZXh0ICA9IHBvaW50LT5uZXh0OwogCiAgICAgICAgICAgICBvdXRfeCArPSBuZXh0LT5meCAtIHBvaW50LT5meDsKICAgICAgICAgICAgIG91dF95ICs9IG5leHQtPmZ5IC0gcG9pbnQtPmZ5OwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZoaW50cy5oIGIvc3JjL2F1dG9maXQvYWZoaW50cy5oCmluZGV4IGE2NGM3YTQuLjRmZGY3MzIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmaGludHMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmhpbnRzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGSElOVFNfSF9fCi0jZGVmaW5lIF9fQUZISU5UU19IX18KKyNpZm5kZWYgQUZISU5UU19IXworI2RlZmluZSBBRkhJTlRTX0hfCiAKICNpbmNsdWRlICJhZnR5cGVzLmgiCiAKQEAgLTIyMSw2ICsyMjEsOSBAQAogICAvKiBjYW5kaWRhdGVzIGZvciB3ZWFrIGludGVycG9sYXRpb24gaGF2ZSB0aGlzIGZsYWcgc2V0ICovCiAjZGVmaW5lIEFGX0ZMQUdfV0VBS19JTlRFUlBPTEFUSU9OICAoIDFVIDw8IDQgKQogCisgIC8qIHRoZSBkaXN0YW5jZSB0byB0aGUgbmV4dCBwb2ludCBpcyB2ZXJ5IHNtYWxsICovCisjZGVmaW5lIEFGX0ZMQUdfTkVBUiAgKCAxVSA8PCA1ICkKKwogCiAgIC8qIGVkZ2UgaGludCBmbGFncyAqLwogI2RlZmluZSBBRl9FREdFX05PUk1BTCAgMApAQCAtMjU3LDYgKzI2MCw3IEBACiAgICAgRlRfQnl0ZSAgICAgZmxhZ3M7ICAgICAgIC8qIGVkZ2Uvc2VnbWVudCBmbGFncyBmb3IgdGhpcyBzZWdtZW50ICovCiAgICAgRlRfQ2hhciAgICAgZGlyOyAgICAgICAgIC8qIHNlZ21lbnQgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICovCiAgICAgRlRfU2hvcnQgICAgcG9zOyAgICAgICAgIC8qIHBvc2l0aW9uIG9mIHNlZ21lbnQgICAgICAgICAgICAgICAgICovCisgICAgRlRfU2hvcnQgICAgZGVsdGE7ICAgICAgIC8qIGRldmlhdGlvbiBmcm9tIHNlZ21lbnQgcG9zaXRpb24gICAgICovCiAgICAgRlRfU2hvcnQgICAgbWluX2Nvb3JkOyAgIC8qIG1pbmltdW0gY29vcmRpbmF0ZSBvZiBzZWdtZW50ICAgICAgICovCiAgICAgRlRfU2hvcnQgICAgbWF4X2Nvb3JkOyAgIC8qIG1heGltdW0gY29vcmRpbmF0ZSBvZiBzZWdtZW50ICAgICAgICovCiAgICAgRlRfU2hvcnQgICAgaGVpZ2h0OyAgICAgIC8qIHRoZSBoaW50ZWQgc2VnbWVudCBoZWlnaHQgICAgICAgICAgICovCkBAIC0yNjYsNyArMjcwLDYgQEAKIAogICAgIEFGX1NlZ21lbnQgIGxpbms7ICAgICAgICAvKiAoc3RlbSkgbGluayBzZWdtZW50ICAgICAgICAqLwogICAgIEFGX1NlZ21lbnQgIHNlcmlmOyAgICAgICAvKiBwcmltYXJ5IHNlZ21lbnQgZm9yIHNlcmlmcyAqLwotICAgIEZUX1BvcyAgICAgIG51bV9saW5rZWQ7ICAvKiBudW1iZXIgb2YgbGlua2VkIHNlZ21lbnRzICAqLwogICAgIEZUX1BvcyAgICAgIHNjb3JlOyAgICAgICAvKiB1c2VkIGR1cmluZyBzdGVtIG1hdGNoaW5nICAqLwogICAgIEZUX1BvcyAgICAgIGxlbjsgICAgICAgICAvKiB1c2VkIGR1cmluZyBzdGVtIG1hdGNoaW5nICAqLwogCkBAIC0yODksNyArMjkyLDYgQEAKICAgICBBRl9XaWR0aCAgICBibHVlX2VkZ2U7ICAvKiBub24tTlVMTCBpZiB0aGlzIGlzIGEgYmx1ZSBlZGdlICovCiAgICAgQUZfRWRnZSAgICAgbGluazsgICAgICAgLyogbGluayBlZGdlICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIEFGX0VkZ2UgICAgIHNlcmlmOyAgICAgIC8qIHByaW1hcnkgZWRnZSBmb3Igc2VyaWZzICAgICAgICAgKi8KLSAgICBGVF9TaG9ydCAgICBudW1fbGlua2VkOyAvKiBudW1iZXIgb2YgbGlua2VkIGVkZ2VzICAgICAgICAgICovCiAgICAgRlRfSW50ICAgICAgc2NvcmU7ICAgICAgLyogdXNlZCBkdXJpbmcgc3RlbSBtYXRjaGluZyAgICAgICAqLwogCiAgICAgQUZfU2VnbWVudCAgZmlyc3Q7ICAgICAgLyogZmlyc3Qgc2VnbWVudCBpbiBlZGdlICovCkBAIC00MTksNiArNDIxLDcgQEAKICAgYWZfYXhpc19oaW50c19uZXdfZWRnZSggQUZfQXhpc0hpbnRzICBheGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgIGZwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpcmVjdGlvbiAgZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgIHRvcF90b19ib3R0b21faGludGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0VkZ2UgICAgICAqZWRnZSApOwogCkBAIC00NzIsNyArNDc1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRkhJTlRTX0hfXyAqLworI2VuZGlmIC8qIEFGSElOVFNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmaW5kaWMuYyBiL3NyYy9hdXRvZml0L2FmaW5kaWMuYwppbmRleCA1OWIxNGQ3Li4wOTdhMmIyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmluZGljLmMKKysrIGIvc3JjL2F1dG9maXQvYWZpbmRpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIEluZGljIHdyaXRpbmcgc3lzdGVtIChib2R5KS4gICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgUmFodWwgQmhhbGVyYW8gPHJhaHVsLmJoYWxlcmFvQHJlZGhhdC5jb20+LCA8Yi5yYWh1bC5wbUBnbWFpbC5jb20+LiAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZmluZGljLmggYi9zcmMvYXV0b2ZpdC9hZmluZGljLmgKaW5kZXggNGMzNjkwOC4uMDc3MmUwNyAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZpbmRpYy5oCisrKyBiL3NyYy9hdXRvZml0L2FmaW5kaWMuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIEluZGljIHdyaXRpbmcgc3lzdGVtICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDctMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFJhaHVsIEJoYWxlcmFvIDxyYWh1bC5iaGFsZXJhb0ByZWRoYXQuY29tPiwgPGIucmFodWwucG1AZ21haWwuY29tPi4gICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZJTkRJQ19IX18KLSNkZWZpbmUgX19BRklORElDX0hfXworI2lmbmRlZiBBRklORElDX0hfCisjZGVmaW5lIEFGSU5ESUNfSF8KIAogI2luY2x1ZGUgImFmaGludHMuaCIKIApAQCAtMzUsNyArMzUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGSU5ESUNfSF9fICovCisjZW5kaWYgLyogQUZJTkRJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsYXRpbi5jIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5jCmluZGV4IDljOWYzNzAuLmRiN2FhZmYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbGF0aW4uYworKysgYi9zcmMvYXV0b2ZpdC9hZmxhdGluLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gKGJvZHkpLiAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgIGNvbnN0IGNoYXIqICBwOwogCiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIEZUX1VMb25nICBjaDsKKyAgICAgIEZUX1VMb25nICBjaCA9IDA7CiAjZW5kaWYKIAogICAgICAgcCAgICAgICAgICA9IHNjcmlwdF9jbGFzcy0+c3RhbmRhcmRfY2hhcnN0cmluZzsKQEAgLTEwNzYsNyArMTA3Niw3IEBACiAgICAgICAgIEZUX1VJbnQgIHBwZW07CiAKIAotICAgICAgICBzY2FsZWQgICAgPSBGVF9NdWxGaXgoIGJsdWUtPnNob290Lm9yZywgc2NhbGVyLT55X3NjYWxlICk7CisgICAgICAgIHNjYWxlZCAgICA9IEZUX011bEZpeCggYmx1ZS0+c2hvb3Qub3JnLCBzY2FsZSApOwogICAgICAgICBwcGVtICAgICAgPSBtZXRyaWNzLT5yb290LnNjYWxlci5mYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsKICAgICAgICAgbGltaXQgICAgID0gbWV0cmljcy0+cm9vdC5nbG9iYWxzLT5pbmNyZWFzZV94X2hlaWdodDsKICAgICAgICAgdGhyZXNob2xkID0gNDA7CkBAIC0xMTIzLDggKzExMjMsNiBAQAogCiAgICAgICAgICAgICBpZiAoIGRpc3QgPT0gMCApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHNjYWxlID0gbmV3X3NjYWxlOwotCiAgICAgICAgICAgICAgIEZUX1RSQUNFNSgoCiAgICAgICAgICAgICAgICAgImFmX2xhdGluX21ldHJpY3Nfc2NhbGVfZGltOiIKICAgICAgICAgICAgICAgICAiIHggaGVpZ2h0IGFsaWdubWVudCAoc3R5bGUgYCVzJyk6XG4iCkBAIC0xMTMyLDkgKzExMzAsMTEgQEAKICAgICAgICAgICAgICAgICAiIHZlcnRpY2FsIHNjYWxpbmcgY2hhbmdlZCBmcm9tICUuNGYgdG8gJS40ZiAoYnkgJWQlJSlcbiIKICAgICAgICAgICAgICAgICAiXG4iLAogICAgICAgICAgICAgICAgIGFmX3N0eWxlX25hbWVzW21ldHJpY3MtPnJvb3Quc3R5bGVfY2xhc3MtPnN0eWxlXSwKLSAgICAgICAgICAgICAgICBheGlzLT5vcmdfc2NhbGUgLyA2NTUzNi4wLAogICAgICAgICAgICAgICAgIHNjYWxlIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICBuZXdfc2NhbGUgLyA2NTUzNi4wLAogICAgICAgICAgICAgICAgICggZml0dGVkIC0gc2NhbGVkICkgKiAxMDAgLyBzY2FsZWQgKSk7CisKKyAgICAgICAgICAgICAgc2NhbGUgPSBuZXdfc2NhbGU7CiAgICAgICAgICAgICB9CiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKICAgICAgICAgICAgIGVsc2UKQEAgLTE0MzYsMTggKzE0MzYsMzUgQEAKICAgICAvKiBkbyBlYWNoIGNvbnRvdXIgc2VwYXJhdGVseSAqLwogICAgIGZvciAoIDsgY29udG91ciA8IGNvbnRvdXJfbGltaXQ7IGNvbnRvdXIrKyApCiAgICAgewotICAgICAgQUZfUG9pbnQgIHBvaW50ICAgICAgPSAgY29udG91clswXTsKLSAgICAgIEFGX1BvaW50ICBsYXN0ICAgICAgID0gIHBvaW50LT5wcmV2OwotICAgICAgaW50ICAgICAgIG9uX2VkZ2UgICAgPSAgMDsKLSAgICAgIEZUX1BvcyAgICBtaW5fcG9zICAgID0gIDMyMDAwOyAgLyogbWluaW11bSBzZWdtZW50IHBvcyAhPSBtaW5fY29vcmQgKi8KLSAgICAgIEZUX1BvcyAgICBtYXhfcG9zICAgID0gLTMyMDAwOyAgLyogbWF4aW11bSBzZWdtZW50IHBvcyAhPSBtYXhfY29vcmQgKi8KLSAgICAgIEZUX1BvcyAgICBtaW5fb25fcG9zID0gIDMyMDAwOwotICAgICAgRlRfUG9zICAgIG1heF9vbl9wb3MgPSAtMzIwMDA7Ci0gICAgICBGVF9Cb29sICAgcGFzc2VkOworICAgICAgQUZfUG9pbnQgIHBvaW50ICAgPSBjb250b3VyWzBdOworICAgICAgQUZfUG9pbnQgIGxhc3QgICAgPSBwb2ludC0+cHJldjsKKyAgICAgIGludCAgICAgICBvbl9lZGdlID0gMDsKIAorICAgICAgLyogd2UgY2FsbCB2YWx1ZXMgbWVhc3VyZWQgYWxvbmcgYSBzZWdtZW50IChwb2ludC0+dikgICAgKi8KKyAgICAgIC8qIGBjb29yZGluYXRlcycsIGFuZCB2YWx1ZXMgb3J0aG9nb25hbCB0byBpdCAocG9pbnQtPnUpICovCisgICAgICAvKiBgcG9zaXRpb25zJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgRlRfUG9zICAgICBtaW5fcG9zICAgICAgPSAgMzIwMDA7CisgICAgICBGVF9Qb3MgICAgIG1heF9wb3MgICAgICA9IC0zMjAwMDsKKyAgICAgIEZUX1BvcyAgICAgbWluX2Nvb3JkICAgID0gIDMyMDAwOworICAgICAgRlRfUG9zICAgICBtYXhfY29vcmQgICAgPSAtMzIwMDA7CisgICAgICBGVF9VU2hvcnQgIG1pbl9mbGFncyAgICA9ICBBRl9GTEFHX05PTkU7CisgICAgICBGVF9VU2hvcnQgIG1heF9mbGFncyAgICA9ICBBRl9GTEFHX05PTkU7CisgICAgICBGVF9Qb3MgICAgIG1pbl9vbl9jb29yZCA9ICAzMjAwMDsKKyAgICAgIEZUX1BvcyAgICAgbWF4X29uX2Nvb3JkID0gLTMyMDAwOwogCi0gICAgICBpZiAoIHBvaW50ID09IGxhc3QgKSAgLyogc2tpcCBzaW5nbGV0b25zIC0tIGp1c3QgaW4gY2FzZSAqLwotICAgICAgICBjb250aW51ZTsKKyAgICAgIEZUX0Jvb2wgIHBhc3NlZDsKKworICAgICAgQUZfU2VnbWVudCAgcHJldl9zZWdtZW50ID0gTlVMTDsKKworICAgICAgRlRfUG9zICAgICBwcmV2X21pbl9wb3MgICAgICA9IG1pbl9wb3M7CisgICAgICBGVF9Qb3MgICAgIHByZXZfbWF4X3BvcyAgICAgID0gbWF4X3BvczsKKyAgICAgIEZUX1BvcyAgICAgcHJldl9taW5fY29vcmQgICAgPSBtaW5fY29vcmQ7CisgICAgICBGVF9Qb3MgICAgIHByZXZfbWF4X2Nvb3JkICAgID0gbWF4X2Nvb3JkOworICAgICAgRlRfVVNob3J0ICBwcmV2X21pbl9mbGFncyAgICA9IG1pbl9mbGFnczsKKyAgICAgIEZUX1VTaG9ydCAgcHJldl9tYXhfZmxhZ3MgICAgPSBtYXhfZmxhZ3M7CisgICAgICBGVF9Qb3MgICAgIHByZXZfbWluX29uX2Nvb3JkID0gbWluX29uX2Nvb3JkOworICAgICAgRlRfUG9zICAgICBwcmV2X21heF9vbl9jb29yZCA9IG1heF9vbl9jb29yZDsKKwogCiAgICAgICBpZiAoIEZUX0FCUyggbGFzdC0+b3V0X2RpciApICA9PSBtYWpvcl9kaXIgJiYKICAgICAgICAgICAgRlRfQUJTKCBwb2ludC0+b3V0X2RpciApID09IG1ham9yX2RpciApCkBAIC0xNDc4LDUxICsxNDk1LDE4MiBAQAogCiAgICAgICAgIGlmICggb25fZWRnZSApCiAgICAgICAgIHsKKyAgICAgICAgICAvKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSBwb3NpdGlvbiAqLwogICAgICAgICAgIHUgPSBwb2ludC0+dTsKICAgICAgICAgICBpZiAoIHUgPCBtaW5fcG9zICkKICAgICAgICAgICAgIG1pbl9wb3MgPSB1OwogICAgICAgICAgIGlmICggdSA+IG1heF9wb3MgKQogICAgICAgICAgICAgbWF4X3BvcyA9IHU7CiAKLSAgICAgICAgICAvKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSBjb29yZGluYXRlIG9mIG9uIHBvaW50cyAqLworICAgICAgICAgIC8qIGdldCBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvb3JkaW5hdGUgdG9nZXRoZXIgd2l0aCBmbGFncyAqLworICAgICAgICAgIHYgPSBwb2ludC0+djsKKyAgICAgICAgICBpZiAoIHYgPCBtaW5fY29vcmQgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG1pbl9jb29yZCA9IHY7CisgICAgICAgICAgICBtaW5fZmxhZ3MgPSBwb2ludC0+ZmxhZ3M7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICggdiA+IG1heF9jb29yZCApCisgICAgICAgICAgeworICAgICAgICAgICAgbWF4X2Nvb3JkID0gdjsKKyAgICAgICAgICAgIG1heF9mbGFncyA9IHBvaW50LT5mbGFnczsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBnZXQgbWluaW11bSBhbmQgbWF4aW11bSBjb29yZGluYXRlIG9mIGBvbicgcG9pbnRzICovCiAgICAgICAgICAgaWYgKCAhKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0wgKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgdiA9IHBvaW50LT52OwotICAgICAgICAgICAgaWYgKCB2IDwgbWluX29uX3BvcyApCi0gICAgICAgICAgICAgIG1pbl9vbl9wb3MgPSB2OwotICAgICAgICAgICAgaWYgKCB2ID4gbWF4X29uX3BvcyApCi0gICAgICAgICAgICAgIG1heF9vbl9wb3MgPSB2OworICAgICAgICAgICAgaWYgKCB2IDwgbWluX29uX2Nvb3JkICkKKyAgICAgICAgICAgICAgbWluX29uX2Nvb3JkID0gdjsKKyAgICAgICAgICAgIGlmICggdiA+IG1heF9vbl9jb29yZCApCisgICAgICAgICAgICAgIG1heF9vbl9jb29yZCA9IHY7CiAgICAgICAgICAgfQogCiAgICAgICAgICAgaWYgKCBwb2ludC0+b3V0X2RpciAhPSBzZWdtZW50X2RpciB8fCBwb2ludCA9PSBsYXN0ICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiB3ZSBhcmUganVzdCBsZWF2aW5nIGFuIGVkZ2U7IHJlY29yZCBhIG5ldyBzZWdtZW50ISAqLwotICAgICAgICAgICAgc2VnbWVudC0+bGFzdCA9IHBvaW50OwotICAgICAgICAgICAgc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggbWluX3BvcyArIG1heF9wb3MgKSA+PiAxICk7CisgICAgICAgICAgICAvKiBjaGVjayB3aGV0aGVyIHRoZSBuZXcgc2VnbWVudCdzIHN0YXJ0IHBvaW50IGlzIGlkZW50aWNhbCB0byAqLworICAgICAgICAgICAgLyogdGhlIHByZXZpb3VzIHNlZ21lbnQncyBlbmQgcG9pbnQ7IGZvciBleGFtcGxlLCB0aGlzIG1pZ2h0ICAgKi8KKyAgICAgICAgICAgIC8qIGhhcHBlbiBmb3Igc3Bpa2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIC8qIGEgc2VnbWVudCBpcyByb3VuZCBpZiBlaXRoZXIgaXRzIGZpcnN0IG9yIGxhc3QgcG9pbnQgKi8KLSAgICAgICAgICAgIC8qIGlzIGEgY29udHJvbCBwb2ludCwgYW5kIHRoZSBsZW5ndGggb2YgdGhlIG9uIHBvaW50cyAgKi8KLSAgICAgICAgICAgIC8qIGluYmV0d2VlbiBkb2Vzbid0IGV4Y2VlZCBhIGhldXJpc3RpYyBsaW1pdCAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggKCBzZWdtZW50LT5maXJzdC0+ZmxhZ3MgfCBwb2ludC0+ZmxhZ3MgKSAmIEFGX0ZMQUdfQ09OVFJPTCAmJgotICAgICAgICAgICAgICAgICAoIG1heF9vbl9wb3MgLSBtaW5fb25fcG9zICkgPCBmbGF0X3RocmVzaG9sZCAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgc2VnbWVudC0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKyAgICAgICAgICAgIGlmICggIXByZXZfc2VnbWVudCB8fCBzZWdtZW50LT5maXJzdCAhPSBwcmV2X3NlZ21lbnQtPmxhc3QgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiBwb2ludHMgYXJlIGRpZmZlcmVudDogd2UgYXJlIGp1c3QgbGVhdmluZyBhbiBlZGdlLCB0aHVzICovCisgICAgICAgICAgICAgIC8qIHJlY29yZCBhIG5ldyBzZWdtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgLyogY29tcHV0ZSBzZWdtZW50IHNpemUgKi8KLSAgICAgICAgICAgIG1pbl9wb3MgPSBtYXhfcG9zID0gcG9pbnQtPnY7CisgICAgICAgICAgICAgIHNlZ21lbnQtPmxhc3QgID0gcG9pbnQ7CisgICAgICAgICAgICAgIHNlZ21lbnQtPnBvcyAgID0gKEZUX1Nob3J0KSggKCBtaW5fcG9zICsgbWF4X3BvcyApID4+IDEgKTsKKyAgICAgICAgICAgICAgc2VnbWVudC0+ZGVsdGEgPSAoRlRfU2hvcnQpKCAoIG1heF9wb3MgLSBtaW5fcG9zICkgPj4gMSApOwogCi0gICAgICAgICAgICB2ID0gc2VnbWVudC0+Zmlyc3QtPnY7Ci0gICAgICAgICAgICBpZiAoIHYgPCBtaW5fcG9zICkKLSAgICAgICAgICAgICAgbWluX3BvcyA9IHY7Ci0gICAgICAgICAgICBpZiAoIHYgPiBtYXhfcG9zICkKLSAgICAgICAgICAgICAgbWF4X3BvcyA9IHY7CisgICAgICAgICAgICAgIC8qIGEgc2VnbWVudCBpcyByb3VuZCBpZiBlaXRoZXIgaXRzIGZpcnN0IG9yIGxhc3QgcG9pbnQgKi8KKyAgICAgICAgICAgICAgLyogaXMgYSBjb250cm9sIHBvaW50LCBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgb24gcG9pbnRzICAqLworICAgICAgICAgICAgICAvKiBpbmJldHdlZW4gZG9lc24ndCBleGNlZWQgYSBoZXVyaXN0aWMgbGltaXQgICAgICAgICAgICovCisgICAgICAgICAgICAgIGlmICggKCBtaW5fZmxhZ3MgfCBtYXhfZmxhZ3MgKSAmIEFGX0ZMQUdfQ09OVFJPTCAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKCBtYXhfb25fY29vcmQgLSBtaW5fb25fY29vcmQgKSA8IGZsYXRfdGhyZXNob2xkICkKKyAgICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOwogCi0gICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpbWluX3BvczsKLSAgICAgICAgICAgIHNlZ21lbnQtPm1heF9jb29yZCA9IChGVF9TaG9ydCltYXhfcG9zOwotICAgICAgICAgICAgc2VnbWVudC0+aGVpZ2h0ICAgID0gKEZUX1Nob3J0KSggc2VnbWVudC0+bWF4X2Nvb3JkIC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPm1pbl9jb29yZCApOworICAgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpbWluX2Nvb3JkOworICAgICAgICAgICAgICBzZWdtZW50LT5tYXhfY29vcmQgPSAoRlRfU2hvcnQpbWF4X2Nvb3JkOworICAgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgICAgPSBzZWdtZW50LT5tYXhfY29vcmQgLSBzZWdtZW50LT5taW5fY29vcmQ7CisKKyAgICAgICAgICAgICAgcHJldl9zZWdtZW50ICAgICAgPSBzZWdtZW50OworICAgICAgICAgICAgICBwcmV2X21pbl9wb3MgICAgICA9IG1pbl9wb3M7CisgICAgICAgICAgICAgIHByZXZfbWF4X3BvcyAgICAgID0gbWF4X3BvczsKKyAgICAgICAgICAgICAgcHJldl9taW5fY29vcmQgICAgPSBtaW5fY29vcmQ7CisgICAgICAgICAgICAgIHByZXZfbWF4X2Nvb3JkICAgID0gbWF4X2Nvb3JkOworICAgICAgICAgICAgICBwcmV2X21pbl9mbGFncyAgICA9IG1pbl9mbGFnczsKKyAgICAgICAgICAgICAgcHJldl9tYXhfZmxhZ3MgICAgPSBtYXhfZmxhZ3M7CisgICAgICAgICAgICAgIHByZXZfbWluX29uX2Nvb3JkID0gbWluX29uX2Nvb3JkOworICAgICAgICAgICAgICBwcmV2X21heF9vbl9jb29yZCA9IG1heF9vbl9jb29yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyogcG9pbnRzIGFyZSB0aGUgc2FtZTogd2UgZG9uJ3QgY3JlYXRlIGEgbmV3IHNlZ21lbnQgYnV0ICovCisgICAgICAgICAgICAgIC8qIG1lcmdlIHRoZSBjdXJyZW50IHNlZ21lbnQgd2l0aCB0aGUgcHJldmlvdXMgb25lICAgICAgICAqLworCisgICAgICAgICAgICAgIGlmICggcHJldl9zZWdtZW50LT5sYXN0LT5pbl9kaXIgPT0gcG9pbnQtPmluX2RpciApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSBoYXZlIGlkZW50aWNhbCBkaXJlY3Rpb25zICh0aGlzIGNhbiBoYXBwZW4gZm9yICAgICAgICovCisgICAgICAgICAgICAgICAgLyogZGVnZW5lcmF0ZSBvdXRsaW5lcyB0aGF0IG1vdmUgemlnLXphZyBhbG9uZyB0aGUgbWFpbiAgICAqLworICAgICAgICAgICAgICAgIC8qIGF4aXMgd2l0aG91dCBjaGFuZ2luZyB0aGUgY29vcmRpbmF0ZSB2YWx1ZSBvZiB0aGUgb3RoZXIgKi8KKyAgICAgICAgICAgICAgICAvKiBheGlzLCBhbmQgd2hlcmUgdGhlIHNlZ21lbnRzIGhhdmUganVzdCBiZWVuIG1lcmdlZCk6ICAgICovCisgICAgICAgICAgICAgICAgLyogdW5pZnkgc2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgLyogdXBkYXRlIGNvbnN0cmFpbnRzICovCisKKyAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWluX3BvcyA8IG1pbl9wb3MgKQorICAgICAgICAgICAgICAgICAgbWluX3BvcyA9IHByZXZfbWluX3BvczsKKyAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWF4X3BvcyA+IG1heF9wb3MgKQorICAgICAgICAgICAgICAgICAgbWF4X3BvcyA9IHByZXZfbWF4X3BvczsKKworICAgICAgICAgICAgICAgIGlmICggcHJldl9taW5fY29vcmQgPCBtaW5fY29vcmQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1pbl9jb29yZCA9IHByZXZfbWluX2Nvb3JkOworICAgICAgICAgICAgICAgICAgbWluX2ZsYWdzID0gcHJldl9taW5fZmxhZ3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggcHJldl9tYXhfY29vcmQgPiBtYXhfY29vcmQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIG1heF9jb29yZCA9IHByZXZfbWF4X2Nvb3JkOworICAgICAgICAgICAgICAgICAgbWF4X2ZsYWdzID0gcHJldl9tYXhfZmxhZ3M7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBwcmV2X21pbl9vbl9jb29yZCA8IG1pbl9vbl9jb29yZCApCisgICAgICAgICAgICAgICAgICBtaW5fb25fY29vcmQgPSBwcmV2X21pbl9vbl9jb29yZDsKKyAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWF4X29uX2Nvb3JkID4gbWF4X29uX2Nvb3JkICkKKyAgICAgICAgICAgICAgICAgIG1heF9vbl9jb29yZCA9IHByZXZfbWF4X29uX2Nvb3JkOworCisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5sYXN0ID0gcG9pbnQ7CisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5wb3MgID0gKEZUX1Nob3J0KSggKCBtaW5fcG9zICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9wb3MgKSA+PiAxICk7CisKKyAgICAgICAgICAgICAgICBpZiAoICggbWluX2ZsYWdzIHwgbWF4X2ZsYWdzICkgJiBBRl9GTEFHX0NPTlRST0wgICAgICAmJgorICAgICAgICAgICAgICAgICAgICAgKCBtYXhfb25fY29vcmQgLSBtaW5fb25fY29vcmQgKSA8IGZsYXRfdGhyZXNob2xkICkKKyAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPmZsYWdzICY9IH5BRl9FREdFX1JPVU5EOworCisgICAgICAgICAgICAgICAgcHJldl9zZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpbWluX2Nvb3JkOworICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+bWF4X2Nvb3JkID0gKEZUX1Nob3J0KW1heF9jb29yZDsKKyAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPmhlaWdodCAgICA9IHByZXZfc2VnbWVudC0+bWF4X2Nvb3JkIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+bWluX2Nvb3JkOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgZGlmZmVyZW50IGRpcmVjdGlvbnM7IHVzZSB0aGUgcHJvcGVydGllcyBvZiB0aGUgKi8KKyAgICAgICAgICAgICAgICAvKiBsb25nZXIgc2VnbWVudCBhbmQgZGlzY2FyZCB0aGUgb3RoZXIgb25lICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICBpZiAoIEZUX0FCUyggcHJldl9tYXhfY29vcmQgLSBwcmV2X21pbl9jb29yZCApID4KKyAgICAgICAgICAgICAgICAgICAgIEZUX0FCUyggbWF4X2Nvb3JkIC0gbWluX2Nvb3JkICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIC8qIGRpc2NhcmQgY3VycmVudCBzZWdtZW50ICovCisKKyAgICAgICAgICAgICAgICAgIGlmICggbWluX3BvcyA8IHByZXZfbWluX3BvcyApCisgICAgICAgICAgICAgICAgICAgIHByZXZfbWluX3BvcyA9IG1pbl9wb3M7CisgICAgICAgICAgICAgICAgICBpZiAoIG1heF9wb3MgPiBwcmV2X21heF9wb3MgKQorICAgICAgICAgICAgICAgICAgICBwcmV2X21heF9wb3MgPSBtYXhfcG9zOworCisgICAgICAgICAgICAgICAgICBwcmV2X3NlZ21lbnQtPmxhc3QgPSBwb2ludDsKKyAgICAgICAgICAgICAgICAgIHByZXZfc2VnbWVudC0+cG9zICA9IChGVF9TaG9ydCkoICggcHJldl9taW5fcG9zICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9tYXhfcG9zICkgPj4gMSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgLyogZGlzY2FyZCBwcmV2aW91cyBzZWdtZW50ICovCisKKyAgICAgICAgICAgICAgICAgIGlmICggcHJldl9taW5fcG9zIDwgbWluX3BvcyApCisgICAgICAgICAgICAgICAgICAgIG1pbl9wb3MgPSBwcmV2X21pbl9wb3M7CisgICAgICAgICAgICAgICAgICBpZiAoIHByZXZfbWF4X3BvcyA+IG1heF9wb3MgKQorICAgICAgICAgICAgICAgICAgICBtYXhfcG9zID0gcHJldl9tYXhfcG9zOworCisgICAgICAgICAgICAgICAgICBzZWdtZW50LT5sYXN0ID0gcG9pbnQ7CisgICAgICAgICAgICAgICAgICBzZWdtZW50LT5wb3MgID0gKEZUX1Nob3J0KSggKCBtaW5fcG9zICsgbWF4X3BvcyApID4+IDEgKTsKKworICAgICAgICAgICAgICAgICAgaWYgKCAoIG1pbl9mbGFncyB8IG1heF9mbGFncyApICYgQUZfRkxBR19DT05UUk9MICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCBtYXhfb25fY29vcmQgLSBtaW5fb25fY29vcmQgKSA8IGZsYXRfdGhyZXNob2xkICkKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudC0+ZmxhZ3MgfD0gQUZfRURHRV9ST1VORDsKKworICAgICAgICAgICAgICAgICAgc2VnbWVudC0+bWluX2Nvb3JkID0gKEZUX1Nob3J0KW1pbl9jb29yZDsKKyAgICAgICAgICAgICAgICAgIHNlZ21lbnQtPm1heF9jb29yZCA9IChGVF9TaG9ydCltYXhfY29vcmQ7CisgICAgICAgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgICAgPSBzZWdtZW50LT5tYXhfY29vcmQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC0+bWluX2Nvb3JkOworCisgICAgICAgICAgICAgICAgICAqcHJldl9zZWdtZW50ID0gKnNlZ21lbnQ7CisKKyAgICAgICAgICAgICAgICAgIHByZXZfbWluX3BvcyAgICAgID0gbWluX3BvczsKKyAgICAgICAgICAgICAgICAgIHByZXZfbWF4X3BvcyAgICAgID0gbWF4X3BvczsKKyAgICAgICAgICAgICAgICAgIHByZXZfbWluX2Nvb3JkICAgID0gbWluX2Nvb3JkOworICAgICAgICAgICAgICAgICAgcHJldl9tYXhfY29vcmQgICAgPSBtYXhfY29vcmQ7CisgICAgICAgICAgICAgICAgICBwcmV2X21pbl9mbGFncyAgICA9IG1pbl9mbGFnczsKKyAgICAgICAgICAgICAgICAgIHByZXZfbWF4X2ZsYWdzICAgID0gbWF4X2ZsYWdzOworICAgICAgICAgICAgICAgICAgcHJldl9taW5fb25fY29vcmQgPSBtaW5fb25fY29vcmQ7CisgICAgICAgICAgICAgICAgICBwcmV2X21heF9vbl9jb29yZCA9IG1heF9vbl9jb29yZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBheGlzLT5udW1fc2VnbWVudHMtLTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgb25fZWRnZSA9IDA7CiAgICAgICAgICAgICBzZWdtZW50ID0gTlVMTDsKKwogICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCiAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTM1LDcgKzE2ODMsMTIgQEAKICAgICAgICAgICBwYXNzZWQgPSAxOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCAhb25fZWRnZSAmJiBGVF9BQlMoIHBvaW50LT5vdXRfZGlyICkgPT0gbWFqb3JfZGlyICkKKyAgICAgICAgLyogaWYgd2UgYXJlIG5vdCBvbiBhbiBlZGdlLCBjaGVjayB3aGV0aGVyIHRoZSBtYWpvciBkaXJlY3Rpb24gKi8KKyAgICAgICAgLyogY29pbmNpZGVzIHdpdGggdGhlIGN1cnJlbnQgcG9pbnQncyBgb3V0JyBkaXJlY3Rpb24sIG9yICAgICAgKi8KKyAgICAgICAgLyogd2hldGhlciB3ZSBoYXZlIGEgc2luZ2xlLXBvaW50IGNvbnRvdXIgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAhb25fZWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICggRlRfQUJTKCBwb2ludC0+b3V0X2RpciApID09IG1ham9yX2RpciB8fAorICAgICAgICAgICAgICAgcG9pbnQgPT0gcG9pbnQtPnByZXYgICAgICAgICAgICAgICAgICApICkKICAgICAgICAgewogICAgICAgICAgIC8qIHRoaXMgaXMgdGhlIHN0YXJ0IG9mIGEgbmV3IHNlZ21lbnQhICovCiAgICAgICAgICAgc2VnbWVudF9kaXIgPSAoQUZfRGlyZWN0aW9uKXBvaW50LT5vdXRfZGlyOwpAQCAtMTU1MSwxNyArMTcwNCw0MiBAQAogICAgICAgICAgIHNlZ21lbnQtPmZpcnN0ID0gcG9pbnQ7CiAgICAgICAgICAgc2VnbWVudC0+bGFzdCAgPSBwb2ludDsKIAotICAgICAgICAgIG1pbl9wb3MgPSBtYXhfcG9zID0gcG9pbnQtPnU7CisgICAgICAgICAgLyogYGFmX2F4aXNfaGludHNfbmV3X3NlZ21lbnQnIHJlYWxsb2NhdGVzIG1lbW9yeSwgICAgKi8KKyAgICAgICAgICAvKiB0aHVzIHdlIGhhdmUgdG8gcmVmcmVzaCB0aGUgYHByZXZfc2VnbWVudCcgcG9pbnRlciAqLworICAgICAgICAgIGlmICggcHJldl9zZWdtZW50ICkKKyAgICAgICAgICAgIHByZXZfc2VnbWVudCA9IHNlZ21lbnQgLSAxOworCisgICAgICAgICAgbWluX3BvcyAgID0gbWF4X3BvcyAgID0gcG9pbnQtPnU7CisgICAgICAgICAgbWluX2Nvb3JkID0gbWF4X2Nvb3JkID0gcG9pbnQtPnY7CisgICAgICAgICAgbWluX2ZsYWdzID0gbWF4X2ZsYWdzID0gcG9pbnQtPmZsYWdzOwogCiAgICAgICAgICAgaWYgKCBwb2ludC0+ZmxhZ3MgJiBBRl9GTEFHX0NPTlRST0wgKQogICAgICAgICAgIHsKLSAgICAgICAgICAgIG1pbl9vbl9wb3MgPSAgMzIwMDA7Ci0gICAgICAgICAgICBtYXhfb25fcG9zID0gLTMyMDAwOworICAgICAgICAgICAgbWluX29uX2Nvb3JkID0gIDMyMDAwOworICAgICAgICAgICAgbWF4X29uX2Nvb3JkID0gLTMyMDAwOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBtaW5fb25fcG9zID0gbWF4X29uX3BvcyA9IHBvaW50LT52OworICAgICAgICAgICAgbWluX29uX2Nvb3JkID0gbWF4X29uX2Nvb3JkID0gcG9pbnQtPnY7CiAKICAgICAgICAgICBvbl9lZGdlID0gMTsKKworICAgICAgICAgIGlmICggcG9pbnQgPT0gcG9pbnQtPnByZXYgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBvbmUtcG9pbnQgc2VnbWVudDogdGhpcyBpcyBhIG9uZS1wb2ludCAqLworICAgICAgICAgICAgLyogY29udG91ciB3aXRoIGBpbicgYW5kIGBvdXQnIGRpcmVjdGlvbiBzZXQgdG8gICAgICovCisgICAgICAgICAgICAvKiBBRl9ESVJfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNlZ21lbnQtPnBvcyA9IChGVF9TaG9ydCltaW5fcG9zOworCisgICAgICAgICAgICBpZiAocG9pbnQtPmZsYWdzICYgQUZfRkxBR19DT05UUk9MKQorICAgICAgICAgICAgICBzZWdtZW50LT5mbGFncyB8PSBBRl9FREdFX1JPVU5EOworCisgICAgICAgICAgICBzZWdtZW50LT5taW5fY29vcmQgPSAoRlRfU2hvcnQpcG9pbnQtPnY7CisgICAgICAgICAgICBzZWdtZW50LT5tYXhfY29vcmQgPSAoRlRfU2hvcnQpcG9pbnQtPnY7CisgICAgICAgICAgICBzZWdtZW50LT5oZWlnaHQgPSAwOworCisgICAgICAgICAgICBvbl9lZGdlID0gMDsKKyAgICAgICAgICAgIHNlZ21lbnQgPSBOVUxMOworICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIHBvaW50ID0gcG9pbnQtPm5leHQ7CkBAIC0xNzczLDYgKzE5NTEsMTIgQEAKICAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IGhpbnRzLT5tZW1vcnk7CiAgICAgQUZfTGF0aW5BeGlzICBsYXhpcyAgPSAmKChBRl9MYXRpbk1ldHJpY3MpaGludHMtPm1ldHJpY3MpLT5heGlzW2RpbV07CiAKKyAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MgID0gaGludHMtPm1ldHJpY3MtPnN0eWxlX2NsYXNzOworICAgIEFGX1NjcmlwdENsYXNzICBzY3JpcHRfY2xhc3MgPSBBRl9TQ1JJUFRfQ0xBU1NFU19HRVQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVfY2xhc3MtPnNjcmlwdF07CisKKyAgICBGVF9Cb29sICB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPSAwOworCiAgICAgQUZfU2VnbWVudCAgICBzZWdtZW50cyAgICAgID0gYXhpcy0+c2VnbWVudHM7CiAgICAgQUZfU2VnbWVudCAgICBzZWdtZW50X2xpbWl0ID0gc2VnbWVudHMgKyBheGlzLT5udW1fc2VnbWVudHM7CiAgICAgQUZfU2VnbWVudCAgICBzZWc7CkBAIC0xNzgzLDYgKzE5NjcsNyBAQAogICAgIEZUX0ZpeGVkICAgICAgc2NhbGU7CiAgICAgRlRfUG9zICAgICAgICBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZDsKICAgICBGVF9Qb3MgICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZDsKKyAgICBGVF9Qb3MgICAgICAgIHNlZ21lbnRfd2lkdGhfdGhyZXNob2xkOwogCiAKICAgICBheGlzLT5udW1fZWRnZXMgPSAwOwpAQCAtMTc5NSwxNSArMTk4MCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBBRl9ESVJfUklHSFQ7CiAjZW5kaWYKIAorICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICkKKyAgICAgIHRvcF90b19ib3R0b21faGludGluZyA9IHNjcmlwdF9jbGFzcy0+dG9wX3RvX2JvdHRvbV9oaW50aW5nOworCiAgICAgLyoKICAgICAgKiAgV2UgaWdub3JlIGFsbCBzZWdtZW50cyB0aGF0IGFyZSBsZXNzIHRoYW4gMSBwaXhlbCBpbiBsZW5ndGgKICAgICAgKiAgdG8gYXZvaWQgbWFueSBwcm9ibGVtcyB3aXRoIHNlcmlmIGZvbnRzLiAgV2UgY29tcHV0ZSB0aGUKICAgICAgKiAgY29ycmVzcG9uZGluZyB0aHJlc2hvbGQgaW4gZm9udCB1bml0cy4KICAgICAgKi8KICAgICBpZiAoIGRpbSA9PSBBRl9ESU1FTlNJT05fSE9SWiApCi0gICAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9IEZUX0RpdkZpeCggNjQsIGhpbnRzLT55X3NjYWxlICk7CisgICAgICBzZWdtZW50X2xlbmd0aF90aHJlc2hvbGQgPSBGVF9EaXZGaXgoIDY0LCBoaW50cy0+eV9zY2FsZSApOwogICAgIGVsc2UKLSAgICAgICAgc2VnbWVudF9sZW5ndGhfdGhyZXNob2xkID0gMDsKKyAgICAgIHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCA9IDA7CisKKyAgICAvKgorICAgICAqICBTaW1pbGFybHksIHdlIGlnbm9yZSBzZWdtZW50cyB0aGF0IGhhdmUgYSB3aWR0aCBkZWx0YQorICAgICAqICBsYXJnZXIgdGhhbiAwLjVweCAoaS5lLiwgYSB3aWR0aCBsYXJnZXIgdGhhbiAxcHgpLgorICAgICAqLworICAgIHNlZ21lbnRfd2lkdGhfdGhyZXNob2xkID0gRlRfRGl2Rml4KCAzMiwgc2NhbGUgKTsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE4MzYsNyArMjAzMCwxMSBAQAogICAgICAgRlRfSW50ICAgZWU7CiAKIAotICAgICAgaWYgKCBzZWctPmhlaWdodCA8IHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCApCisgICAgICAvKiBpZ25vcmUgdG9vIHNob3J0IHNlZ21lbnRzLCB0b28gd2lkZSBvbmVzLCBhbmQsIGluIHRoaXMgbG9vcCwgKi8KKyAgICAgIC8qIG9uZS1wb2ludCBzZWdtZW50cyB3aXRob3V0IGEgZGlyZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBzZWctPmhlaWdodCA8IHNlZ21lbnRfbGVuZ3RoX3RocmVzaG9sZCB8fAorICAgICAgICAgICBzZWctPmRlbHRhID4gc2VnbWVudF93aWR0aF90aHJlc2hvbGQgICB8fAorICAgICAgICAgICBzZWctPmRpciA9PSBBRl9ESVJfTk9ORSAgICAgICAgICAgICAgICApCiAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAvKiBBIHNwZWNpYWwgY2FzZSBmb3Igc2VyaWYgZWRnZXM6IElmIHRoZXkgYXJlIHNtYWxsZXIgdGhhbiAqLwpAQCAtMTg3Miw2ICsyMDcwLDcgQEAKICAgICAgICAgLyogc29ydCBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uICAgICovCiAgICAgICAgIGVycm9yID0gYWZfYXhpc19oaW50c19uZXdfZWRnZSggYXhpcywgc2VnLT5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFGX0RpcmVjdGlvbilzZWctPmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfdG9fYm90dG9tX2hpbnRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5LCAmZWRnZSApOwogICAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgICBnb3RvIEV4aXQ7CkBAIC0xODk3LDYgKzIwOTYsNDQgQEAKICAgICAgIH0KICAgICB9CiAKKyAgICAvKiB3ZSBsb29wIGFnYWluIG92ZXIgYWxsIHNlZ21lbnRzIHRvIGNhdGNoIG9uZS1wb2ludCBzZWdtZW50cyAgICovCisgICAgLyogd2l0aG91dCBhIGRpcmVjdGlvbjogaWYgcG9zc2libGUsIGxpbmsgdGhlbSB0byBleGlzdGluZyBlZGdlcyAqLworICAgIGZvciAoIHNlZyA9IHNlZ21lbnRzOyBzZWcgPCBzZWdtZW50X2xpbWl0OyBzZWcrKyApCisgICAgeworICAgICAgQUZfRWRnZSAgZm91bmQgPSBOVUxMOworICAgICAgRlRfSW50ICAgZWU7CisKKworICAgICAgaWYgKCBzZWctPmRpciAhPSBBRl9ESVJfTk9ORSApCisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAvKiBsb29rIGZvciBhbiBlZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNlZ21lbnQgKi8KKyAgICAgIGZvciAoIGVlID0gMDsgZWUgPCBheGlzLT5udW1fZWRnZXM7IGVlKysgKQorICAgICAgeworICAgICAgICBBRl9FZGdlICBlZGdlID0gYXhpcy0+ZWRnZXMgKyBlZTsKKyAgICAgICAgRlRfUG9zICAgZGlzdDsKKworCisgICAgICAgIGRpc3QgPSBzZWctPnBvcyAtIGVkZ2UtPmZwb3M7CisgICAgICAgIGlmICggZGlzdCA8IDAgKQorICAgICAgICAgIGRpc3QgPSAtZGlzdDsKKworICAgICAgICBpZiAoIGRpc3QgPCBlZGdlX2Rpc3RhbmNlX3RocmVzaG9sZCApCisgICAgICAgIHsKKyAgICAgICAgICBmb3VuZCA9IGVkZ2U7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogb25lLXBvaW50IHNlZ21lbnRzIHdpdGhvdXQgYSBtYXRjaCBhcmUgaWdub3JlZCAqLworICAgICAgaWYgKCBmb3VuZCApCisgICAgICB7CisgICAgICAgIHNlZy0+ZWRnZV9uZXh0ICAgICAgICAgPSBmb3VuZC0+Zmlyc3Q7CisgICAgICAgIGZvdW5kLT5sYXN0LT5lZGdlX25leHQgPSBzZWc7CisgICAgICAgIGZvdW5kLT5sYXN0ICAgICAgICAgICAgPSBzZWc7CisgICAgICB9CisgICAgfQorCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMzM3LDYgKzI1NzQsNyBAQAogICBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIEFGX0dseXBoSGludHMgIGhpbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0RpbWVuc2lvbiAgIGRpbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb3MgICAgICAgICBiYXNlX2RlbHRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgIGJhc2VfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgc3RlbV9mbGFncyApCiAgIHsKQEAgLTI0MTQsNyArMjY1MiwzOSBAQAogICAgICAgICAgICAgZGlzdCArPSBkZWx0YTsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgZGlzdCA9ICggZGlzdCArIDMyICkgJiB+NjM7CisgICAgICAgIHsKKyAgICAgICAgICAvKiBBIHN0ZW0ncyBlbmQgcG9zaXRpb24gZGVwZW5kcyBvbiB0d28gdmFsdWVzOiB0aGUgc3RhcnQgICAgICAgICovCisgICAgICAgICAgLyogcG9zaXRpb24gYW5kIHRoZSBzdGVtIGxlbmd0aC4gIFRoZSBmb3JtZXIgZ2V0cyB1c3VhbGx5ICAgICAgICAqLworICAgICAgICAgIC8qIHJvdW5kZWQgdG8gdGhlIGdyaWQsIHdoaWxlIHRoZSBsYXR0ZXIgZ2V0cyByb3VuZGVkIGFsc28gaWYgaXQgKi8KKyAgICAgICAgICAvKiBleGNlZWRzIGEgY2VydGFpbiBsZW5ndGggKHNlZSBiZWxvdyBpbiB0aGlzIGZ1bmN0aW9uKS4gIFRoaXMgICovCisgICAgICAgICAgLyogYGRvdWJsZSByb3VuZGluZycgY2FuIGxlYWQgdG8gYSBncmVhdCBkaWZmZXJlbmNlIHRvIHRoZSAgICAgICAqLworICAgICAgICAgIC8qIG9yaWdpbmFsLCB1bmhpbnRlZCBwb3NpdGlvbjsgdGhpcyBub3JtYWxseSBkb2Vzbid0IG1hdHRlciBmb3IgKi8KKyAgICAgICAgICAvKiBsYXJnZSBQUEVNIHZhbHVlcywgYnV0IGZvciBzbWFsbCBzaXplcyBpdCBjYW4gZWFzaWx5IG1ha2UgICAgICovCisgICAgICAgICAgLyogb3V0bGluZXMgY29sbGlkZS4gIEZvciB0aGlzIHJlYXNvbiwgd2UgYWRqdXN0IHRoZSBzdGVtIGxlbmd0aCAqLworICAgICAgICAgIC8qIGJ5IGEgc21hbGwgYW1vdW50IGRlcGVuZGluZyBvbiB0aGUgUFBFTSB2YWx1ZSBpbiBjYXNlIHRoZSAgICAgKi8KKyAgICAgICAgICAvKiBmb3JtZXIgYW5kIGxhdHRlciByb3VuZGluZyBib3RoIHBvaW50IGludG8gdGhlIHNhbWUgICAgICAgICAgICovCisgICAgICAgICAgLyogZGlyZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgRlRfUG9zICBiZGVsdGEgPSAwOworCisKKyAgICAgICAgICBpZiAoICggKCB3aWR0aCA+IDAgKSAmJiAoIGJhc2VfZGVsdGEgPiAwICkgKSB8fAorICAgICAgICAgICAgICAgKCAoIHdpZHRoIDwgMCApICYmICggYmFzZV9kZWx0YSA8IDAgKSApICkKKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9VSW50ICBwcGVtID0gbWV0cmljcy0+cm9vdC5zY2FsZXIuZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisKKworICAgICAgICAgICAgaWYgKCBwcGVtIDwgMTAgKQorICAgICAgICAgICAgICBiZGVsdGEgPSBiYXNlX2RlbHRhOworICAgICAgICAgICAgZWxzZSBpZiAoIHBwZW0gPCAzMCApCisgICAgICAgICAgICAgIGJkZWx0YSA9ICggYmFzZV9kZWx0YSAqIChGVF9Qb3MpKCAzMCAtIHBwZW0gKSApIC8gMjA7CisKKyAgICAgICAgICAgIGlmICggYmRlbHRhIDwgMCApCisgICAgICAgICAgICAgIGJkZWx0YSA9IC1iZGVsdGE7CisgICAgICAgICAgfQorCisgICAgICAgICAgZGlzdCA9ICggZGlzdCAtIGJkZWx0YSArIDMyICkgJiB+NjM7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMjUwMywxMSArMjc3MywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgYmFzZV9lZGdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfRWRnZSAgICAgICAgc3RlbV9lZGdlICkKICAgewotICAgIEZUX1BvcyAgZGlzdCA9IHN0ZW1fZWRnZS0+b3BvcyAtIGJhc2VfZWRnZS0+b3BvczsKKyAgICBGVF9Qb3MgIGRpc3QsIGJhc2VfZGVsdGE7CisgICAgRlRfUG9zICBmaXR0ZWRfd2lkdGg7CiAKLSAgICBGVF9Qb3MgIGZpdHRlZF93aWR0aCA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgZGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9lZGdlLT5mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbV9lZGdlLT5mbGFncyApOworCisgICAgZGlzdCAgICAgICA9IHN0ZW1fZWRnZS0+b3BvcyAtIGJhc2VfZWRnZS0+b3BvczsKKyAgICBiYXNlX2RlbHRhID0gYmFzZV9lZGdlLT5wb3MgLSBiYXNlX2VkZ2UtPm9wb3M7CisKKyAgICBmaXR0ZWRfd2lkdGggPSBhZl9sYXRpbl9jb21wdXRlX3N0ZW1fd2lkdGgoIGhpbnRzLCBkaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0LCBiYXNlX2RlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9lZGdlLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1fZWRnZS0+ZmxhZ3MgKTsKIAogCiAgICAgc3RlbV9lZGdlLT5wb3MgPSBiYXNlX2VkZ2UtPnBvcyArIGZpdHRlZF93aWR0aDsKQEAgLTI1NTgsOCArMjgzNCwxNCBAQAogICAgIEFGX0VkZ2UgICAgICAgYW5jaG9yICAgICA9IE5VTEw7CiAgICAgRlRfSW50ICAgICAgICBoYXNfc2VyaWZzID0gMDsKIAorICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzcyAgPSBoaW50cy0+bWV0cmljcy0+c3R5bGVfY2xhc3M7CisgICAgQUZfU2NyaXB0Q2xhc3MgIHNjcmlwdF9jbGFzcyA9IEFGX1NDUklQVF9DTEFTU0VTX0dFVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV9jbGFzcy0+c2NyaXB0XTsKKworICAgIEZUX0Jvb2wgIHRvcF90b19ib3R0b21faGludGluZyA9IDA7CisKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgIEZUX1VJbnQgICAgICAgbnVtX2FjdGlvbnMgPSAwOworICAgIEZUX1VJbnQgIG51bV9hY3Rpb25zID0gMDsKICNlbmRpZgogCiAKQEAgLTI1NjcsNiArMjg0OSw5IEBACiAgICAgICAgICAgICAgICAgZGltID09IEFGX0RJTUVOU0lPTl9WRVJUID8gImhvcml6b250YWwiIDogInZlcnRpY2FsIiwKICAgICAgICAgICAgICAgICBhZl9zdHlsZV9uYW1lc1toaW50cy0+bWV0cmljcy0+c3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKIAorICAgIGlmICggZGltID09IEFGX0RJTUVOU0lPTl9WRVJUICkKKyAgICAgIHRvcF90b19ib3R0b21faGludGluZyA9IHNjcmlwdF9jbGFzcy0+dG9wX3RvX2JvdHRvbV9oaW50aW5nOworCiAgICAgLyogd2UgYmVnaW4gYnkgYWxpZ25pbmcgYWxsIHN0ZW1zIHJlbGF0aXZlIHRvIHRoZSBibHVlIHpvbmUgKi8KICAgICAvKiBpZiBuZWVkZWQgLS0gdGhhdCdzIG9ubHkgZm9yIGhvcml6b250YWwgZWRnZXMgICAgICAgICAgICAqLwogCkBAIC0yNzAyLDcgKzI5ODcsOCBAQAogCiAKICAgICAgICAgb3JnX2xlbiA9IGVkZ2UyLT5vcG9zIC0gZWRnZS0+b3BvczsKLSAgICAgICAgY3VyX2xlbiA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgb3JnX2xlbiwKKyAgICAgICAgY3VyX2xlbiA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnX2xlbiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UyLT5mbGFncyApOwogCkBAIC0yNzcxLDcgKzMwNTcsOCBAQAogICAgICAgICBvcmdfbGVuICAgID0gZWRnZTItPm9wb3MgLSBlZGdlLT5vcG9zOwogICAgICAgICBvcmdfY2VudGVyID0gb3JnX3BvcyArICggb3JnX2xlbiA+PiAxICk7CiAKLSAgICAgICAgY3VyX2xlbiA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgb3JnX2xlbiwKKyAgICAgICAgY3VyX2xlbiA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JnX2xlbiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UyLT5mbGFncyApOwogCkBAIC0yODMxLDcgKzMxMTgsOCBAQAogICAgICAgICAgIG9yZ19sZW4gICAgPSBlZGdlMi0+b3BvcyAtIGVkZ2UtPm9wb3M7CiAgICAgICAgICAgb3JnX2NlbnRlciA9IG9yZ19wb3MgKyAoIG9yZ19sZW4gPj4gMSApOwogCi0gICAgICAgICAgY3VyX2xlbiAgICA9IGFmX2xhdGluX2NvbXB1dGVfc3RlbV93aWR0aCggaGludHMsIGRpbSwgb3JnX2xlbiwKKyAgICAgICAgICBjdXJfbGVuICAgID0gYWZfbGF0aW5fY29tcHV0ZV9zdGVtX3dpZHRoKCBoaW50cywgZGltLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZ19sZW4sIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZTItPmZsYWdzICk7CiAKQEAgLTI4NjIsMTYgKzMxNTAsMjUgQEAKICAgICAgICAgZWRnZS0+ZmxhZ3MgIHw9IEFGX0VER0VfRE9ORTsKICAgICAgICAgZWRnZTItPmZsYWdzIHw9IEFGX0VER0VfRE9ORTsKIAotICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAmJiBlZGdlLT5wb3MgPCBlZGdlWy0xXS5wb3MgKQorICAgICAgICBpZiAoIGVkZ2UgPiBlZGdlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgKCB0b3BfdG9fYm90dG9tX2hpbnRpbmcgPyAoIGVkZ2UtPnBvcyA+IGVkZ2VbLTFdLnBvcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGVkZ2UtPnBvcyA8IGVkZ2VbLTFdLnBvcyApICkgKQogICAgICAgICB7CisgICAgICAgICAgLyogZG9uJ3QgbW92ZSBpZiBzdGVtIHdvdWxkIChhbG1vc3QpIGRpc2FwcGVhciBvdGhlcndpc2U7ICovCisgICAgICAgICAgLyogdGhlIGFkLWhvYyB2YWx1ZSAxNiBjb3JyZXNwb25kcyB0byAxLzRweCAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBlZGdlLT5saW5rICYmIEZUX0FCUyggZWRnZS0+bGluay0+cG9zIC0gZWRnZVstMV0ucG9zICkgPiAxNiApCisgICAgICAgICAgewogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAotICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+cG9zIC8gNjQuMCwgZWRnZVstMV0ucG9zIC8gNjQuMCApKTsKKyAgICAgICAgICAgIEZUX1RSQUNFNSgoICIgIEJPVU5EOiBlZGdlICVkIChwb3M9JS4yZikgbW92ZWQgdG8gJS4yZlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPnBvcyAvIDY0LjAsCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOwogCi0gICAgICAgICAgbnVtX2FjdGlvbnMrKzsKKyAgICAgICAgICAgIG51bV9hY3Rpb25zKys7CiAjZW5kaWYKIAotICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbLTFdLnBvczsKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbLTFdLnBvczsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICB9CkBAIC0zMDIzLDI5ICszMzIwLDQ2IEBACiAjZW5kaWYKICAgICAgICAgZWRnZS0+ZmxhZ3MgfD0gQUZfRURHRV9ET05FOwogCi0gICAgICAgIGlmICggZWRnZSA+IGVkZ2VzICYmIGVkZ2UtPnBvcyA8IGVkZ2VbLTFdLnBvcyApCisgICAgICAgIGlmICggZWRnZSA+IGVkZ2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIHRvcF90b19ib3R0b21faGludGluZyA/ICggZWRnZS0+cG9zID4gZWRnZVstMV0ucG9zICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggZWRnZS0+cG9zIDwgZWRnZVstMV0ucG9zICkgKSApCiAgICAgICAgIHsKKyAgICAgICAgICAvKiBkb24ndCBtb3ZlIGlmIHN0ZW0gd291bGQgKGFsbW9zdCkgZGlzYXBwZWFyIG90aGVyd2lzZTsgKi8KKyAgICAgICAgICAvKiB0aGUgYWQtaG9jIHZhbHVlIDE2IGNvcnJlc3BvbmRzIHRvIDEvNHB4ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGVkZ2UtPmxpbmsgJiYgRlRfQUJTKCBlZGdlLT5saW5rLT5wb3MgLSBlZGdlWy0xXS5wb3MgKSA+IDE2ICkKKyAgICAgICAgICB7CiAjaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgICBGVF9UUkFDRTUoKCAiICBCT1VORDogZWRnZSAlZCAocG9zPSUuMmYpIG1vdmVkIHRvICUuMmZcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLCBlZGdlLT5wb3MgLyA2NC4wLCBlZGdlWy0xXS5wb3MgLyA2NC4wICkpOworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+cG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VbLTFdLnBvcyAvIDY0LjAgKSk7CiAKLSAgICAgICAgICBudW1fYWN0aW9ucysrOworICAgICAgICAgICAgbnVtX2FjdGlvbnMrKzsKICNlbmRpZgotICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbLTFdLnBvczsKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbLTFdLnBvczsKKyAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIGVkZ2UgKyAxIDwgZWRnZV9saW1pdCAgICAgICAgJiYKLSAgICAgICAgICAgICBlZGdlWzFdLmZsYWdzICYgQUZfRURHRV9ET05FICYmCi0gICAgICAgICAgICAgZWRnZS0+cG9zID4gZWRnZVsxXS5wb3MgICAgICApCisgICAgICAgIGlmICggZWRnZSArIDEgPCBlZGdlX2xpbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgIGVkZ2VbMV0uZmxhZ3MgJiBBRl9FREdFX0RPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAoIHRvcF90b19ib3R0b21faGludGluZyA/ICggZWRnZS0+cG9zIDwgZWRnZVsxXS5wb3MgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKCBlZGdlLT5wb3MgPiBlZGdlWzFdLnBvcyApICkgKQogICAgICAgICB7CisgICAgICAgICAgLyogZG9uJ3QgbW92ZSBpZiBzdGVtIHdvdWxkIChhbG1vc3QpIGRpc2FwcGVhciBvdGhlcndpc2U7ICovCisgICAgICAgICAgLyogdGhlIGFkLWhvYyB2YWx1ZSAxNiBjb3JyZXNwb25kcyB0byAxLzRweCAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBlZGdlLT5saW5rICYmIEZUX0FCUyggZWRnZS0+bGluay0+cG9zIC0gZWRnZVstMV0ucG9zICkgPiAxNiApCisgICAgICAgICAgewogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAotICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgLSBlZGdlcywgZWRnZS0+cG9zIC8gNjQuMCwgZWRnZVsxXS5wb3MgLyA2NC4wICkpOworICAgICAgICAgICAgRlRfVFJBQ0U1KCggIiAgQk9VTkQ6IGVkZ2UgJWQgKHBvcz0lLjJmKSBtb3ZlZCB0byAlLjJmXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZSAtIGVkZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+cG9zIC8gNjQuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2VbMV0ucG9zIC8gNjQuMCApKTsKIAotICAgICAgICAgIG51bV9hY3Rpb25zKys7CisgICAgICAgICAgICBudW1fYWN0aW9ucysrOwogI2VuZGlmCiAKLSAgICAgICAgICBlZGdlLT5wb3MgPSBlZGdlWzFdLnBvczsKKyAgICAgICAgICAgIGVkZ2UtPnBvcyA9IGVkZ2VbMV0ucG9zOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4uaCBiL3NyYy9hdXRvZml0L2FmbGF0aW4uaAppbmRleCA0MTQwNjBmLi5mZTZiYmQ4IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZmxhdGluLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbi5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQXV0by1maXR0ZXIgaGludGluZyByb3V0aW5lcyBmb3IgbGF0aW4gd3JpdGluZyBzeXN0ZW0gICAgICAgICAgICAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRkxBVElOX0hfXwotI2RlZmluZSBfX0FGTEFUSU5fSF9fCisjaWZuZGVmIEFGTEFUSU5fSF8KKyNkZWZpbmUgQUZMQVRJTl9IXwogCiAjaW5jbHVkZSAiYWZoaW50cy5oIgogCkBAIC0xODgsNyArMTg4LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRkxBVElOX0hfXyAqLworI2VuZGlmIC8qIEFGTEFUSU5fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMgYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5jCmluZGV4IDJmYjdkMWQuLjVkYjRhNDEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbjIuYwpAQCAtMSwxMCArMSwxNSBAQAorLyogQVRURU5USU9OOiBUaGlzIGZpbGUgZG9lc24ndCBjb21waWxlLiAgSXQgaXMgb25seSBoZXJlIGFzIGEgcmVmZXJlbmNlICovCisvKiAgICAgICAgICAgIG9mIGFuIGFsdGVybmF0aXZlIGxhdGluIGhpbnRpbmcgYWxnb3JpdGhtIHRoYXQgd2FzIGFsd2F5cyAgKi8KKy8qICAgICAgICAgICAgbWFya2VkIGFzIGV4cGVyaW1lbnRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIGFmbGF0aW4yLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBoaW50aW5nIHJvdXRpbmVzIGZvciBsYXRpbiB3cml0aW5nIHN5c3RlbSAoYm9keSkuICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTE5NSw3ICsxMjAwLDcgQEAKIAogICAgICAgICAvKiBpbnNlcnQgYSBuZXcgZWRnZSBpbiB0aGUgbGlzdCBhbmQgKi8KICAgICAgICAgLyogc29ydCBhY2NvcmRpbmcgdG8gdGhlIHBvc2l0aW9uICAgICovCi0gICAgICAgIGVycm9yID0gYWZfYXhpc19oaW50c19uZXdfZWRnZSggYXhpcywgc2VnLT5wb3MsIHNlZy0+ZGlyLAorICAgICAgICBlcnJvciA9IGFmX2F4aXNfaGludHNfbmV3X2VkZ2UoIGF4aXMsIHNlZy0+cG9zLCBzZWctPmRpciwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksICZlZGdlICk7CiAgICAgICAgIGlmICggZXJyb3IgKQogICAgICAgICAgIGdvdG8gRXhpdDsKZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmggYi9zcmMvYXV0b2ZpdC9hZmxhdGluMi5oCmluZGV4IDkzMjY3NTMuLmY4M2Y3MDQgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbGF0aW4yLmgKKysrIGIvc3JjL2F1dG9maXQvYWZsYXRpbjIuaApAQCAtMSwzICsxLDggQEAKKy8qIEFUVEVOVElPTjogVGhpcyBmaWxlIGRvZXNuJ3QgY29tcGlsZS4gIEl0IGlzIG9ubHkgaGVyZSBhcyBhIHJlZmVyZW5jZSAqLworLyogICAgICAgICAgICBvZiBhbiBhbHRlcm5hdGl2ZSBsYXRpbiBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHdhcyBhbHdheXMgICovCisvKiAgICAgICAgICAgIG1hcmtlZCBhcyBleHBlcmltZW50YWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBhZmxhdGluMi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01LDcgKzEwLDcgQEAKIC8qICAgIEF1dG8tZml0dGVyIGhpbnRpbmcgcm91dGluZXMgZm9yIGxhdGluIHdyaXRpbmcgc3lzdGVtICAgICAgICAgICAgICAgICovCiAvKiAgICAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMjIsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZMQVRJTjJfSF9fCi0jZGVmaW5lIF9fQUZMQVRJTjJfSF9fCisjaWZuZGVmIEFGTEFUSU4yX0hfCisjZGVmaW5lIEFGTEFUSU4yX0hfCiAKICNpbmNsdWRlICJhZmhpbnRzLmgiCiAKQEAgLTM1LDcgKzQwLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRkxBVElOX0hfXyAqLworI2VuZGlmIC8qIEFGTEFUSU5fSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMgYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5jCmluZGV4IGFhNWI4ZmQuLjI2YmJhMDYgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmbG9hZGVyLmMKKysrIGIvc3JjL2F1dG9maXQvYWZsb2FkZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuaCBiL3NyYy9hdXRvZml0L2FmbG9hZGVyLmgKaW5kZXggNGM0YWZmYy4uMDA2MmViOSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZsb2FkZXIuaAorKysgYi9zcmMvYXV0b2ZpdC9hZmxvYWRlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIGdseXBoIGxvYWRpbmcgcm91dGluZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRkxPQURFUl9IX18KLSNkZWZpbmUgX19BRkxPQURFUl9IX18KKyNpZm5kZWYgQUZMT0FERVJfSF8KKyNkZWZpbmUgQUZMT0FERVJfSF8KIAogI2luY2x1ZGUgImFmaGludHMuaCIKICNpbmNsdWRlICJhZm1vZHVsZS5oIgpAQCAtODUsNyArODUsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGTE9BREVSX0hfXyAqLworI2VuZGlmIC8qIEFGTE9BREVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jIGIvc3JjL2F1dG9maXQvYWZtb2R1bGUuYwppbmRleCA0NWZkMzYwLi5lOGY4ZmY0IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5jCisrKyBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgbW9kdWxlIGltcGxlbWVudGF0aW9uIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTEwNywxOCArMTA3LDI5IEBACiAgIHN0YXRpYyBGVF9FcnJvcgogICBhZl9wcm9wZXJ0eV9zZXQoIEZUX01vZHVsZSAgICBmdF9tb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlICkKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHZhbHVlX2lzX3N0cmluZyApCiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yICA9IEZUX0Vycl9PazsKICAgICBBRl9Nb2R1bGUgIG1vZHVsZSA9IChBRl9Nb2R1bGUpZnRfbW9kdWxlOwogCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgIEZUX1VOVVNFRCggdmFsdWVfaXNfc3RyaW5nICk7CisjZW5kaWYKKwogCiAgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZmFsbGJhY2stc2NyaXB0IiApICkKICAgICB7Ci0gICAgICBGVF9VSW50KiAgZmFsbGJhY2tfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworICAgICAgRlRfVUludCogIGZhbGxiYWNrX3NjcmlwdDsKKyAgICAgIEZUX1VJbnQgICBzczsKIAotICAgICAgRlRfVUludCAgc3M7CiAKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisjZW5kaWYKKworICAgICAgZmFsbGJhY2tfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOwogCiAgICAgICAvKiBXZSB0cmFuc2xhdGUgdGhlIGZhbGxiYWNrIHNjcmlwdCB0byBhIGZhbGxiYWNrIHN0eWxlIHRoYXQgdXNlcyAqLwogICAgICAgLyogYGZhbGxiYWNrLXNjcmlwdCcgYXMgaXRzIHNjcmlwdCBhbmQgYEFGX0NPVkVSQUdFX05PTkUnIGFzIGl0cyAgKi8KQEAgLTE0NywxOSArMTU4LDMzIEBACiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGVmYXVsdC1zY3JpcHQiICkgKQogICAgIHsKLSAgICAgIEZUX1VJbnQqICBkZWZhdWx0X3NjcmlwdCA9IChGVF9VSW50Kil2YWx1ZTsKKyAgICAgIEZUX1VJbnQqICBkZWZhdWx0X3NjcmlwdDsKIAogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworI2VuZGlmCisKKyAgICAgIGRlZmF1bHRfc2NyaXB0ID0gKEZUX1VJbnQqKXZhbHVlOworCiAgICAgICBtb2R1bGUtPmRlZmF1bHRfc2NyaXB0ID0gKmRlZmF1bHRfc2NyaXB0OwogCiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiaW5jcmVhc2UteC1oZWlnaHQiICkgKQogICAgIHsKLSAgICAgIEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0KiAgcHJvcCA9IChGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCopdmFsdWU7CisgICAgICBGVF9Qcm9wX0luY3JlYXNlWEhlaWdodCogIHByb3A7CiAgICAgICBBRl9GYWNlR2xvYmFscyAgICAgICAgICAgIGdsb2JhbHM7CiAKIAorI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyNlbmRpZgorCisgICAgICBwcm9wID0gKEZUX1Byb3BfSW5jcmVhc2VYSGVpZ2h0Kil2YWx1ZTsKKwogICAgICAgZXJyb3IgPSBhZl9wcm9wZXJ0eV9nZXRfZmFjZV9nbG9iYWxzKCBwcm9wLT5mYWNlLCAmZ2xvYmFscywgbW9kdWxlICk7CiAgICAgICBpZiAoICFlcnJvciApCiAgICAgICAgIGdsb2JhbHMtPmluY3JlYXNlX3hfaGVpZ2h0ID0gcHJvcC0+bGltaXQ7CkBAIC0xNjksMjggKzE5NCw3NyBAQAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUgogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAid2FycGluZyIgKSApCiAgICAgewotICAgICAgRlRfQm9vbCogIHdhcnBpbmcgPSAoRlRfQm9vbCopdmFsdWU7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBsb25nICAgICAgICAgdyA9IGZ0X3N0cnRvbCggcywgTlVMTCwgMTAgKTsKIAogCi0gICAgICBtb2R1bGUtPndhcnBpbmcgPSAqd2FycGluZzsKKyAgICAgICAgaWYgKCB3ID09IDAgKQorICAgICAgICAgIG1vZHVsZS0+d2FycGluZyA9IDA7CisgICAgICAgIGVsc2UgaWYgKCB3ID09IDEgKQorICAgICAgICAgIG1vZHVsZS0+d2FycGluZyA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBGVF9Cb29sKiAgd2FycGluZyA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICAgIG1vZHVsZS0+d2FycGluZyA9ICp3YXJwaW5nOworICAgICAgfQogCiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fVVNFX1dBUlBFUiAqLwogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGFya2VuaW5nLXBhcmFtZXRlcnMiICkgKQogICAgIHsKLSAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKKyAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXM7CisgICAgICBGVF9JbnQgICB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQ7CiAKLSAgICAgIEZUX0ludCAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOwotICAgICAgRlRfSW50ICB5MSA9IGRhcmtlbl9wYXJhbXNbMV07Ci0gICAgICBGVF9JbnQgIHgyID0gZGFya2VuX3BhcmFtc1syXTsKLSAgICAgIEZUX0ludCAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOwotICAgICAgRlRfSW50ICB4MyA9IGRhcmtlbl9wYXJhbXNbNF07Ci0gICAgICBGVF9JbnQgIHkzID0gZGFya2VuX3BhcmFtc1s1XTsKLSAgICAgIEZUX0ludCAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOwotICAgICAgRlRfSW50ICB5NCA9IGRhcmtlbl9wYXJhbXNbN107CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBGVF9JbnQgICBkcFs4XTsKIAogCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBjaGFyKiAgICAgICAgZXA7CisgICAgICAgIGludCAgICAgICAgICBpOworCisKKyAgICAgICAgLyogZWlnaHQgY29tbWEtc2VwYXJhdGVkIG51bWJlcnMgKi8KKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCA3OyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgZHBbaV0gPSAoRlRfSW50KWZ0X3N0cnRvbCggcywgJmVwLCAxMCApOworICAgICAgICAgIGlmICggKmVwICE9ICcsJyB8fCBzID09IGVwICkKKyAgICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICAgICAgcyA9IGVwICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGRwWzddID0gKEZUX0ludClmdF9zdHJ0b2woIHMsICZlcCwgMTAgKTsKKyAgICAgICAgaWYgKCAhKCAqZXAgPT0gJ1wwJyB8fCAqZXAgPT0gJyAnICkgfHwgcyA9PSBlcCApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgICAgZGFya2VuX3BhcmFtcyA9IGRwOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKKworICAgICAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOworICAgICAgeTEgPSBkYXJrZW5fcGFyYW1zWzFdOworICAgICAgeDIgPSBkYXJrZW5fcGFyYW1zWzJdOworICAgICAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOworICAgICAgeDMgPSBkYXJrZW5fcGFyYW1zWzRdOworICAgICAgeTMgPSBkYXJrZW5fcGFyYW1zWzVdOworICAgICAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOworICAgICAgeTQgPSBkYXJrZW5fcGFyYW1zWzddOworCiAgICAgICBpZiAoIHgxIDwgMCAgIHx8IHgyIDwgMCAgIHx8IHgzIDwgMCAgIHx8IHg0IDwgMCAgIHx8CiAgICAgICAgICAgIHkxIDwgMCAgIHx8IHkyIDwgMCAgIHx8IHkzIDwgMCAgIHx8IHk0IDwgMCAgIHx8CiAgICAgICAgICAgIHgxID4geDIgIHx8IHgyID4geDMgIHx8IHgzID4geDQgICAgICAgICAgICAgIHx8CkBAIC0yMTAsMTAgKzI4NCwyOCBAQAogICAgIH0KICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgIm5vLXN0ZW0tZGFya2VuaW5nIiApICkKICAgICB7Ci0gICAgICBGVF9Cb29sKiAgbm9fc3RlbV9kYXJrZW5pbmcgPSAoRlRfQm9vbCopdmFsdWU7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzICAgPSAoY29uc3QgY2hhciopdmFsdWU7CisgICAgICAgIGxvbmcgICAgICAgICBuc2QgPSBmdF9zdHJ0b2woIHMsIE5VTEwsIDEwICk7CiAKIAotICAgICAgbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZyA9ICpub19zdGVtX2RhcmtlbmluZzsKKyAgICAgICAgaWYgKCBuc2QgPT0gMCApCisgICAgICAgICAgbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZyA9IDA7CisgICAgICAgIGVsc2UgaWYgKCBuc2QgPT0gMSApCisgICAgICAgICAgbW9kdWxlLT5ub19zdGVtX2RhcmtlbmluZyA9IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICBGVF9Cb29sKiAgbm9fc3RlbV9kYXJrZW5pbmcgPSAoRlRfQm9vbCopdmFsdWU7CisKKworICAgICAgICBtb2R1bGUtPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOworICAgICAgfQogCiAgICAgICByZXR1cm4gZXJyb3I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaCBiL3NyYy9hdXRvZml0L2FmbW9kdWxlLmgKaW5kZXggM2M2MWQ4OS4uZTY1ZGI1ZiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZtb2R1bGUuaAorKysgYi9zcmMvYXV0b2ZpdC9hZm1vZHVsZS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRk1PRFVMRV9IX18KLSNkZWZpbmUgX19BRk1PRFVMRV9IX18KKyNpZm5kZWYgQUZNT0RVTEVfSF8KKyNkZWZpbmUgQUZNT0RVTEVfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9PQkpFQ1RTX0gKQEAgLTUyLDcgKzUyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19BRk1PRFVMRV9IX18gKi8KKyNlbmRpZiAvKiBBRk1PRFVMRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZwaWMuYyBiL3NyYy9hdXRvZml0L2FmcGljLmMKaW5kZXggMzcyNTRhMi4uM2NiZDkxNiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZwaWMuYworKysgYi9zcmMvYXV0b2ZpdC9hZnBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBhdXRvZml0IG1vZHVsZS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjIsNyArMTIyLDcgQEAKICNpbmNsdWRlICJhZndydHN5cy5oIgogCiAjdW5kZWYgIFNDUklQVAotI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNzcyApICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3NzICkgICAgICAgICAgICAgICAgIFwKICAgICAgICAgRlRfSW5pdF9DbGFzc19hZl8gIyMgcyAjIyBfc2NyaXB0X2NsYXNzKCAgICAgXAogICAgICAgICAgICZjb250YWluZXItPmFmX3NjcmlwdF9jbGFzc2VzX3JlY1tzcysrXSApOwogCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnBpYy5oIGIvc3JjL2F1dG9maXQvYWZwaWMuaAppbmRleCA5YjQ1MDY5Li45OGE0NWEyIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnBpYy5oCisrKyBiL3NyYy9hdXRvZml0L2FmcGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGF1dG9maXQgbW9kdWxlLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGUElDX0hfXwotI2RlZmluZSBfX0FGUElDX0hfXworI2lmbmRlZiBBRlBJQ19IXworI2RlZmluZSBBRlBJQ19IXwogCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICkBAIC05OSw3ICs5OSw3IEBACiAKICAvKiAqLwogCi0jZW5kaWYgLyogX19BRlBJQ19IX18gKi8KKyNlbmRpZiAvKiBBRlBJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYyBiL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmMKaW5kZXggY2Y4YmI3Yy4uNzMyZjNkMSAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZyYW5nZXMuYworKysgYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIFVuaWNvZGUgc2NyaXB0IHJhbmdlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC01OCw1NSArNTgsMTAxIEBACiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hcmFiX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDYwMFVMLCAgMHgwNkZGVUwgKSwgIC8qIEFyYWJpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNzUwVUwsICAweDA3RkZVTCApLCAgLyogQXJhYmljIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4QTBVTCwgIDB4MDhGRlVMICksICAvKiBBcmFiaWMgRXh0ZW5kZWQtQSAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkI1MFVMLCAgMHhGREZGVUwgKSwgIC8qIEFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcwVUwsICAweEZFRkZVTCApLCAgLyogQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUVFMDBVTCwgMHgxRUVGRlVMICksICAvKiBBcmFiaWMgTWF0aGVtYXRpY2FsIEFscGhhYmV0aWMgU3ltYm9scyAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDYwMCwgIDB4MDZGRiApLCAgLyogQXJhYmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA3NTAsICAweDA3RkYgKSwgIC8qIEFyYWJpYyBTdXBwbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOEEwLCAgMHgwOEZGICksICAvKiBBcmFiaWMgRXh0ZW5kZWQtQSAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkI1MCwgIDB4RkRGRiApLCAgLyogQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzAsICAweEZFRkYgKSwgIC8qIEFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDFFRTAwLCAweDFFRUZGICksICAvKiBBcmFiaWMgTWF0aGVtYXRpY2FsIEFscGhhYmV0aWMgU3ltYm9scyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9hcmFiX25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjAwVUwsICAweDA2MDVVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDYxMFVMLCAgMHgwNjFBVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA2NEJVTCwgIDB4MDY1RlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjcwVUwsICAweDA2NzBVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDZENlVMLCAgMHgwNkRDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA2REZVTCwgIDB4MDZFNFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkU3VUwsICAweDA2RThVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDZFQVVMLCAgMHgwNkVEVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA4RTNVTCwgIDB4MDhGRlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQkIyVUwsICAweEZCQzFVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkU3MFVMLCAgMHhGRTcwVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzJVTCwgIDB4RkU3MlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc0VUwsICAweEZFNzRVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkU3NlVMLCAgMHhGRTc2VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFNzhVTCwgIDB4RkU3OFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdBVUwsICAweEZFN0FVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkU3Q1VMLCAgMHhGRTdDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFN0VVTCwgIDB4RkU3RVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjAwLCAgMHgwNjA1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjEwLCAgMHgwNjFBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjRCLCAgMHgwNjVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNjcwLCAgMHgwNjcwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkQ2LCAgMHgwNkRDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkRGLCAgMHgwNkU0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkU3LCAgMHgwNkU4ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNkVBLCAgMHgwNkVEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOEQ0LCAgMHgwOEUxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOEUzLCAgMHgwOEZGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQkIyLCAgMHhGQkMxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcwLCAgMHhGRTcwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTcyLCAgMHhGRTcyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc0LCAgMHhGRTc0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc2LCAgMHhGRTc2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTc4LCAgMHhGRTc4ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdBLCAgMHhGRTdBICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdDLCAgMHhGRTdDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTdFLCAgMHhGRTdFICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYXJtbl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA1MzAsICAweDA1OEYgKSwgIC8qIEFybWVuaWFuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxMywgIDB4RkIxNyApLCAgLyogQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoQXJtZW5pYW4pICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2FybW5fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA1NTksICAweDA1NUYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iZW5nX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDk4MCwgIDB4MDlGRiApLCAgLyogQmVuZ2FsaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iZW5nX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTgxLCAgMHgwOTgxICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUJDLCAgMHgwOUJDICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUMxLCAgMHgwOUM0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUNELCAgMHgwOUNEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUUyLCAgMHgwOUUzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2hlcl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEzQTAsICAweDEzRkYgKSwgIC8qIENoZXJva2VlICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCNzAsICAweEFCQkYgKSwgIC8qIENoZXJva2VlIFN1cHBsZW1lbnQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfY2hlcl9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCiAgIH07CiAKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2N5cmxfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNDAwVUwsICAweDA0RkZVTCApLCAgLyogQ3lyaWxsaWMgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDUwMFVMLCAgMHgwNTJGVUwgKSwgIC8qIEN5cmlsbGljIFN1cHBsZW1lbnQgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDJERTBVTCwgIDB4MkRGRlVMICksICAvKiBDeXJpbGxpYyBFeHRlbmRlZC1BICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNjQwVUwsICAweEE2OUZVTCApLCAgLyogQ3lyaWxsaWMgRXh0ZW5kZWQtQiAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDQwMCwgIDB4MDRGRiApLCAgLyogQ3lyaWxsaWMgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDUwMCwgIDB4MDUyRiApLCAgLyogQ3lyaWxsaWMgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkRFMCwgIDB4MkRGRiApLCAgLyogQ3lyaWxsaWMgRXh0ZW5kZWQtQSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTY0MCwgIDB4QTY5RiApLCAgLyogQ3lyaWxsaWMgRXh0ZW5kZWQtQiAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUM4MCwgIDB4MUM4RiApLCAgLyogQ3lyaWxsaWMgRXh0ZW5kZWQtQyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9jeXJsX25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNDgzVUwsICAweDA0ODlVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkRFMFVMLCAgMHgyREZGVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEE2NkZVTCwgIDB4QTY3RlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNjlFVUwsICAweEE2OUZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDQ4MywgIDB4MDQ4OSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkRFMCwgIDB4MkRGRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTY2RiwgIDB4QTY3RiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTY5RSwgIDB4QTY5RiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKIApAQCAtMTE2LDQ3NCArMTYyLDUwMyBAQAogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZGV2YV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5MDBVTCwgIDB4MDkzQlVMICksICAvKiBEZXZhbmFnYXJpICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTAwLCAgMHgwOTNCICksICAvKiBEZXZhbmFnYXJpICAgICAgICAgICovCiAgICAgLyogb21pdHRpbmcgVSswOTNDIG51a3RhICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTNEVUwsICAweDA5NTBVTCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDkzRCwgIDB4MDk1MCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAqLwogICAgIC8qIG9taXR0aW5nIFUrMDk1MSB1ZGF0dGEsIFUrMDk1MiBhbnVkYXR0YSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDk1M1VMLCAgMHgwOTYzVUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NTMsICAweDA5NjMgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgKi8KICAgICAvKiBvbWl0dGluZyBVKzA5NjQgZGFuZGEsIFUrMDk2NSBkb3VibGUgZGFuZGEgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NjZVTCwgIDB4MDk3RlVMICksICAvKiAuLi4gY29udGludWVkICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMEI5VUwsICAweDIwQjlVTCApLCAgLyogKG5ldykgUnVwZWUgc2lnbiAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QThFMFVMLCAgMHhBOEZGVUwgKSwgIC8qIERldmFuYWdhcmkgRXh0ZW5kZWQgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NjYsICAweDA5N0YgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQjksICAweDIwQjkgKSwgIC8qIChuZXcpIFJ1cGVlIHNpZ24gICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4RTAsICAweEE4RkYgKSwgIC8qIERldmFuYWdhcmkgRXh0ZW5kZWQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZGV2YV9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDkwMFVMLCAgMHgwOTAyVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5M0FVTCwgIDB4MDkzQVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTQxVUwsICAweDA5NDhVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDk0RFVMLCAgMHgwOTREVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NTNVTCwgIDB4MDk1N1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTYyVUwsICAweDA5NjNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QThFMFVMLCAgMHhBOEYxVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5MDAsICAweDA5MDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5M0EsICAweDA5M0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NDEsICAweDA5NDggKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NEQsICAweDA5NEQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NTMsICAweDA5NTcgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5NjIsICAweDA5NjMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4RTAsICAweEE4RjEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ldGhpX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTIwMCwgIDB4MTM3RiApLCAgLyogRXRoaW9waWMgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTM4MCwgIDB4MTM5RiApLCAgLyogRXRoaW9waWMgU3VwcGxlbWVudCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkQ4MCwgIDB4MkRERiApLCAgLyogRXRoaW9waWMgRXh0ZW5kZWQgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUIwMCwgIDB4QUIyRiApLCAgLyogRXRoaW9waWMgRXh0ZW5kZWQtQSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ldGhpX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMzVELCAgMHgxMzVGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfZ2Vvcl91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDEwRDAsICAweDEwRkYgKSwgIC8qIEdlb3JnaWFuIChNa2hlZHJ1bGkpICovCisjaWYgMAorICAgIC8qIHRoZSBmb2xsb3dpbmcgcmFuZ2UgaXMgcHJvcG9zZWQgZm9yIGluY2x1c2lvbiBpbiBVbmljb2RlICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQzkwLCAgMHgxQ0JGICksICAvKiBHZW9yZ2lhbiAoTXRhdnJ1bGkpICAqLworI2VuZGlmCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dlb3Jfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9nZW9rX3VuaXJhbmdlc1tdID0KKyAgeworICAgIC8qIEtodXRzdXJpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMEEwLCAgMHgxMENEICksICAvKiBHZW9yZ2lhbiAoQXNvbXRhdnJ1bGkpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRDAwLCAgMHgyRDJEICksICAvKiBHZW9yZ2lhbiAoTnVza2h1cmkpICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dlb2tfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQogICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ncmVrX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDM3MFVMLCAgMHgwM0ZGVUwgKSwgIC8qIEdyZWVrIGFuZCBDb3B0aWMgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGMDBVTCwgIDB4MUZGRlVMICksICAvKiBHcmVlayBFeHRlbmRlZCAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzcwLCAgMHgwM0ZGICksICAvKiBHcmVlayBhbmQgQ29wdGljICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRjAwLCAgMHgxRkZGICksICAvKiBHcmVlayBFeHRlbmRlZCAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2dyZWtfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzN0FVTCwgIDB4MDM3QVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMzg0VUwsICAweDAzODVVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUZCRFVMLCAgMHgxRkMxVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGQ0RVTCwgIDB4MUZDRlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRkREVUwsICAweDFGREZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUZFRFVMLCAgMHgxRkVGVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGRkRVTCwgIDB4MUZGRVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hlYnJfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTkwVUwsICAweDA1RkZVTCApLCAgLyogSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxRFVMLCAgMHhGQjRGVUwgKSwgIC8qIEFscGhhYi4gUHJlc2VudC4gRm9ybXMgKEhlYnJldykgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hlYnJfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA1OTFVTCwgIDB4MDVCRlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUMxVUwsICAweDA1QzJVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDVDNFVMLCAgMHgwNUM1VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA1QzdVTCwgIDB4MDVDN1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjFFVUwsICAweEZCMUVVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1yX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTc4MFVMLCAgMHgxN0ZGVUwgKSwgIC8qIEtobWVyICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1yX25vbmJhc2VfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0I3VUwsICAweDE3QkRVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTdDNlVMLCAgMHgxN0M2VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3QzlVTCwgIDB4MTdEM1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxN0REVUwsICAweDE3RERVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1zX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTlFMFVMLCAgMHgxOUZGVUwgKSwgIC8qIEtobWVyIFN5bWJvbHMgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2tobXNfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoIDBVTCwgMFVMICkKLSAgfTsKLQotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGFvX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEU4MFVMLCAgMHgwRUZGVUwgKSwgIC8qIExhbyAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGFvX25vbmJhc2VfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRUIxVUwsICAweDBFQjFVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEVCNFVMLCAgMHgwRUJDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFQzhVTCwgIDB4MEVDRFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdG5fdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMDIwVUwsICAweDAwN0ZVTCApLCAgLyogQmFzaWMgTGF0aW4gKG5vIGNvbnRyb2wgY2hhcnMpICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQTBVTCwgIDB4MDBBOVVMICksICAvKiBMYXRpbi0xIFN1cHBsZW1lbnQgKG5vIGNvbnRyb2wgY2hhcnMpICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBQlVMLCAgMHgwMEIxVUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEI0VUwsICAweDAwQjhVTCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQkJVTCwgIDB4MDBGRlVMICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDEwMFVMLCAgMHgwMTdGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMTgwVUwsICAweDAyNEZVTCApLCAgLyogTGF0aW4gRXh0ZW5kZWQtQiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyNTBVTCwgIDB4MDJBRlVMICksICAvKiBJUEEgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJCOVVMLCAgMHgwMkRGVUwgKSwgIC8qIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMkU1VUwsICAweDAyRkZVTCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzMDBVTCwgIDB4MDM2RlVMICksICAvKiBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUFCMFVMLCAgMHgxQUJFVUwgKSwgIC8qIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBFeHRlbmRlZCAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDAwVUwsICAweDFEMkJVTCApLCAgLyogUGhvbmV0aWMgRXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENkJVTCwgIDB4MUQ3N1VMICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ3OVVMLCAgMHgxRDdGVUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDgwVUwsICAweDFEOUFVTCApLCAgLyogUGhvbmV0aWMgRXh0ZW5zaW9ucyBTdXBwbGVtZW50ICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEQzBVTCwgIDB4MURGRlVMICksICAvKiBDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MgU3VwcGxlbWVudCAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUUwMFVMLCAgMHgxRUZGVUwgKSwgIC8qIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDAwVUwsICAweDIwNkZVTCApLCAgLyogR2VuZXJhbCBQdW5jdHVhdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQTBVTCwgIDB4MjBCOFVMICksICAvKiBDdXJyZW5jeSBTeW1ib2xzIC4uLiAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjBCQVVMLCAgMHgyMENGVUwgKSwgIC8qIC4uLiBleGNlcHQgbmV3IFJ1cGVlIHNpZ24gICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMTUwVUwsICAweDIxOEZVTCApLCAgLyogTnVtYmVyIEZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDNjBVTCwgIDB4MkM3QlVMICksICAvKiBMYXRpbiBFeHRlbmRlZC1DICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM3RVVMLCAgMHgyQzdGVUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTAwVUwsICAweDJFN0ZVTCApLCAgLyogU3VwcGxlbWVudGFsIFB1bmN0dWF0aW9uICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3MjBVTCwgIDB4QTc2RlVMICksICAvKiBMYXRpbiBFeHRlbmRlZC1EICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTc3MVVMLCAgMHhBN0Y3VUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBN0ZBVUwsICAweEE3RkZVTCApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCMzBVTCwgIDB4QUI1QlVMICksICAvKiBMYXRpbiBFeHRlbmRlZC1FICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUI2MFVMLCAgMHhBQjZGVUwgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjAwVUwsICAweEZCMDZVTCApLCAgLyogQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoTGF0aW4gTGlncykgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUQ0MDBVTCwgMHgxRDdGRlVMICksICAvKiBNYXRoZW1hdGljYWwgQWxwaGFudW1lcmljIFN5bWJvbHMgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0bl9ub25iYXNlX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDA1RVVMLCAgMHgwMDYwVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwN0VVTCwgIDB4MDA3RVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEE4VUwsICAweDAwQTlVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBRVVMLCAgMHgwMEIwVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQjRVTCwgIDB4MDBCNFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEI4VUwsICAweDAwQjhVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCQ1VMLCAgMHgwMEJFVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyQjlVTCwgIDB4MDJERlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMkU1VUwsICAweDAyRkZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDMwMFVMLCAgMHgwMzZGVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFBQjBVTCwgIDB4MUFCRVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxREMwVUwsICAweDFERkZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAxN1VMLCAgMHgyMDE3VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwM0VVTCwgIDB4MjAzRVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBNzg4VUwsICAweEE3ODhVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTdGOFVMLCAgMHhBN0ZBVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0Yl91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENjJVTCwgIDB4MUQ2QVVMICksICAvKiBzb21lIHNtYWxsIHN1YnNjcmlwdCBsZXR0ZXJzICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwODBVTCwgIDB4MjA5Q1VMICksICAvKiBzdWJzY3JpcHQgZGlnaXRzIGFuZCBsZXR0ZXJzICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDN0NVTCwgIDB4MkM3Q1VMICksICAvKiBsYXRpbiBzdWJzY3JpcHQgc21hbGwgbGV0dGVyIGogKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdGJfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoIDBVTCwgMFVMICkKLSAgfTsKLQotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0cF91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQUFVTCwgIDB4MDBBQVVMICksICAvKiBmZW1pbmluZSBvcmRpbmFsIGluZGljYXRvciAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCMlVMLCAgMHgwMEIzVUwgKSwgIC8qIHN1cGVyc2NyaXB0IHR3byBhbmQgdGhyZWUgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEI5VUwsICAweDAwQkFVTCApLCAgLyogc3VwZXJzY3JpcHQgb25lLCBtYXNjLiBvcmQuIGluZGljLiAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyQjBVTCwgIDB4MDJCOFVMICksICAvKiBzb21lIGxhdGluIHN1cGVyc2NyaXB0IG1vZC4gbGV0dGVycyAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJFMFVMLCAgMHgwMkU0VUwgKSwgIC8qIHNvbWUgSVBBIG1vZGlmaWVyIGxldHRlcnMgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDJDVUwsICAweDFENjFVTCApLCAgLyogbGF0aW4gc3VwZXJzY3JpcHQgbW9kaWZpZXIgbGV0dGVycyAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENzhVTCwgIDB4MUQ3OFVMICksICAvKiBtb2RpZmllciBsZXR0ZXIgY3lyaWxsaWMgZW4gICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ5QlVMLCAgMHgxREJGVUwgKSwgIC8qIG1vcmUgbW9kaWZpZXIgbGV0dGVycyAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDcwVUwsICAweDIwN0ZVTCApLCAgLyogc3VwZXJzY3JpcHQgZGlnaXRzIGFuZCBsZXR0ZXJzICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDN0RVTCwgIDB4MkM3RFVMICksICAvKiBtb2RpZmllciBsZXR0ZXIgY2FwaXRhbCB2ICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTc3MFVMLCAgMHhBNzcwVUwgKSwgIC8qIG1vZGlmaWVyIGxldHRlciB1cyAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBN0Y4VUwsICAweEE3RjlVTCApLCAgLyogbW9yZSBtb2RpZmllciBsZXR0ZXJzICAgICAgICAgICAgICAgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCNUNVTCwgIDB4QUI1RlVMICksICAvKiBtb3JlIG1vZGlmaWVyIGxldHRlcnMgICAgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0cF9ub25iYXNlX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggMFVMLCAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9teW1yX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDAwVUwsIDB4MTA5RlVMICksICAgIC8qIE15YW5tYXIgICAgICAgICAgICAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBOUUwVUwsIDB4QTlGRlVMICksICAgIC8qIE15YW5tYXIgRXh0ZW5kZWQtQiAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBQTYwVUwsIDB4QUE3RlVMICksICAgIC8qIE15YW5tYXIgRXh0ZW5kZWQtQSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAwVUwsICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX215bXJfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAyRFVMLCAweDEwMzBVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDMyVUwsIDB4MTAzN1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwM0FVTCwgMHgxMDNBVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAzRFVMLCAweDEwM0VVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDU4VUwsIDB4MTA1OVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNUVVTCwgMHgxMDYwVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA3MVVMLCAweDEwNzRVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDgyVUwsIDB4MTA4MlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwODVVTCwgMHgxMDg2VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA4RFVMLCAweDEwOERVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBOUU1VUwsIDB4QTlFNVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweEFBN0NVTCwgMHhBQTdDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgMFVMLCAgICAgIDBVTCApCi0gIH07Ci0KLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX25vbmVfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAwVUwsIDBVTCApCi0gIH07Ci0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ub25lX25vbmJhc2VfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAwVUwsIDBVTCApCi0gIH07Ci0KLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RlbHVfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwVUwsICAweDBDN0ZVTCApLCAgLyogVGVsdWd1ICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90ZWx1X25vbmJhc2VfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwVUwsICAweDBDMDBVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEMzRVVMLCAgMHgwQzQwVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDNDZVTCwgIDB4MEM1NlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzYyVUwsICAweDBDNjNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90aGFpX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEUwMFVMLCAgMHgwRTdGVUwgKSwgIC8qIFRoYWkgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3RoYWlfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFMzFVTCwgIDB4MEUzMVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRTM0VUwsICAweDBFM0FVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEU0N1VMLCAgMHgwRTRFVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotCi0jaWZkZWYgQUZfQ09ORklHX09QVElPTl9JTkRJQwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfYmVuZ191bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5ODBVTCwgIDB4MDlGRlVMICksICAvKiBCZW5nYWxpICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCi0gIH07Ci0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9iZW5nX25vbmJhc2VfdW5pcmFuZ2VzW10gPQotICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOTgxVUwsICAweDA5ODFVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlCQ1VMLCAgMHgwOUJDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDA5QzFVTCwgIDB4MDlDNFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwOUNEVUwsICAweDA5Q0RVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDlFMlVMLCAgMHgwOUUzVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzN0EsICAweDAzN0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAzODQsICAweDAzODUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGQkQsICAweDFGQzEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGQ0QsICAweDFGQ0YgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGREQsICAweDFGREYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGRUQsICAweDFGRUYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFGRkQsICAweDFGRkUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ndWpyX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEE4MFVMLCAgMHgwQUZGVUwgKSwgIC8qIEd1amFyYXRpICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTgwLCAgMHgwQUZGICksICAvKiBHdWphcmF0aSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ndWpyX25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTgxVUwsICAweDBBODJVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFCQ1VMLCAgMHgwQUJDVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBQzFVTCwgIDB4MEFDOFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQUNEVUwsICAweDBBQ0RVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEFFMlVMLCAgMHgwQUUzVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBODEsICAweDBBODIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBQkMsICAweDBBQkMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBQzEsICAweDBBQzggKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBQ0QsICAweDBBQ0QgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBRTIsICAweDBBRTMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ndXJ1X3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEEwMFVMLCAgMHgwQTdGVUwgKSwgIC8qIEd1cm11a2hpICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTAwLCAgMHgwQTdGICksICAvKiBHdXJtdWtoaSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ndXJ1X25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTAxVUwsICAweDBBMDJVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEEzQ1VMLCAgMHgwQTNFVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNDFVTCwgIDB4MEE1MVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQTcwVUwsICAweDBBNzFVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEE3NVVMLCAgMHgwQTc1VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBMDEsICAweDBBMDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBM0MsICAweDBBM0MgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNDEsICAweDBBNTEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNzAsICAweDBBNzEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBBNzUsICAweDBBNzUgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oZWJyX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDU5MCwgIDB4MDVGRiApLCAgLyogSGVicmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkIxRCwgIDB4RkI0RiApLCAgLyogQWxwaGFiLiBQcmVzZW50LiBGb3JtcyAoSGVicmV3KSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9oZWJyX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNTkxLCAgMHgwNUJGICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUMxLCAgMHgwNUMyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUM0LCAgMHgwNUM1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwNUM3LCAgMHgwNUM3ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjFFLCAgMHhGQjFFICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfa25kYV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODBVTCwgIDB4MENGRlVMICksICAvKiBLYW5uYWRhICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzgwLCAgMHgwQ0ZGICksICAvKiBLYW5uYWRhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2tuZGFfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODFVTCwgIDB4MEM4MVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQ0JDVUwsICAweDBDQkNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENCRlVMLCAgMHgwQ0JGVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDQzZVTCwgIDB4MENDNlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQ0NDVUwsICAweDBDQ0RVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MENFMlVMLCAgMHgwQ0UzVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDODEsICAweDBDODEgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDQkMsICAweDBDQkMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDQkYsICAweDBDQkYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDQzYsICAweDBDQzYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDQ0MsICAweDBDQ0QgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDRTIsICAweDBDRTMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saW1iX3VuaXJhbmdlc1tdID0KKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1yX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkwMFVMLCAgMHgxOTRGVUwgKSwgIC8qIExpbWJ1ICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxNzgwLCAgMHgxN0ZGICksICAvKiBLaG1lciAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saW1iX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2tobXJfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDE5MjBVTCwgIDB4MTkyMlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxOTI3VUwsICAweDE5MzRVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTkzN1VMLCAgMHgxOTNCVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3QjcsICAweDE3QkQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3QzYsICAweDE3QzYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3QzksICAweDE3RDMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDE3REQsICAweDE3REQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1zX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MTlFMCwgIDB4MTlGRiApLCAgLyogS2htZXIgU3ltYm9scyAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9raG1zX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGFvX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEU4MCwgIDB4MEVGRiApLCAgLyogTGFvICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhb19ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEVCMSwgIDB4MEVCMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEVCNCwgIDB4MEVCQyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEVDOCwgIDB4MEVDRCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdG5fdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMDIwLCAgMHgwMDdGICksICAvKiBCYXNpYyBMYXRpbiAobm8gY29udHJvbCBjaGFycykgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBMCwgIDB4MDBBOSApLCAgLyogTGF0aW4tMSBTdXBwbGVtZW50IChubyBjb250cm9sIGNoYXJzKSAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQUIsICAweDAwQjEgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEI0LCAgMHgwMEI4ICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCQiwgIDB4MDBGRiApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAxMDAsICAweDAxN0YgKSwgIC8qIExhdGluIEV4dGVuZGVkLUEgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMTgwLCAgMHgwMjRGICksICAvKiBMYXRpbiBFeHRlbmRlZC1CICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDI1MCwgIDB4MDJBRiApLCAgLyogSVBBIEV4dGVuc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyQjksICAweDAyREYgKSwgIC8qIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycyAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMkU1LCAgMHgwMkZGICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDMwMCwgIDB4MDM2RiApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFBQjAsICAweDFBQkUgKSwgIC8qIENvbWJpbmluZyBEaWFjcml0aWNhbCBNYXJrcyBFeHRlbmRlZCAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDAwLCAgMHgxRDJCICksICAvKiBQaG9uZXRpYyBFeHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ2QiwgIDB4MUQ3NyApLCAgLyogLi4uIGNvbnRpbnVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFENzksICAweDFEN0YgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDgwLCAgMHgxRDlBICksICAvKiBQaG9uZXRpYyBFeHRlbnNpb25zIFN1cHBsZW1lbnQgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MURDMCwgIDB4MURGRiApLCAgLyogQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzIFN1cHBsZW1lbnQgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFFMDAsICAweDFFRkYgKSwgIC8qIExhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDAwLCAgMHgyMDZGICksICAvKiBHZW5lcmFsIFB1bmN0dWF0aW9uICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjBBMCwgIDB4MjBCOCApLCAgLyogQ3VycmVuY3kgU3ltYm9scyAuLi4gICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwQkEsICAweDIwQ0YgKSwgIC8qIC4uLiBleGNlcHQgbmV3IFJ1cGVlIHNpZ24gICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMTUwLCAgMHgyMThGICksICAvKiBOdW1iZXIgRm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM2MCwgIDB4MkM3QiApLCAgLyogTGF0aW4gRXh0ZW5kZWQtQyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJDN0UsICAweDJDN0YgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTAwLCAgMHgyRTdGICksICAvKiBTdXBwbGVtZW50YWwgUHVuY3R1YXRpb24gICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTcyMCwgIDB4QTc2RiApLCAgLyogTGF0aW4gRXh0ZW5kZWQtRCAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3NzEsICAweEE3RjcgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBN0ZBLCAgMHhBN0ZGICksICAvKiAuLi4gY29udGludWVkICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUIzMCwgIDB4QUI1QiApLCAgLyogTGF0aW4gRXh0ZW5kZWQtRSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEFCNjAsICAweEFCNkYgKSwgIC8qIC4uLiBjb250aW51ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGQjAwLCAgMHhGQjA2ICksICAvKiBBbHBoYWIuIFByZXNlbnQuIEZvcm1zIChMYXRpbiBMaWdzKSAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxRDQwMCwgMHgxRDdGRiApLCAgLyogTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0bl9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDA1RSwgIDB4MDA2MCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDA3RSwgIDB4MDA3RSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBOCwgIDB4MDBBOSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBRSwgIDB4MDBCMCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCNCwgIDB4MDBCNCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCOCwgIDB4MDBCOCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBCQywgIDB4MDBCRSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJCOSwgIDB4MDJERiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJFNSwgIDB4MDJGRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDMwMCwgIDB4MDM2RiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUFCMCwgIDB4MUFCRSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MURDMCwgIDB4MURGRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAxNywgIDB4MjAxNyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MjAzRSwgIDB4MjAzRSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTc4OCwgIDB4QTc4OCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTdGOCwgIDB4QTdGQSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdGJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDYyLCAgMHgxRDZBICksICAvKiBzb21lIHNtYWxsIHN1YnNjcmlwdCBsZXR0ZXJzICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDIwODAsICAweDIwOUMgKSwgIC8qIHN1YnNjcmlwdCBkaWdpdHMgYW5kIGxldHRlcnMgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM3QywgIDB4MkM3QyApLCAgLyogbGF0aW4gc3Vic2NyaXB0IHNtYWxsIGxldHRlciBqICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xhdGJfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoIDAsIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9sYXRwX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDBBQSwgIDB4MDBBQSApLCAgLyogZmVtaW5pbmUgb3JkaW5hbCBpbmRpY2F0b3IgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAwQjIsICAweDAwQjMgKSwgIC8qIHN1cGVyc2NyaXB0IHR3byBhbmQgdGhyZWUgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwMEI5LCAgMHgwMEJBICksICAvKiBzdXBlcnNjcmlwdCBvbmUsIG1hc2MuIG9yZC4gaW5kaWMuICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MDJCMCwgIDB4MDJCOCApLCAgLyogc29tZSBsYXRpbiBzdXBlcnNjcmlwdCBtb2QuIGxldHRlcnMgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDAyRTAsICAweDAyRTQgKSwgIC8qIHNvbWUgSVBBIG1vZGlmaWVyIGxldHRlcnMgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxRDJDLCAgMHgxRDYxICksICAvKiBsYXRpbiBzdXBlcnNjcmlwdCBtb2RpZmllciBsZXR0ZXJzICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUQ3OCwgIDB4MUQ3OCApLCAgLyogbW9kaWZpZXIgbGV0dGVyIGN5cmlsbGljIGVuICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFEOUIsICAweDFEQkYgKSwgIC8qIG1vcmUgbW9kaWZpZXIgbGV0dGVycyAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyMDcwLCAgMHgyMDdGICksICAvKiBzdXBlcnNjcmlwdCBkaWdpdHMgYW5kIGxldHRlcnMgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkM3RCwgIDB4MkM3RCApLCAgLyogbW9kaWZpZXIgbGV0dGVyIGNhcGl0YWwgdiAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE3NzAsICAweEE3NzAgKSwgIC8qIG1vZGlmaWVyIGxldHRlciB1cyAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBN0Y4LCAgMHhBN0Y5ICksICAvKiBtb3JlIG1vZGlmaWVyIGxldHRlcnMgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QUI1QywgIDB4QUI1RiApLCAgLyogbW9yZSBtb2RpZmllciBsZXR0ZXJzICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbGF0cF9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCiAgIH07CiAKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX21seW1fdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRDAwVUwsICAweDBEN0ZVTCApLCAgLyogTWFsYXlhbGFtICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRDAwLCAgMHgwRDdGICksICAvKiBNYWxheWFsYW0gKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbWx5bV9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMVVMLCAgMHgwRDAxVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBENERVTCwgIDB4MEQ0RVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRDYyVUwsICAweDBENjNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQwMSwgIDB4MEQwMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ0RCwgIDB4MEQ0RSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEQ2MiwgIDB4MEQ2MyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29yeWFfdW5pcmFuZ2VzW10gPQorICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX215bXJfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjAwVUwsICAweDBCN0ZVTCApLCAgLyogT3JpeWEgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAwMCwgMHgxMDlGICksICAgIC8qIE15YW5tYXIgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHhBOUUwLCAweEE5RkYgKSwgICAgLyogTXlhbm1hciBFeHRlbmRlZC1CICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweEFBNjAsIDB4QUE3RiApLCAgICAvKiBNeWFubWFyIEV4dGVuZGVkLUEgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgMCwgICAgICAwICkKICAgfTsKIAotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29yeWFfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfbXltcl9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEIwMVVMLCAgMHgwQjAyVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCM0NVTCwgIDB4MEIzQ1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjNGVUwsICAweDBCM0ZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEI0MVVMLCAgMHgwQjQ0VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCNERVTCwgIDB4MEI1NlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjYyVUwsICAweDBCNjNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDJELCAweDEwMzAgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTAzMiwgMHgxMDM3ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwM0EsIDB4MTAzQSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDNELCAweDEwM0UgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA1OCwgMHgxMDU5ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwNUUsIDB4MTA2MCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDcxLCAweDEwNzQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MTA4MiwgMHgxMDgyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDEwODUsIDB4MTA4NiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggMHgxMDhELCAweDEwOEQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4QTlFNSwgMHhBOUU1ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweEFBN0MsIDB4QUE3QyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAwLCAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ub25lX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggMCwgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9ub25lX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAwLCAwICkKICAgfTsKIAogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc2luaF91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEODBVTCwgIDB4MERGRlVMICksICAvKiBTaW5oYWxhICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRDgwLCAgMHgwREZGICksICAvKiBTaW5oYWxhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3Npbmhfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEQ0FVTCwgIDB4MERDQVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwREQyVUwsICAweDBERDZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MFVMLCAgMHgxQkJGVUwgKSwgIC8qIFN1bmRhbmVzZSAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQ0MwVUwsICAweDFDQ0ZVTCApLCAgLyogU3VuZGFuZXNlIFN1cHBsZW1lbnQgKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKLSAgfTsKLQotICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3N1bmRfbm9uYmFzZV91bmlyYW5nZXNbXSA9Ci0gIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCODBVTCwgIDB4MUI4MlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxQkExVUwsICAweDFCQURVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0KLSAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zeWxvX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgwMFVMLCAgMHhBODJGVUwgKSwgIC8qIFN5bG90aSBOYWdyaSAqLwotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQotICB9OwotCi0gIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfc3lsb19ub25iYXNlX3VuaXJhbmdlc1tdID0KLSAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgwMlVMLCAgMHhBODAyVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MDZVTCwgIDB4QTgwNlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBODBCVUwsICAweEE4MEJVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgyNVVMLCAgMHhBODI2VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBEQ0EsICAweDBEQ0EgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBERDIsICAweDBERDYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90YW1sX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEI4MFVMLCAgMHgwQkZGVUwgKSwgIC8qIFRhbWlsICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjgwLCAgMHgwQkZGICksICAvKiBUYW1pbCAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90YW1sX25vbmJhc2VfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjgyVUwsICAweDBCODJVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEJDMFVMLCAgMHgwQkMyVUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCQ0RVTCwgIDB4MEJDRFVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQjgyLCAgMHgwQjgyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQkMwLCAgMHgwQkMyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQkNELCAgMHgwQkNEICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGVsdV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBDMDAsICAweDBDN0YgKSwgIC8qIFRlbHVndSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90ZWx1X25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzAwLCAgMHgwQzAwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzNFLCAgMHgwQzQwICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzQ2LCAgMHgwQzU2ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwQzYyLCAgMHgwQzYzICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGhhaV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBFMDAsICAweDBFN0YgKSwgIC8qIFRoYWkgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGhhaV9ub25iYXNlX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEUzMSwgIDB4MEUzMSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEUzNCwgIDB4MEUzQSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEU0NywgIDB4MEU0RSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKworI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2xpbWJfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxOTAwLCAgMHgxOTRGICksICAvKiBMaW1idSAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCisgIH07CisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9saW1iX25vbmJhc2VfdW5pcmFuZ2VzW10gPQorICB7CisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxOTIwLCAgMHgxOTIyICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxOTI3LCAgMHgxOTM0ICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxOTM3LCAgMHgxOTNCICksCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworCisgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfb3J5YV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCMDAsICAweDBCN0YgKSwgIC8qIE9yaXlhICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX29yeWFfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCMDEsICAweDBCMDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCM0MsICAweDBCM0MgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCM0YsICAweDBCM0YgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCNDEsICAweDBCNDQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCNEQsICAweDBCNTYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBCNjIsICAweDBCNjMgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zdW5kX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MUI4MCwgIDB4MUJCRiApLCAgLyogU3VuZGFuZXNlICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFDQzAsICAweDFDQ0YgKSwgIC8qIFN1bmRhbmVzZSBTdXBwbGVtZW50ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3N1bmRfbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCODAsICAweDFCODIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDFCQTEsICAweDFCQUQgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQorICB9OworCisKKyAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl9zeWxvX3VuaXJhbmdlc1tdID0KKyAgeworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTgwMCwgIDB4QTgyRiApLCAgLyogU3lsb3RpIE5hZ3JpICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKKyAgfTsKKworICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX3N5bG9fbm9uYmFzZV91bmlyYW5nZXNbXSA9CisgIHsKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MDIsICAweEE4MDIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MDYsICAweEE4MDYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MEIsICAweEE4MEIgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEE4MjUsICAweEE4MjYgKSwKKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAKICAgY29uc3QgQUZfU2NyaXB0X1VuaVJhbmdlUmVjICBhZl90aWJ0X3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYwMFVMLCAgMHgwRkZGVUwgKSwgIC8qIFRpYmV0YW4gKi8KLSAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDBVTCwgICAgICAgMFVMICkKKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMDAsICAweDBGRkYgKSwgIC8qIFRpYmV0YW4gKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAgICAgIDAsICAgICAgIDAgKQogICB9OwogCiAgIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfdGlidF9ub25iYXNlX3VuaXJhbmdlc1tdID0KICAgewotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYxOFVMLCAgMHgwRjE5VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGMzVVTCwgIDB4MEYzNVVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRjM3VUwsICAweDBGMzdVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYzOVVMLCAgMHgwRjM5VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGM0VVTCwgIDB4MEYzRlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRjcxVUwsICAweDBGN0VVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEY4MFVMLCAgMHgwRjg0VUwgKSwKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDBGODZVTCwgIDB4MEY4N1VMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgwRjhEVUwsICAweDBGQkNVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYxOCwgIDB4MEYxOSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYzNSwgIDB4MEYzNSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYzNywgIDB4MEYzNyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYzOSwgIDB4MEYzOSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEYzRSwgIDB4MEYzRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEY3MSwgIDB4MEY3RSApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEY4MCwgIDB4MEY4NCApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEY4NiwgIDB4MEY4NyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MEY4RCwgIDB4MEZCQyApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICNlbmRpZiAvKiAhQUZfQ09ORklHX09QVElPTl9JTkRJQyAqLwpAQCAtNTk0LDQ0ICs2NjksNDQgQEAKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hhbmlfdW5pcmFuZ2VzW10gPQogICB7Ci0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMTAwVUwsICAweDExRkZVTCApLCAgLyogSGFuZ3VsIEphbW8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRTgwVUwsICAweDJFRkZVTCApLCAgLyogQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRjAwVUwsICAweDJGREZVTCApLCAgLyogS2FuZ3hpIFJhZGljYWxzICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRkYwVUwsICAweDJGRkZVTCApLCAgLyogSWRlb2dyYXBoaWMgRGVzY3JpcHRpb24gQ2hhcmFjdGVycyAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMDAwVUwsICAweDMwM0ZVTCApLCAgLyogQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMDQwVUwsICAweDMwOUZVTCApLCAgLyogSGlyYWdhbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMEEwVUwsICAweDMwRkZVTCApLCAgLyogS2F0YWthbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTAwVUwsICAweDMxMkZVTCApLCAgLyogQm9wb21vZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTMwVUwsICAweDMxOEZVTCApLCAgLyogSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTkwVUwsICAweDMxOUZVTCApLCAgLyogS2FuYnVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMUEwVUwsICAweDMxQkZVTCApLCAgLyogQm9wb21vZm8gRXh0ZW5kZWQgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMUMwVUwsICAweDMxRUZVTCApLCAgLyogQ0pLIFN0cm9rZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMUYwVUwsICAweDMxRkZVTCApLCAgLyogS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMzAwVUwsICAweDMzRkZVTCApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzNDAwVUwsICAweDREQkZVTCApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHg0REMwVUwsICAweDRERkZVTCApLCAgLyogWWlqaW5nIEhleGFncmFtIFN5bWJvbHMgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHg0RTAwVUwsICAweDlGRkZVTCApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBOTYwVUwsICAweEE5N0ZVTCApLCAgLyogSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBQzAwVUwsICAweEQ3QUZVTCApLCAgLyogSGFuZ3VsIFN5bGxhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhEN0IwVUwsICAweEQ3RkZVTCApLCAgLyogSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGOTAwVUwsICAweEZBRkZVTCApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTEwVUwsICAweEZFMUZVTCApLCAgLyogVmVydGljYWwgZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTMwVUwsICAweEZFNEZVTCApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRjAwVUwsICAweEZGRUZVTCApLCAgLyogSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDFCMDAwVUwsIDB4MUIwRkZVTCApLCAgLyogS2FuYSBTdXBwbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDFEMzAwVUwsIDB4MUQzNUZVTCApLCAgLyogVGFpIFh1YW4gSGluZyBTeW1ib2xzICAgICAgICAgICAgICAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDIwMDAwVUwsIDB4MkE2REZVTCApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDJBNzAwVUwsIDB4MkI3M0ZVTCApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQyAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDJCNzQwVUwsIDB4MkI4MUZVTCApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gRCAgICAgICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAweDJGODAwVUwsIDB4MkZBMUZVTCApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50ICovCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwVUwsICAgICAgIDBVTCApCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgxMTAwLCAgMHgxMUZGICksICAvKiBIYW5ndWwgSmFtbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDJFODAsICAweDJFRkYgKSwgIC8qIENKSyBSYWRpY2FscyBTdXBwbGVtZW50ICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MkYwMCwgIDB4MkZERiApLCAgLyogS2FuZ3hpIFJhZGljYWxzICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgyRkYwLCAgMHgyRkZGICksICAvKiBJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwMDAsICAweDMwM0YgKSwgIC8qIENKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzA0MCwgIDB4MzA5RiApLCAgLyogSGlyYWdhbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMEEwLCAgMHgzMEZGICksICAvKiBLYXRha2FuYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxMDAsICAweDMxMkYgKSwgIC8qIEJvcG9tb2ZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzEzMCwgIDB4MzE4RiApLCAgLyogSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTkwLCAgMHgzMTlGICksICAvKiBLYW5idW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMxQTAsICAweDMxQkYgKSwgIC8qIEJvcG9tb2ZvIEV4dGVuZGVkICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzFDMCwgIDB4MzFFRiApLCAgLyogQ0pLIFN0cm9rZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMUYwLCAgMHgzMUZGICksICAvKiBLYXRha2FuYSBQaG9uZXRpYyBFeHRlbnNpb25zICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDMzMDAsICAweDMzRkYgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzQwMCwgIDB4NERCRiApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHg0REMwLCAgMHg0REZGICksICAvKiBZaWppbmcgSGV4YWdyYW0gU3ltYm9scyAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweDRFMDAsICAweDlGRkYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4QTk2MCwgIDB4QTk3RiApLCAgLyogSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSAgICAgICAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhBQzAwLCAgMHhEN0FGICksICAvKiBIYW5ndWwgU3lsbGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEQ3QjAsICAweEQ3RkYgKSwgIC8qIEhhbmd1bCBKYW1vIEV4dGVuZGVkLUIgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RjkwMCwgIDB4RkFGRiApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyAgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgMHhGRTEwLCAgMHhGRTFGICksICAvKiBWZXJ0aWNhbCBmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoICAweEZFMzAsICAweEZFNEYgKSwgIC8qIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4RkYwMCwgIDB4RkZFRiApLCAgLyogSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMgICAgICAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDFCMDAwLCAweDFCMEZGICksICAvKiBLYW5hIFN1cHBsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MUQzMDAsIDB4MUQzNUYgKSwgIC8qIFRhaSBYdWFuIEhpbmcgU3ltYm9scyAgICAgICAgICAgICAgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyMDAwMCwgMHgyQTZERiApLCAgLyogQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQiAgICAgICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAweDJBNzAwLCAweDJCNzNGICksICAvKiBDSksgVW5pZmllZCBJZGVvZ3JhcGhzIEV4dGVuc2lvbiBDICAgICAgKi8KKyAgICBBRl9VTklSQU5HRV9SRUMoIDB4MkI3NDAsIDB4MkI4MUYgKSwgIC8qIENKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEQgICAgICAqLworICAgIEFGX1VOSVJBTkdFX1JFQyggMHgyRjgwMCwgMHgyRkExRiApLCAgLyogQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50ICovCisgICAgQUZfVU5JUkFOR0VfUkVDKCAgICAgICAwLCAgICAgICAwICkKICAgfTsKIAogICBjb25zdCBBRl9TY3JpcHRfVW5pUmFuZ2VSZWMgIGFmX2hhbmlfbm9uYmFzZV91bmlyYW5nZXNbXSA9CiAgIHsKLSAgICBBRl9VTklSQU5HRV9SRUMoICAweDMwMkFVTCwgIDB4MzAyRlVMICksCi0gICAgQUZfVU5JUkFOR0VfUkVDKCAgMHgzMTkwVUwsICAweDMxOUZVTCApLAotICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMFVMLCAgICAgICAwVUwgKQorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzAyQSwgIDB4MzAyRiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggIDB4MzE5MCwgIDB4MzE5RiApLAorICAgIEFGX1VOSVJBTkdFX1JFQyggICAgICAgMCwgICAgICAgMCApCiAgIH07CiAKICNlbmRpZiAvKiAhQUZfQ09ORklHX09QVElPTl9DSksgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmggYi9zcmMvYXV0b2ZpdC9hZnJhbmdlcy5oCmluZGV4IGJjYTUwODQuLjFhMGU0YjEgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmcmFuZ2VzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZyYW5nZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBVbmljb2RlIHNjcmlwdCByYW5nZXMgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZSQU5HRVNfSF9fCi0jZGVmaW5lIF9fQUZSQU5HRVNfSF9fCisjaWZuZGVmIEFGUkFOR0VTX0hfCisjZGVmaW5lIEFGUkFOR0VTX0hfCiAKIAogI2luY2x1ZGUgImFmdHlwZXMuaCIKQEAgLTI2LDEzICsyNiwxMyBAQAogRlRfQkVHSU5fSEVBREVSCiAKICN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgSCwgc3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZXh0ZXJuIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfICMjIHMgIyMgX3VuaXJhbmdlc1tdOwogCiAjaW5jbHVkZSAiYWZzY3JpcHQuaCIKIAogI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzcyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIEgsIHNzICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgZXh0ZXJuIGNvbnN0IEFGX1NjcmlwdF9VbmlSYW5nZVJlYyAgYWZfICMjIHMgIyMgX25vbmJhc2VfdW5pcmFuZ2VzW107CiAKICNpbmNsdWRlICJhZnNjcmlwdC5oIgpAQCAtNDEsNyArNDEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGUkFOR0VTX0hfXyAqLworI2VuZGlmIC8qIEFGUkFOR0VTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oIGIvc3JjL2F1dG9maXQvYWZzY3JpcHQuaAppbmRleCAzOWVjNjUyLi5jZmZlNTkxIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZnNjcmlwdC5oCisrKyBiL3NyYy9hdXRvZml0L2Fmc2NyaXB0LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgc2NyaXB0cyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTMzLDE0MSArMzMsMjAwIEBACiAgIFNDUklQVCggYXJhYiwgQVJBQiwKICAgICAgICAgICAiQXJhYmljIiwKICAgICAgICAgICBIQl9TQ1JJUFRfQVJBQklDLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhEOVx4ODQgXHhEOFx4QUQgXHhEOVx4ODAiICkgLyog2YQg2K0g2YAgKi8KIAorICBTQ1JJUFQoIGFybW4sIEFSTU4sCisgICAgICAgICAgIkFybWVuaWFuIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfQVJNRU5JQU4sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEQ1XHhCRCBceEQ1XHg4RCIgKSAvKiDVvSDVjSAqLworCisgIC8qIHRoZXJlIGFyZSBubyBzaW1wbGUgZm9ybXMgZm9yIGxldHRlcnM7IHdlIHRodXMgdXNlIHR3byBkaWdpdCBzaGFwZXMgKi8KKyAgU0NSSVBUKCBiZW5nLCBCRU5HLAorICAgICAgICAgICJCZW5nYWxpIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfQkVOR0FMSSwKKyAgICAgICAgICBISU5USU5HX1RPUF9UT19CT1RUT00sCisgICAgICAgICAgIlx4RTBceEE3XHhBNiBceEUwXHhBN1x4QUEiICkgLyog4KemIOCnqiAqLworCisgIFNDUklQVCggY2hlciwgQ0hFUiwKKyAgICAgICAgICAiQ2hlcm9rZWUiLAorICAgICAgICAgIEhCX1NDUklQVF9DSEVST0tFRSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTFceDhFXHhBNCBceEUxXHg4Rlx4ODUgXHhFQVx4QUVceDk1IiApIC8qIOGOpCDhj4Ug6q6VICovCisKICAgU0NSSVBUKCBjeXJsLCBDWVJMLAogICAgICAgICAgICJDeXJpbGxpYyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0NZUklMTElDLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhEMFx4QkUgXHhEMFx4OUUiICkgLyog0L4g0J4gKi8KIAogICBTQ1JJUFQoIGRldmEsIERFVkEsCiAgICAgICAgICAgIkRldmFuYWdhcmkiLAogICAgICAgICAgIEhCX1NDUklQVF9ERVZBTkFHQVJJLAorICAgICAgICAgIEhJTlRJTkdfVE9QX1RPX0JPVFRPTSwKICAgICAgICAgICAiXHhFMFx4QTRceEEwIFx4RTBceEE0XHhCNSBceEUwXHhBNFx4OUYiICkgLyog4KSgIOCktSDgpJ8gKi8KIAorICBTQ1JJUFQoIGV0aGksIEVUSEksCisgICAgICAgICAgIkV0aGlvcGljIiwKKyAgICAgICAgICBIQl9TQ1JJUFRfRVRISU9QSUMsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUxXHg4Qlx4OTAiICkgLyog4YuQICovCisKKyAgU0NSSVBUKCBnZW9yLCBHRU9SLAorICAgICAgICAgICJHZW9yZ2lhbiAoTWtoZWRydWxpKSIsCisgICAgICAgICAgSEJfU0NSSVBUX0dFT1JHSUFOLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4ODNceDk4IFx4RTFceDgzXHg5NCBceEUxXHg4M1x4OTAiICkgLyog4YOYIOGDlCDhg5AgKi8KKworICBTQ1JJUFQoIGdlb2ssIEdFT0ssCisgICAgICAgICAgIkdlb3JnaWFuIChLaHV0c3VyaSkiLAorICAgICAgICAgIEhCX1NDUklQVF9JTlZBTElELAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMVx4ODJceEI2IFx4RTFceDgyXHhCMSBceEUyXHhCNFx4OTkiICkgLyog4YK2IOGCsSDitJkgKi8KKwogICBTQ1JJUFQoIGdyZWssIEdSRUssCiAgICAgICAgICAgIkdyZWVrIiwKICAgICAgICAgICBIQl9TQ1JJUFRfR1JFRUssCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceENFXHhCRiBceENFXHg5RiIgKSAvKiDOvyDOnyAqLwogCisgIFNDUklQVCggZ3VqciwgR1VKUiwKKyAgICAgICAgICAiR3VqYXJhdGkiLAorICAgICAgICAgIEhCX1NDUklQVF9HVUpBUkFUSSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTBceEFBXHg5RiBceEUwXHhBQlx4QTYiICkgLyog4KqfIOCrpiAqLworCisgIFNDUklQVCggZ3VydSwgR1VSVSwKKyAgICAgICAgICAiR3VybXVraGkiLAorICAgICAgICAgIEhCX1NDUklQVF9HVVJNVUtISSwKKyAgICAgICAgICBISU5USU5HX1RPUF9UT19CT1RUT00sCisgICAgICAgICAgIlx4RTBceEE4XHhBMCBceEUwXHhBOFx4QjAgXHhFMFx4QTlceEE2IiApIC8qIOCooCDgqLAg4KmmICovCisKICAgU0NSSVBUKCBoZWJyLCBIRUJSLAogICAgICAgICAgICJIZWJyZXciLAogICAgICAgICAgIEhCX1NDUklQVF9IRUJSRVcsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEQ3XHg5RCIgKSAvKiDXnSAqLwogCisgIFNDUklQVCgga25kYSwgS05EQSwKKyAgICAgICAgICAiS2FubmFkYSIsCisgICAgICAgICAgSEJfU0NSSVBUX0tBTk5BREEsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUwXHhCM1x4QTYgXHhFMFx4QjJceEFDIiApIC8qIOCzpiDgsqwgKi8KKwogICAvKiBvbmx5IGRpZ2l0IHplcm8gaGFzIGEgc2ltcGxlIHNoYXBlIGluIHRoZSBLaG1lciBzY3JpcHQgKi8KICAgU0NSSVBUKCBraG1yLCBLSE1SLAogICAgICAgICAgICJLaG1lciIsCiAgICAgICAgICAgSEJfU0NSSVBUX0tITUVSLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMVx4OUZceEEwIiApIC8qIOGfoCAqLwogCiAgIFNDUklQVCgga2htcywgS0hNUywKICAgICAgICAgICAiS2htZXIgU3ltYm9scyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0lOVkFMSUQsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUxXHhBN1x4QTEgXHhFMVx4QTdceEFBIiApIC8qIOGnoSDhp6ogKi8KIAogICAvKiBvbmx5IGRpZ2l0IHplcm8gaGFzIGEgc2ltcGxlIHNoYXBlIGluIHRoZSBMYW8gc2NyaXB0ICovCiAgIFNDUklQVCggbGFvLCBMQU8sCiAgICAgICAgICAgIkxhbyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0xBTywKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RTBceEJCXHg5MCIgKSAvKiDgu5AgKi8KIAogICBTQ1JJUFQoIGxhdG4sIExBVE4sCiAgICAgICAgICAgIkxhdGluIiwKICAgICAgICAgICBIQl9TQ1JJUFRfTEFUSU4sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJvIE8gMCIgKQogCiAgIFNDUklQVCggbGF0YiwgTEFUQiwKICAgICAgICAgICAiTGF0aW4gU3Vic2NyaXB0IEZhbGxiYWNrIiwKICAgICAgICAgICBIQl9TQ1JJUFRfSU5WQUxJRCwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RTJceDgyXHg5MiBceEUyXHg4Mlx4ODAiICkgLyog4oKSIOKCgCAqLwogCiAgIFNDUklQVCggbGF0cCwgTEFUUCwKICAgICAgICAgICAiTGF0aW4gU3VwZXJzY3JpcHQgRmFsbGJhY2siLAogICAgICAgICAgIEhCX1NDUklQVF9JTlZBTElELAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMVx4QjVceDkyIFx4RTFceEI0XHhCQyBceEUyXHg4MVx4QjAiICkgLyog4bWSIOG0vCDigbAgKi8KIAorICBTQ1JJUFQoIG1seW0sIE1MWU0sCisgICAgICAgICAgIk1hbGF5YWxhbSIsCisgICAgICAgICAgSEJfU0NSSVBUX01BTEFZQUxBTSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCisgICAgICAgICAgIlx4RTBceEI0XHhBMCBceEUwXHhCNFx4QjEiICkgLyog4LSgIOC0sSAqLworCiAgIFNDUklQVCggbXltciwgTVlNUiwKICAgICAgICAgICAiTXlhbm1hciIsCiAgICAgICAgICAgSEJfU0NSSVBUX01ZQU5NQVIsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUxXHg4MFx4OUQgXHhFMVx4ODBceDg0IFx4RTFceDgwXHg4MiIgKSAvKiDhgJ0g4YCEIOGAgiAqLwogCiAgIFNDUklQVCggbm9uZSwgTk9ORSwKICAgICAgICAgICAibm8gc2NyaXB0IiwKICAgICAgICAgICBIQl9TQ1JJUFRfSU5WQUxJRCwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIiIgKQogCisgIFNDUklQVCggc2luaCwgU0lOSCwKKyAgICAgICAgICAiU2luaGFsYSIsCisgICAgICAgICAgSEJfU0NSSVBUX1NJTkhBTEEsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAorICAgICAgICAgICJceEUwXHhCNlx4QTciICkgLyog4LanICovCisKKyAgLyogb25seSBkaWdpdCB6ZXJvIGhhcyBhIHNpbXBsZSAocm91bmQpIHNoYXBlIGluIHRoZSBUYW1pbCBzY3JpcHQgKi8KKyAgU0NSSVBUKCB0YW1sLCBUQU1MLAorICAgICAgICAgICJUYW1pbCIsCisgICAgICAgICAgSEJfU0NSSVBUX1RBTUlMLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKKyAgICAgICAgICAiXHhFMFx4QUZceEE2IiApIC8qIOCvpiAqLworCiAgIC8qIHRoZXJlIGFyZSBubyBzaW1wbGUgZm9ybXMgZm9yIGxldHRlcnM7IHdlIHRodXMgdXNlIHR3byBkaWdpdCBzaGFwZXMgKi8KICAgU0NSSVBUKCB0ZWx1LCBURUxVLAogICAgICAgICAgICJUZWx1Z3UiLAogICAgICAgICAgIEhCX1NDUklQVF9URUxVR1UsCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJceEUwXHhCMVx4QTYgXHhFMFx4QjFceEE3IiApIC8qIOCxpiDgsacgKi8KIAogICBTQ1JJUFQoIHRoYWksIFRIQUksCiAgICAgICAgICAgIlRoYWkiLAogICAgICAgICAgIEhCX1NDUklQVF9USEFJLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAiXHhFMFx4QjhceEIyIFx4RTBceEI5XHg4NSBceEUwXHhCOVx4OTAiICkgLyog4LiyIOC5hSDguZAgKi8KIAogI2lmZGVmIEFGX0NPTkZJR19PUFRJT05fSU5ESUMKIAotICBTQ1JJUFQoIGJlbmcsIEJFTkcsCi0gICAgICAgICAgIkJlbmdhbGkiLAotICAgICAgICAgIEhCX1NDUklQVF9CRU5HQUxJLAotICAgICAgICAgICJvIiApIC8qIFhYWCAqLwotCi0gIFNDUklQVCggZ3VqciwgR1VKUiwKLSAgICAgICAgICAiR3VqYXJhdGkiLAotICAgICAgICAgIEhCX1NDUklQVF9HVUpBUkFUSSwKLSAgICAgICAgICAibyIgKSAvKiBYWFggKi8KLQotICBTQ1JJUFQoIGd1cnUsIEdVUlUsCi0gICAgICAgICAgIkd1cm11a2hpIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfR1VSTVVLSEksCi0gICAgICAgICAgIm8iICkgLyogWFhYICovCi0KLSAgU0NSSVBUKCBrbmRhLCBLTkRBLAotICAgICAgICAgICJLYW5uYWRhIiwKLSAgICAgICAgICBIQl9TQ1JJUFRfS0FOTkFEQSwKLSAgICAgICAgICAibyIgKSAvKiBYWFggKi8KLQogICBTQ1JJUFQoIGxpbWIsIExJTUIsCiAgICAgICAgICAgIkxpbWJ1IiwKICAgICAgICAgICBIQl9TQ1JJUFRfTElNQlUsCi0gICAgICAgICAgIm8iICkgLyogWFhYICovCi0KLSAgU0NSSVBUKCBtbHltLCBNTFlNLAotICAgICAgICAgICJNYWxheWFsYW0iLAotICAgICAgICAgIEhCX1NDUklQVF9NQUxBWUFMQU0sCisgICAgICAgICAgSElOVElOR19CT1RUT01fVE9fVE9QLAogICAgICAgICAgICJvIiApIC8qIFhYWCAqLwogCiAgIFNDUklQVCggb3J5YSwgT1JZQSwKICAgICAgICAgICAiT3JpeWEiLAogICAgICAgICAgIEhCX1NDUklQVF9PUklZQSwKLSAgICAgICAgICAibyIgKSAvKiBYWFggKi8KLQotICBTQ1JJUFQoIHNpbmgsIFNJTkgsCi0gICAgICAgICAgIlNpbmhhbGEiLAotICAgICAgICAgIEhCX1NDUklQVF9TSU5IQUxBLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogICBTQ1JJUFQoIHN1bmQsIFNVTkQsCiAgICAgICAgICAgIlN1bmRhbmVzZSIsCiAgICAgICAgICAgSEJfU0NSSVBUX1NVTkRBTkVTRSwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIm8iICkgLyogWFhYICovCiAKICAgU0NSSVBUKCBzeWxvLCBTWUxPLAogICAgICAgICAgICJTeWxvdGkgTmFncmkiLAogICAgICAgICAgIEhCX1NDUklQVF9TWUxPVElfTkFHUkksCi0gICAgICAgICAgIm8iICkgLyogWFhYICovCi0KLSAgU0NSSVBUKCB0YW1sLCBUQU1MLAotICAgICAgICAgICJUYW1pbCIsCi0gICAgICAgICAgSEJfU0NSSVBUX1RBTUlMLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogICBTQ1JJUFQoIHRpYnQsIFRJQlQsCiAgICAgICAgICAgIlRpYmV0YW4iLAogICAgICAgICAgIEhCX1NDUklQVF9USUJFVEFOLAorICAgICAgICAgIEhJTlRJTkdfQk9UVE9NX1RPX1RPUCwKICAgICAgICAgICAibyIgKSAvKiBYWFggKi8KIAogI2VuZGlmIC8qIEFGX0NPTkZJR19PUFRJT05fSU5ESUMgKi8KQEAgLTE3Nyw2ICsyMzYsNyBAQAogICBTQ1JJUFQoIGhhbmksIEhBTkksCiAgICAgICAgICAgIkNKS1YgaWRlb2dyYXBocyIsCiAgICAgICAgICAgSEJfU0NSSVBUX0hBTiwKKyAgICAgICAgICBISU5USU5HX0JPVFRPTV9UT19UT1AsCiAgICAgICAgICAgIlx4RTdceDk0XHhCMCBceEU1XHg5Qlx4OTciICkgLyog55SwIOWblyAqLwogCiAjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9DSksgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMgYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5jCmluZGV4IDZiYTkxOTAuLjZkMTNiNjUgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmMKKysrIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoYm9keSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtODYsNyArODYsNyBAQAogCiAgIC8qIGxvYWQgSGFyZkJ1enogc2NyaXB0IHRhZ3MgKi8KICN1bmRlZiAgU0NSSVBUCi0jZGVmaW5lIFNDUklQVCggcywgUywgZCwgaCwgc3MgKSAgaCwKKyNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBILCBzcyApICBoLAogCiAKICAgc3RhdGljIGNvbnN0IGhiX3NjcmlwdF90ICBzY3JpcHRzW10gPQpAQCAtOTgsNyArOTgsOCBAQAogICBGVF9FcnJvcgogICBhZl9zaGFwZXJfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICAgZ3N0eWxlcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVmYXVsdF9zY3JpcHQgKQogICB7CiAgICAgaGJfZmFjZV90KiAgZmFjZTsKIApAQCAtMTQzLDggKzE0NCw3IEBACiAgICAgLyogYGhiX290X3RhZ3NfZnJvbV9zY3JpcHQnIHVzdWFsbHkgcmV0dXJucyBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKi8KICAgICAvKiBhcyB0aGUgc2Vjb25kIHRhZy4gIFdlIGNoYW5nZSB0aGF0IHRvIEhCX1RBR19OT05FIGV4Y2VwdCBmb3IgdGhlICAqLwogICAgIC8qIGRlZmF1bHQgc2NyaXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCBzdHlsZV9jbGFzcy0+c2NyaXB0ID09IGdsb2JhbHMtPm1vZHVsZS0+ZGVmYXVsdF9zY3JpcHQgJiYKLSAgICAgICAgIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSA9PSBBRl9DT1ZFUkFHRV9ERUZBVUxUICAgICAgICAgICApCisgICAgaWYgKCBkZWZhdWx0X3NjcmlwdCApCiAgICAgewogICAgICAgaWYgKCBzY3JpcHRfdGFnc1swXSA9PSBIQl9UQUdfTk9ORSApCiAgICAgICAgIHNjcmlwdF90YWdzWzBdID0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUOwpAQCAtMTU4LDYgKzE1OCwxMSBAQAogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgLyogd2UgdXNlIG5vbi1zdGFuZGFyZCB0YWdzIGxpa2UgYGtobXMnIGZvciBzcGVjaWFsIHB1cnBvc2VzOyAgICAgICAqLworICAgICAgLyogSGFyZkJ1enogbWFwcyB0aGVtIHRvIGBERkxUJywgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBoYW5kbGUgaGVyZSAqLworICAgICAgaWYgKCBzY3JpcHRfdGFnc1swXSA9PSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKQorICAgICAgICBnb3RvIEV4aXQ7CisKICAgICAgIGlmICggc2NyaXB0X3RhZ3NbMV0gPT0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUICkKICAgICAgICAgc2NyaXB0X3RhZ3NbMV0gPSBIQl9UQUdfTk9ORTsKICAgICB9CkBAIC01NzEsMTEgKzU3NiwxMyBAQAogICBGVF9FcnJvcgogICBhZl9zaGFwZXJfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZfU3R5bGVDbGFzcyAgIHN0eWxlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQqICAgICAgZ3N0eWxlcyApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVmYXVsdF9zY3JpcHQgKQogICB7CiAgICAgRlRfVU5VU0VEKCBnbG9iYWxzICk7CiAgICAgRlRfVU5VU0VEKCBzdHlsZV9jbGFzcyApOwogICAgIEZUX1VOVVNFRCggZ3N0eWxlcyApOworICAgIEZUX1VOVVNFRCggZGVmYXVsdF9zY3JpcHQgKTsKIAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmggYi9zcmMvYXV0b2ZpdC9hZnNoYXBlci5oCmluZGV4IGRiMWI0ZTAuLjBkNDFmNzggMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc2hhcGVyLmgKKysrIGIvc3JjL2F1dG9maXQvYWZzaGFwZXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoc3BlY2lmaWNhdGlvbikuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZTSEFQRVJfSF9fCi0jZGVmaW5lIF9fQUZTSEFQRVJfSF9fCisjaWZuZGVmIEFGU0hBUEVSX0hfCisjZGVmaW5lIEFGU0hBUEVSX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zOCw3ICszOCw4IEBACiAgIEZUX0Vycm9yCiAgIGFmX3NoYXBlcl9nZXRfY292ZXJhZ2UoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCogICAgICBnc3R5bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgZGVmYXVsdF9zY3JpcHQgKTsKIAogCiAgIHZvaWQqCkBAIC02NSw3ICs2Niw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fQUZTSEFQRVJfSF9fICovCisjZW5kaWYgLyogQUZTSEFQRVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmggYi9zcmMvYXV0b2ZpdC9hZnN0eWxlcy5oCmluZGV4IGUyMTQ0NDIuLmU4M2E5NWIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2Fmc3R5bGVzLmgKKysrIGIvc3JjL2F1dG9maXQvYWZzdHlsZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciBzdHlsZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTMtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNTIsMTAgKzUyLDEwIEBACiAjdW5kZWYgIE1FVEFfU1RZTEVfTEFUSU4KICNkZWZpbmUgTUVUQV9TVFlMRV9MQVRJTiggcywgUywgZHMgKSAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBTVFlMRV9MQVRJTiggcywgUywgYzJjcCwgQzJDUCwgZHMsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgInBldGl0ZSBjYXB0aWNhbHMgZnJvbSBjYXBpdGFscyIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgInBldGl0ZSBjYXBpdGFscyBmcm9tIGNhcGl0YWxzIiwgXAogICAgICAgICAgICAgICAgICAgICAgICBQRVRJVEVfQ0FQSVRBTFNfRlJPTV9DQVBJVEFMUyApICAgXAogICAgICAgICAgIFNUWUxFX0xBVElOKCBzLCBTLCBjMnNjLCBDMlNDLCBkcywgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwdGljYWxzIGZyb20gY2FwaXRhbHMiLCAgXAorICAgICAgICAgICAgICAgICAgICAgICAic21hbGwgY2FwaXRhbHMgZnJvbSBjYXBpdGFscyIsICBcCiAgICAgICAgICAgICAgICAgICAgICAgIFNNQUxMX0NBUElUQUxTX0ZST01fQ0FQSVRBTFMgKSAgICBcCiAgICAgICAgICAgU1RZTEVfTEFUSU4oIHMsIFMsIG9yZG4sIE9SRE4sIGRzLCAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICJvcmRpbmFscyIsICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05MCw2ICs5MCwyNyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfQVJBQiwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBhcm1uX2RmbHQsIEFSTU5fREZMVCwKKyAgICAgICAgICJBcm1lbmlhbiBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0FSTU4sCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9BUk1OLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIGJlbmdfZGZsdCwgQkVOR19ERkxULAorICAgICAgICAgIkJlbmdhbGkgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9CRU5HLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfQkVORywKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBjaGVyX2RmbHQsIENIRVJfREZMVCwKKyAgICAgICAgICJDaGVyb2tlZSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0NIRVIsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9DSEVSLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgTUVUQV9TVFlMRV9MQVRJTiggY3lybCwgQ1lSTCwgIkN5cmlsbGljIiApCiAKICAgU1RZTEUoIGRldmFfZGZsdCwgREVWQV9ERkxULApAQCAtOTksOCArMTIwLDQzIEBACiAgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9ERVZBLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKKyAgU1RZTEUoIGV0aGlfZGZsdCwgRVRISV9ERkxULAorICAgICAgICAgIkV0aGlvcGljIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfRVRISSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0VUSEksCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKworICBTVFlMRSggZ2Vvcl9kZmx0LCBHRU9SX0RGTFQsCisgICAgICAgICAiR2VvcmdpYW4gKE1raGVkcnVsaSkgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HRU9SLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR0VPUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBnZW9rX2RmbHQsIEdFT0tfREZMVCwKKyAgICAgICAgICJHZW9yZ2lhbiAoS2h1dHN1cmkpIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfR0VPSywKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0dFT0ssCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBNRVRBX1NUWUxFX0xBVElOKCBncmVrLCBHUkVLLCAiR3JlZWsiICkKIAorICBTVFlMRSggZ3Vqcl9kZmx0LCBHVUpSX0RGTFQsCisgICAgICAgICAiR3VqYXJhdGkgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9HVUpSLAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfR1VKUiwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCBndXJ1X2RmbHQsIEdVUlVfREZMVCwKKyAgICAgICAgICJHdXJtdWtoaSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX0dVUlUsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9HVVJVLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIGhlYnJfZGZsdCwgSEVCUl9ERkxULAogICAgICAgICAgIkhlYnJldyBkZWZhdWx0IHN0eWxlIiwKICAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLApAQCAtMTA4LDYgKzE2NCwxMyBAQAogICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfSEVCUiwKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogCisgIFNUWUxFKCBrbmRhX2RmbHQsIEtOREFfREZMVCwKKyAgICAgICAgICJLYW5uYWRhIGRlZmF1bHQgc3R5bGUiLAorICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fTEFUSU4sCisgICAgICAgICBBRl9TQ1JJUFRfS05EQSwKKyAgICAgICAgIEFGX0JMVUVfU1RSSU5HU0VUX0tOREEsCisgICAgICAgICBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKKwogICBTVFlMRSgga2htcl9kZmx0LCBLSE1SX0RGTFQsCiAgICAgICAgICAiS2htZXIgZGVmYXVsdCBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKQEAgLTE1NCw2ICsyMTcsMTMgQEAKICAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQogI2VuZGlmCiAKKyAgU1RZTEUoIG1seW1fZGZsdCwgTUxZTV9ERkxULAorICAgICAgICAgIk1hbGF5YWxhbSBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX01MWU0sCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9NTFlNLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKICAgU1RZTEUoIG15bXJfZGZsdCwgTVlNUl9ERkxULAogICAgICAgICAgIk15YW5tYXIgZGVmYXVsdCBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKQEAgLTE2NSw3ICsyMzUsMjEgQEAKICAgICAgICAgICJubyBzdHlsZSIsCiAgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9EVU1NWSwKICAgICAgICAgIEFGX1NDUklQVF9OT05FLAotICAgICAgICAgKEFGX0JsdWVfU3RyaW5nc2V0KTAsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9OT05FLAorICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCisKKyAgU1RZTEUoIHNpbmhfZGZsdCwgU0lOSF9ERkxULAorICAgICAgICAgIlNpbmhhbGEgZGVmYXVsdCBzdHlsZSIsCisgICAgICAgICBBRl9XUklUSU5HX1NZU1RFTV9MQVRJTiwKKyAgICAgICAgIEFGX1NDUklQVF9TSU5ILAorICAgICAgICAgQUZfQkxVRV9TVFJJTkdTRVRfU0lOSCwKKyAgICAgICAgIEFGX0NPVkVSQUdFX0RFRkFVTFQgKQorCisgIFNUWUxFKCB0YW1sX2RmbHQsIFRBTUxfREZMVCwKKyAgICAgICAgICJUYW1pbCBkZWZhdWx0IHN0eWxlIiwKKyAgICAgICAgIEFGX1dSSVRJTkdfU1lTVEVNX0xBVElOLAorICAgICAgICAgQUZfU0NSSVBUX1RBTUwsCisgICAgICAgICBBRl9CTFVFX1NUUklOR1NFVF9UQU1MLAogICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKICAgU1RZTEUoIHRlbHVfZGZsdCwgVEVMVV9ERkxULApAQCAtMTk0LDE3ICsyNzgsMTAgQEAKICAgICAgICAgICAgICAgICAgKEFGX0JsdWVfU3RyaW5nc2V0KTAsICAgIFwKICAgICAgICAgICAgICAgICAgQUZfQ09WRVJBR0VfREVGQVVMVCApCiAKLSAgU1RZTEVfREVGQVVMVF9JTkRJQyggYmVuZywgQkVORywgIkJlbmdhbGkiICkKLSAgU1RZTEVfREVGQVVMVF9JTkRJQyggZ3VqciwgR1VKUiwgIkd1amFyYXRpIiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIGd1cnUsIEdVUlUsICJHdXJtdWtoaSIgKQotICBTVFlMRV9ERUZBVUxUX0lORElDKCBrbmRhLCBLTkRBLCAiS2FubmFkYSIgKQogICBTVFlMRV9ERUZBVUxUX0lORElDKCBsaW1iLCBMSU1CLCAiTGltYnUiICkKLSAgU1RZTEVfREVGQVVMVF9JTkRJQyggbWx5bSwgTUxZTSwgIk1hbGF5YWxhbSIgKQogICBTVFlMRV9ERUZBVUxUX0lORElDKCBvcnlhLCBPUllBLCAiT3JpeWEiICkKLSAgU1RZTEVfREVGQVVMVF9JTkRJQyggc2luaCwgU0lOSCwgIlNpbmhhbGEiICkKICAgU1RZTEVfREVGQVVMVF9JTkRJQyggc3VuZCwgU1VORCwgIlN1bmRhbmVzZSIgKQogICBTVFlMRV9ERUZBVUxUX0lORElDKCBzeWxvLCBTWUxPLCAiU3lsb3RpIE5hZ3JpIiApCi0gIFNUWUxFX0RFRkFVTFRfSU5ESUMoIHRhbWwsIFRBTUwsICJUYW1pbCIgKQogICBTVFlMRV9ERUZBVUxUX0lORElDKCB0aWJ0LCBUSUJULCAiVGliZXRhbiIgKQogCiAjZW5kaWYgLyogQUZfQ09ORklHX09QVElPTl9JTkRJQyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ0eXBlcy5oIGIvc3JjL2F1dG9maXQvYWZ0eXBlcy5oCmluZGV4IGI0ODM2MTkuLmVmNjIwNDMgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2FmdHlwZXMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZnR5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyLDE1ICsyMiwxNSBAQAogICAgKiAgSXRzIG1haW4gZmVhdHVyZSBpcyB0aGUgYWJpbGl0eSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gZGlmZmVyZW50CiAgICAqICB3cml0aW5nIHN5c3RlbXMgYW5kIHNjcmlwdHMgaW4gb3JkZXIgdG8gYXBwbHkgc3BlY2lmaWMgcnVsZXMuCiAgICAqCi0gICAqICBUaGUgY29kZSBoYXMgYWxzbyBiZWVuIGNvbXBhcnRtZW50aXplZCBpbnRvIHNldmVyYWwgZW50aXRpZXMgdGhhdAorICAgKiAgVGhlIGNvZGUgaGFzIGFsc28gYmVlbiBjb21wYXJ0bWVudGFsaXplZCBpbnRvIHNldmVyYWwgZW50aXRpZXMgdGhhdAogICAgKiAgc2hvdWxkIG1ha2UgYWxnb3JpdGhtaWMgZXhwZXJpbWVudGF0aW9uIGVhc2llciB0aGFuIHdpdGggdGhlIG9sZAogICAgKiAgY29kZS4KICAgICoKICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0FGVFlQRVNfSF9fCi0jZGVmaW5lIF9fQUZUWVBFU19IX18KKyNpZm5kZWYgQUZUWVBFU19IXworI2RlZmluZSBBRlRZUEVTX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICogICAgb3V0bGluZSBhY2NvcmRpbmcgdG8gdGhlIHJlc3VsdHMgb2YgdGhlIGdseXBoIGFuYWx5emVyLgogICAgKi8KIAotI2RlZmluZSBfX0FGV1JUU1lTX0hfXyAgLyogZG9uJ3QgbG9hZCBoZWFkZXIgZmlsZXMgKi8KKyNkZWZpbmUgQUZXUlRTWVNfSF8gIC8qIGRvbid0IGxvYWQgaGVhZGVyIGZpbGVzICovCiAjdW5kZWYgIFdSSVRJTkdfU1lTVEVNCiAjZGVmaW5lIFdSSVRJTkdfU1lTVEVNKCB3cywgV1MgKSAgICBcCiAgICAgICAgICAgQUZfV1JJVElOR19TWVNURU1fICMjIFdTLApAQCAtMjcwLDcgKzI3MCw3IEBACiAKICAgfSBBRl9Xcml0aW5nU3lzdGVtOwogCi0jdW5kZWYgIF9fQUZXUlRTWVNfSF9fCisjdW5kZWYgIEFGV1JUU1lTX0hfCiAKIAogICB0eXBlZGVmIHN0cnVjdCAgQUZfV3JpdGluZ1N5c3RlbUNsYXNzUmVjXwpAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAqLwogCiAjdW5kZWYgIFNDUklQVAotI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIHNzICkgXAorI2RlZmluZSBTQ1JJUFQoIHMsIFMsIGQsIGgsIEgsIHNzICkgXAogICAgICAgICAgIEFGX1NDUklQVF8gIyMgUywKIAogICAvKiBUaGUgbGlzdCBvZiBrbm93biBzY3JpcHRzLiAqLwpAQCAtMzQzLDYgKzM0Myw4IEBACiAgICAgQUZfU2NyaXB0X1VuaVJhbmdlICBzY3JpcHRfdW5pX3JhbmdlczsKICAgICBBRl9TY3JpcHRfVW5pUmFuZ2UgIHNjcmlwdF91bmlfbm9uYmFzZV9yYW5nZXM7CiAKKyAgICBGVF9Cb29sICB0b3BfdG9fYm90dG9tX2hpbnRpbmc7CisKICAgICBjb25zdCBjaGFyKiAgc3RhbmRhcmRfY2hhcnN0cmluZzsgICAgICAvKiBmb3IgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0ICovCiAKICAgfSBBRl9TY3JpcHRDbGFzc1JlYzsKQEAgLTQ3OSw2ICs0ODEsMTAgQEAKICAgfSBBRl9TdHlsZU1ldHJpY3NSZWM7CiAKIAorI2RlZmluZSBBRl9ISU5USU5HX0JPVFRPTV9UT19UT1AgIDAKKyNkZWZpbmUgQUZfSElOVElOR19UT1BfVE9fQk9UVE9NICAxCisKKwogICAvKiBEZWNsYXJlIGFuZCBkZWZpbmUgdnRhYmxlcyBmb3IgY2xhc3NlcyAqLwogI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX1BJQwogCkBAIC01MjIsNiArNTI4LDcgQEAKICAgICAgICAgICBzY3JpcHQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICByYW5nZXMsICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBub25iYXNlX3JhbmdlcywgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB0b3BfdG9fYm90dG9tLCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICBzdGRfY2hhcnN0cmluZyApICAgICAgICAgICAgICAgIFwKICAgRlRfQ0FMTEJBQ0tfVEFCTEVfREVGICAgICAgICAgICAgICAgICAgIFwKICAgY29uc3QgQUZfU2NyaXB0Q2xhc3NSZWMgIHNjcmlwdF9jbGFzcyA9IFwKQEAgLTUyOSw2ICs1MzYsNyBAQAogICAgIHNjcmlwdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHJhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIG5vbmJhc2VfcmFuZ2VzLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRvcF90b19ib3R0b20sICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0ZF9jaGFyc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgXAogICB9OwogCkBAIC01OTUsNiArNjAzLDcgQEAKICAgICAgICAgICBzY3JpcHRfLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHJhbmdlcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgbm9uYmFzZV9yYW5nZXMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB0b3BfdG9fYm90dG9tLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIHN0ZF9jaGFyc3RyaW5nICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgRlRfSW5pdF9DbGFzc18gIyMgc2NyaXB0X2NsYXNzKCBBRl9TY3JpcHRDbGFzc1JlYyogIGFjICkgXApAQCAtNjAyLDYgKzYxMSw3IEBACiAgICAgYWMtPnNjcmlwdCAgICAgICAgICAgICAgICAgICAgPSBzY3JpcHRfOyAgICAgICAgICAgICAgIFwKICAgICBhYy0+c2NyaXB0X3VuaV9yYW5nZXMgICAgICAgICA9IHJhbmdlczsgICAgICAgICAgICAgICAgXAogICAgIGFjLT5zY3JpcHRfdW5pX25vbmJhc2VfcmFuZ2VzID0gbm9uYmFzZV9yYW5nZXM7ICAgICAgICBcCisgICAgYWMtPnRvcF90b19ib3R0b21faGludGluZyAgICAgPSB0b3BfdG9fYm90dG9tOyAgICAgICAgIFwKICAgICBhYy0+c3RhbmRhcmRfY2hhcnN0cmluZyAgICAgICA9IHN0ZF9jaGFyc3RyaW5nOyAgICAgICAgXAogICB9CiAKQEAgLTYzNCw3ICs2NDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0FGVFlQRVNfSF9fICovCisjZW5kaWYgLyogQUZUWVBFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3YXJwLmMgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwppbmRleCBhZTkyZGIxLi5jZTE4MDZjIDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndhcnAuYworKysgYi9zcmMvYXV0b2ZpdC9hZndhcnAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciB3YXJwaW5nIGFsZ29yaXRobSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3YXJwLmggYi9zcmMvYXV0b2ZpdC9hZndhcnAuaAppbmRleCA2MDY5YjZiLi42ZDk2Zjg2IDEwMDY0NAotLS0gYS9zcmMvYXV0b2ZpdC9hZndhcnAuaAorKysgYi9zcmMvYXV0b2ZpdC9hZndhcnAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBdXRvLWZpdHRlciB3YXJwaW5nIGFsZ29yaXRobSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQUZXQVJQX0hfXwotI2RlZmluZSBfX0FGV0FSUF9IX18KKyNpZm5kZWYgQUZXQVJQX0hfCisjZGVmaW5lIEFGV0FSUF9IXwogCiAjaW5jbHVkZSAiYWZoaW50cy5oIgogCkBAIC01OCw3ICs1OCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQUZXQVJQX0hfXyAqLworI2VuZGlmIC8qIEFGV0FSUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaCBiL3NyYy9hdXRvZml0L2Fmd3J0c3lzLmgKaW5kZXggNGFhODlkMi4uODQyZjQ5MiAxMDA2NDQKLS0tIGEvc3JjL2F1dG9maXQvYWZ3cnRzeXMuaAorKysgYi9zcmMvYXV0b2ZpdC9hZndydHN5cy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEF1dG8tZml0dGVyIHdyaXRpbmcgc3lzdGVtcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19BRldSVFNZU19IX18KLSNkZWZpbmUgX19BRldSVFNZU19IX18KKyNpZm5kZWYgQUZXUlRTWVNfSF8KKyNkZWZpbmUgQUZXUlRTWVNfSF8KIAogICAvKiBTaW5jZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBjYW4ndCBjcmVhdGUgb3RoZXIgcHJlcHJvY2Vzc29yICovCiAgIC8qIGRpcmVjdGl2ZXMsIHdlIGhhdmUgdG8gaW5jbHVkZSB0aGUgaGVhZGVyIGZpbGVzIG1hbnVhbGx5LiAgICAgKi8KQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJhZmxhdGluMi5oIgogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0FGV1JUU1lTX0hfXyAqLworI2VuZGlmIC8qIEFGV1JUU1lTX0hfICovCiAKIAogICAvKiBUaGUgZm9sbG93aW5nIHBhcnQgY2FuIGJlIGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzLiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvYXV0b2ZpdC5jIGIvc3JjL2F1dG9maXQvYXV0b2ZpdC5jCmluZGV4IGE5NzFhMjQuLmRkYTlhZWIgMTAwNjQ0Ci0tLSBhL3NyYy9hdXRvZml0L2F1dG9maXQuYworKysgYi9zcmMvYXV0b2ZpdC9hdXRvZml0LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXV0by1maXR0ZXIgbW9kdWxlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9hdXRvZml0L2hic2hpbS5jIGIvc3JjL2F1dG9maXQvaGJzaGltLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5YzFkYjAuLjAwMDAwMDAKLS0tIGEvc3JjL2F1dG9maXQvaGJzaGltLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgaGJzaGltLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEhhcmZCdXp6IGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIE9wZW5UeXBlIGZlYXR1cmVzIChib2R5KS4gICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0ZSRUVUWVBFX0gKLSNpbmNsdWRlICJhZmdsb2JhbC5oIgotI2luY2x1ZGUgImFmdHlwZXMuaCIKLSNpbmNsdWRlICJoYnNoaW0uaCIKLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFRoZSBtYWNybyBGVF9DT01QT05FTlQgaXMgdXNlZCBpbiB0cmFjZSBtb2RlLiAgSXQgaXMgYW4gaW1wbGljaXQgICAgICAqLwotICAvKiBwYXJhbWV0ZXIgb2YgdGhlIEZUX1RSQUNFKCkgYW5kIEZUX0VSUk9SKCkgbWFjcm9zLCB1c2VkIHRvIHByaW50L2xvZyAgKi8KLSAgLyogbWVzc2FnZXMgZHVyaW5nIGV4ZWN1dGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI3VuZGVmICBGVF9DT01QT05FTlQKLSNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9hZmhhcmZidXp6Ci0KLQotICAvKgotICAgKiBXZSB1c2UgYHNldHMnIChpbiB0aGUgSGFyZkJ1enogc2Vuc2UsIHdoaWNoIGNvbWVzIHF1aXRlIG5lYXIgdG8gdGhlCi0gICAqIHVzdWFsIG1hdGhlbWF0aWNhbCBtZWFuaW5nKSB0byBtYW5hZ2UgYm90aCBsb29rdXBzIGFuZCBnbHlwaCBpbmRpY2VzLgotICAgKgotICAgKiAxLiBGb3IgZWFjaCBjb3ZlcmFnZSwgY29sbGVjdCBsb29rdXAgSURzIGluIGEgc2V0LiAgTm90ZSB0aGF0IGFuCi0gICAqICAgIGF1dG8taGludGVyIGBjb3ZlcmFnZScgaXMgcmVwcmVzZW50ZWQgYnkgb25lIGBmZWF0dXJlJywgYW5kIGEKLSAgICogICAgZmVhdHVyZSBjb25zaXN0cyBvZiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIChmb250IHNwZWNpZmljKSBgbG9va3VwJ3MKLSAgICogICAgdGhhdCBhY3R1YWxseSBkbyB0aGUgbWFwcGluZyBqb2IuICBQbGVhc2UgY2hlY2sgdGhlIE9wZW5UeXBlCi0gICAqICAgIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiBmZWF0dXJlcyBhbmQgbG9va3Vwcy4KLSAgICoKLSAgICogMi4gQ3JlYXRlIGdseXBoIElEIHNldHMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBsb29rdXAgc2V0cy4KLSAgICoKLSAgICogMy4gVGhlIGdseXBoIHNldCBjb3JyZXNwb25kaW5nIHRvIEFGX0NPVkVSQUdFX0RFRkFVTFQgaXMgY29tcHV0ZWQKLSAgICogICAgd2l0aCBhbGwgbG9va3VwcyBzcGVjaWZpYyB0byB0aGUgT3BlblR5cGUgc2NyaXB0IGFjdGl2YXRlZC4gIEl0Ci0gICAqICAgIHJlbGllcyBvbiB0aGUgb3JkZXIgb2YgQUZfREVGSU5FX1NUWUxFX0NMQVNTIGVudHJpZXMgc28gdGhhdAotICAgKiAgICBzcGVjaWFsIGNvdmVyYWdlcyAobGlrZSBgb2xkc3R5bGUgZmlndXJlcycpIGRvbid0IGdldCBvdmVyd3JpdHRlbi4KLSAgICoKLSAgICovCi0KLQotICAvKiBsb2FkIGNvdmVyYWdlIHRhZ3MgKi8KLSN1bmRlZiAgQ09WRVJBR0UKLSNkZWZpbmUgQ09WRVJBR0UoIG5hbWUsIE5BTUUsIGRlc2NyaXB0aW9uLCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICB0YWcxLCB0YWcyLCB0YWczLCB0YWc0ICkgICAgICAgICAgICAgXAotICAgICAgICAgIHN0YXRpYyBjb25zdCBoYl90YWdfdCAgbmFtZSAjIyBfY292ZXJhZ2VbXSA9IFwKLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBIQl9UQUcoIHRhZzEsIHRhZzIsIHRhZzMsIHRhZzQgKSwgICAgICAgICAgXAotICAgICAgICAgICAgSEJfVEFHX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICB9OwotCi0KLSNpbmNsdWRlICJhZmNvdmVyLmgiCi0KLQotICAvKiBkZWZpbmUgbWFwcGluZyBiZXR3ZWVuIGNvdmVyYWdlIHRhZ3MgYW5kIEFGX0NvdmVyYWdlICovCi0jdW5kZWYgIENPVkVSQUdFCi0jZGVmaW5lIENPVkVSQUdFKCBuYW1lLCBOQU1FLCBkZXNjcmlwdGlvbiwgXAotICAgICAgICAgICAgICAgICAgdGFnMSwgdGFnMiwgdGFnMywgdGFnNCApIFwKLSAgICAgICAgICBuYW1lICMjIF9jb3ZlcmFnZSwKLQotCi0gIHN0YXRpYyBjb25zdCBoYl90YWdfdCogIGNvdmVyYWdlc1tdID0KLSAgewotI2luY2x1ZGUgImFmY292ZXIuaCIKLQotICAgIE5VTEwgLyogQUZfQ09WRVJBR0VfREVGQVVMVCAqLwotICB9OwotCi0KLSAgLyogbG9hZCBIYXJmQnV6eiBzY3JpcHQgdGFncyAqLwotI3VuZGVmICBTQ1JJUFQKLSNkZWZpbmUgU0NSSVBUKCBzLCBTLCBkLCBoLCBzYzEsIHNjMiwgc2MzICkgIGgsCi0KLQotICBzdGF0aWMgY29uc3QgaGJfc2NyaXB0X3QgIHNjcmlwdHNbXSA9Ci0gIHsKLSNpbmNsdWRlICJhZnNjcmlwdC5oIgotICB9OwotCi0KLSAgRlRfRXJyb3IKLSAgYWZfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGdzdHlsZXMgKQotICB7Ci0gICAgaGJfZmFjZV90KiAgZmFjZTsKLQotICAgIGhiX3NldF90KiAgZ3N1Yl9sb29rdXBzOyAgLyogR1NVQiBsb29rdXBzIGZvciBhIGdpdmVuIHNjcmlwdCAqLwotICAgIGhiX3NldF90KiAgZ3N1Yl9nbHlwaHM7ICAgLyogZ2x5cGhzIGNvdmVyZWQgYnkgR1NVQiBsb29rdXBzICAqLwotICAgIGhiX3NldF90KiAgZ3Bvc19sb29rdXBzOyAgLyogR1BPUyBsb29rdXBzIGZvciBhIGdpdmVuIHNjcmlwdCAqLwotICAgIGhiX3NldF90KiAgZ3Bvc19nbHlwaHM7ICAgLyogZ2x5cGhzIGNvdmVyZWQgYnkgR1BPUyBsb29rdXBzICAqLwotCi0gICAgaGJfc2NyaXB0X3QgICAgICBzY3JpcHQ7Ci0gICAgY29uc3QgaGJfdGFnX3QqICBjb3ZlcmFnZV90YWdzOwotICAgIGhiX3RhZ190ICAgICAgICAgc2NyaXB0X3RhZ3NbXSA9IHsgSEJfVEFHX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9UQUdfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX1RBR19OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfVEFHX05PTkUgfTsKLQotICAgIGhiX2NvZGVwb2ludF90ICBpZHg7Ci0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICBpbnQgICAgICAgICAgICAgY291bnQ7Ci0jZW5kaWYKLQotCi0gICAgaWYgKCAhZ2xvYmFscyB8fCAhc3R5bGVfY2xhc3MgfHwgIWdzdHlsZXMgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBmYWNlID0gaGJfZm9udF9nZXRfZmFjZSggZ2xvYmFscy0+aGJfZm9udCApOwotCi0gICAgZ3N1Yl9sb29rdXBzID0gaGJfc2V0X2NyZWF0ZSgpOwotICAgIGdzdWJfZ2x5cGhzICA9IGhiX3NldF9jcmVhdGUoKTsKLSAgICBncG9zX2xvb2t1cHMgPSBoYl9zZXRfY3JlYXRlKCk7Ci0gICAgZ3Bvc19nbHlwaHMgID0gaGJfc2V0X2NyZWF0ZSgpOwotCi0gICAgY292ZXJhZ2VfdGFncyA9IGNvdmVyYWdlc1tzdHlsZV9jbGFzcy0+Y292ZXJhZ2VdOwotICAgIHNjcmlwdCAgICAgICAgPSBzY3JpcHRzW3N0eWxlX2NsYXNzLT5zY3JpcHRdOwotCi0gICAgLyogQ29udmVydCBhIEhhcmZCdXp6IHNjcmlwdCB0YWcgaW50byB0aGUgY29ycmVzcG9uZGluZyBPcGVuVHlwZSAqLwotICAgIC8qIHRhZyBvciB0YWdzIC0tIHNvbWUgSW5kaWMgc2NyaXB0cyBsaWtlIERldmFuYWdhcmkgaGF2ZSBhbiBvbGQgKi8KLSAgICAvKiBhbmQgYSBuZXcgc2V0IG9mIGZlYXR1cmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaGJfb3RfdGFnc19mcm9tX3NjcmlwdCggc2NyaXB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY3JpcHRfdGFnc1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2NyaXB0X3RhZ3NbMV0gKTsKLQotICAgIC8qIGBoYl9vdF90YWdzX2Zyb21fc2NyaXB0JyB1c3VhbGx5IHJldHVybnMgSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUICovCi0gICAgLyogYXMgdGhlIHNlY29uZCB0YWcuICBXZSBjaGFuZ2UgdGhhdCB0byBIQl9UQUdfTk9ORSBleGNlcHQgZm9yIHRoZSAgKi8KLSAgICAvKiBkZWZhdWx0IHNjcmlwdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggc3R5bGVfY2xhc3MtPnNjcmlwdCA9PSBnbG9iYWxzLT5tb2R1bGUtPmRlZmF1bHRfc2NyaXB0ICYmCi0gICAgICAgICBzdHlsZV9jbGFzcy0+Y292ZXJhZ2UgPT0gQUZfQ09WRVJBR0VfREVGQVVMVCAgICAgICAgICAgKQotICAgIHsKLSAgICAgIGlmICggc2NyaXB0X3RhZ3NbMF0gPT0gSEJfVEFHX05PTkUgKQotICAgICAgICBzY3JpcHRfdGFnc1swXSA9IEhCX09UX1RBR19ERUZBVUxUX1NDUklQVDsKLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgaWYgKCBzY3JpcHRfdGFnc1sxXSA9PSBIQl9UQUdfTk9ORSApCi0gICAgICAgICAgc2NyaXB0X3RhZ3NbMV0gPSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzY3JpcHRfdGFnc1sxXSAhPSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKQotICAgICAgICAgIHNjcmlwdF90YWdzWzJdID0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgaWYgKCBzY3JpcHRfdGFnc1sxXSA9PSBIQl9PVF9UQUdfREVGQVVMVF9TQ1JJUFQgKQotICAgICAgICBzY3JpcHRfdGFnc1sxXSA9IEhCX1RBR19OT05FOwotICAgIH0KLQotICAgIGhiX290X2xheW91dF9jb2xsZWN0X2xvb2t1cHMoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfT1RfVEFHX0dTVUIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X3RhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3ZlcmFnZV90YWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWJfbG9va3VwcyApOwotCi0gICAgaWYgKCBoYl9zZXRfaXNfZW1wdHkoIGdzdWJfbG9va3VwcyApICkKLSAgICAgIGdvdG8gRXhpdDsgLyogbm90aGluZyB0byBkbyAqLwotCi0gICAgaGJfb3RfbGF5b3V0X2NvbGxlY3RfbG9va3VwcyggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9PVF9UQUdfR1BPUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfdGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyYWdlX3RhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bvc19sb29rdXBzICk7Ci0KLSAgICBGVF9UUkFDRTQoKCAiR1NVQiBsb29rdXBzIChzdHlsZSBgJXMnKTpcbiIKLSAgICAgICAgICAgICAgICAiICIsCi0gICAgICAgICAgICAgICAgYWZfc3R5bGVfbmFtZXNbc3R5bGVfY2xhc3MtPnN0eWxlXSApKTsKLQotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgY291bnQgPSAwOwotI2VuZGlmCi0KLSAgICBmb3IgKCBpZHggPSBIQl9TRVRfVkFMVUVfSU5WQUxJRDsgaGJfc2V0X25leHQoIGdzdWJfbG9va3VwcywgJmlkeCApOyApCi0gICAgewotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICBGVF9UUkFDRTQoKCAiICVkIiwgaWR4ICkpOwotICAgICAgY291bnQrKzsKLSNlbmRpZgotCi0gICAgICAvKiBnZXQgb3V0cHV0IGNvdmVyYWdlIG9mIEdTVUIgZmVhdHVyZSAqLwotICAgICAgaGJfb3RfbGF5b3V0X2xvb2t1cF9jb2xsZWN0X2dseXBocyggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX09UX1RBR19HU1VCLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N1Yl9nbHlwaHMgKTsKLSAgICB9Ci0KLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgIGlmICggIWNvdW50ICkKLSAgICAgIEZUX1RSQUNFNCgoICIgKG5vbmUpIiApKTsKLSAgICBGVF9UUkFDRTQoKCAiXG5cbiIgKSk7Ci0jZW5kaWYKLQotICAgIEZUX1RSQUNFNCgoICJHUE9TIGxvb2t1cHMgKHN0eWxlIGAlcycpOlxuIgotICAgICAgICAgICAgICAgICIgIiwKLSAgICAgICAgICAgICAgICBhZl9zdHlsZV9uYW1lc1tzdHlsZV9jbGFzcy0+c3R5bGVdICkpOwotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICBjb3VudCA9IDA7Ci0jZW5kaWYKLQotICAgIGZvciAoIGlkeCA9IEhCX1NFVF9WQUxVRV9JTlZBTElEOyBoYl9zZXRfbmV4dCggZ3Bvc19sb29rdXBzLCAmaWR4ICk7ICkKLSAgICB7Ci0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIEZUX1RSQUNFNCgoICIgJWQiLCBpZHggKSk7Ci0gICAgICBjb3VudCsrOwotI2VuZGlmCi0KLSAgICAgIC8qIGdldCBpbnB1dCBjb3ZlcmFnZSBvZiBHUE9TIGZlYXR1cmUgKi8KLSAgICAgIGhiX290X2xheW91dF9sb29rdXBfY29sbGVjdF9nbHlwaHMoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9PVF9UQUdfR1BPUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9zX2dseXBocywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMICk7Ci0gICAgfQotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICBpZiAoICFjb3VudCApCi0gICAgICBGVF9UUkFDRTQoKCAiIChub25lKSIgKSk7Ci0gICAgRlRfVFJBQ0U0KCggIlxuXG4iICkpOwotI2VuZGlmCi0KLSAgICAvKgotICAgICAqIFdlIG5vdyBjaGVjayB3aGV0aGVyIHdlIGNhbiBjb25zdHJ1Y3QgYmx1ZSB6b25lcywgdXNpbmcgZ2x5cGhzCi0gICAgICogY292ZXJlZCBieSB0aGUgZmVhdHVyZSBvbmx5LiAgSW4gY2FzZSB0aGVyZSBpcyBub3QgYSBzaW5nbGUgem9uZQotICAgICAqICh0aGlzIGlzLCBub3QgYSBzaW5nbGUgY2hhcmFjdGVyIGlzIGNvdmVyZWQpLCB3ZSBza2lwIHRoaXMgY292ZXJhZ2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSAhPSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKLSAgICB7Ci0gICAgICBBRl9CbHVlX1N0cmluZ3NldCAgICAgICAgIGJzcyA9IHN0eWxlX2NsYXNzLT5ibHVlX3N0cmluZ3NldDsKLSAgICAgIGNvbnN0IEFGX0JsdWVfU3RyaW5nUmVjKiAgYnMgID0gJmFmX2JsdWVfc3RyaW5nc2V0c1tic3NdOwotCi0gICAgICBGVF9Cb29sICBmb3VuZCA9IDA7Ci0KLQotICAgICAgZm9yICggOyBicy0+c3RyaW5nICE9IEFGX0JMVUVfU1RSSU5HX01BWDsgYnMrKyApCi0gICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqICBwID0gJmFmX2JsdWVfc3RyaW5nc1ticy0+c3RyaW5nXTsKLQotCi0gICAgICAgIHdoaWxlICggKnAgKQotICAgICAgICB7Ci0gICAgICAgICAgaGJfY29kZXBvaW50X3QgIGNoOwotCi0KLSAgICAgICAgICBHRVRfVVRGOF9DSEFSKCBjaCwgcCApOwotCi0gICAgICAgICAgZm9yICggaWR4ID0gSEJfU0VUX1ZBTFVFX0lOVkFMSUQ7IGhiX3NldF9uZXh0KCBnc3ViX2xvb2t1cHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWR4ICk7ICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBoYl9jb2RlcG9pbnRfdCAgZ2lkeCA9IEZUX0dldF9DaGFyX0luZGV4KCBnbG9iYWxzLT5mYWNlLCBjaCApOwotCi0KLSAgICAgICAgICAgIGlmICggaGJfb3RfbGF5b3V0X2xvb2t1cF93b3VsZF9zdWJzdGl0dXRlKCBmYWNlLCBpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdpZHgsIDEsIDEgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGZvdW5kID0gMTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICggIWZvdW5kICkKLSAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U0KCggIiAgbm8gYmx1ZSBjaGFyYWN0ZXJzIGZvdW5kOyBzdHlsZSBza2lwcGVkXG4iICkpOwotICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBWYXJpb3VzIE9wZW5UeXBlIGZlYXR1cmVzIG1pZ2h0IHVzZSB0aGUgc2FtZSBnbHlwaHMgYXQgZGlmZmVyZW50Ci0gICAgICogdmVydGljYWwgcG9zaXRpb25zOyBmb3IgZXhhbXBsZSwgc3VwZXJzY3JpcHQgYW5kIHN1YnNjcmlwdCBnbHlwaHMKLSAgICAgKiBjb3VsZCBiZSB0aGUgc2FtZS4gIEhvd2V2ZXIsIHRoZSBhdXRvLWhpbnRlciBpcyBjb21wbGV0ZWx5Ci0gICAgICogYWdub3N0aWMgb2YgT3BlblR5cGUgZmVhdHVyZXMgYWZ0ZXIgdGhlIGZlYXR1cmUgYW5hbHlzaXMgaGFzIGJlZW4KLSAgICAgKiBjb21wbGV0ZWQ6IFRoZSBlbmdpbmUgdGhlbiBzaW1wbHkgcmVjZWl2ZXMgYSBnbHlwaCBpbmRleCBhbmQgcmV0dXJucyBhCi0gICAgICogaGludGVkIGFuZCB1c3VhbGx5IHJlbmRlcmVkIGdseXBoLgotICAgICAqCi0gICAgICogQ29uc2lkZXIgdGhlIHN1cGVyc2NyaXB0IGZlYXR1cmUgb2YgZm9udCBgcGFsYS50dGYnOiBTb21lIG9mIHRoZQotICAgICAqIGdseXBocyBhcmUgYHJlYWwnLCB0aGlzIGlzLCB0aGV5IGhhdmUgYSB6ZXJvIHZlcnRpY2FsIG9mZnNldCwgYnV0Ci0gICAgICogbW9zdCBvZiB0aGVtIGFyZSBzbWFsbCBjYXBzIGdseXBocyBzaGlmdGVkIHVwIHRvIHRoZSBzdXBlcnNjcmlwdAotICAgICAqIHBvc2l0aW9uICh0aGlzIGlzLCB0aGUgYHN1cHMnIGZlYXR1cmUgaXMgcHJlc2VudCBpbiBib3RoIHRoZSBHU1VCIGFuZAotICAgICAqIEdQT1MgdGFibGVzKS4gIFRoZSBjb2RlIGZvciBibHVlIHpvbmVzIGNvbXB1dGF0aW9uIGFjdHVhbGx5IHVzZXMgYQotICAgICAqIGZlYXR1cmUncyB5IG9mZnNldCBzbyB0aGF0IHRoZSBgcmVhbCcgZ2x5cGhzIGdldCBjb3JyZWN0IGhpbnRzLiAgQnV0Ci0gICAgICogbGF0ZXIgb24gaXQgaXMgaW1wb3NzaWJsZSB0byBkZWNpZGUgd2hldGhlciBhIGdseXBoIGluZGV4IGJlbG9uZ3MgdG8sCi0gICAgICogc2F5LCB0aGUgc21hbGwgY2FwcyBvciBzdXBlcnNjcmlwdCBmZWF0dXJlLgotICAgICAqCi0gICAgICogRm9yIHRoaXMgcmVhc29uLCB3ZSBkb24ndCBhc3NpZ24gYSBzdHlsZSB0byBhIGdseXBoIGlmIHRoZSBjdXJyZW50Ci0gICAgICogZmVhdHVyZSBjb3ZlcnMgdGhlIGdseXBoIGluIGJvdGggdGhlIEdTVUIgYW5kIHRoZSBHUE9TIHRhYmxlcy4gIFRoaXMKLSAgICAgKiBpcyBxdWl0ZSBhIGJyb2FkIGNvbmRpdGlvbiwgYXNzdW1pbmcgdGhhdAotICAgICAqCi0gICAgICogICAoYSkgZ2x5cGhzIHRoYXQgZ2V0IHVzZWQgaW4gbXVsdGlwbGUgZmVhdHVyZXMgYXJlIHByZXNlbnQgaW4gYQotICAgICAqICAgICAgIGZlYXR1cmUgd2l0aG91dCB2ZXJ0aWNhbCBzaGlmdCwKLSAgICAgKgotICAgICAqIGFuZAotICAgICAqCi0gICAgICogICAoYikgYSBmZWF0dXJlJ3MgR1BPUyBkYXRhIHJlYWxseSBtb3ZlcyB0aGUgZ2x5cGggdmVydGljYWxseS4KLSAgICAgKgotICAgICAqIE5vdCBmdWxmaWxsaW5nIGNvbmRpdGlvbiAoYSkgbWFrZXMgYSBmb250IGxhcmdlcjsgaXQgd291bGQgYWxzbwotICAgICAqIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGdseXBocyB0aGF0IGNvdWxkIGJlIGFkZHJlc3NlZCBkaXJlY3RseSB3aXRob3V0Ci0gICAgICogdXNpbmcgT3BlblR5cGUgZmVhdHVyZXMsIHNvIHRoaXMgYXNzdW1wdGlvbiBpcyByYXRoZXIgc3Ryb25nLgotICAgICAqCi0gICAgICogQ29uZGl0aW9uIChiKSBpcyBtdWNoIHdlYWtlciwgYW5kIHRoZXJlIG1pZ2h0IGJlIGdseXBocyB3aGljaCBnZXQKLSAgICAgKiBtaXNzZWQuICBIb3dldmVyLCB0aGUgT3BlblR5cGUgZmVhdHVyZXMgd2UgYXJlIGdvaW5nIHRvIGhhbmRsZSBhcmUKLSAgICAgKiBwcmltYXJpbHkgbG9jYXRlZCBpbiBHU1VCLCBhbmQgSGFyZkJ1enogZG9lc24ndCBwcm92aWRlIGFuIEFQSSB0bwotICAgICAqIGRpcmVjdGx5IGdldCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIEdQT1MgdGFibGUuICBBCi0gICAgICogcG9zc2libGUgc29sdXRpb24gbWlnaHQgYmUgdG8gZGlyZWN0bHkgcGFyc2UgdGhlIEdQT1MgdGFibGUgdG8gZmluZAotICAgICAqIG91dCB3aGV0aGVyIGEgZ2x5cGggZ2V0cyBzaGlmdGVkIHZlcnRpY2FsbHksIGJ1dCB0aGlzIGlzIHNvbWV0aGluZyBJCi0gICAgICogd291bGQgbGlrZSB0byBhdm9pZCBpZiBub3QgcmVhbGx5IG5lY2Vzc2FyeS4KLSAgICAgKgotICAgICAqIE5vdGUgdGhhdCB3ZSBkb24ndCBmb2xsb3cgdGhpcyBsb2dpYyBmb3IgdGhlIGRlZmF1bHQgY292ZXJhZ2UuCi0gICAgICogQ29tcGxleCBzY3JpcHRzIGxpa2UgRGV2YW5hZ2FyaSBoYXZlIG1hbmRhdG9yeSBHUE9TIGZlYXR1cmVzIHRvCi0gICAgICogcG9zaXRpb24gbWFueSBnbHlwaCBlbGVtZW50cywgdXNpbmcgbWFyay10by1iYXNlIG9yIG1hcmstdG8tbGlnYXR1cmUKLSAgICAgKiB0YWJsZXM7IHRoZSBudW1iZXIgb2YgZ2x5cGhzIG1pc3NlZCBkdWUgdG8gY29uZGl0aW9uIChiKSB3b3VsZCBiZSBmYXIKLSAgICAgKiB0b28gbGFyZ2UuCi0gICAgICoKLSAgICAgKi8KLSAgICBpZiAoIHN0eWxlX2NsYXNzLT5jb3ZlcmFnZSAhPSBBRl9DT1ZFUkFHRV9ERUZBVUxUICkKLSAgICAgIGhiX3NldF9zdWJ0cmFjdCggZ3N1Yl9nbHlwaHMsIGdwb3NfZ2x5cGhzICk7Ci0KLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgIEZUX1RSQUNFNCgoICIgIGdseXBocyB3aXRob3V0IEdQT1MgZGF0YSAoYConIG1lYW5zIGFscmVhZHkgYXNzaWduZWQpIiApKTsKLSAgICBjb3VudCA9IDA7Ci0jZW5kaWYKLQotICAgIGZvciAoIGlkeCA9IEhCX1NFVF9WQUxVRV9JTlZBTElEOyBoYl9zZXRfbmV4dCggZ3N1Yl9nbHlwaHMsICZpZHggKTsgKQotICAgIHsKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgaWYgKCAhKCBjb3VudCAlIDEwICkgKQotICAgICAgICBGVF9UUkFDRTQoKCAiXG4iCi0gICAgICAgICAgICAgICAgICAgICIgICAiICkpOwotCi0gICAgICBGVF9UUkFDRTQoKCAiICVkIiwgaWR4ICkpOwotICAgICAgY291bnQrKzsKLSNlbmRpZgotCi0gICAgICAvKiBnbHlwaCBpbmRpY2VzIHJldHVybmVkIGJ5IGBoYl9vdF9sYXlvdXRfbG9va3VwX2NvbGxlY3RfZ2x5cGhzJyAqLwotICAgICAgLyogY2FuIGJlIGFyYml0cmFyeTogc29tZSBmb250cyB1c2UgZmFrZSBpbmRpY2VzIGZvciBwcm9jZXNzaW5nICAgKi8KLSAgICAgIC8qIGludGVybmFsIHRvIEdTVUIgb3IgR1BPUywgd2hpY2ggaXMgZnVsbHkgdmFsaWQgICAgICAgICAgICAgICAgICovCi0gICAgICBpZiAoIGlkeCA+PSAoaGJfY29kZXBvaW50X3QpZ2xvYmFscy0+Z2x5cGhfY291bnQgKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgaWYgKCBnc3R5bGVzW2lkeF0gPT0gQUZfU1RZTEVfVU5BU1NJR05FRCApCi0gICAgICAgIGdzdHlsZXNbaWR4XSA9IChGVF9CeXRlKXN0eWxlX2NsYXNzLT5zdHlsZTsKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgICAgZWxzZQotICAgICAgICBGVF9UUkFDRTQoKCAiKiIgKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQotICAgIGlmICggIWNvdW50ICkKLSAgICAgIEZUX1RSQUNFNCgoICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgKG5vbmUpIiApKTsKLSAgICBGVF9UUkFDRTQoKCAiXG5cbiIgKSk7Ci0jZW5kaWYKLQotICBFeGl0OgotICAgIGhiX3NldF9kZXN0cm95KCBnc3ViX2xvb2t1cHMgKTsKLSAgICBoYl9zZXRfZGVzdHJveSggZ3N1Yl9nbHlwaHMgICk7Ci0gICAgaGJfc2V0X2Rlc3Ryb3koIGdwb3NfbG9va3VwcyApOwotICAgIGhiX3NldF9kZXN0cm95KCBncG9zX2dseXBocyAgKTsKLQotICAgIHJldHVybiBGVF9FcnJfT2s7Ci0gIH0KLQotCi0gIC8qIGNvbnN0cnVjdCBIYXJmQnV6eiBmZWF0dXJlcyAqLwotI3VuZGVmICBDT1ZFUkFHRQotI2RlZmluZSBDT1ZFUkFHRSggbmFtZSwgTkFNRSwgZGVzY3JpcHRpb24sICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIHRhZzEsIHRhZzIsIHRhZzMsIHRhZzQgKSAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgc3RhdGljIGNvbnN0IGhiX2ZlYXR1cmVfdCAgbmFtZSAjIyBfZmVhdHVyZVtdID0gXAotICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgIEhCX1RBRyggdGFnMSwgdGFnMiwgdGFnMywgdGFnNCApLCAgICAgICAgICAgXAotICAgICAgICAgICAgICAxLCAwLCAodW5zaWduZWQgaW50KS0xICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgfTsKLQotCi0jaW5jbHVkZSAiYWZjb3Zlci5oIgotCi0KLSAgLyogZGVmaW5lIG1hcHBpbmcgYmV0d2VlbiBIYXJmQnV6eiBmZWF0dXJlcyBhbmQgQUZfQ292ZXJhZ2UgKi8KLSN1bmRlZiAgQ09WRVJBR0UKLSNkZWZpbmUgQ09WRVJBR0UoIG5hbWUsIE5BTUUsIGRlc2NyaXB0aW9uLCBcCi0gICAgICAgICAgICAgICAgICB0YWcxLCB0YWcyLCB0YWczLCB0YWc0ICkgXAotICAgICAgICAgIG5hbWUgIyMgX2ZlYXR1cmUsCi0KLQotICBzdGF0aWMgY29uc3QgaGJfZmVhdHVyZV90KiAgZmVhdHVyZXNbXSA9Ci0gIHsKLSNpbmNsdWRlICJhZmNvdmVyLmgiCi0KLSAgICBOVUxMIC8qIEFGX0NPVkVSQUdFX0RFRkFVTFQgKi8KLSAgfTsKLQotCi0gIEZUX0Vycm9yCi0gIGFmX2dldF9jaGFyX2luZGV4KCBBRl9TdHlsZU1ldHJpY3MgIG1ldHJpY3MsCi0gICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgIGNoYXJjb2RlLAotICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICpjb2RlcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgICAgKnlfb2Zmc2V0ICkKLSAgewotICAgIEFGX1N0eWxlQ2xhc3MgIHN0eWxlX2NsYXNzOwotCi0gICAgY29uc3QgaGJfZmVhdHVyZV90KiAgZmVhdHVyZTsKLQotICAgIEZUX1VMb25nICBpbl9pZHgsIG91dF9pZHg7Ci0KLQotICAgIGlmICggIW1ldHJpY3MgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBpbl9pZHggPSBGVF9HZXRfQ2hhcl9JbmRleCggbWV0cmljcy0+Z2xvYmFscy0+ZmFjZSwgY2hhcmNvZGUgKTsKLQotICAgIHN0eWxlX2NsYXNzID0gbWV0cmljcy0+c3R5bGVfY2xhc3M7Ci0KLSAgICBmZWF0dXJlID0gZmVhdHVyZXNbc3R5bGVfY2xhc3MtPmNvdmVyYWdlXTsKLQotICAgIGlmICggZmVhdHVyZSApCi0gICAgewotICAgICAgRlRfSW50ICB1cGVtID0gKEZUX0ludCltZXRyaWNzLT5nbG9iYWxzLT5mYWNlLT51bml0c19wZXJfRU07Ci0KLSAgICAgIGhiX2ZvbnRfdCogICAgZm9udCA9IG1ldHJpY3MtPmdsb2JhbHMtPmhiX2ZvbnQ7Ci0gICAgICBoYl9idWZmZXJfdCogIGJ1ZiAgPSBoYl9idWZmZXJfY3JlYXRlKCk7Ci0KLSAgICAgIHVpbnQzMl90ICBjID0gKHVpbnQzMl90KWNoYXJjb2RlOwotCi0gICAgICBoYl9nbHlwaF9pbmZvX3QqICAgICAgZ2luZm87Ci0gICAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiAgZ3BvczsKLSAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICBnY291bnQ7Ci0KLQotICAgICAgLyogd2Ugc2hhcGUgYXQgYSBzaXplIG9mIHVuaXRzIHBlciBFTTsgdGhpcyBtZWFucyBmb250IHVuaXRzICovCi0gICAgICBoYl9mb250X3NldF9zY2FsZSggZm9udCwgdXBlbSwgdXBlbSApOwotCi0gICAgICAvKiBYWFg6IGlzIHRoaXMgc3VmZmljaWVudCBmb3IgYSBzaW5nbGUgY2hhcmFjdGVyIG9mIGFueSBzY3JpcHQ/ICovCi0gICAgICBoYl9idWZmZXJfc2V0X2RpcmVjdGlvbiggYnVmLCBIQl9ESVJFQ1RJT05fTFRSICk7Ci0gICAgICBoYl9idWZmZXJfc2V0X3NjcmlwdCggYnVmLCBzY3JpcHRzW3N0eWxlX2NsYXNzLT5zY3JpcHRdICk7Ci0KLSAgICAgIC8qIHdlIGFkZCBvbmUgY2hhcmFjdGVyIHRvIGBidWYnIC4uLiAqLwotICAgICAgaGJfYnVmZmVyX2FkZF91dGYzMiggYnVmLCAmYywgMSwgMCwgMSApOwotCi0gICAgICAvKiAuLi4gYW5kIGFwcGx5IG9uZSBmZWF0dXJlICovCi0gICAgICBoYl9zaGFwZSggZm9udCwgYnVmLCBmZWF0dXJlLCAxICk7Ci0KLSAgICAgIGdpbmZvID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyggYnVmLCAmZ2NvdW50ICk7Ci0gICAgICBncG9zICA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKCBidWYsICZnY291bnQgKTsKLQotICAgICAgb3V0X2lkeCA9IGdpbmZvWzBdLmNvZGVwb2ludDsKLQotICAgICAgLyogZ2V0dGluZyB0aGUgc2FtZSBpbmRleCBpbmRpY2F0ZXMgbm8gc3Vic3RpdHV0aW9uLCAgICAgICAgICovCi0gICAgICAvKiB3aGljaCBtZWFucyB0aGF0IHRoZSBnbHlwaCBpc24ndCBhdmFpbGFibGUgaW4gdGhlIGZlYXR1cmUgKi8KLSAgICAgIGlmICggaW5faWR4ID09IG91dF9pZHggKQotICAgICAgewotICAgICAgICAqY29kZXBvaW50ID0gMDsKLSAgICAgICAgKnlfb2Zmc2V0ICA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgICpjb2RlcG9pbnQgPSBvdXRfaWR4OwotICAgICAgICAqeV9vZmZzZXQgID0gZ3Bvc1swXS55X29mZnNldDsKLSAgICAgIH0KLQotICAgICAgaGJfYnVmZmVyX2Rlc3Ryb3koIGJ1ZiApOwotCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgIGlmICggZ2NvdW50ID4gMSApCi0gICAgICAgIEZUX1RSQUNFMSgoICJhZl9nZXRfY2hhcl9pbmRleDoiCi0gICAgICAgICAgICAgICAgICAgICIgaW5wdXQgY2hhcmFjdGVyIG1hcHBlZCB0byBtdWx0aXBsZSBnbHlwaHNcbiIgKSk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICpjb2RlcG9pbnQgPSBpbl9pZHg7Ci0gICAgICAqeV9vZmZzZXQgID0gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gRlRfRXJyX09rOwotICB9Ci0KLQotI2Vsc2UgLyogIUZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaICovCi0KLQotICBGVF9FcnJvcgotICBhZl9nZXRfY292ZXJhZ2UoIEFGX0ZhY2VHbG9iYWxzICBnbG9iYWxzLAotICAgICAgICAgICAgICAgICAgIEFGX1N0eWxlQ2xhc3MgICBzdHlsZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgZ3N0eWxlcyApCi0gIHsKLSAgICBGVF9VTlVTRUQoIGdsb2JhbHMgKTsKLSAgICBGVF9VTlVTRUQoIHN0eWxlX2NsYXNzICk7Ci0gICAgRlRfVU5VU0VEKCBnc3R5bGVzICk7Ci0KLSAgICByZXR1cm4gRlRfRXJyX09rOwotICB9Ci0KLQotICBGVF9FcnJvcgotICBhZl9nZXRfY2hhcl9pbmRleCggQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAotICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICBjaGFyY29kZSwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAqY29kZXBvaW50LAotICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICp5X29mZnNldCApCi0gIHsKLSAgICBGVF9GYWNlICBmYWNlOwotCi0KLSAgICBpZiAoICFtZXRyaWNzICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgZmFjZSA9IG1ldHJpY3MtPmdsb2JhbHMtPmZhY2U7Ci0KLSAgICAqY29kZXBvaW50ID0gRlRfR2V0X0NoYXJfSW5kZXgoIGZhY2UsIGNoYXJjb2RlICk7Ci0gICAgKnlfb2Zmc2V0ICA9IDA7Ci0KLSAgICByZXR1cm4gRlRfRXJyX09rOwotICB9Ci0KLQotI2VuZGlmIC8qICFGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWiAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2F1dG9maXQvaGJzaGltLmggYi9zcmMvYXV0b2ZpdC9oYnNoaW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYzNmNhNi4uMDAwMDAwMAotLS0gYS9zcmMvYXV0b2ZpdC9oYnNoaW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGhic2hpbS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBIYXJmQnV6eiBpbnRlcmZhY2UgZm9yIGFjY2Vzc2luZyBPcGVuVHlwZSBmZWF0dXJlcyAoc3BlY2lmaWNhdGlvbikuICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0hCU0hJTV9IX18KLSNkZWZpbmUgX19IQlNISU1fSF9fCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0KLQotI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaCi0KLSNpbmNsdWRlIDxoYi5oPgotI2luY2x1ZGUgPGhiLW90Lmg+Ci0jaW5jbHVkZSA8aGItZnQuaD4KLQotI2VuZGlmCi0KLQotRlRfQkVHSU5fSEVBREVSCi0KLSAgRlRfRXJyb3IKLSAgYWZfZ2V0X2NvdmVyYWdlKCBBRl9GYWNlR2xvYmFscyAgZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICBBRl9TdHlsZUNsYXNzICAgc3R5bGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgICAgIGdzdHlsZXMgKTsKLQotICBGVF9FcnJvcgotICBhZl9nZXRfY2hhcl9pbmRleCggQUZfU3R5bGVNZXRyaWNzICBtZXRyaWNzLAotICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICBjaGFyY29kZSwKLSAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAqY29kZXBvaW50LAotICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgICp5X29mZnNldCApOwotCi0gLyogKi8KLQotRlRfRU5EX0hFQURFUgotCi0jZW5kaWYgLyogX19IQlNISU1fSF9fICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9iYXNlcGljLmMgYi9zcmMvYmFzZS9iYXNlcGljLmMKaW5kZXggOTg1MGVkOS4uZjJjZWE5MCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvYmFzZXBpYy5jCisrKyBiL3NyYy9iYXNlL2Jhc2VwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgYmFzZS4gICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvYmFzZXBpYy5oIGIvc3JjL2Jhc2UvYmFzZXBpYy5oCmluZGV4IGM1ZDdjYmYuLmExYTc1YTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Jhc2VwaWMuaAorKysgYi9zcmMvYmFzZS9iYXNlcGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGJhc2UuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0JBU0VQSUNfSF9fCi0jZGVmaW5lIF9fQkFTRVBJQ19IX18KKyNpZm5kZWYgQkFTRVBJQ19IXworI2RlZmluZSBCQVNFUElDX0hfCiAKIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAvKiAqLwogCi0jZW5kaWYgLyogX19CQVNFUElDX0hfXyAqLworI2VuZGlmIC8qIEJBU0VQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMgYi9zcmMvYmFzZS9mdGFkdmFuYy5jCmluZGV4IGYxMjkwOGYuLjllMmFiODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YWR2YW5jLmMKKysrIGIvc3JjL2Jhc2UvZnRhZHZhbmMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBRdWljayBjb21wdXRhdGlvbiBvZiBhZHZhbmNlIHdpZHRocyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDgtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNjAsMTAgKzYwLDEyIEBACiAgICAvKiAgLSB1bnNjYWxlZCBsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgIC8qICAtIHVuaGludGVkIGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgLyogIC0gbGlnaHQtaGludGVkIGxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAvKiAgLSBuZWl0aGVyIGEgTU0gbm9yIGEgR1ggZm9udCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotI2RlZmluZSBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgKCBmbGFncyAmICggRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORyApICAgIHx8IFwKLSAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX01PREUoIGZsYWdzICkgPT0gRlRfUkVOREVSX01PREVfTElHSFQgKQorI2RlZmluZSBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmFjZSwgZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKCBmbGFncyAmICggRlRfTE9BRF9OT19TQ0FMRSB8IEZUX0xPQURfTk9fSElOVElORyApICAgIHx8ICAgXAorICAgICAgICAgICAgICBGVF9MT0FEX1RBUkdFVF9NT0RFKCBmbGFncyApID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICkgJiYgXAorICAgICAgICAgICAgIUZUX0hBU19NVUxUSVBMRV9NQVNURVJTKCBmYWNlICkgICAgICAgICAgICAgICAgICAgICAgICAgKQogCiAKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGFkdmFuYy5oICovCkBAIC04Nyw3ICs4OSw3IEBACiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfR2x5cGhfSW5kZXggKTsKIAogICAgIGZ1bmMgPSBmYWNlLT5kcml2ZXItPmNsYXp6LT5nZXRfYWR2YW5jZXM7Ci0gICAgaWYgKCBmdW5jICYmIExPQURfQURWQU5DRV9GQVNUX0NIRUNLKCBmbGFncyApICkKKyAgICBpZiAoIGZ1bmMgJiYgTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0soIGZhY2UsIGZsYWdzICkgKQogICAgIHsKICAgICAgIEZUX0Vycm9yICBlcnJvcjsKIApAQCAtMTMzLDcgKzEzNSw3IEBACiAgICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgICAgZnVuYyA9IGZhY2UtPmRyaXZlci0+Y2xhenotPmdldF9hZHZhbmNlczsKLSAgICBpZiAoIGZ1bmMgJiYgTE9BRF9BRFZBTkNFX0ZBU1RfQ0hFQ0soIGZsYWdzICkgKQorICAgIGlmICggZnVuYyAmJiBMT0FEX0FEVkFOQ0VfRkFTVF9DSEVDSyggZmFjZSwgZmxhZ3MgKSApCiAgICAgewogICAgICAgZXJyb3IgPSBmdW5jKCBmYWNlLCBzdGFydCwgY291bnQsIGZsYWdzLCBwYWR2YW5jZXMgKTsKICAgICAgIGlmICggIWVycm9yICkKQEAgLTE1Nyw4ICsxNTksOCBAQAogCiAgICAgICAvKiBzY2FsZSBmcm9tIDI2LjYgdG8gMTYuMTYgKi8KICAgICAgIHBhZHZhbmNlc1tubl0gPSAoIGZsYWdzICYgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgKQotICAgICAgICAgICAgICAgICAgICAgID8gZmFjZS0+Z2x5cGgtPmFkdmFuY2UueSA8PCAxMAotICAgICAgICAgICAgICAgICAgICAgIDogZmFjZS0+Z2x5cGgtPmFkdmFuY2UueCA8PCAxMDsKKyAgICAgICAgICAgICAgICAgICAgICA/IGZhY2UtPmdseXBoLT5hZHZhbmNlLnkgKiAxMDI0CisgICAgICAgICAgICAgICAgICAgICAgOiBmYWNlLT5nbHlwaC0+YWR2YW5jZS54ICogMTAyNDsKICAgICB9CiAKICAgICByZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGFwaS5jIGIvc3JjL2Jhc2UvZnRhcGkuYwppbmRleCBmMjJhMTgxLi5iOTRjM2ViIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGFwaS5jCisrKyBiL3NyYy9iYXNlL2Z0YXBpLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGNvbXBhdGliaWxpdHkgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5jIGIvc3JjL2Jhc2UvZnRiYXNlLmMKaW5kZXggMjUzZGZiNy4uYWIxYWY2ZiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmMKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU2luZ2xlIG9iamVjdCBsaWJyYXJ5IGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJmdGNhbGMuYyIKICNpbmNsdWRlICJmdGRiZ21lbS5jIgogI2luY2x1ZGUgImZ0Z2xvYWRyLmMiCisjaW5jbHVkZSAiZnRoYXNoLmMiCiAjaW5jbHVkZSAiZnRvYmpzLmMiCiAjaW5jbHVkZSAiZnRvdXRsbi5jIgogI2luY2x1ZGUgImZ0cmZvcmsuYyIKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0YmFzZS5oIGIvc3JjL2Jhc2UvZnRiYXNlLmgKaW5kZXggZTM3ZmVmYS4uNzE3ZmRhYSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiYXNlLmgKKysrIGIvc3JjL2Jhc2UvZnRiYXNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHByaXZhdGUgZnVuY3Rpb25zIHVzZWQgaW4gYmFzZSBtb2R1bGUgKHNwZWNpZmljYXRpb24pLiAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBXZXJuZXIgTGVtYmVyZywgYW5kIHN1enVraSB0b3NoaXlhLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUQkFTRV9IX18KLSNkZWZpbmUgX19GVEJBU0VfSF9fCisjaWZuZGVmIEZUQkFTRV9IXworI2RlZmluZSBGVEJBU0VfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTY4LDcgKzY4LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVEJBU0VfSF9fICovCisjZW5kaWYgLyogRlRCQVNFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJib3guYyBiL3NyYy9iYXNlL2Z0YmJveC5jCmluZGV4IDEwZGY5OGQuLmQzZTQ1ZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0YmJveC5jCisrKyBiL3NyYy9iYXNlL2Z0YmJveC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGJib3ggY29tcHV0YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGJkZi5jIGIvc3JjL2Jhc2UvZnRiZGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE3MmRkYy4uMDAwMDAwMAotLS0gYS9zcmMvYmFzZS9mdGJkZi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRiZGYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIEJERi1zcGVjaWZpYyBzdHJpbmdzIChib2R5KS4gICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0JERl9ICi0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0YmRmLmggKi8KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0dldF9CREZfQ2hhcnNldF9JRCggRlRfRmFjZSAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqYWNoYXJzZXRfZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICphY2hhcnNldF9yZWdpc3RyeSApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7Ci0gICAgY29uc3QgY2hhciogIGVuY29kaW5nID0gTlVMTDsKLSAgICBjb25zdCBjaGFyKiAgcmVnaXN0cnkgPSBOVUxMOwotCi0gICAgRlRfU2VydmljZV9CREYgIHNlcnZpY2U7Ci0KLQotICAgIGlmICggIWZhY2UgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7Ci0KLSAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgQkRGICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X2NoYXJzZXRfaWQgKQotICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfY2hhcnNldF9pZCggZmFjZSwgJmVuY29kaW5nLCAmcmVnaXN0cnkgKTsKLSAgICBlbHNlCi0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBpZiAoIGFjaGFyc2V0X2VuY29kaW5nICkKLSAgICAgICphY2hhcnNldF9lbmNvZGluZyA9IGVuY29kaW5nOwotCi0gICAgaWYgKCBhY2hhcnNldF9yZWdpc3RyeSApCi0gICAgICAqYWNoYXJzZXRfcmVnaXN0cnkgPSByZWdpc3RyeTsKLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGJkZi5oICovCi0KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9HZXRfQkRGX1Byb3BlcnR5KCBGVF9GYWNlICAgICAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgICAgICBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIEJERl9Qcm9wZXJ0eVJlYyAgKmFwcm9wZXJ0eSApCi0gIHsKLSAgICBGVF9FcnJvciAgZXJyb3I7Ci0KLSAgICBGVF9TZXJ2aWNlX0JERiAgc2VydmljZTsKLQotCi0gICAgaWYgKCAhZmFjZSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKLQotICAgIGlmICggIWFwcm9wZXJ0eSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIGFwcm9wZXJ0eS0+dHlwZSA9IEJERl9QUk9QRVJUWV9UWVBFX05PTkU7Ci0KLSAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgQkRGICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X3Byb3BlcnR5ICkKLSAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X3Byb3BlcnR5KCBmYWNlLCBwcm9wX25hbWUsIGFwcm9wZXJ0eSApOwotICAgIGVsc2UKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRiaXRtYXAuYyBiL3NyYy9iYXNlL2Z0Yml0bWFwLmMKaW5kZXggYTU0NTcyYS4uMjRmZWFkMyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRiaXRtYXAuYworKysgYi9zcmMvYmFzZS9mdGJpdG1hcC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBiaXRtYXBzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICB9CiAKICAgICAvKiBmb3IgZWFjaCByb3cgKi8KLSAgICBmb3IgKCB5ID0gMDsgeSA8IGJpdG1hcC0+cm93cyA7IHkrKyApCisgICAgZm9yICggeSA9IDA7IHkgPCBiaXRtYXAtPnJvd3M7IHkrKyApCiAgICAgewogICAgICAgLyoKICAgICAgICAqIEhvcml6b250YWxseToKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Y2FsYy5jIGIvc3JjL2Jhc2UvZnRjYWxjLmMKaW5kZXggNjE5YTA4Yi4uNjc1NDlkMCAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRjYWxjLmMKKysrIGIvc3JjL2Jhc2UvZnRjYWxjLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQXJpdGhtZXRpYyBjb21wdXRhdGlvbnMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzMyw3ICsyMzMsNyBAQAogICB7CiAjaWZkZWYgRlRfTVVMRklYX0FTU0VNQkxFUgogCi0gICAgcmV0dXJuIEZUX01VTEZJWF9BU1NFTUJMRVIoIGFfLCBiXyApOworICAgIHJldHVybiBGVF9NVUxGSVhfQVNTRU1CTEVSKCAoRlRfSW50MzIpYV8sIChGVF9JbnQzMiliXyApOwogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGNpZC5jIGIvc3JjL2Jhc2UvZnRjaWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczNDg4MS4uMDAwMDAwMAotLS0gYS9zcmMvYmFzZS9mdGNpZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2lkLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBBUEkgZm9yIGFjY2Vzc2luZyBDSUQgZm9udCBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNy0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGVyZWsgQ2xlZ2cgYW5kIE1pY2hhZWwgVG9mdGRhbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DSURfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX0NJRF9ICi0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2lkLmggKi8KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0dldF9DSURfUmVnaXN0cnlfT3JkZXJpbmdfU3VwcGxlbWVudCggRlRfRmFjZSAgICAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICAqcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICpvcmRlcmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnN1cHBsZW1lbnQpCi0gIHsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7Ci0gICAgY29uc3QgY2hhciogIHIgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIqICBvID0gTlVMTDsKLSAgICBGVF9JbnQgICAgICAgcyA9IDA7Ci0KLQotICAgIGVycm9yID0gRlRfRVJSKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBpZiAoIGZhY2UgKQotICAgIHsKLSAgICAgIEZUX1NlcnZpY2VfQ0lEICBzZXJ2aWNlOwotCi0KLSAgICAgIEZUX0ZBQ0VfRklORF9TRVJWSUNFKCBmYWNlLCBzZXJ2aWNlLCBDSUQgKTsKLQotICAgICAgaWYgKCBzZXJ2aWNlICYmIHNlcnZpY2UtPmdldF9yb3MgKQotICAgICAgICBlcnJvciA9IHNlcnZpY2UtPmdldF9yb3MoIGZhY2UsICZyLCAmbywgJnMgKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJlZ2lzdHJ5ICkKLSAgICAgICpyZWdpc3RyeSA9IHI7Ci0KLSAgICBpZiAoIG9yZGVyaW5nICkKLSAgICAgICpvcmRlcmluZyA9IG87Ci0KLSAgICBpZiAoIHN1cHBsZW1lbnQgKQotICAgICAgKnN1cHBsZW1lbnQgPSBzOwotCi0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0dldF9DSURfSXNfSW50ZXJuYWxseV9DSURfS2V5ZWQoIEZUX0ZhY2UgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAqaXNfY2lkICkKLSAgewotICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0VSUiggSW52YWxpZF9Bcmd1bWVudCApOwotICAgIEZUX0Jvb2wgICBpYyA9IDA7Ci0KLQotICAgIGlmICggZmFjZSApCi0gICAgewotICAgICAgRlRfU2VydmljZV9DSUQgIHNlcnZpY2U7Ci0KLQotICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIENJRCApOwotCi0gICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X2lzX2NpZCApCi0gICAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X2lzX2NpZCggZmFjZSwgJmljKTsKLSAgICB9Ci0KLSAgICBpZiAoIGlzX2NpZCApCi0gICAgICAqaXNfY2lkID0gaWM7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRfR2V0X0NJRF9Gcm9tX0dseXBoX0luZGV4KCBGVF9GYWNlICAgZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgZ2x5cGhfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmNpZCApCi0gIHsKLSAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICBGVF9VSW50ICAgYyA9IDA7Ci0KLQotICAgIGlmICggZmFjZSApCi0gICAgewotICAgICAgRlRfU2VydmljZV9DSUQgIHNlcnZpY2U7Ci0KLQotICAgICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIENJRCApOwotCi0gICAgICBpZiAoIHNlcnZpY2UgJiYgc2VydmljZS0+Z2V0X2NpZF9mcm9tX2dseXBoX2luZGV4ICkKLSAgICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfY2lkX2Zyb21fZ2x5cGhfaW5kZXgoIGZhY2UsIGdseXBoX2luZGV4LCAmYyk7Ci0gICAgfQotCi0gICAgaWYgKCBjaWQgKQotICAgICAgKmNpZCA9IGM7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMgYi9zcmMvYmFzZS9mdGRiZ21lbS5jCmluZGV4IDAyZWViMDEuLjM4ZDFhODAgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0ZGJnbWVtLmMKKysrIGIvc3JjL2Jhc2UvZnRkYmdtZW0uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBNZW1vcnkgZGVidWdnZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzY3LDcgKzM2Nyw4IEBACiAgICAgICAgIHsKICAgICAgICAgICBwcmludGYoCiAgICAgICAgICAgICAibGVha2VkIG1lbW9yeSBibG9jayBhdCBhZGRyZXNzICVwLCBzaXplICU4bGQgaW4gKCVzOiVsZClcbiIsCi0gICAgICAgICAgICBub2RlLT5hZGRyZXNzLCBub2RlLT5zaXplLAorICAgICAgICAgICAgKHZvaWQqKW5vZGUtPmFkZHJlc3MsCisgICAgICAgICAgICBub2RlLT5zaXplLAogICAgICAgICAgICAgRlRfRklMRU5BTUUoIG5vZGUtPnNvdXJjZS0+ZmlsZV9uYW1lICksCiAgICAgICAgICAgICBub2RlLT5zb3VyY2UtPmxpbmVfbm8gKTsKIApAQCAtODQxLDcgKzg0Miw3IEBACiAgICAgICAgIHAgPSBnZXRlbnYoICJGVDJfQUxMT0NfVE9UQUxfTUFYIiApOwogICAgICAgICBpZiAoIHAgIT0gTlVMTCApCiAgICAgICAgIHsKLSAgICAgICAgICBGVF9Mb25nICAgdG90YWxfbWF4ID0gZnRfYXRvbCggcCApOworICAgICAgICAgIEZUX0xvbmcgIHRvdGFsX21heCA9IGZ0X3N0cnRvbCggcCwgTlVMTCwgMTAgKTsKIAogCiAgICAgICAgICAgaWYgKCB0b3RhbF9tYXggPiAwICkKQEAgLTg1NCw3ICs4NTUsNyBAQAogICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0FMTE9DX0NPVU5UX01BWCIgKTsKICAgICAgICAgaWYgKCBwICE9IE5VTEwgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfTG9uZyAgdG90YWxfY291bnQgPSBmdF9hdG9sKCBwICk7CisgICAgICAgICAgRlRfTG9uZyAgdG90YWxfY291bnQgPSBmdF9zdHJ0b2woIHAsIE5VTEwsIDEwICk7CiAKIAogICAgICAgICAgIGlmICggdG90YWxfY291bnQgPiAwICkKQEAgLTg2Nyw3ICs4NjgsNyBAQAogICAgICAgICBwID0gZ2V0ZW52KCAiRlQyX0tFRVBfQUxJVkUiICk7CiAgICAgICAgIGlmICggcCAhPSBOVUxMICkKICAgICAgICAgewotICAgICAgICAgIEZUX0xvbmcgIGtlZXBfYWxpdmUgPSBmdF9hdG9sKCBwICk7CisgICAgICAgICAgRlRfTG9uZyAga2VlcF9hbGl2ZSA9IGZ0X3N0cnRvbCggcCwgTlVMTCwgMTAgKTsKIAogCiAgICAgICAgICAgaWYgKCBrZWVwX2FsaXZlID4gMCApCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGRlYnVnLmMgYi9zcmMvYmFzZS9mdGRlYnVnLmMKaW5kZXggMDNlMThhOC4uNDA5MjVkMSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRkZWJ1Zy5jCisrKyBiL3NyYy9iYXNlL2Z0ZGVidWcuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBEZWJ1Z2dpbmcgYW5kIGxvZ2dpbmcgY29tcG9uZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRmbnRmbXQuYyBiL3NyYy9iYXNlL2Z0Zm50Zm10LmMKaW5kZXggOThlNzQzMS4uYzZlYjMxOSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRmbnRmbXQuYworKysgYi9zcmMvYmFzZS9mdGZudGZtdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgZm9udCBmb3JtYXRzIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGZzdHlwZS5jIGIvc3JjL2Jhc2UvZnRmc3R5cGUuYwppbmRleCBjZDM0NThmLi5hZTU2YzhmIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGZzdHlwZS5jCisrKyBiL3NyYy9iYXNlL2Z0ZnN0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgdXRpbGl0eSBmaWxlIHRvIGFjY2VzcyBGU1R5cGUgZGF0YSAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDgtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA4LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2FzcC5jIGIvc3JjL2Jhc2UvZnRnYXNwLmMKaW5kZXggYmJkMjU3Yy4uZTM4ZTU1YiAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRnYXNwLmMKKysrIGIvc3JjL2Jhc2UvZnRnYXNwLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQWNjZXNzIG9mIFRydWVUeXBlJ3MgYGdhc3AnIHRhYmxlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDctMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA3LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMgYi9zcmMvYmFzZS9mdGdsb2Fkci5jCmluZGV4IDdlMjg2MzguLmM0ZjBmZjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2xvYWRyLmMKKysrIGIvc3JjL2Jhc2UvZnRnbG9hZHIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggbG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZyAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRnbHlwaC5jIGIvc3JjL2Jhc2UvZnRnbHlwaC5jCmluZGV4IDI3Nzg3NDMuLmMyMzc2ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0Z2x5cGguYworKysgYi9zcmMvYmFzZS9mdGdseXBoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGhhbmRsZSBnbHlwaHMgKGJvZHkpLiAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0Z3h2YWwuYyBiL3NyYy9iYXNlL2Z0Z3h2YWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg4NjhmMi4uMDAwMDAwMAotLS0gYS9zcmMvYmFzZS9mdGd4dmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRneHZhbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgdmFsaWRhdGluZyBUcnVlVHllcEdYL0FBVCB0YWJsZXMgKGJvZHkpLiAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBNYXNhdGFrZSBZQU1BVE8sIFJlZGhhdCBLLkssICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogZ3h2YWxpZCBpcyBkZXJpdmVkIGZyb20gYm90aCBneGxheW91dCBtb2R1bGUgYW5kIG90dmFsaWQgbW9kdWxlLiAgICAgICAgKi8KLS8qIERldmVsb3BtZW50IG9mIGd4bGF5b3V0IGlzIHN1cHBvcnRlZCBieSB0aGUgSW5mb3JtYXRpb24tdGVjaG5vbG9neSAgICAgICovCi0vKiBQcm9tb3Rpb24gQWdlbmN5KElQQSksIEphcGFuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9HWF9WQUxJREFURV9ICi0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Z3h2YWwuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRfVHJ1ZVR5cGVHWF9WYWxpZGF0ZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICB2YWxpZGF0aW9uX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgdGFibGVzW0ZUX1ZBTElEQVRFX0dYX0xFTkdUSF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICB0YWJsZV9sZW5ndGggKQotICB7Ci0gICAgRlRfU2VydmljZV9HWHZhbGlkYXRlICBzZXJ2aWNlOwotICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3I7Ci0KLQotICAgIGlmICggIWZhY2UgKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBpZiAoICF0YWJsZXMgKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIEdYX1ZBTElEQVRFICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgKQotICAgICAgZXJyb3IgPSBzZXJ2aWNlLT52YWxpZGF0ZSggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9sZW5ndGggKTsKLSAgICBlbHNlCi0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKLQotICBFeGl0OgotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApCi0gIEZUX1RydWVUeXBlR1hfRnJlZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgIHRhYmxlICkKLSAgewotICAgIEZUX01lbW9yeSAgbWVtb3J5OwotCi0KLSAgICBpZiAoICFmYWNlICkKLSAgICAgIHJldHVybjsKLQotICAgIG1lbW9yeSA9IEZUX0ZBQ0VfTUVNT1JZKCBmYWNlICk7Ci0KLSAgICBGVF9GUkVFKCB0YWJsZSApOwotICB9Ci0KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0NsYXNzaWNLZXJuX1ZhbGlkYXRlKCBGVF9GYWNlICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgIHZhbGlkYXRpb25fZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlcyAgKmNrZXJuX3RhYmxlICkKLSAgewotICAgIEZUX1NlcnZpY2VfQ0tFUk52YWxpZGF0ZSAgc2VydmljZTsKLSAgICBGVF9FcnJvciAgICAgICAgICAgICAgICAgIGVycm9yOwotCi0KLSAgICBpZiAoICFmYWNlICkKLSAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7Ci0gICAgICBnb3RvIEV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKCAhY2tlcm5fdGFibGUgKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIENMQVNTSUNLRVJOX1ZBTElEQVRFICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgKQotICAgICAgZXJyb3IgPSBzZXJ2aWNlLT52YWxpZGF0ZSggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBja2Vybl90YWJsZSApOwotICAgIGVsc2UKLSAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICBGVF9FWFBPUlRfREVGKCB2b2lkICkKLSAgRlRfQ2xhc3NpY0tlcm5fRnJlZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICB0YWJsZSApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeTsKLQotCi0gICAgaWYgKCAhZmFjZSApCi0gICAgICByZXR1cm47Ci0KLSAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOwotCi0KLSAgICBGVF9GUkVFKCB0YWJsZSApOwotICB9Ci0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGhhc2guYyBiL3NyYy9iYXNlL2Z0aGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmM4ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFzZS9mdGhhc2guYwpAQCAtMCwwICsxLDMzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgZnRoYXNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEhhc2hpbmcgZnVuY3Rpb25zIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAyMDAwIENvbXB1dGluZyBSZXNlYXJjaCBMYWJzLCBOZXcgTWV4aWNvIFN0YXRlIFVuaXZlcnNpdHkKKyAqIENvcHlyaWdodCAyMDAxLTIwMTUKKyAqICAgRnJhbmNlc2NvIFphcHBhIE5hcmRlbGxpCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09NUFVUSU5HIFJFU0VBUkNIIExBQiBPUiBORVcgTUVYSUNPIFNUQVRFIFVOSVZFUlNJVFkgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQKKyAqIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUgorICogVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICBUaGlzIGZpbGUgaXMgYmFzZWQgb24gY29kZSBmcm9tIGJkZi5jLHYgMS4yMiAyMDAwLzAzLzE2IDIwOjA4OjUwICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogIHRha2VuIGZyb20gTWFyayBMZWlzaGVyJ3MgeG1iZGZlZCBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KKyNpbmNsdWRlIEZUX0lOVEVSTkFMX0hBU0hfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKKworCisjZGVmaW5lIElOSVRJQUxfSFRfU0laRSAgMjQxCisKKworICBzdGF0aWMgRlRfVUxvbmcKKyAgaGFzaF9zdHJfbG9va3VwKCBGVF9IYXNoa2V5KiAga2V5ICkKKyAgeworICAgIGNvbnN0IGNoYXIqICBrcCAgPSBrZXktPnN0cjsKKyAgICBGVF9VTG9uZyAgICAgcmVzID0gMDsKKworCisgICAgLyogTW9ja2xpc3AgaGFzaCBmdW5jdGlvbi4gKi8KKyAgICB3aGlsZSAoICprcCApCisgICAgICByZXMgPSAoIHJlcyA8PCA1ICkgLSByZXMgKyAoRlRfVUxvbmcpKmtwKys7CisKKyAgICByZXR1cm4gcmVzOworICB9CisKKworICBzdGF0aWMgRlRfVUxvbmcKKyAgaGFzaF9udW1fbG9va3VwKCBGVF9IYXNoa2V5KiAga2V5ICkKKyAgeworICAgIEZUX1VMb25nICBudW0gPSAoRlRfVUxvbmcpa2V5LT5udW07CisgICAgRlRfVUxvbmcgIHJlczsKKworCisgICAgLyogTW9ja2xpc3AgaGFzaCBmdW5jdGlvbi4gKi8KKyAgICByZXMgPSBudW0gJiAweEZGOworICAgIHJlcyA9ICggcmVzIDw8IDUgKSAtIHJlcyArICggKCBudW0gPj4gIDggKSAmIDB4RkYgKTsKKyAgICByZXMgPSAoIHJlcyA8PCA1ICkgLSByZXMgKyAoICggbnVtID4+IDE2ICkgJiAweEZGICk7CisgICAgcmVzID0gKCByZXMgPDwgNSApIC0gcmVzICsgKCAoIG51bSA+PiAyNCApICYgMHhGRiApOworCisgICAgcmV0dXJuIHJlczsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Jvb2wKKyAgaGFzaF9zdHJfY29tcGFyZSggRlRfSGFzaGtleSogIGEsCisgICAgICAgICAgICAgICAgICAgIEZUX0hhc2hrZXkqICBiICkKKyAgeworICAgIGlmICggYS0+c3RyWzBdID09IGItPnN0clswXSAgICAgICAgICAgJiYKKyAgICAgICAgIGZ0X3N0cmNtcCggYS0+c3RyLCBiLT5zdHIgKSA9PSAwICkKKyAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7CisgIH0KKworCisgIHN0YXRpYyBGVF9Cb29sCisgIGhhc2hfbnVtX2NvbXBhcmUoIEZUX0hhc2hrZXkqICBhLAorICAgICAgICAgICAgICAgICAgICBGVF9IYXNoa2V5KiAgYiApCisgIHsKKyAgICBpZiAoIGEtPm51bSA9PSBiLT5udW0gKQorICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0hhc2hub2RlKgorICBoYXNoX2J1Y2tldCggRlRfSGFzaGtleSAga2V5LAorICAgICAgICAgICAgICAgRlRfSGFzaCAgICAgaGFzaCApCisgIHsKKyAgICBGVF9VTG9uZyAgICAgIHJlcyA9IDA7CisgICAgRlRfSGFzaG5vZGUqICBicCAgPSBoYXNoLT50YWJsZTsKKyAgICBGVF9IYXNobm9kZSogIG5kcDsKKworCisgICAgcmVzID0gKGhhc2gtPmxvb2t1cCkoICZrZXkgKTsKKworICAgIG5kcCA9IGJwICsgKCByZXMgJSBoYXNoLT5zaXplICk7CisgICAgd2hpbGUgKCAqbmRwICkKKyAgICB7CisgICAgICBpZiAoIChoYXNoLT5jb21wYXJlKSggJigqbmRwKS0+a2V5LCAma2V5ICkgKQorICAgICAgICBicmVhazsKKworICAgICAgbmRwLS07CisgICAgICBpZiAoIG5kcCA8IGJwICkKKyAgICAgICAgbmRwID0gYnAgKyAoIGhhc2gtPnNpemUgLSAxICk7CisgICAgfQorCisgICAgcmV0dXJuIG5kcDsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGhhc2hfcmVoYXNoKCBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNobm9kZSogIG9icCA9IGhhc2gtPnRhYmxlOworICAgIEZUX0hhc2hub2RlKiAgYnA7CisgICAgRlRfSGFzaG5vZGUqICBuYnA7CisKKyAgICBGVF9VSW50ICAgaSwgc3ogPSBoYXNoLT5zaXplOworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKworCisgICAgaGFzaC0+c2l6ZSA8PD0gMTsKKyAgICBoYXNoLT5saW1pdCAgPSBoYXNoLT5zaXplIC8gMzsKKworICAgIGlmICggRlRfTkVXX0FSUkFZKCBoYXNoLT50YWJsZSwgaGFzaC0+c2l6ZSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIGZvciAoIGkgPSAwLCBicCA9IG9icDsgaSA8IHN6OyBpKyssIGJwKysgKQorICAgIHsKKyAgICAgIGlmICggKmJwICkKKyAgICAgIHsKKyAgICAgICAgbmJwID0gaGFzaF9idWNrZXQoICgqYnApLT5rZXksIGhhc2ggKTsKKyAgICAgICAgKm5icCA9ICpicDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBGVF9GUkVFKCBvYnAgKTsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgc3RhdGljIEZUX0Vycm9yCisgIGhhc2hfaW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgIEZUX0Jvb2wgICAgaXNfbnVtLAorICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIEZUX1VJbnQgICBzeiA9IElOSVRJQUxfSFRfU0laRTsKKyAgICBGVF9FcnJvciAgZXJyb3I7CisKKworICAgIGhhc2gtPnNpemUgID0gc3o7CisgICAgaGFzaC0+bGltaXQgPSBzeiAvIDM7CisgICAgaGFzaC0+dXNlZCAgPSAwOworCisgICAgaWYgKCBpc19udW0gKQorICAgIHsKKyAgICAgIGhhc2gtPmxvb2t1cCAgPSBoYXNoX251bV9sb29rdXA7CisgICAgICBoYXNoLT5jb21wYXJlID0gaGFzaF9udW1fY29tcGFyZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIGhhc2gtPmxvb2t1cCAgPSBoYXNoX3N0cl9sb29rdXA7CisgICAgICBoYXNoLT5jb21wYXJlID0gaGFzaF9zdHJfY29tcGFyZTsKKyAgICB9CisKKyAgICBGVF9NRU1fTkVXX0FSUkFZKCBoYXNoLT50YWJsZSwgc3ogKTsKKworICAgIHJldHVybiBlcnJvcjsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9zdHJfaW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICByZXR1cm4gaGFzaF9pbml0KCBoYXNoLCAwLCBtZW1vcnkgKTsKKyAgfQorCisKKyAgRlRfRXJyb3IKKyAgZnRfaGFzaF9udW1faW5pdCggRlRfSGFzaCAgICBoYXNoLAorICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICByZXR1cm4gaGFzaF9pbml0KCBoYXNoLCAxLCBtZW1vcnkgKTsKKyAgfQorCisKKyAgdm9pZAorICBmdF9oYXNoX3N0cl9mcmVlKCBGVF9IYXNoICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgbWVtb3J5ICkKKyAgeworICAgIGlmICggaGFzaCApCisgICAgeworICAgICAgRlRfVUludCAgICAgICBzeiA9IGhhc2gtPnNpemU7CisgICAgICBGVF9IYXNobm9kZSogIGJwID0gaGFzaC0+dGFibGU7CisgICAgICBGVF9VSW50ICAgICAgIGk7CisKKworICAgICAgZm9yICggaSA9IDA7IGkgPCBzejsgaSsrLCBicCsrICkKKyAgICAgICAgRlRfRlJFRSggKmJwICk7CisKKyAgICAgIEZUX0ZSRUUoIGhhc2gtPnRhYmxlICk7CisgICAgfQorICB9CisKKworICAvKiBgZnRfaGFzaF9udW1fZnJlZScgaXMgdGhlIHNhbWUgYXMgYGZ0X2hhc2hfc3RyX2ZyZWUnICovCisKKworICBzdGF0aWMgRlRfRXJyb3IKKyAgaGFzaF9pbnNlcnQoIEZUX0hhc2hrZXkgIGtleSwKKyAgICAgICAgICAgICAgIHNpemVfdCAgICAgIGRhdGEsCisgICAgICAgICAgICAgICBGVF9IYXNoICAgICBoYXNoLAorICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgbWVtb3J5ICkKKyAgeworICAgIEZUX0hhc2hub2RlICAgbm47CisgICAgRlRfSGFzaG5vZGUqICBicCAgICA9IGhhc2hfYnVja2V0KCBrZXksIGhhc2ggKTsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yID0gRlRfRXJyX09rOworCisKKyAgICBubiA9ICpicDsKKyAgICBpZiAoICFubiApCisgICAgeworICAgICAgaWYgKCBGVF9ORVcoIG5uICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAqYnAgPSBubjsKKworICAgICAgbm4tPmtleSAgPSBrZXk7CisgICAgICBubi0+ZGF0YSA9IGRhdGE7CisKKyAgICAgIGlmICggaGFzaC0+dXNlZCA+PSBoYXNoLT5saW1pdCApCisgICAgICB7CisgICAgICAgIGVycm9yID0gaGFzaF9yZWhhc2goIGhhc2gsIG1lbW9yeSApOworICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICB9CisKKyAgICAgIGhhc2gtPnVzZWQrKzsKKyAgICB9CisgICAgZWxzZQorICAgICAgbm4tPmRhdGEgPSBkYXRhOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9FcnJvcgorICBmdF9oYXNoX3N0cl9pbnNlcnQoIGNvbnN0IGNoYXIqICBrZXksCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgICAgIGhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsuc3RyID0ga2V5OworCisgICAgcmV0dXJuIGhhc2hfaW5zZXJ0KCBoaywgZGF0YSwgaGFzaCwgbWVtb3J5ICk7CisgIH0KKworCisgIEZUX0Vycm9yCisgIGZ0X2hhc2hfbnVtX2luc2VydCggRlRfSW50ICAgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgIG1lbW9yeSApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsubnVtID0gbnVtOworCisgICAgcmV0dXJuIGhhc2hfaW5zZXJ0KCBoaywgZGF0YSwgaGFzaCwgbWVtb3J5ICk7CisgIH0KKworCisgIHN0YXRpYyBzaXplX3QqCisgIGhhc2hfbG9va3VwKCBGVF9IYXNoa2V5ICBrZXksCisgICAgICAgICAgICAgICBGVF9IYXNoICAgICBoYXNoICkKKyAgeworICAgIEZUX0hhc2hub2RlKiAgbnAgPSBoYXNoX2J1Y2tldCgga2V5LCBoYXNoICk7CisKKworICAgIHJldHVybiAoKm5wKSA/ICYoKm5wKS0+ZGF0YQorICAgICAgICAgICAgICAgICA6IE5VTEw7CisgIH0KKworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9zdHJfbG9va3VwKCBjb25zdCBjaGFyKiAga2V5LAorICAgICAgICAgICAgICAgICAgICAgIEZUX0hhc2ggICAgICBoYXNoICkKKyAgeworICAgIEZUX0hhc2hrZXkgIGhrOworCisKKyAgICBoay5zdHIgPSBrZXk7CisKKyAgICByZXR1cm4gaGFzaF9sb29rdXAoIGhrLCBoYXNoICk7CisgIH0KKworCisgIHNpemVfdCoKKyAgZnRfaGFzaF9udW1fbG9va3VwKCBGVF9JbnQgICBudW0sCisgICAgICAgICAgICAgICAgICAgICAgRlRfSGFzaCAgaGFzaCApCisgIHsKKyAgICBGVF9IYXNoa2V5ICBoazsKKworCisgICAgaGsubnVtID0gbnVtOworCisgICAgcmV0dXJuIGhhc2hfbG9va3VwKCBoaywgaGFzaCApOworICB9CisKKworLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGluaXQuYyBiL3NyYy9iYXNlL2Z0aW5pdC5jCmluZGV4IGI2NWE5MWQuLjAyZWY5MzggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0aW5pdC5jCisrKyBiL3NyYy9iYXNlL2Z0aW5pdC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIGluaXRpYWxpemF0aW9uIGxheWVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMjYsNiArMjI2LDExNSBAQAogICB9CiAKIAorI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworCisjZGVmaW5lIE1BWF9MRU5HVEggIDEyOAorCisgIC8qCisgICAqIFNldCBkZWZhdWx0IHByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIHRoZSBgRlJFRVRZUEVfUFJPUEVSVElFUycKKyAgICogZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAqCisgICAqIGBGUkVFVFlQRV9QUk9QRVJUSUVTJyBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggZm9ybSAoYnJva2VuIGhlcmUgaW50bworICAgKiBtdWx0aXBsZSBsaW5lcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KQorICAgKgorICAgKiAgIDxvcHRpb25hbCB3aGl0ZXNwYWNlPgorICAgKiAgIDxtb2R1bGUtbmFtZTE+ICc6JworICAgKiAgIDxwcm9wZXJ0eS1uYW1lMT4gJz0nIDxwcm9wZXJ0eS12YWx1ZTE+CisgICAqICAgPHdoaXRlc3BhY2U+CisgICAqICAgPG1vZHVsZS1uYW1lMj4gJzonCisgICAqICAgPHByb3BlcnR5LW5hbWUyPiAnPScgPHByb3BlcnR5LXZhbHVlMj4KKyAgICogICAuLi4KKyAgICoKKyAgICogRXhhbXBsZToKKyAgICoKKyAgICogICBGUkVFVFlQRV9QUk9QRVJUSUVTPXRydWV0eXBlOmludGVycHJldGVyLXZlcnNpb249MzUgXAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgY2ZmOm5vLXN0ZW0tZGFya2VuaW5nPTEgXAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZpdHRlcjp3YXJwaW5nPTEKKyAgICoKKyAgICovCisKKyAgc3RhdGljIHZvaWQKKyAgZnRfc2V0X2RlZmF1bHRfcHJvcGVydGllcyggRlRfTGlicmFyeSAgbGlicmFyeSApCisgIHsKKyAgICBjb25zdCBjaGFyKiAgZW52OworICAgIGNvbnN0IGNoYXIqICBwOworICAgIGNvbnN0IGNoYXIqICBxOworCisgICAgY2hhciAgbW9kdWxlX25hbWVbTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgIHByb3BlcnR5X25hbWVbTUFYX0xFTkdUSCArIDFdOworICAgIGNoYXIgIHByb3BlcnR5X3ZhbHVlW01BWF9MRU5HVEggKyAxXTsKKworICAgIGludCAgaTsKKworCisgICAgZW52ID0gZnRfZ2V0ZW52KCAiRlJFRVRZUEVfUFJPUEVSVElFUyIgKTsKKyAgICBpZiAoICFlbnYgKQorICAgICAgcmV0dXJuOworCisgICAgZm9yICggcCA9IGVudjsgKnA7IHArKyApCisgICAgeworICAgICAgLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHNlcGFyYXRvcnMgKi8KKyAgICAgIGlmICggKnAgPT0gJyAnIHx8ICpwID09ICdcdCcgKQorICAgICAgICBjb250aW51ZTsKKworICAgICAgLyogcmVhZCBtb2R1bGUgbmFtZSwgZm9sbG93ZWQgYnkgYDonICovCisgICAgICBxID0gcDsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgTUFYX0xFTkdUSDsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgaWYgKCAhKnAgfHwgKnAgPT0gJzonICkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgbW9kdWxlX25hbWVbaV0gPSAqcCsrOworICAgICAgfQorICAgICAgbW9kdWxlX25hbWVbaV0gPSAnXDAnOworCisgICAgICBpZiAoICEqcCB8fCAqcCAhPSAnOicgfHwgcCA9PSBxICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHJlYWQgcHJvcGVydHkgbmFtZSwgZm9sbG93ZWQgYnkgYD0nICovCisgICAgICBxID0gKytwOworICAgICAgZm9yICggaSA9IDA7IGkgPCBNQVhfTEVOR1RIOyBpKysgKQorICAgICAgeworICAgICAgICBpZiAoICEqcCB8fCAqcCA9PSAnPScgKQorICAgICAgICAgIGJyZWFrOworICAgICAgICBwcm9wZXJ0eV9uYW1lW2ldID0gKnArKzsKKyAgICAgIH0KKyAgICAgIHByb3BlcnR5X25hbWVbaV0gPSAnXDAnOworCisgICAgICBpZiAoICEqcCB8fCAqcCAhPSAnPScgfHwgcCA9PSBxICkKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHJlYWQgcHJvcGVydHkgdmFsdWUsIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UgKGlmIGFueSkgKi8KKyAgICAgIHEgPSArK3A7CisgICAgICBmb3IgKCBpID0gMDsgaSA8IE1BWF9MRU5HVEg7IGkrKyApCisgICAgICB7CisgICAgICAgIGlmICggISpwIHx8ICpwID09ICcgJyB8fCAqcCA9PSAnXHQnICkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgcHJvcGVydHlfdmFsdWVbaV0gPSAqcCsrOworICAgICAgfQorICAgICAgcHJvcGVydHlfdmFsdWVbaV0gPSAnXDAnOworCisgICAgICBpZiAoICEoICpwID09ICdcMCcgfHwgKnAgPT0gJyAnIHx8ICpwID09ICdcdCcgKSB8fCBwID09IHEgKQorICAgICAgICBicmVhazsKKworICAgICAgLyogd2UgY29tcGxldGVseSBpZ25vcmUgZXJyb3JzICovCisgICAgICBmdF9wcm9wZXJ0eV9zdHJpbmdfc2V0KCBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfdmFsdWUgKTsKKyAgICB9CisgIH0KKworI2Vsc2UKKworICBzdGF0aWMgdm9pZAorICBmdF9zZXRfZGVmYXVsdF9wcm9wZXJ0aWVzKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5ICkKKyAgeworICAgIEZUX1VOVVNFRCggbGlicmFyeSApOworICB9CisKKyNlbmRpZgorCisKICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQpAQCAtMjU2LDYgKzM2NSw4IEBACiAgICAgZWxzZQogICAgICAgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyggKmFsaWJyYXJ5ICk7CiAKKyAgICBmdF9zZXRfZGVmYXVsdF9wcm9wZXJ0aWVzKCAqYWxpYnJhcnkgKTsKKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdGxjZGZpbC5jIGIvc3JjL2Jhc2UvZnRsY2RmaWwuYwppbmRleCA1ZWU3ZTBhLi44YmNiZWQ3IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdGxjZGZpbC5jCisrKyBiL3NyYy9iYXNlL2Z0bGNkZmlsLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBjb2xvciBmaWx0ZXJpbmcgb2Ygc3VicGl4ZWwgYml0bWFwIGdseXBocyAoYm9keSkuICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTI5Niw2ICsyOTYsOCBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CiAKICAgICBmdF9tZW1jcHkoIGxpYnJhcnktPmxjZF93ZWlnaHRzLCB3ZWlnaHRzLCA1ICk7CisgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfZmlyOworICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDI7CiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC0zMjIsMjUgKzMyNCw5IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgRlRfTENEX0ZJTFRFUl9ERUZBVUxUOgotI2lmIGRlZmluZWQoIEZUX0ZPUkNFX0xFR0FDWV9MQ0RfRklMVEVSICkKLQotICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfbGVnYWN5OwotICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMDsKLQotI2VsaWYgZGVmaW5lZCggRlRfRk9SQ0VfTElHSFRfTENEX0ZJTFRFUiApCi0KLSAgICAgIGZ0X21lbWNweSggbGlicmFyeS0+bGNkX3dlaWdodHMsIGxpZ2h0X2ZpbHRlciwgNSApOwotICAgICAgbGlicmFyeS0+bGNkX2ZpbHRlcl9mdW5jID0gX2Z0X2xjZF9maWx0ZXJfZmlyOwotICAgICAgbGlicmFyeS0+bGNkX2V4dHJhICAgICAgID0gMjsKLQotI2Vsc2UKLQogICAgICAgZnRfbWVtY3B5KCBsaWJyYXJ5LT5sY2Rfd2VpZ2h0cywgZGVmYXVsdF9maWx0ZXIsIDUgKTsKICAgICAgIGxpYnJhcnktPmxjZF9maWx0ZXJfZnVuYyA9IF9mdF9sY2RfZmlsdGVyX2ZpcjsKICAgICAgIGxpYnJhcnktPmxjZF9leHRyYSAgICAgICA9IDI7Ci0KLSNlbmRpZgotCiAgICAgICBicmVhazsKIAogICAgIGNhc2UgRlRfTENEX0ZJTFRFUl9MSUdIVDoKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bWFjLmMgYi9zcmMvYmFzZS9mdG1hYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTRiYmI2Li4wMDAwMDAwCi0tLSBhL3NyYy9iYXNlL2Z0bWFjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0bWFjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBNYWMgRk9ORCBzdXBwb3J0LiAgV3JpdHRlbiBieSBqdXN0QGxldHRlcnJvci5jb20uICAgICAgICAgICAgICAgICAgICAqLwotLyogIEhlYXZpbHkgbW9kaWZpZWQgYnkgbXBzdXp1a2ksIEdlb3JnZSBXaWxsaWFtcywgYW5kIFNlYW4gTWNCcmlkZS4gICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIGZvciBNYWMgT1MgWCBvbmx5OyBzZWUgYnVpbGRzL21hYy9mdG9sZG1hYy5jIGZvciAgICAgICAgICAqLwotLyogIGNsYXNzaWMgcGxhdGZvcm1zIGJ1aWx0IGJ5IE1QVy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIEp1c3QgdmFuIFJvc3N1bSwgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyoKLSAgICBOb3RlcwotCi0gICAgTWFjIHN1aXRjYXNlIGZpbGVzIGNhbiAoYW5kIG9mdGVuIGRvISkgY29udGFpbiBtdWx0aXBsZSBmb250cy4gIFRvCi0gICAgc3VwcG9ydCB0aGlzIEkgdXNlIHRoZSBmYWNlX2luZGV4IGFyZ3VtZW50IG9mIEZUXyhPcGVufE5ldylfRmFjZSgpCi0gICAgZnVuY3Rpb25zLCBhbmQgcHJldGVuZCB0aGUgc3VpdGNhc2UgZmlsZSBpcyBhIGNvbGxlY3Rpb24uCi0KLSAgICBXYXJuaW5nOiBmYml0IGFuZCBORk5UIGJpdG1hcCByZXNvdXJjZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiAgSW4gb2xkCi0gICAgc2ZudCBmb250cywgYml0bWFwIGdseXBoIGRhdGEgZm9yIGVhY2ggc2l6ZSBpcyBzdG9yZWQgaW4gZWFjaCBgTkZOVCcKLSAgICByZXNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgYGJkYXQnIHRhYmxlIGluIHRoZSBzZm50IHJlc291cmNlLiAgVGhlcmVmb3JlLAotICAgIGZhY2UtPm51bV9maXhlZF9zaXplcyBpcyBzZXQgdG8gMCwgYmVjYXVzZSBiaXRtYXAgZGF0YSBpbiBgTkZOVCcKLSAgICByZXNvdXJjZSBpcyB1bmF2YWlsYWJsZSBhdCBwcmVzZW50LgotCi0gICAgVGhlIE1hYyBGT05EIHN1cHBvcnQgd29ya3Mgcm91Z2hseSBsaWtlIHRoaXM6Ci0KLSAgICAtIENoZWNrIHdoZXRoZXIgdGhlIG9mZmVyZWQgc3RyZWFtIHBvaW50cyB0byBhIE1hYyBzdWl0Y2FzZSBmaWxlLiAgVGhpcwotICAgICAgaXMgZG9uZSBieSBjaGVja2luZyB0aGUgZmlsZSB0eXBlOiBpdCBoYXMgdG8gYmUgJ0ZGSUwnIG9yICd0ZmlsJy4gIFRoZQotICAgICAgc3RyZWFtIHRoYXQgZ2V0cyBwYXNzZWQgdG8gb3VyIGluaXRfZmFjZSgpIHJvdXRpbmUgaXMgYSBzdGRpbyBzdHJlYW0sCi0gICAgICB3aGljaCBpc24ndCB1c2FibGUgZm9yIHVzLCBzaW5jZSB0aGUgRk9ORCByZXNvdXJjZXMgbGl2ZSBpbiB0aGUKLSAgICAgIHJlc291cmNlIGZvcmsuICBTbyB3ZSBqdXN0IGdyYWIgdGhlIHN0cmVhbS0+cGF0aG5hbWUgZmllbGQuCi0KLSAgICAtIFJlYWQgdGhlIEZPTkQgcmVzb3VyY2UgaW50byBtZW1vcnksIHRoZW4gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhCi0gICAgICBUcnVlVHlwZSBmb250IGFuZC9vcighKSBhIFR5cGUgMSBmb250IGF2YWlsYWJsZS4KLQotICAgIC0gSWYgdGhlcmUgaXMgYSBUeXBlIDEgZm9udCBhdmFpbGFibGUgKGFzIGEgc2VwYXJhdGUgYExXRk4nIGZpbGUpLCByZWFkCi0gICAgICBpdHMgZGF0YSBpbnRvIG1lbW9yeSwgbWFzc2FnZSBpdCBzbGlnaHRseSBzbyBpdCBiZWNvbWVzIFBGQiBkYXRhLCB3cmFwCi0gICAgICBpdCBpbnRvIGEgbWVtb3J5IHN0cmVhbSwgbG9hZCB0aGUgVHlwZSAxIGRyaXZlciBhbmQgZGVsZWdhdGUgdGhlIHJlc3QKLSAgICAgIG9mIHRoZSB3b3JrIHRvIGl0IGJ5IGNhbGxpbmcgRlRfT3Blbl9GYWNlKCkuICAoWFhYIFRPRE86IGFmdGVyIHRoaXMKLSAgICAgIGhhcyBiZWVuIGRvbmUsIHRoZSBrZXJuaW5nIGRhdGEgZnJvbSB0aGUgRk9ORCByZXNvdXJjZSBzaG91bGQgYmUKLSAgICAgIGFwcGVuZGVkIHRvIHRoZSBmYWNlOiBPbiB0aGUgTWFjIHRoZXJlIGFyZSB1c3VhbGx5IG5vIEFGTSBmaWxlcwotICAgICAgYXZhaWxhYmxlLiAgSG93ZXZlciwgdGhpcyBpcyB0cmlja3kgc2luY2Ugd2UgbmVlZCB0byBtYXAgTWFjIGNoYXIKLSAgICAgIGNvZGVzIHRvIHBzIGdseXBoIG5hbWVzIHRvIGdseXBoIElEJ3MuLi4pCi0KLSAgICAtIElmIHRoZXJlIGlzIGEgVHJ1ZVR5cGUgZm9udCAoYW4gYHNmbnQnIHJlc291cmNlKSwgcmVhZCBpdCBpbnRvIG1lbW9yeSwKLSAgICAgIHdyYXAgaXQgaW50byBhIG1lbW9yeSBzdHJlYW0sIGxvYWQgdGhlIFRydWVUeXBlIGRyaXZlciBhbmQgZGVsZWdhdGUKLSAgICAgIHRoZSByZXN0IG9mIHRoZSB3b3JrIHRvIGl0LCBieSBjYWxsaW5nIEZUX09wZW5fRmFjZSgpLgotCi0gICAgLSBTb21lIHN1aXRjYXNlIGZvbnRzIChub3RhYmx5IE9ueXgpIG1pZ2h0IHBvaW50IHRoZSBgTFdGTicgZmlsZSB0bwotICAgICAgaXRzZWxmLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IGNvbnRhaW5zIGBQT1NUJyByZXNvdXJjZXMuICBUbyBoYW5kbGUKLSAgICAgIHRoaXMgc3BlY2lhbCBjYXNlIHdpdGhvdXQgb3BlbmluZyB0aGUgZmlsZSBhbiBleHRyYSB0aW1lLCB3ZSBqdXN0Ci0gICAgICBpZ25vcmUgZXJyb3JzIGZyb20gdGhlIGBMV0ZOJyBhbmQgZmFsbGJhY2sgdG8gdGhlIGBzZm50JyBpZiBib3RoIGFyZQotICAgICAgYXZhaWxhYmxlLgotICAqLwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfRlJFRVRZUEVfSAotI2luY2x1ZGUgRlRfVFJVRVRZUEVfVEFHU19ICi0jaW5jbHVkZSBGVF9JTlRFUk5BTF9TVFJFQU1fSAotI2luY2x1ZGUgImZ0YmFzZS5oIgotCi0gIC8qIFRoaXMgaXMgZm9yIE1hYyBPUyBYLiAgV2l0aG91dCByZWRlZmluaXRpb24sIE9TX0lOTElORSAqLwotICAvKiBleHBhbmRzIHRvIGBzdGF0aWMgaW5saW5lJyB3aGljaCBkb2Vzbid0IHN1cnZpdmUgdGhlICAgKi8KLSAgLyogLWFuc2kgY29tcGlsYXRpb24gZmxhZyBvZiBHQ0MuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jaWYgIUhBVkVfQU5TSV9PU19JTkxJTkUKLSN1bmRlZiAgT1NfSU5MSU5FCi0jZGVmaW5lIE9TX0lOTElORSAgc3RhdGljIF9faW5saW5lX18KLSNlbmRpZgotCi0gIC8qIGBjb25maWd1cmUnIGNoZWNrcyB0aGUgYXZhaWxhYmlsaXR5IG9mIGBSZXNvdXJjZUluZGV4JyBzdHJpY3RseSAqLwotICAvKiBhbmQgc2V0cyBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggMSBvciAwIGFsd2F5cy4gIElmIGl0IGlzICAgICAgKi8KLSAgLyogbm90IHNldCAoZS5nLiwgYSBidWlsZCB3aXRob3V0IGBjb25maWd1cmUnKSwgdGhlIGF2YWlsYWJpbGl0eSAgICovCi0gIC8qIGlzIGd1ZXNzZWQgZnJvbSB0aGUgU0RLIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2lmbmRlZiBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVgKLSNpZiAhZGVmaW5lZCggTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgfHwgXAotICAgICggTUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IE1BQ19PU19YX1ZFUlNJT05fMTBfNSApCi0jZGVmaW5lIEhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCAwCi0jZWxzZQotI2RlZmluZSBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggMQotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfVFlQRV9SRVNPVVJDRV9JTkRFWCAqLwotCi0jaWYgKCBIQVZFX1RZUEVfUkVTT1VSQ0VfSU5ERVggPT0gMCApCi0gIHR5cGVkZWYgc2hvcnQgIFJlc291cmNlSW5kZXg7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3lzbGltaXRzLmg+IC8qIFBBVEhfTUFYICovCi0KLSAgLyogRG9uJ3Qgd2FudCB3YXJuaW5ncyBhYm91dCBvdXIgb3duIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy4gKi8KLSNkZWZpbmUgRlRfREVQUkVDQVRFRF9BVFRSSUJVVEUKLQotI2luY2x1ZGUgRlRfTUFDX0gKLQotI2lmbmRlZiBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSAvKiBzaW5jZSBNYWMgT1MgWCAxMC4xICovCi0jZGVmaW5lIGtBVFNPcHRpb25GbGFnc1VuUmVzdHJpY3RlZFNjb3BlIGtBVFNPcHRpb25GbGFnc0RlZmF1bHQKLSNlbmRpZgotCi0KLSAgLyogU2V0IFBSRUZFUl9MV0ZOIHRvIDEgaWYgTFdGTiAoVHlwZSAxKSBpcyBwcmVmZXJyZWQgb3ZlcgotICAgICBUcnVlVHlwZSBpbiBjYXNlICpib3RoKiBhcmUgYXZhaWxhYmxlICh0aGlzIGlzIG5vdCBjb21tb24sCi0gICAgIGJ1dCBpdCAqaXMqIHBvc3NpYmxlKS4gKi8KLSNpZm5kZWYgUFJFRkVSX0xXRk4KLSNkZWZpbmUgUFJFRkVSX0xXRk4gIDEKLSNlbmRpZgotCi0KLSNpZmRlZiBGVF9NQUNJTlRPU0gKLQotICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYmVjYXVzZSBGU1NwZWMgaXMgZGVwcmVjYXRlZCBpbiBNYWMgT1MgWCAgKi8KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9HZXRGaWxlX0Zyb21fTWFjX05hbWUoIGNvbnN0IGNoYXIqICBmb250TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyogICAgIGZhY2VfaW5kZXggKQotICB7Ci0gICAgRlRfVU5VU0VEKCBmb250TmFtZSApOwotICAgIEZUX1VOVVNFRCggcGF0aFNwZWMgKTsKLSAgICBGVF9VTlVTRUQoIGZhY2VfaW5kZXggKTsKLQotICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7Ci0gIH0KLQotCi0gIC8qIFByaXZhdGUgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGUgRlNTcGVjIHR5cGUgaGFzIGJlZW4gZGlzY291cmFnZWQgZm9yIGEgbG9uZyB0aW1lLCAgICAgKi8KLSAgLyogdW5mb3J0dW5hdGVseSBhbiBGU1JlZiByZXBsYWNlbWVudCBBUEkgZm9yICAgICAgICAgICAgICAgICovCi0gIC8qIEFUU0ZvbnRHZXRGaWxlU3BlY2lmaWNhdGlvbigpIGlzIG9ubHkgYXZhaWxhYmxlIGluICAgICAgICAqLwotICAvKiBNYWMgT1MgWCAxMC41IGFuZCBsYXRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgc3RhdGljIE9TU3RhdHVzCi0gIEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBBVFNGb250UmVmICBhdHNfZm9udF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZTUmVmKiAgICAgIGF0c19mb250X3JlZiApCi0gIHsKLSNpZiBkZWZpbmVkKCBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKSAmJiBcCi0gICAgKCBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSBNQUNfT1NfWF9WRVJTSU9OXzEwXzUgKQotCi0gICAgT1NTdGF0dXMgIGVycjsKLQotICAgIGVyciA9IEFUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBhdHNfZm9udF9pZCwgYXRzX2ZvbnRfcmVmICk7Ci0KLSAgICByZXR1cm4gZXJyOwotI2VsaWYgX19MUDY0X18gLyogTm8gNjRiaXQgQ2FyYm9uIEFQSSBvbiBsZWdhY3kgcGxhdGZvcm1zICovCi0gICAgRlRfVU5VU0VEKCBhdHNfZm9udF9pZCApOwotICAgIEZUX1VOVVNFRCggYXRzX2ZvbnRfcmVmICk7Ci0KLQotICAgIHJldHVybiBmbmZFcnI7Ci0jZWxzZSAvKiAzMmJpdCBDYXJib24gQVBJIG9uIGxlZ2FjeSBwbGF0Zm9ybXMgKi8KLSAgICBPU1N0YXR1cyAgZXJyOwotICAgIEZTU3BlYyAgICBzcGVjOwotCi0KLSAgICBlcnIgPSBBVFNGb250R2V0RmlsZVNwZWNpZmljYXRpb24oIGF0c19mb250X2lkLCAmc3BlYyApOwotICAgIGlmICggbm9FcnIgPT0gZXJyICkKLSAgICAgIGVyciA9IEZTcE1ha2VGU1JlZiggJnNwZWMsIGF0c19mb250X3JlZiApOwotCi0gICAgcmV0dXJuIGVycjsKLSNlbmRpZgotICB9Ci0KLQotICBzdGF0aWMgRlRfRXJyb3IKLSAgRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1JlZiogICAgICAgYXRzX2ZvbnRfcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCi0gIHsKLSAgICBDRlN0cmluZ1JlZiAgY2ZfZm9udE5hbWU7Ci0gICAgQVRTRm9udFJlZiAgIGF0c19mb250X2lkOwotCi0KLSAgICAqZmFjZV9pbmRleCA9IDA7Ci0KLSAgICBjZl9mb250TmFtZSA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoIE5VTEwsIGZvbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiApOwotICAgIGF0c19mb250X2lkID0gQVRTRm9udEZpbmRGcm9tTmFtZSggY2ZfZm9udE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQVRTT3B0aW9uRmxhZ3NVblJlc3RyaWN0ZWRTY29wZSApOwotICAgIENGUmVsZWFzZSggY2ZfZm9udE5hbWUgKTsKLQotICAgIGlmICggYXRzX2ZvbnRfaWQgPT0gMCB8fCBhdHNfZm9udF9pZCA9PSAweEZGRkZGRkZGVUwgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgICBpZiAoIG5vRXJyICE9IEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBhdHNfZm9udF9pZCwgYXRzX2ZvbnRfcmVmICkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgICAvKiBmYWNlX2luZGV4IGNhbGN1bGF0aW9uIGJ5IHNlYXJjaGluZyBwcmVjZWRpbmcgZm9udElEcyAqLwotICAgIC8qIHdpdGggc2FtZSBGU1JlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgewotICAgICAgQVRTRm9udFJlZiAgaWQyID0gYXRzX2ZvbnRfaWQgLSAxOwotICAgICAgRlNSZWYgICAgICAgcmVmMjsKLQotCi0gICAgICB3aGlsZSAoIGlkMiA+IDAgKQotICAgICAgewotICAgICAgICBpZiAoIG5vRXJyICE9IEZUX0FUU0ZvbnRHZXRGaWxlUmVmZXJlbmNlKCBpZDIsICZyZWYyICkgKQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoIG5vRXJyICE9IEZTQ29tcGFyZUZTUmVmcyggYXRzX2ZvbnRfcmVmLCAmcmVmMiApICkKLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZDIgLS07Ci0gICAgICB9Ci0gICAgICAqZmFjZV9pbmRleCA9IGF0c19mb250X2lkIC0gKCBpZDIgKyAxICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZUX0Vycl9PazsKLSAgfQotCi0KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9HZXRGaWxlUGF0aF9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludDgqICAgICAgIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSW50MzIgICAgICAgbWF4UGF0aFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgZmFjZV9pbmRleCApCi0gIHsKLSAgICBGU1JlZiAgICAgcmVmOwotICAgIEZUX0Vycm9yICBlcnI7Ci0KLQotICAgIGlmICggIWZvbnROYW1lIHx8ICFmYWNlX2luZGV4ICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCkgOwotCi0gICAgZXJyID0gRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggZm9udE5hbWUsICZyZWYsIGZhY2VfaW5kZXggKTsKLSAgICBpZiAoIGVyciApCi0gICAgICByZXR1cm4gZXJyOwotCi0gICAgaWYgKCBub0VyciAhPSBGU1JlZk1ha2VQYXRoKCAmcmVmLCBwYXRoLCBtYXhQYXRoU2l6ZSApICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwotCi0gICAgcmV0dXJuIEZUX0Vycl9PazsKLSAgfQotCi0KLSAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgRlNTcGVjIGlzIGRlcHJlY2F0ZWQgaW4gTWFjIE9TIFggICovCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRfR2V0RmlsZV9Gcm9tX01hY19BVFNfTmFtZSggY29uc3QgY2hhciogIGZvbnROYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGU1NwZWMqICAgICAgcGF0aFNwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICBmYWNlX2luZGV4ICkKLSAgewotI2lmICggX19MUDY0X18gKSB8fCAoIGRlZmluZWQoIE1BQ19PU19YX1ZFUlNJT05fMTBfNSApICYmIFwKLSAgICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgKQotICAgIEZUX1VOVVNFRCggZm9udE5hbWUgKTsKLSAgICBGVF9VTlVTRUQoIHBhdGhTcGVjICk7Ci0gICAgRlRfVU5VU0VEKCBmYWNlX2luZGV4ICk7Ci0KLSAgICByZXR1cm4gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwotI2Vsc2UKLSAgICBGU1JlZiAgICAgcmVmOwotICAgIEZUX0Vycm9yICBlcnI7Ci0KLQotICAgIGlmICggIWZvbnROYW1lIHx8ICFmYWNlX2luZGV4ICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgZXJyID0gRlRfR2V0RmlsZVJlZl9Gcm9tX01hY19BVFNfTmFtZSggZm9udE5hbWUsICZyZWYsIGZhY2VfaW5kZXggKTsKLSAgICBpZiAoIGVyciApCi0gICAgICByZXR1cm4gZXJyOwotCi0gICAgaWYgKCBub0VyciAhPSBGU0dldENhdGFsb2dJbmZvKCAmcmVmLCBrRlNDYXRJbmZvTm9uZSwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhTcGVjLCBOVUxMICkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgICByZXR1cm4gRlRfRXJyX09rOwotI2VuZGlmCi0gIH0KLQotCi0gIHN0YXRpYyBPU0VycgotICBGVF9GU1BhdGhNYWtlUmVzKCBjb25zdCBVSW50OCogICAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIFJlc0ZpbGVSZWZOdW0qICByZXMgKQotICB7Ci0gICAgT1NFcnIgIGVycjsKLSAgICBGU1JlZiAgcmVmOwotCi0KLSAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhuYW1lLCAmcmVmLCBGQUxTRSApICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKLQotICAgIC8qIGF0IHByZXNlbnQsIG5vIHN1cHBvcnQgZm9yIGRmb250IGZvcm1hdCAqLwotICAgIGVyciA9IEZTT3BlblJlc291cmNlRmlsZSggJnJlZiwgMCwgTlVMTCwgZnNSZFBlcm0sIHJlcyApOwotICAgIGlmICggbm9FcnIgPT0gZXJyICkKLSAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAvKiBmYWxsYmFjayB0byBvcmlnaW5hbCByZXNvdXJjZS1mb3JrIGZvbnQgKi8KLSAgICAqcmVzID0gRlNPcGVuUmVzRmlsZSggJnJlZiwgZnNSZFBlcm0gKTsKLSAgICBlcnIgID0gUmVzRXJyb3IoKTsKLQotICAgIHJldHVybiBlcnI7Ci0gIH0KLQotCi0gIC8qIFJldHVybiB0aGUgZmlsZSB0eXBlIGZvciBnaXZlbiBwYXRobmFtZSAqLwotICBzdGF0aWMgT1NUeXBlCi0gIGdldF9maWxlX3R5cGVfZnJvbV9wYXRoKCBjb25zdCBVSW50OCogIHBhdGhuYW1lICkKLSAgewotICAgIEZTUmVmICAgICAgICAgIHJlZjsKLSAgICBGU0NhdGFsb2dJbmZvICBpbmZvOwotCi0KLSAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhuYW1lLCAmcmVmLCBGQUxTRSApICkKLSAgICAgIHJldHVybiAoIE9TVHlwZSApIDA7Ci0KLSAgICBpZiAoIG5vRXJyICE9IEZTR2V0Q2F0YWxvZ0luZm8oICZyZWYsIGtGU0NhdEluZm9GaW5kZXJJbmZvLCAmaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwgKSApCi0gICAgICByZXR1cm4gKCBPU1R5cGUgKSAwOwotCi0gICAgcmV0dXJuICgoRkluZm8gKikoaW5mby5maW5kZXJJbmZvKSktPmZkVHlwZTsKLSAgfQotCi0KLSAgLyogR2l2ZW4gYSBQb3N0U2NyaXB0IGZvbnQgbmFtZSwgY3JlYXRlIHRoZSBNYWNpbnRvc2ggTFdGTiBmaWxlIG5hbWUuICovCi0gIHN0YXRpYyB2b2lkCi0gIGNyZWF0ZV9sd2ZuX25hbWUoIGNoYXIqICAgcHNfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSApCi0gIHsKLSAgICBpbnQgICAgICAgbWF4ID0gNSwgY291bnQgPSAwOwotICAgIEZUX0J5dGUqICBwID0gbHdmbl9maWxlX25hbWU7Ci0gICAgRlRfQnl0ZSogIHEgPSAoRlRfQnl0ZSopcHNfbmFtZTsKLQotCi0gICAgbHdmbl9maWxlX25hbWVbMF0gPSAwOwotCi0gICAgd2hpbGUgKCAqcSApCi0gICAgewotICAgICAgaWYgKCBmdF9pc3VwcGVyKCAqcSApICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCBjb3VudCApCi0gICAgICAgICAgbWF4ID0gMzsKLSAgICAgICAgY291bnQgPSAwOwotICAgICAgfQotICAgICAgaWYgKCBjb3VudCA8IG1heCAmJiAoIGZ0X2lzYWxudW0oICpxICkgfHwgKnEgPT0gJ18nICkgKQotICAgICAgewotICAgICAgICAqKytwID0gKnE7Ci0gICAgICAgIGx3Zm5fZmlsZV9uYW1lWzBdKys7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgICB9Ci0gICAgICBxKys7Ci0gICAgfQotICB9Ci0KLQotICBzdGF0aWMgc2hvcnQKLSAgY291bnRfZmFjZXNfc2ZudCggY2hhciogIGZvbmRfZGF0YSApCi0gIHsKLSAgICAvKiBUaGUgY291bnQgaXMgMSBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIGluIHRoZSBGT05ELiAgKi8KLSAgICAvKiBJc24ndCB0aGF0IGN1dGU/IDotKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotICAgIHJldHVybiBFbmRpYW5TMTZfQnRvTiggKiggKHNob3J0KikoIGZvbmRfZGF0YSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICggRmFtUmVjICkgKSApICkgKyAxOwotICB9Ci0KLQotICBzdGF0aWMgc2hvcnQKLSAgY291bnRfZmFjZXNfc2NhbGFibGUoIGNoYXIqICBmb25kX2RhdGEgKQotICB7Ci0gICAgQXNzY0VudHJ5KiAgYXNzb2M7Ci0gICAgc2hvcnQgICAgICAgaSwgZmFjZSwgZmFjZV9hbGw7Ci0KLQotICAgIGZhY2VfYWxsID0gRW5kaWFuUzE2X0J0b04oICooIChzaG9ydCAqKSggZm9uZF9kYXRhICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoIEZhbVJlYyApICkgKSApICsgMTsKLSAgICBhc3NvYyAgICA9IChBc3NjRW50cnkqKSggZm9uZF9kYXRhICsgc2l6ZW9mICggRmFtUmVjICkgKyAyICk7Ci0gICAgZmFjZSAgICAgPSAwOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBmYWNlX2FsbDsgaSsrICkKLSAgICB7Ci0gICAgICBpZiAoIDAgPT0gRW5kaWFuUzE2X0J0b04oIGFzc29jW2ldLmZvbnRTaXplICkgKQotICAgICAgICBmYWNlKys7Ci0gICAgfQotICAgIHJldHVybiBmYWNlOwotICB9Ci0KLQotICAvKiBMb29rIGluc2lkZSB0aGUgRk9ORCBkYXRhLCBhbnN3ZXIgd2hldGhlciB0aGVyZSBzaG91bGQgYmUgYW4gU0ZOVAotICAgICByZXNvdXJjZSwgYW5kIGFuc3dlciB0aGUgbmFtZSBvZiBhIHBvc3NpYmxlIExXRk4gVHlwZSAxIGZpbGUuCi0KLSAgICAgVGhhbmtzIHRvIFBhdWwgTWlsbGVyIChwYXVsbUBwcm9mb3VuZGVmZmVjdHMuY29tKSBmb3IgdGhlIGZpeAotICAgICB0byBsb2FkIGEgZmFjZSBPVEhFUiB0aGFuIHRoZSBmaXJzdCBvbmUgaW4gdGhlIEZPTkQhCi0gICovCi0KLQotICBzdGF0aWMgdm9pZAotICBwYXJzZV9mb25kKCBjaGFyKiAgIGZvbmRfZGF0YSwKLSAgICAgICAgICAgICAgc2hvcnQqICBoYXZlX3NmbnQsCi0gICAgICAgICAgICAgIFJlc0lEKiAgc2ZudF9pZCwKLSAgICAgICAgICAgICAgU3RyMjU1ICBsd2ZuX2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAgc2hvcnQgICBmYWNlX2luZGV4ICkKLSAgewotICAgIEFzc2NFbnRyeSogIGFzc29jOwotICAgIEFzc2NFbnRyeSogIGJhc2VfYXNzb2M7Ci0gICAgRmFtUmVjKiAgICAgZm9uZDsKLQotCi0gICAgKnNmbnRfaWQgICAgICAgICAgPSAwOwotICAgICpoYXZlX3NmbnQgICAgICAgID0gMDsKLSAgICBsd2ZuX2ZpbGVfbmFtZVswXSA9IDA7Ci0KLSAgICBmb25kICAgICAgID0gKEZhbVJlYyopZm9uZF9kYXRhOwotICAgIGFzc29jICAgICAgPSAoQXNzY0VudHJ5KikoIGZvbmRfZGF0YSArIHNpemVvZiAoIEZhbVJlYyApICsgMiApOwotICAgIGJhc2VfYXNzb2MgPSBhc3NvYzsKLQotICAgIC8qIHRoZSBtYXhpbXVtIGZhY2VzIGluIGEgRk9ORCBpcyA0OCwgc2l6ZSBvZiBTdHlsZVRhYmxlLmluZGV4ZXNbXSAqLwotICAgIGlmICggNDcgPCBmYWNlX2luZGV4ICkKLSAgICAgIHJldHVybjsKLQotICAgIC8qIExldCdzIGRvIGEgbGl0dGxlIHJhbmdlIGNoZWNraW5nIGJlZm9yZSB3ZSBnZXQgdG9vIGV4Y2l0ZWQgaGVyZSAqLwotICAgIGlmICggZmFjZV9pbmRleCA8IGNvdW50X2ZhY2VzX3NmbnQoIGZvbmRfZGF0YSApICkKLSAgICB7Ci0gICAgICBhc3NvYyArPSBmYWNlX2luZGV4OyAgICAgICAgLyogYWRkIG9uIHRoZSBmYWNlX2luZGV4ISAqLwotCi0gICAgICAvKiBpZiB0aGUgZmFjZSBhdCB0aGlzIGluZGV4IGlzIG5vdCBzY2FsYWJsZSwKLSAgICAgICAgIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgb25lIChvbGQgYmVoYXZpb3IpICovCi0gICAgICBpZiAoIEVuZGlhblMxNl9CdG9OKCBhc3NvYy0+Zm9udFNpemUgKSA9PSAwICkKLSAgICAgIHsKLSAgICAgICAgKmhhdmVfc2ZudCA9IDE7Ci0gICAgICAgICpzZm50X2lkICAgPSBFbmRpYW5TMTZfQnRvTiggYXNzb2MtPmZvbnRJRCApOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoIGJhc2VfYXNzb2MtPmZvbnRTaXplID09IDAgKQotICAgICAgewotICAgICAgICAqaGF2ZV9zZm50ID0gMTsKLSAgICAgICAgKnNmbnRfaWQgICA9IEVuZGlhblMxNl9CdG9OKCBiYXNlX2Fzc29jLT5mb250SUQgKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIEVuZGlhblMzMl9CdG9OKCBmb25kLT5mZlN0eWxPZmYgKSApCi0gICAgewotICAgICAgdW5zaWduZWQgY2hhciogIHAgPSAodW5zaWduZWQgY2hhciopZm9uZF9kYXRhOwotICAgICAgU3R5bGVUYWJsZSogICAgIHN0eWxlOwotICAgICAgdW5zaWduZWQgc2hvcnQgIHN0cmluZ19jb3VudDsKLSAgICAgIGNoYXIgICAgICAgICAgICBwc19uYW1lWzI1Nl07Ci0gICAgICB1bnNpZ25lZCBjaGFyKiAgbmFtZXNbNjRdOwotICAgICAgaW50ICAgICAgICAgICAgIGk7Ci0KLQotICAgICAgcCArPSBFbmRpYW5TMzJfQnRvTiggZm9uZC0+ZmZTdHlsT2ZmICk7Ci0gICAgICBzdHlsZSA9IChTdHlsZVRhYmxlKilwOwotICAgICAgcCArPSBzaXplb2YgKCBTdHlsZVRhYmxlICk7Ci0gICAgICBzdHJpbmdfY291bnQgPSBFbmRpYW5TMTZfQnRvTiggKihzaG9ydCopKHApICk7Ci0gICAgICBzdHJpbmdfY291bnQgPSBGVF9NSU4oIDY0LCBzdHJpbmdfY291bnQgKTsKLSAgICAgIHAgKz0gc2l6ZW9mICggc2hvcnQgKTsKLQotICAgICAgZm9yICggaSA9IDA7IGkgPCBzdHJpbmdfY291bnQ7IGkrKyApCi0gICAgICB7Ci0gICAgICAgIG5hbWVzW2ldID0gcDsKLSAgICAgICAgcCAgICAgICArPSBuYW1lc1tpXVswXTsKLSAgICAgICAgcCsrOwotICAgICAgfQotCi0gICAgICB7Ci0gICAgICAgIHNpemVfdCAgcHNfbmFtZV9sZW4gPSAoc2l6ZV90KW5hbWVzWzBdWzBdOwotCi0KLSAgICAgICAgaWYgKCBwc19uYW1lX2xlbiAhPSAwICkKLSAgICAgICAgewotICAgICAgICAgIGZ0X21lbWNweShwc19uYW1lLCBuYW1lc1swXSArIDEsIHBzX25hbWVfbGVuKTsKLSAgICAgICAgICBwc19uYW1lW3BzX25hbWVfbGVuXSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA+IDEgJiYKLSAgICAgICAgICAgICBzdHlsZS0+aW5kZXhlc1tmYWNlX2luZGV4XSA8PSBzdHJpbmdfY291bnQgKQotICAgICAgICB7Ci0gICAgICAgICAgdW5zaWduZWQgY2hhciogIHN1ZmZpeGVzID0gbmFtZXNbc3R5bGUtPmluZGV4ZXNbZmFjZV9pbmRleF0gLSAxXTsKLQotCi0gICAgICAgICAgZm9yICggaSA9IDE7IGkgPD0gc3VmZml4ZXNbMF07IGkrKyApCi0gICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIHM7Ci0gICAgICAgICAgICBzaXplX3QgICAgICAgICAgaiA9IHN1ZmZpeGVzW2ldIC0gMTsKLQotCi0gICAgICAgICAgICBpZiAoIGogPCBzdHJpbmdfY291bnQgJiYgKCBzID0gbmFtZXNbal0gKSAhPSBOVUxMICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgc2l6ZV90ICBzX2xlbiA9IChzaXplX3Qpc1swXTsKLQotCi0gICAgICAgICAgICAgIGlmICggc19sZW4gIT0gMCAmJiBwc19uYW1lX2xlbiArIHNfbGVuIDwgc2l6ZW9mICggcHNfbmFtZSApICkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZ0X21lbWNweSggcHNfbmFtZSArIHBzX25hbWVfbGVuLCBzICsgMSwgc19sZW4gKTsKLSAgICAgICAgICAgICAgICBwc19uYW1lX2xlbiArPSBzX2xlbjsKLSAgICAgICAgICAgICAgICBwc19uYW1lW3BzX25hbWVfbGVuXSA9IDA7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgY3JlYXRlX2x3Zm5fbmFtZSggcHNfbmFtZSwgbHdmbl9maWxlX25hbWUgKTsKLSAgICB9Ci0gIH0KLQotCi0gIHN0YXRpYyAgRlRfRXJyb3IKLSAgbG9va3VwX2x3Zm5fYnlfZm9uZCggY29uc3QgVUludDgqICAgICAgcGF0aF9mb25kLAotICAgICAgICAgICAgICAgICAgICAgICBDb25zdFN0cjI1NVBhcmFtICBiYXNlX2x3Zm4sCi0gICAgICAgICAgICAgICAgICAgICAgIFVJbnQ4KiAgICAgICAgICAgIHBhdGhfbHdmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgICAgcGF0aF9zaXplICkKLSAgewotICAgIEZTUmVmICAgcmVmLCBwYXJfcmVmOwotICAgIHNpemVfdCAgZGlybmFtZV9sZW47Ci0KLQotICAgIC8qIFBhdGhuYW1lIGZvciBGU1JlZiBjYW4gYmUgaW4gdmFyaW91cyBmb3JtYXRzOiBIRlMsIEhGUyssIGFuZCBQT1NJWC4gKi8KLSAgICAvKiBXZSBzaG91bGQgbm90IGV4dHJhY3QgcGFyZW50IGRpcmVjdG9yeSBieSBzdHJpbmcgbWFuaXB1bGF0aW9uLiAgICAgICovCi0KLSAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhfZm9uZCwgJnJlZiwgRkFMU0UgKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIGlmICggbm9FcnIgIT0gRlNHZXRDYXRhbG9nSW5mbyggJnJlZiwga0ZTQ2F0SW5mb05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmcGFyX3JlZiApICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgaWYgKCBub0VyciAhPSBGU1JlZk1ha2VQYXRoKCAmcGFyX3JlZiwgcGF0aF9sd2ZuLCBwYXRoX3NpemUgKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIGlmICggZnRfc3RybGVuKCAoY2hhciAqKXBhdGhfbHdmbiApICsgMSArIGJhc2VfbHdmblswXSA+IHBhdGhfc2l6ZSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIC8qIG5vdyB3ZSBoYXZlIGFic29sdXRlIGRpcm5hbWUgaW4gcGF0aF9sd2ZuICovCi0gICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgIi8iICk7Ci0gICAgZGlybmFtZV9sZW4gPSBmdF9zdHJsZW4oIChjaGFyICopcGF0aF9sd2ZuICk7Ci0gICAgZnRfc3RyY2F0KCAoY2hhciAqKXBhdGhfbHdmbiwgKGNoYXIgKiliYXNlX2x3Zm4gKyAxICk7Ci0gICAgcGF0aF9sd2ZuW2Rpcm5hbWVfbGVuICsgYmFzZV9sd2ZuWzBdXSA9ICdcMCc7Ci0KLSAgICBpZiAoIG5vRXJyICE9IEZTUGF0aE1ha2VSZWYoIHBhdGhfbHdmbiwgJnJlZiwgRkFMU0UgKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7Ci0KLSAgICBpZiAoIG5vRXJyICE9IEZTR2V0Q2F0YWxvZ0luZm8oICZyZWYsIGtGU0NhdEluZm9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCApICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKLQotICAgIHJldHVybiBGVF9FcnJfT2s7Ci0gIH0KLQotCi0gIHN0YXRpYyBzaG9ydAotICBjb3VudF9mYWNlcyggSGFuZGxlICAgICAgICBmb25kLAotICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSApCi0gIHsKLSAgICBSZXNJRCAgICAgc2ZudF9pZDsKLSAgICBzaG9ydCAgICAgaGF2ZV9zZm50LCBoYXZlX2x3Zm47Ci0gICAgU3RyMjU1ICAgIGx3Zm5fZmlsZV9uYW1lOwotICAgIFVJbnQ4ICAgICBidWZmW1BBVEhfTUFYXTsKLSAgICBGVF9FcnJvciAgZXJyOwotICAgIHNob3J0ICAgICBudW1fZmFjZXM7Ci0KLQotICAgIGhhdmVfc2ZudCA9IGhhdmVfbHdmbiA9IDA7Ci0KLSAgICBwYXJzZV9mb25kKCAqZm9uZCwgJmhhdmVfc2ZudCwgJnNmbnRfaWQsIGx3Zm5fZmlsZV9uYW1lLCAwICk7Ci0KLSAgICBpZiAoIGx3Zm5fZmlsZV9uYW1lWzBdICkKLSAgICB7Ci0gICAgICBlcnIgPSBsb29rdXBfbHdmbl9ieV9mb25kKCBwYXRobmFtZSwgbHdmbl9maWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmLCBzaXplb2YgKCBidWZmICkgICk7Ci0gICAgICBpZiAoICFlcnIgKQotICAgICAgICBoYXZlX2x3Zm4gPSAxOwotICAgIH0KLQotICAgIGlmICggaGF2ZV9sd2ZuICYmICggIWhhdmVfc2ZudCB8fCBQUkVGRVJfTFdGTiApICkKLSAgICAgIG51bV9mYWNlcyA9IDE7Ci0gICAgZWxzZQotICAgICAgbnVtX2ZhY2VzID0gY291bnRfZmFjZXNfc2NhbGFibGUoICpmb25kICk7Ci0KLSAgICByZXR1cm4gbnVtX2ZhY2VzOwotICB9Ci0KLQotICAvKiBSZWFkIFR5cGUgMSBkYXRhIGZyb20gdGhlIFBPU1QgcmVzb3VyY2VzIGluc2lkZSB0aGUgTFdGTiBmaWxlLAotICAgICByZXR1cm4gYSBQRkIgYnVmZmVyLiAgVGhpcyBpcyBzb21ld2hhdCBjb252b2x1dGVkIGJlY2F1c2UgdGhlIEZUMgotICAgICBQRkIgcGFyc2VyIHdhbnRzIHRoZSBBU0NJSSBoZWFkZXIgYXMgb25lIGNodW5rLCBhbmQgdGhlIExXRk4KLSAgICAgY2h1bmtzIGFyZSBvZnRlbiBub3Qgb3JnYW5pemVkIHRoYXQgd2F5LCBzbyB3ZSBnbHVlIGNodW5rcwotICAgICBvZiB0aGUgc2FtZSB0eXBlIHRvZ2V0aGVyLiAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgcmVhZF9sd2ZuKCBGVF9NZW1vcnkgICAgICBtZW1vcnksCi0gICAgICAgICAgICAgUmVzRmlsZVJlZk51bSAgcmVzLAotICAgICAgICAgICAgIEZUX0J5dGUqKiAgICAgIHBmYl9kYXRhLAotICAgICAgICAgICAgIEZUX1VMb25nKiAgICAgIHNpemUgKQotICB7Ci0gICAgRlRfRXJyb3IgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7Ci0gICAgUmVzSUQgICAgICAgICAgcmVzX2lkOwotICAgIHVuc2lnbmVkIGNoYXIgICpidWZmZXIsICpwLCAqc2l6ZV9wID0gTlVMTDsKLSAgICBGVF9VTG9uZyAgICAgICB0b3RhbF9zaXplID0gMDsKLSAgICBGVF9VTG9uZyAgICAgICBvbGRfdG90YWxfc2l6ZSA9IDA7Ci0gICAgRlRfVUxvbmcgICAgICAgcG9zdF9zaXplLCBwZmJfY2h1bmtfc2l6ZTsKLSAgICBIYW5kbGUgICAgICAgICBwb3N0X2RhdGE7Ci0gICAgY2hhciAgICAgICAgICAgY29kZSwgbGFzdF9jb2RlOwotCi0KLSAgICBVc2VSZXNGaWxlKCByZXMgKTsKLQotICAgIC8qIEZpcnN0IHBhc3M6IGxvYWQgYWxsIFBPU1QgcmVzb3VyY2VzLCBhbmQgZGV0ZXJtaW5lIHRoZSBzaXplIG9mICovCi0gICAgLyogdGhlIG91dHB1dCBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICByZXNfaWQgICAgPSA1MDE7Ci0gICAgbGFzdF9jb2RlID0gLTE7Ci0KLSAgICBmb3IgKDs7KQotICAgIHsKLSAgICAgIHBvc3RfZGF0YSA9IEdldDFSZXNvdXJjZSggVFRBR19QT1NULCByZXNfaWQrKyApOwotICAgICAgaWYgKCBwb3N0X2RhdGEgPT0gTlVMTCApCi0gICAgICAgIGJyZWFrOyAgLyogd2UgYXJlIGRvbmUgKi8KLQotICAgICAgY29kZSA9ICgqcG9zdF9kYXRhKVswXTsKLQotICAgICAgaWYgKCBjb2RlICE9IGxhc3RfY29kZSApCi0gICAgICB7Ci0gICAgICAgIGlmICggY29kZSA9PSA1ICkKLSAgICAgICAgICB0b3RhbF9zaXplICs9IDI7IC8qIGp1c3QgdGhlIGVuZCBjb2RlICovCi0gICAgICAgIGVsc2UKLSAgICAgICAgICB0b3RhbF9zaXplICs9IDY7IC8qIGNvZGUgKyA0IGJ5dGVzIGNodW5rIGxlbmd0aCAqLwotICAgICAgfQotCi0gICAgICB0b3RhbF9zaXplICs9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBwb3N0X2RhdGEgKSAtIDI7Ci0gICAgICBsYXN0X2NvZGUgPSBjb2RlOwotCi0gICAgICAvKiBkZXRlY3QgcmVzb3VyY2UgZm9yayBvdmVyZmxvdyAqLwotICAgICAgaWYgKCBGVF9NQUNfUkZPUktfTUFYX0xFTiA8IHRvdGFsX3NpemUgKQotICAgICAgewotICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKLSAgICAgICAgZ290byBFcnJvcjsKLSAgICAgIH0KLQotICAgICAgb2xkX3RvdGFsX3NpemUgPSB0b3RhbF9zaXplOwotICAgIH0KLQotICAgIGlmICggRlRfQUxMT0MoIGJ1ZmZlciwgKEZUX0xvbmcpdG90YWxfc2l6ZSApICkKLSAgICAgIGdvdG8gRXJyb3I7Ci0KLSAgICAvKiBTZWNvbmQgcGFzczogYXBwZW5kIGFsbCBQT1NUIGRhdGEgdG8gdGhlIGJ1ZmZlciwgYWRkIFBGQiBmaWVsZHMuICovCi0gICAgLyogR2x1ZSBhbGwgY29uc2VjdXRpdmUgY2h1bmtzIG9mIHRoZSBzYW1lIHR5cGUgdG9nZXRoZXIuICAgICAgICAgICAqLwotICAgIHAgICAgICAgICAgICAgID0gYnVmZmVyOwotICAgIHJlc19pZCAgICAgICAgID0gNTAxOwotICAgIGxhc3RfY29kZSAgICAgID0gLTE7Ci0gICAgcGZiX2NodW5rX3NpemUgPSAwOwotCi0gICAgZm9yICg7OykKLSAgICB7Ci0gICAgICBwb3N0X2RhdGEgPSBHZXQxUmVzb3VyY2UoIFRUQUdfUE9TVCwgcmVzX2lkKysgKTsKLSAgICAgIGlmICggcG9zdF9kYXRhID09IE5VTEwgKQotICAgICAgICBicmVhazsgIC8qIHdlIGFyZSBkb25lICovCi0KLSAgICAgIHBvc3Rfc2l6ZSA9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBwb3N0X2RhdGEgKSAtIDI7Ci0gICAgICBjb2RlID0gKCpwb3N0X2RhdGEpWzBdOwotCi0gICAgICBpZiAoIGNvZGUgIT0gbGFzdF9jb2RlICkKLSAgICAgIHsKLSAgICAgICAgaWYgKCBsYXN0X2NvZGUgIT0gLTEgKQotICAgICAgICB7Ci0gICAgICAgICAgLyogd2UgYXJlIGRvbmUgYWRkaW5nIGEgY2h1bmssIGZpbGwgaW4gdGhlIHNpemUgZmllbGQgKi8KLSAgICAgICAgICBpZiAoIHNpemVfcCAhPSBOVUxMICkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAqc2l6ZV9wKysgPSAoRlRfQnl0ZSkoICAgcGZiX2NodW5rX3NpemUgICAgICAgICAmIDB4RkYgKTsKLSAgICAgICAgICAgICpzaXplX3ArKyA9IChGVF9CeXRlKSggKCBwZmJfY2h1bmtfc2l6ZSA+PiA4ICApICYgMHhGRiApOwotICAgICAgICAgICAgKnNpemVfcCsrID0gKEZUX0J5dGUpKCAoIHBmYl9jaHVua19zaXplID4+IDE2ICkgJiAweEZGICk7Ci0gICAgICAgICAgICAqc2l6ZV9wKysgPSAoRlRfQnl0ZSkoICggcGZiX2NodW5rX3NpemUgPj4gMjQgKSAmIDB4RkYgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcGZiX2NodW5rX3NpemUgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgKnArKyA9IDB4ODA7Ci0gICAgICAgIGlmICggY29kZSA9PSA1ICkKLSAgICAgICAgICAqcCsrID0gMHgwMzsgIC8qIHRoZSBlbmQgKi8KLSAgICAgICAgZWxzZSBpZiAoIGNvZGUgPT0gMiApCi0gICAgICAgICAgKnArKyA9IDB4MDI7ICAvKiBiaW5hcnkgc2VnbWVudCAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgKnArKyA9IDB4MDE7ICAvKiBBU0NJSSBzZWdtZW50ICovCi0KLSAgICAgICAgaWYgKCBjb2RlICE9IDUgKQotICAgICAgICB7Ci0gICAgICAgICAgc2l6ZV9wID0gcDsgICAvKiBzYXZlIGZvciBsYXRlciAqLwotICAgICAgICAgIHAgKz0gNDsgICAgICAgLyogbWFrZSBzcGFjZSBmb3Igc2l6ZSBmaWVsZCAqLwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGZ0X21lbWNweSggcCwgKnBvc3RfZGF0YSArIDIsIHBvc3Rfc2l6ZSApOwotICAgICAgcGZiX2NodW5rX3NpemUgKz0gcG9zdF9zaXplOwotICAgICAgcCArPSBwb3N0X3NpemU7Ci0gICAgICBsYXN0X2NvZGUgPSBjb2RlOwotICAgIH0KLQotICAgICpwZmJfZGF0YSA9IGJ1ZmZlcjsKLSAgICAqc2l6ZSA9IHRvdGFsX3NpemU7Ci0KLSAgRXJyb3I6Ci0gICAgQ2xvc2VSZXNGaWxlKCByZXMgKTsKLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIC8qIENyZWF0ZSBhIG5ldyBGVF9GYWNlIGZyb20gYSBmaWxlIHBhdGggdG8gYW4gTFdGTiBmaWxlLiAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgRlRfTmV3X0ZhY2VfRnJvbV9MV0ZOKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUludDgqICBwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCi0gIHsKLSAgICBGVF9CeXRlKiAgICAgICBwZmJfZGF0YTsKLSAgICBGVF9VTG9uZyAgICAgICBwZmJfc2l6ZTsKLSAgICBGVF9FcnJvciAgICAgICBlcnJvcjsKLSAgICBSZXNGaWxlUmVmTnVtICByZXM7Ci0KLQotICAgIGlmICggbm9FcnIgIT0gRlRfRlNQYXRoTWFrZVJlcyggcGF0aG5hbWUsICZyZXMgKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7Ci0KLSAgICBwZmJfZGF0YSA9IE5VTEw7Ci0gICAgcGZiX3NpemUgPSAwOwotICAgIGVycm9yID0gcmVhZF9sd2ZuKCBsaWJyYXJ5LT5tZW1vcnksIHJlcywgJnBmYl9kYXRhLCAmcGZiX3NpemUgKTsKLSAgICBDbG9zZVJlc0ZpbGUoIHJlcyApOyAvKiBQRkIgaXMgYWxyZWFkeSBsb2FkZWQsIHVzZWxlc3MgYW55bW9yZSAqLwotICAgIGlmICggZXJyb3IgKQotICAgICAgcmV0dXJuIGVycm9yOwotCi0gICAgcmV0dXJuIG9wZW5fZmFjZV9mcm9tX2J1ZmZlciggbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKLSAgfQotCi0KLSAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZnJvbSBhbiBTRk5UIHJlc291cmNlLCBzcGVjaWZpZWQgYnkgcmVzIElELiAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKCBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgIFJlc0lEICAgICAgIHNmbnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlKiAgICBhZmFjZSApCi0gIHsKLSAgICBIYW5kbGUgICAgIHNmbnQgPSBOVUxMOwotICAgIEZUX0J5dGUqICAgc2ZudF9kYXRhOwotICAgIHNpemVfdCAgICAgc2ZudF9zaXplOwotICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOwotICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OwotICAgIGludCAgICAgICAgaXNfY2ZmLCBpc19zZm50X3BzOwotCi0KLSAgICBzZm50ID0gR2V0UmVzb3VyY2UoIFRUQUdfc2ZudCwgc2ZudF9pZCApOwotICAgIGlmICggc2ZudCA9PSBOVUxMICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9IYW5kbGUgKTsKLQotICAgIHNmbnRfc2l6ZSA9IChGVF9VTG9uZylHZXRIYW5kbGVTaXplKCBzZm50ICk7Ci0KLSAgICAvKiBkZXRlY3QgcmVzb3VyY2UgZm9yayBvdmVyZmxvdyAqLwotICAgIGlmICggRlRfTUFDX1JGT1JLX01BWF9MRU4gPCBzZm50X3NpemUgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBBcnJheV9Ub29fTGFyZ2UgKTsKLQotICAgIGlmICggRlRfQUxMT0MoIHNmbnRfZGF0YSwgKEZUX0xvbmcpc2ZudF9zaXplICkgKQotICAgIHsKLSAgICAgIFJlbGVhc2VSZXNvdXJjZSggc2ZudCApOwotICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotICAgIGZ0X21lbWNweSggc2ZudF9kYXRhLCAqc2ZudCwgc2ZudF9zaXplICk7Ci0gICAgUmVsZWFzZVJlc291cmNlKCBzZm50ICk7Ci0KLSAgICBpc19jZmYgICAgID0gc2ZudF9zaXplID4gNCAmJiAhZnRfbWVtY21wKCBzZm50X2RhdGEsICJPVFRPIiwgNCApOwotICAgIGlzX3NmbnRfcHMgPSBzZm50X3NpemUgPiA0ICYmICFmdF9tZW1jbXAoIHNmbnRfZGF0YSwgInR5cDEiLCA0ICk7Ci0KLSAgICBpZiAoIGlzX3NmbnRfcHMgKQotICAgIHsKLSAgICAgIEZUX1N0cmVhbSAgc3RyZWFtOwotCi0KLSAgICAgIGlmICggRlRfTkVXKCBzdHJlYW0gKSApCi0gICAgICAgIGdvdG8gVHJ5X09wZW5UeXBlOwotCi0gICAgICBGVF9TdHJlYW1fT3Blbk1lbW9yeSggc3RyZWFtLCBzZm50X2RhdGEsIHNmbnRfc2l6ZSApOwotICAgICAgaWYgKCAhb3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW0oIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApICkKLSAgICAgIHsKLSAgICAgICAgRlRfU3RyZWFtX0Nsb3NlKCBzdHJlYW0gKTsKLSAgICAgICAgRlRfRlJFRSggc3RyZWFtICk7Ci0gICAgICAgIEZUX0ZSRUUoIHNmbnRfZGF0YSApOwotICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgICB9Ci0KLSAgICAgIEZUX0ZSRUUoIHN0cmVhbSApOwotICAgIH0KLSAgVHJ5X09wZW5UeXBlOgotICAgIGVycm9yID0gb3Blbl9mYWNlX2Zyb21fYnVmZmVyKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfY2ZmID8gImNmZiIgOiAidHJ1ZXR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOwotICBFeGl0OgotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyogQ3JlYXRlIGEgbmV3IEZUX0ZhY2UgZnJvbSBhIGZpbGUgcGF0aCB0byBhIHN1aXRjYXNlIGZpbGUuICovCi0gIHN0YXRpYyBGVF9FcnJvcgotICBGVF9OZXdfRmFjZV9Gcm9tX1N1aXRjYXNlKCBGVF9MaWJyYXJ5ICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgICBlcnJvciA9IEZUX0VSUiggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKLSAgICBSZXNGaWxlUmVmTnVtICByZXNfcmVmOwotICAgIFJlc291cmNlSW5kZXggIHJlc19pbmRleDsKLSAgICBIYW5kbGUgICAgICAgICBmb25kOwotICAgIHNob3J0ICAgICAgICAgIG51bV9mYWNlc19pbl9yZXM7Ci0KLQotICAgIGlmICggbm9FcnIgIT0gRlRfRlNQYXRoTWFrZVJlcyggcGF0aG5hbWUsICZyZXNfcmVmICkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDYW5ub3RfT3Blbl9SZXNvdXJjZSApOwotCi0gICAgVXNlUmVzRmlsZSggcmVzX3JlZiApOwotICAgIGlmICggUmVzRXJyb3IoKSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7Ci0KLSAgICBudW1fZmFjZXNfaW5fcmVzID0gMDsKLSAgICBmb3IgKCByZXNfaW5kZXggPSAxOyA7ICsrcmVzX2luZGV4ICkKLSAgICB7Ci0gICAgICBzaG9ydCAgbnVtX2ZhY2VzX2luX2ZvbmQ7Ci0KLQotICAgICAgZm9uZCA9IEdldDFJbmRSZXNvdXJjZSggVFRBR19GT05ELCByZXNfaW5kZXggKTsKLSAgICAgIGlmICggUmVzRXJyb3IoKSApCi0gICAgICAgIGJyZWFrOwotCi0gICAgICBudW1fZmFjZXNfaW5fZm9uZCAgPSBjb3VudF9mYWNlcyggZm9uZCwgcGF0aG5hbWUgKTsKLSAgICAgIG51bV9mYWNlc19pbl9yZXMgICs9IG51bV9mYWNlc19pbl9mb25kOwotCi0gICAgICBpZiAoIDAgPD0gZmFjZV9pbmRleCAmJiBmYWNlX2luZGV4IDwgbnVtX2ZhY2VzX2luX2ZvbmQgJiYgZXJyb3IgKQotICAgICAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fRk9ORCggbGlicmFyeSwgZm9uZCwgZmFjZV9pbmRleCwgYWZhY2UgKTsKLQotICAgICAgZmFjZV9pbmRleCAtPSBudW1fZmFjZXNfaW5fZm9uZDsKLSAgICB9Ci0KLSAgICBDbG9zZVJlc0ZpbGUoIHJlc19yZWYgKTsKLSAgICBpZiAoICFlcnJvciAmJiBhZmFjZSAmJiAqYWZhY2UgKQotICAgICAgKCphZmFjZSktPm51bV9mYWNlcyA9IG51bV9mYWNlc19pbl9yZXM7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0bWFjLmggKi8KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX05ld19GYWNlX0Zyb21fRk9ORCggRlRfTGlicmFyeSAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGUgICAgICBmb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgYWZhY2UgKQotICB7Ci0gICAgc2hvcnQgICAgIGhhdmVfc2ZudCwgaGF2ZV9sd2ZuID0gMDsKLSAgICBSZXNJRCAgICAgc2ZudF9pZCwgZm9uZF9pZDsKLSAgICBPU1R5cGUgICAgZm9uZF90eXBlOwotICAgIFN0cjI1NSAgICBmb25kX25hbWU7Ci0gICAgU3RyMjU1ICAgIGx3Zm5fZmlsZV9uYW1lOwotICAgIFVJbnQ4ICAgICBwYXRoX2x3Zm5bUEFUSF9NQVhdOwotICAgIE9TRXJyICAgICBlcnI7Ci0gICAgRlRfRXJyb3IgIGVycm9yID0gRlRfRXJyX09rOwotCi0KLSAgICAvKiBjaGVjayBvZiBgbGlicmFyeScgYW5kIGBhZmFjZScgZGVsYXllZCB0byBgRlRfTmV3X0ZhY2VfRnJvbV9YWFgnICovCi0KLSAgICBHZXRSZXNJbmZvKCBmb25kLCAmZm9uZF9pZCwgJmZvbmRfdHlwZSwgZm9uZF9uYW1lICk7Ci0gICAgaWYgKCBSZXNFcnJvcigpICE9IG5vRXJyIHx8IGZvbmRfdHlwZSAhPSBUVEFHX0ZPTkQgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgICBwYXJzZV9mb25kKCAqZm9uZCwgJmhhdmVfc2ZudCwgJnNmbnRfaWQsIGx3Zm5fZmlsZV9uYW1lLCBmYWNlX2luZGV4ICk7Ci0KLSAgICBpZiAoIGx3Zm5fZmlsZV9uYW1lWzBdICkKLSAgICB7Ci0gICAgICBSZXNGaWxlUmVmTnVtICByZXM7Ci0KLQotICAgICAgcmVzID0gSG9tZVJlc0ZpbGUoIGZvbmQgKTsKLSAgICAgIGlmICggbm9FcnIgIT0gUmVzRXJyb3IoKSApCi0gICAgICAgIGdvdG8gZm91bmRfbm9fbHdmbl9maWxlOwotCi0gICAgICB7Ci0gICAgICAgIFVJbnQ4ICBwYXRoX2ZvbmRbUEFUSF9NQVhdOwotICAgICAgICBGU1JlZiAgcmVmOwotCi0KLSAgICAgICAgZXJyID0gRlNHZXRGb3JrQ0JJbmZvKCByZXMsIGtGU0ludmFsaWRWb2x1bWVSZWZOdW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgJnJlZiwgTlVMTCApOwotICAgICAgICBpZiAoIG5vRXJyICE9IGVyciApCi0gICAgICAgICAgZ290byBmb3VuZF9ub19sd2ZuX2ZpbGU7Ci0KLSAgICAgICAgZXJyID0gRlNSZWZNYWtlUGF0aCggJnJlZiwgcGF0aF9mb25kLCBzaXplb2YgKCBwYXRoX2ZvbmQgKSApOwotICAgICAgICBpZiAoIG5vRXJyICE9IGVyciApCi0gICAgICAgICAgZ290byBmb3VuZF9ub19sd2ZuX2ZpbGU7Ci0KLSAgICAgICAgZXJyb3IgPSBsb29rdXBfbHdmbl9ieV9mb25kKCBwYXRoX2ZvbmQsIGx3Zm5fZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfbHdmbiwgc2l6ZW9mICggcGF0aF9sd2ZuICkgKTsKLSAgICAgICAgaWYgKCAhZXJyb3IgKQotICAgICAgICAgIGhhdmVfbHdmbiA9IDE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCBoYXZlX2x3Zm4gJiYgKCAhaGF2ZV9zZm50IHx8IFBSRUZFUl9MV0ZOICkgKQotICAgICAgZXJyb3IgPSBGVF9OZXdfRmFjZV9Gcm9tX0xXRk4oIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9sd2ZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZhY2UgKTsKLSAgICBlbHNlCi0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBVbmtub3duX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgZm91bmRfbm9fbHdmbl9maWxlOgotICAgIGlmICggaGF2ZV9zZm50ICYmIGVycm9yICkKLSAgICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9TRk5UKCBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmbnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmFjZSApOwotCi0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICAvKiBDb21tb24gZnVuY3Rpb24gdG8gbG9hZCBhIG5ldyBGVF9GYWNlIGZyb20gYSByZXNvdXJjZSBmaWxlLiAqLwotICBzdGF0aWMgRlRfRXJyb3IKLSAgRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggRlRfTGlicmFyeSAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVSW50OCogIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgICAgIGZhY2VfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgICAgYWZhY2UgKQotICB7Ci0gICAgT1NUeXBlICAgIGZpbGVfdHlwZTsKLSAgICBGVF9FcnJvciAgZXJyb3I7Ci0KLQotICAgIC8qIExXRk4gaXMgYSAodmVyeSkgc3BlY2lmaWMgZmlsZSBmb3JtYXQsIGNoZWNrIGZvciBpdCBleHBsaWNpdGx5ICovCi0gICAgZmlsZV90eXBlID0gZ2V0X2ZpbGVfdHlwZV9mcm9tX3BhdGgoIHBhdGhuYW1lICk7Ci0gICAgaWYgKCBmaWxlX3R5cGUgPT0gVFRBR19MV0ZOICkKLSAgICAgIHJldHVybiBGVF9OZXdfRmFjZV9Gcm9tX0xXRk4oIGxpYnJhcnksIHBhdGhuYW1lLCBmYWNlX2luZGV4LCBhZmFjZSApOwotCi0gICAgLyogT3RoZXJ3aXNlIHRoZSBmaWxlIHR5cGUgZG9lc24ndCBtYXR0ZXIgKHRoZXJlIGFyZSBtb3JlIHRoYW4gICovCi0gICAgLyogYEZGSUwnIGFuZCBgdGZpbCcpLiAgSnVzdCB0cnkgb3BlbmluZyBpdCBhcyBhIGZvbnQgc3VpdGNhc2U7ICovCi0gICAgLyogaWYgaXQgd29ya3MsIGZpbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fU3VpdGNhc2UoIGxpYnJhcnksIHBhdGhuYW1lLCBmYWNlX2luZGV4LCBhZmFjZSApOwotICAgIGlmICggZXJyb3IgPT0gMCApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICAvKiBsZXQgaXQgZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBsb2FkZXIgKC50dGYsIC5vdGYsIGV0Yy4pOyAqLwotICAgIC8qIHdlIHNpZ25hbCB0aGlzIGJ5IHJldHVybmluZyBubyBlcnJvciBhbmQgbm8gRlRfRmFjZSAgICAgICovCi0gICAgKmFmYWNlID0gTlVMTDsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhpcyBpcyB0aGUgTWFjLXNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIEZUX05ld19GYWNlLiAgSW4gICAgICAgICovCi0gIC8qICAgIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBGVF9OZXdfRmFjZSgpIGZ1bmN0aW9uYWxpdHksIGl0IGFsc28gICAgICAqLwotICAvKiAgICBhY2NlcHRzIHBhdGhuYW1lcyB0byBNYWMgc3VpdGNhc2UgZmlsZXMuICBGb3IgZnVydGhlciAgICAgICAgICAgICAgKi8KLSAgLyogICAgZG9jdW1lbnRhdGlvbiBzZWUgdGhlIG9yaWdpbmFsIEZUX05ld19GYWNlKCkgaW4gZnJlZXR5cGUuaC4gICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwYXRobmFtZSwKLSAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LAotICAgICAgICAgICAgICAgRlRfRmFjZSogICAgIGFmYWNlICkKLSAgewotICAgIEZUX09wZW5fQXJncyAgYXJnczsKLSAgICBGVF9FcnJvciAgICAgIGVycm9yOwotCi0KLSAgICAvKiB0ZXN0IGZvciB2YWxpZCBgbGlicmFyeScgYW5kIGBhZmFjZScgZGVsYXllZCB0byBGVF9PcGVuX0ZhY2UoKSAqLwotICAgIGlmICggIXBhdGhuYW1lICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgKmFmYWNlID0gTlVMTDsKLQotICAgIC8qIHRyeSByZXNvdXJjZWZvcmsgYmFzZWQgZm9udDogTFdGTiwgRkZJTCAqLwotICAgIGVycm9yID0gRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZSggbGlicmFyeSwgKFVJbnQ4ICopcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2luZGV4LCBhZmFjZSApOwotICAgIGlmICggZXJyb3IgIT0gMCB8fCAqYWZhY2UgIT0gTlVMTCApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICAvKiBsZXQgaXQgZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBsb2FkZXIgKC50dGYsIC5vdGYsIGV0Yy4pICovCi0gICAgYXJncy5mbGFncyAgICA9IEZUX09QRU5fUEFUSE5BTUU7Ci0gICAgYXJncy5wYXRobmFtZSA9IChjaGFyKilwYXRobmFtZTsKLSAgICByZXR1cm4gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiBpcyBpZGVudGljYWwgdG8gRlRfTmV3X0ZhY2UgZXhjZXB0IGl0ICAgICAgICovCi0gIC8qICAgIGFjY2VwdHMgYW4gRlNSZWYgaW5zdGVhZCBvZiBhIHBhdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgQ2FyYm9uIGRhdGEgdHlwZXMgKEZTUmVmKSAgICAgICAgICovCi0gIC8qIGFyZSBub3QgY3Jvc3MtcGxhdGZvcm0sIGFuZCB0aHVzIG5vdCBzdWl0YWJsZSBmb3IgdGhlIGZyZWV0eXBlIEFQSS4gICAqLwotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX05ld19GYWNlX0Zyb21fRlNSZWYoIEZUX0xpYnJhcnkgICAgbGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlNSZWYqICByZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSogICAgICBhZmFjZSApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgIGVycm9yOwotICAgIEZUX09wZW5fQXJncyAgYXJnczsKLQotICAgIE9TRXJyICBlcnI7Ci0gICAgVUludDggIHBhdGhuYW1lW1BBVEhfTUFYXTsKLQotCi0gICAgLyogY2hlY2sgb2YgYGxpYnJhcnknIGFuZCBgYWZhY2UnIGRlbGF5ZWQgdG8gKi8KLSAgICAvKiBgRlRfTmV3X0ZhY2VfRnJvbV9SZXNvdXJjZScgICAgICAgICAgICAgICAqLwotCi0gICAgaWYgKCAhcmVmICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgZXJyID0gRlNSZWZNYWtlUGF0aCggcmVmLCBwYXRobmFtZSwgc2l6ZW9mICggcGF0aG5hbWUgKSApOwotICAgIGlmICggZXJyICkKLSAgICAgIGVycm9yID0gRlRfVEhST1coIENhbm5vdF9PcGVuX1Jlc291cmNlICk7Ci0KLSAgICBlcnJvciA9IEZUX05ld19GYWNlX0Zyb21fUmVzb3VyY2UoIGxpYnJhcnksIHBhdGhuYW1lLCBmYWNlX2luZGV4LCBhZmFjZSApOwotICAgIGlmICggZXJyb3IgIT0gMCB8fCAqYWZhY2UgIT0gTlVMTCApCi0gICAgICByZXR1cm4gZXJyb3I7Ci0KLSAgICAvKiBmYWxsYmFjayB0byBkYXRhZm9yayBmb250ICovCi0gICAgYXJncy5mbGFncyAgICA9IEZUX09QRU5fUEFUSE5BTUU7Ci0gICAgYXJncy5wYXRobmFtZSA9IChjaGFyKilwYXRobmFtZTsKLSAgICByZXR1cm4gRlRfT3Blbl9GYWNlKCBsaWJyYXJ5LCAmYXJncywgZmFjZV9pbmRleCwgYWZhY2UgKTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMgaXMgaWRlbnRpY2FsIHRvIEZUX05ld19GYWNlIGV4Y2VwdCBpdCAgICAgICovCi0gIC8qICAgIGFjY2VwdHMgYW4gRlNTcGVjIGluc3RlYWQgb2YgYSBwYXRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGJlY2F1c2UgRlNTcGVjIGlzIGRlcHJlY2F0ZWQgaW4gTWFjIE9TIFggICovCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRfTmV3X0ZhY2VfRnJvbV9GU1NwZWMoIEZUX0xpYnJhcnkgICAgIGxpYnJhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGU1NwZWMqICBzcGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgZmFjZV9pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZhY2UqICAgICAgIGFmYWNlICkKLSAgewotI2lmICggX19MUDY0X18gKSB8fCAoIGRlZmluZWQoIE1BQ19PU19YX1ZFUlNJT05fMTBfNSApICYmIFwKLSAgICAgICggTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gTUFDX09TX1hfVkVSU0lPTl8xMF81ICkgKQotICAgIEZUX1VOVVNFRCggbGlicmFyeSApOwotICAgIEZUX1VOVVNFRCggc3BlYyApOwotICAgIEZUX1VOVVNFRCggZmFjZV9pbmRleCApOwotICAgIEZUX1VOVVNFRCggYWZhY2UgKTsKLQotICAgIHJldHVybiBGVF9USFJPVyggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7Ci0jZWxzZQotICAgIEZTUmVmICByZWY7Ci0KLQotICAgIC8qIGNoZWNrIG9mIGBsaWJyYXJ5JyBhbmQgYGFmYWNlJyBkZWxheWVkIHRvIGBGVF9OZXdfRmFjZV9Gcm9tX0ZTUmVmJyAqLwotCi0gICAgaWYgKCAhc3BlYyB8fCBGU3BNYWtlRlNSZWYoIHNwZWMsICZyZWYgKSAhPSBub0VyciApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gRlRfTmV3X0ZhY2VfRnJvbV9GU1JlZiggbGlicmFyeSwgJnJlZiwgZmFjZV9pbmRleCwgYWZhY2UgKTsKLSNlbmRpZgotICB9Ci0KLSNlbmRpZiAvKiBGVF9NQUNJTlRPU0ggKi8KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0bW0uYyBiL3NyYy9iYXNlL2Z0bW0uYwppbmRleCA3YzAxMmFhLi42Yjc1OWNhIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdG1tLmMKKysrIGIvc3JjL2Jhc2UvZnRtbS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE11bHRpcGxlIE1hc3RlciBmb250IHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdG9ianMuYyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCmluZGV4IDk2NTcyYmQuLjkwMDZiNTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b2Jqcy5jCisrKyBiL3NyYy9iYXNlL2Z0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwcml2YXRlIGJhc2UgY2xhc3NlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC02ODgsNyArNjg4LDYgQEAKICAgICAgICAgLyogYm90aCBgZnBnbScgYW5kIGBwcmVwJyB0YWJsZXMgYXJlIG1pc3NpbmcgICAgICAgICAgICAgICAgICovCiAgICAgICAgIGlmICggKCBtb2RlID09IEZUX1JFTkRFUl9NT0RFX0xJR0hUICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgICAhRlRfRFJJVkVSX0hJTlRTX0xJR0hUTFkoIGRyaXZlciApICkgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICBmYWNlLT5pbnRlcm5hbC0+aWdub3JlX3VucGF0ZW50ZWRfaGludGVyICAgICAgICAgICB8fAogICAgICAgICAgICAgICggRlRfSVNfU0ZOVCggZmFjZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgdHRmYWNlLT5udW1fbG9jYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgdHRmYWNlLT5tYXhfcHJvZmlsZS5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgPT0gMCAmJgpAQCAtMTQxOSw3ICsxNDE4LDcgQEAKIAogICAvKiBUeXBlIDEgYW5kIENJRC1rZXllZCBmb250IGRyaXZlcnMgc2hvdWxkIHJlY29nbml6ZSBzZm50LXdyYXBwZWQgKi8KICAgLyogZm9ybWF0IHRvby4gIEhlcmUsIHNpbmNlIHdlIGNhbid0IGV4cGVjdCB0aGF0IHRoZSBUcnVlVHlwZSBmb250ICovCi0gIC8qIGRyaXZlciBpcyBsb2FkZWQgdW5jb25kaXRpYWxseSwgd2UgbXVzdCBwYXJzZSB0aGUgZm9udCBieSAgICAgICAqLworICAvKiBkcml2ZXIgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseSwgd2UgbXVzdCBwYXJzZSB0aGUgZm9udCBieSAgICAgKi8KICAgLyogb3Vyc2VsdmVzLiAgV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbmFtZSBvZiB0aGUgdGFibGUgYW5kICovCiAgIC8qIHRoZSBvZmZzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCkBAIC0xNDg0LDYgKzE0ODMsNyBAQAogICAgICAgaWYgKCBmYWNlX2luZGV4ID49IDAgJiYgcHN0YWJsZV9pbmRleCA9PSBmYWNlX2luZGV4ICkKICAgICAgICAgcmV0dXJuIEZUX0Vycl9PazsKICAgICB9CisKICAgICByZXR1cm4gRlRfVEhST1coIFRhYmxlX01pc3NpbmcgKTsKICAgfQogCkBAIC0xNTIxLDYgKzE1MjEsMTkgQEAKICAgICBpZiAoIGVycm9yICkKICAgICAgIGdvdG8gRXhpdDsKIAorICAgIGlmICggb2Zmc2V0ID4gc3RyZWFtLT5zaXplICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAib3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW06IGludmFsaWQgdGFibGUgb2Zmc2V0XG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBlbHNlIGlmICggbGVuZ3RoID4gc3RyZWFtLT5zaXplIC0gb2Zmc2V0ICkKKyAgICB7CisgICAgICBGVF9UUkFDRTIoKCAib3Blbl9mYWNlX1BTX2Zyb21fc2ZudF9zdHJlYW06IGludmFsaWQgdGFibGUgbGVuZ3RoXG4iICkpOworICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgICAgZ290byBFeGl0OworICAgIH0KKwogICAgIGVycm9yID0gRlRfU3RyZWFtX1NlZWsoIHN0cmVhbSwgcG9zICsgb2Zmc2V0ICk7CiAgICAgaWYgKCBlcnJvciApCiAgICAgICBnb3RvIEV4aXQ7CkBAIC0xNTI5LDcgKzE1NDIsOCBAQAogICAgICAgZ290byBFeGl0OwogCiAgICAgZXJyb3IgPSBGVF9TdHJlYW1fUmVhZCggc3RyZWFtLCAoRlRfQnl0ZSAqKXNmbnRfcHMsIGxlbmd0aCApOwotICAgIGlmICggZXJyb3IgKSB7CisgICAgaWYgKCBlcnJvciApCisgICAgewogICAgICAgRlRfRlJFRSggc2ZudF9wcyApOwogICAgICAgZ290byBFeGl0OwogICAgIH0KQEAgLTE3NzcsOCArMTc5MSw4IEBACiAgICAgRlRfTG9uZyAgICBmYWNlX2luZGV4X2luX3Jlc291cmNlID0gMDsKIAogCi0gICAgaWYgKCBmYWNlX2luZGV4ID09IC0xICkKLSAgICAgIGZhY2VfaW5kZXggPSAwOworICAgIGlmICggZmFjZV9pbmRleCA8IDAgKQorICAgICAgZmFjZV9pbmRleCA9IC1mYWNlX2luZGV4IC0gMTsKICAgICBpZiAoIGZhY2VfaW5kZXggPj0gcmVzb3VyY2VfY250ICkKICAgICAgIHJldHVybiBGVF9USFJPVyggQ2Fubm90X09wZW5fUmVzb3VyY2UgKTsKIApAQCAtMjMwMCwxMSArMjMxNCwyNCBAQAogCiAKICAgICAgICAgaWYgKCBic2l6ZS0+aGVpZ2h0IDwgMCApCi0gICAgICAgICAgYnNpemUtPmhlaWdodCA9IChGVF9TaG9ydCktYnNpemUtPmhlaWdodDsKKyAgICAgICAgICBic2l6ZS0+aGVpZ2h0ID0gLWJzaXplLT5oZWlnaHQ7CiAgICAgICAgIGlmICggYnNpemUtPnhfcHBlbSA8IDAgKQotICAgICAgICAgIGJzaXplLT54X3BwZW0gPSAoRlRfU2hvcnQpLWJzaXplLT54X3BwZW07CisgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IC1ic2l6ZS0+eF9wcGVtOwogICAgICAgICBpZiAoIGJzaXplLT55X3BwZW0gPCAwICkKICAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gLWJzaXplLT55X3BwZW07CisKKyAgICAgICAgLyogY2hlY2sgd2hldGhlciBuZWdhdGlvbiBhY3R1YWxseSBoYXMgd29ya2VkICovCisgICAgICAgIGlmICggYnNpemUtPmhlaWdodCA8IDAgfHwgYnNpemUtPnhfcHBlbSA8IDAgfHwgYnNpemUtPnlfcHBlbSA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVFJBQ0UwKCggIkZUX09wZW5fRmFjZToiCisgICAgICAgICAgICAgICAgICAgICAgIiBJbnZhbGlkIGJpdG1hcCBkaW1lbnNpb25zIGZvciBzdHJva2UgJWQsIgorICAgICAgICAgICAgICAgICAgICAgICIgbm93IGRpc2FibGVkXG4iLCBpICkpOworICAgICAgICAgIGJzaXplLT53aWR0aCAgPSAwOworICAgICAgICAgIGJzaXplLT5oZWlnaHQgPSAwOworICAgICAgICAgIGJzaXplLT5zaXplICAgPSAwOworICAgICAgICAgIGJzaXplLT54X3BwZW0gPSAwOworICAgICAgICAgIGJzaXplLT55X3BwZW0gPSAwOworICAgICAgICB9CiAgICAgICB9CiAgICAgfQogCkBAIC0yNjA0LDYgKzI2MzEsOSBAQAogICAgIHcgPSBGVF9QSVhfUk9VTkQoIHcgKTsKICAgICBoID0gRlRfUElYX1JPVU5EKCBoICk7CiAKKyAgICBpZiAoICF3IHx8ICFoICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9QaXhlbF9TaXplICk7CisKICAgICBmb3IgKCBpID0gMDsgaSA8IGZhY2UtPm51bV9maXhlZF9zaXplczsgaSsrICkKICAgICB7CiAgICAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplID0gZmFjZS0+YXZhaWxhYmxlX3NpemVzICsgaTsKQEAgLTI2MjMsNiArMjY1Myw4IEBACiAgICAgICB9CiAgICAgfQogCisgICAgRlRfVFJBQ0UzKCggIkZUX01hdGNoX1NpemU6IG5vIG1hdGNoaW5nIGJpdG1hcCBzdHJpa2VcbiIgKSk7CisKICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfUGl4ZWxfU2l6ZSApOwogICB9CiAKQEAgLTQyMDIsNyArNDIzNCw4IEBACiAKIAogICAgICAgICAgIE1ENV9Jbml0KCAmY3R4ICk7Ci0gICAgICAgICAgTUQ1X1VwZGF0ZSggJmN0eCwgYml0bWFwLmJ1ZmZlciwgcm93cyAqIHBpdGNoICk7CisgICAgICAgICAgaWYgKCBiaXRtYXAuYnVmZmVyICkKKyAgICAgICAgICAgIE1ENV9VcGRhdGUoICZjdHgsIGJpdG1hcC5idWZmZXIsIHJvd3MgKiBwaXRjaCApOwogICAgICAgICAgIE1ENV9GaW5hbCggbWQ1LCAmY3R4ICk7CiAKICAgICAgICAgICBGVF9UUkFDRTMoKCAiTUQ1IGNoZWNrc3VtIGZvciAlZHglZCBiaXRtYXA6XG4iCkBAIC00MzA4LDcgKzQzNDEsNyBAQAogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvcjsKICAgICBGVF9NZW1vcnkgIG1lbW9yeTsKLSAgICBGVF9Nb2R1bGUgIG1vZHVsZTsKKyAgICBGVF9Nb2R1bGUgIG1vZHVsZSA9IE5VTEw7CiAgICAgRlRfVUludCAgICBubjsKIAogCkBAIC00NTQ5LDcgKzQ1ODIsOCBAQAogICAgICAgICAgICAgICAgICAgY29uc3QgRlRfU3RyaW5nKiAgbW9kdWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAogICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgdmFsdWUsCi0gICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgICBzZXQgKQorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgc2V0LAorICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgICAgICAgdmFsdWVfaXNfc3RyaW5nICkKICAgewogICAgIEZUX01vZHVsZSogICAgICAgICAgIGN1cjsKICAgICBGVF9Nb2R1bGUqICAgICAgICAgICBsaW1pdDsKQEAgLTQ2MTksOCArNDY1MywxMyBAQAogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKICAgICB9CiAKLSAgICByZXR1cm4gc2V0ID8gc2VydmljZS0+c2V0X3Byb3BlcnR5KCBjdXJbMF0sIHByb3BlcnR5X25hbWUsIHZhbHVlICkKLSAgICAgICAgICAgICAgIDogc2VydmljZS0+Z2V0X3Byb3BlcnR5KCBjdXJbMF0sIHByb3BlcnR5X25hbWUsIHZhbHVlICk7CisgICAgcmV0dXJuIHNldCA/IHNlcnZpY2UtPnNldF9wcm9wZXJ0eSggY3VyWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgICAgICAgICAgIDogc2VydmljZS0+Z2V0X3Byb3BlcnR5KCBjdXJbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSApOwogICB9CiAKIApAQCAtNDYzNiw3ICs0Njc1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSApOwogICB9CiAKIApAQCAtNDY1MiwxMCArNDY5MiwzMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFICk7CiAgIH0KIAogCisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisKKyAgLyogdGhpcyB2YXJpYW50IGlzIHVzZWQgZm9yIGhhbmRsaW5nIHRoZSBGUkVFVFlQRV9QUk9QRVJUSUVTICovCisgIC8qIGVudmlyb25tZW50IHZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgIEZUX0JBU0VfREVGKCBGVF9FcnJvciApCisgIGZ0X3Byb3BlcnR5X3N0cmluZ19zZXQoIEZUX0xpYnJhcnkgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1N0cmluZyogIG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9TdHJpbmcqICBwcm9wZXJ0eV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICAgICAgICB2YWx1ZSApCisgIHsKKyAgICByZXR1cm4gZnRfcHJvcGVydHlfZG8oIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSApOworICB9CisKKyNlbmRpZgorCisKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0b3R2YWwuYyBiL3NyYy9iYXNlL2Z0b3R2YWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg2NDU3Yi4uMDAwMDAwMAotLS0gYS9zcmMvYmFzZS9mdG90dmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdG90dmFsLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgRnJlZVR5cGUgQVBJIGZvciB2YWxpZGF0aW5nIE9wZW5UeXBlIHRhYmxlcyAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX0RFQlVHX0gKLQotI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICi0jaW5jbHVkZSBGVF9TRVJWSUNFX09QRU5UWVBFX1ZBTElEQVRFX0gKLSNpbmNsdWRlIEZUX09QRU5UWVBFX1ZBTElEQVRFX0gKLQotCi0gIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRvdHZhbC5oICovCi0KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9PcGVuVHlwZV9WYWxpZGF0ZSggRlRfRmFjZSAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICB2YWxpZGF0aW9uX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpCQVNFX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpHREVGX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpHUE9TX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpHU1VCX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZXMgICpKU1RGX3RhYmxlICkKLSAgewotICAgIEZUX1NlcnZpY2VfT1R2YWxpZGF0ZSAgc2VydmljZTsKLSAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yOwotCi0KLSAgICBpZiAoICFmYWNlICkKLSAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZhY2VfSGFuZGxlICk7Ci0gICAgICBnb3RvIEV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKCAhKCBCQVNFX3RhYmxlICYmCi0gICAgICAgICAgICBHREVGX3RhYmxlICYmCi0gICAgICAgICAgICBHUE9TX3RhYmxlICYmCi0gICAgICAgICAgICBHU1VCX3RhYmxlICYmCi0gICAgICAgICAgICBKU1RGX3RhYmxlICkgKQotICAgIHsKLSAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBGVF9GQUNFX0ZJTkRfR0xPQkFMX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIE9QRU5UWVBFX1ZBTElEQVRFICk7Ci0KLSAgICBpZiAoIHNlcnZpY2UgKQotICAgICAgZXJyb3IgPSBzZXJ2aWNlLT52YWxpZGF0ZSggZmFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25fZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCQVNFX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RFRl90YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQT1NfdGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1VCX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNURl90YWJsZSApOwotICAgIGVsc2UKLSAgICAgIGVycm9yID0gRlRfVEhST1coIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOwotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICBGVF9FWFBPUlRfREVGKCB2b2lkICkKLSAgRlRfT3BlblR5cGVfRnJlZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgIEZUX0J5dGVzICB0YWJsZSApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeTsKLQotCi0gICAgaWYgKCAhZmFjZSApCi0gICAgICByZXR1cm47Ci0KLSAgICBtZW1vcnkgPSBGVF9GQUNFX01FTU9SWSggZmFjZSApOwotCi0gICAgRlRfRlJFRSggdGFibGUgKTsKLSAgfQotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRvdXRsbi5jIGIvc3JjL2Jhc2UvZnRvdXRsbi5jCmluZGV4IDIwMWNlYWIuLmZjMjgyMjUgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0b3V0bG4uYworKysgYi9zcmMvYmFzZS9mdG91dGxuLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgb3V0bGluZSBtYW5hZ2VtZW50IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTQyLDcgKzQyLDcgQEAKIAogCiAgIHN0YXRpYwotICBjb25zdCBGVF9PdXRsaW5lICBudWxsX291dGxpbmUgPSB7IDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgY29uc3QgRlRfT3V0bGluZSAgbnVsbF9vdXRsaW5lID0geyAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAwIH07CiAKIAogICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0b3V0bG4uaCAqLwpAQCAtNDE1LDExICs0MTUsMTQgQEAKICAgICBpZiAoIHNvdXJjZSA9PSB0YXJnZXQgKQogICAgICAgcmV0dXJuIEZUX0Vycl9PazsKIAotICAgIEZUX0FSUkFZX0NPUFkoIHRhcmdldC0+cG9pbnRzLCBzb3VyY2UtPnBvaW50cywgc291cmNlLT5uX3BvaW50cyApOworICAgIGlmICggc291cmNlLT5uX3BvaW50cyApCisgICAgeworICAgICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5wb2ludHMsIHNvdXJjZS0+cG9pbnRzLCBzb3VyY2UtPm5fcG9pbnRzICk7CisgICAgICBGVF9BUlJBWV9DT1BZKCB0YXJnZXQtPnRhZ3MsICAgc291cmNlLT50YWdzLCAgIHNvdXJjZS0+bl9wb2ludHMgKTsKKyAgICB9CiAKLSAgICBGVF9BUlJBWV9DT1BZKCB0YXJnZXQtPnRhZ3MsIHNvdXJjZS0+dGFncywgc291cmNlLT5uX3BvaW50cyApOwotCi0gICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5jb250b3Vycywgc291cmNlLT5jb250b3Vycywgc291cmNlLT5uX2NvbnRvdXJzICk7CisgICAgaWYgKCBzb3VyY2UtPm5fY29udG91cnMgKQorICAgICAgRlRfQVJSQVlfQ09QWSggdGFyZ2V0LT5jb250b3Vycywgc291cmNlLT5jb250b3Vycywgc291cmNlLT5uX2NvbnRvdXJzICk7CiAKICAgICAvKiBjb3B5IGFsbCBmbGFncywgZXhjZXB0IHRoZSBgRlRfT1VUTElORV9PV05FUicgb25lICovCiAgICAgaXNfb3duZXIgICAgICA9IHRhcmdldC0+ZmxhZ3MgJiBGVF9PVVRMSU5FX09XTkVSOwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRwYXRlbnQuYyBiL3NyYy9iYXNlL2Z0cGF0ZW50LmMKaW5kZXggYmYyYjA4NS4uNDg2MWJlMSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRwYXRlbnQuYworKysgYi9zcmMvYmFzZS9mdHBhdGVudC5jCkBAIC0zLDkgKzMsOSBAQAogLyogIGZ0cGF0ZW50LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBBUEkgZm9yIGNoZWNraW5nIHBhdGVudGVkIFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyAgICAqLwotLyogICAgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIChib2R5KS4gIE9ic29sZXRlLCByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA3LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNSwyMzggKzI1LDE0IEBACiAjaW5jbHVkZSBGVF9TRVJWSUNFX1RSVUVUWVBFX0dMWUZfSAogCiAKLSAgc3RhdGljIEZUX0Jvb2wKLSAgX3R0X2NoZWNrX3BhdGVudHNfaW5fcmFuZ2UoIEZUX1N0cmVhbSAgc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBzaXplICkKLSAgewotICAgIEZUX0Jvb2wgICByZXN1bHQgPSBGQUxTRTsKLSAgICBGVF9FcnJvciAgZXJyb3I7Ci0gICAgRlRfQnl0ZXMgIHAsIGVuZDsKLQotCi0gICAgaWYgKCBGVF9GUkFNRV9FTlRFUiggc2l6ZSApICkKLSAgICAgIHJldHVybiAwOwotCi0gICAgcCAgID0gc3RyZWFtLT5jdXJzb3I7Ci0gICAgZW5kID0gcCArIHNpemU7Ci0KLSAgICB3aGlsZSAoIHAgPCBlbmQgKQotICAgIHsKLSAgICAgIHN3aXRjaCAocFswXSkKLSAgICAgIHsKLSAgICAgIGNhc2UgMHgwNjogIC8qIFNQdlRMIC8vICovCi0gICAgICBjYXNlIDB4MDc6ICAvKiBTUHZUTCArICAqLwotICAgICAgY2FzZSAweDA4OiAgLyogU0Z2VEwgLy8gKi8KLSAgICAgIGNhc2UgMHgwOTogIC8qIFNGdlRMICsgICovCi0gICAgICBjYXNlIDB4MEE6ICAvKiBTUHZGUyAgICAqLwotICAgICAgY2FzZSAweDBCOiAgLyogU0Z2RlMgICAgKi8KLSAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBjYXNlIDB4NDA6Ci0gICAgICAgIGlmICggcCArIDEgPj0gZW5kICkKLSAgICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgICAgcCArPSBwWzFdICsgMjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHg0MToKLSAgICAgICAgaWYgKCBwICsgMSA+PSBlbmQgKQotICAgICAgICAgIGdvdG8gRXhpdDsKLQotICAgICAgICBwICs9IHBbMV0gKiAyICsgMjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHg3MTogIC8qIERFTFRBUDIgKi8KLSAgICAgIGNhc2UgMHg3MjogIC8qIERFTFRBUDMgKi8KLSAgICAgIGNhc2UgMHg3MzogIC8qIERFTFRBQzAgKi8KLSAgICAgIGNhc2UgMHg3NDogIC8qIERFTFRBQzEgKi8KLSAgICAgIGNhc2UgMHg3NTogIC8qIERFTFRBQzIgKi8KLSAgICAgICAgcmVzdWx0ID0gVFJVRTsKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgICBjYXNlIDB4QjA6Ci0gICAgICBjYXNlIDB4QjE6Ci0gICAgICBjYXNlIDB4QjI6Ci0gICAgICBjYXNlIDB4QjM6Ci0gICAgICBjYXNlIDB4QjQ6Ci0gICAgICBjYXNlIDB4QjU6Ci0gICAgICBjYXNlIDB4QjY6Ci0gICAgICBjYXNlIDB4Qjc6Ci0gICAgICAgIHAgKz0gKCBwWzBdIC0gMHhCMCApICsgMjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHhCODoKLSAgICAgIGNhc2UgMHhCOToKLSAgICAgIGNhc2UgMHhCQToKLSAgICAgIGNhc2UgMHhCQjoKLSAgICAgIGNhc2UgMHhCQzoKLSAgICAgIGNhc2UgMHhCRDoKLSAgICAgIGNhc2UgMHhCRToKLSAgICAgIGNhc2UgMHhCRjoKLSAgICAgICAgcCArPSAoIHBbMF0gLSAweEI4ICkgKiAyICsgMzsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHAgKz0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gIEV4aXQ6Ci0gICAgRlRfVU5VU0VEKCBlcnJvciApOwotICAgIEZUX0ZSQU1FX0VYSVQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLQotICBzdGF0aWMgRlRfQm9vbAotICBfdHRfY2hlY2tfcGF0ZW50c19pbl90YWJsZSggRlRfRmFjZSAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdGFnICkKLSAgewotICAgIEZUX1N0cmVhbSAgICAgICAgICAgICAgc3RyZWFtID0gZmFjZS0+c3RyZWFtOwotICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3IgID0gRlRfRXJyX09rOwotICAgIEZUX1NlcnZpY2VfU0ZOVF9UYWJsZSAgc2VydmljZTsKLSAgICBGVF9Cb29sICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZBTFNFOwotCi0KLSAgICBGVF9GQUNFX0ZJTkRfU0VSVklDRSggZmFjZSwgc2VydmljZSwgU0ZOVF9UQUJMRSApOwotCi0gICAgaWYgKCBzZXJ2aWNlICkKLSAgICB7Ci0gICAgICBGVF9VSW50ICAgaSA9IDA7Ci0gICAgICBGVF9VTG9uZyAgdGFnX2kgPSAwLCBvZmZzZXRfaSA9IDAsIGxlbmd0aF9pID0gMDsKLQotCi0gICAgICBmb3IgKCBpID0gMDsgIWVycm9yICYmIHRhZ19pICE9IHRhZyA7IGkrKyApCi0gICAgICAgIGVycm9yID0gc2VydmljZS0+dGFibGVfaW5mbyggZmFjZSwgaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnX2ksICZvZmZzZXRfaSwgJmxlbmd0aF9pICk7Ci0KLSAgICAgIGlmICggZXJyb3IgICAgICAgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgRlRfU1RSRUFNX1NFRUsoIG9mZnNldF9pICkgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICAgIHJlc3VsdCA9IF90dF9jaGVja19wYXRlbnRzX2luX3JhbmdlKCBzdHJlYW0sIGxlbmd0aF9pICk7Ci0gICAgfQotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0KLSAgc3RhdGljIEZUX0Jvb2wKLSAgX3R0X2ZhY2VfY2hlY2tfcGF0ZW50cyggRlRfRmFjZSAgZmFjZSApCi0gIHsKLSAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnN0cmVhbTsKLSAgICBGVF9VSW50ICAgIGdpbmRleDsKLSAgICBGVF9FcnJvciAgIGVycm9yOwotICAgIEZUX0Jvb2wgICAgcmVzdWx0OwotCi0gICAgRlRfU2VydmljZV9UVEdseWYgIHNlcnZpY2U7Ci0KLQotICAgIHJlc3VsdCA9IF90dF9jaGVja19wYXRlbnRzX2luX3RhYmxlKCBmYWNlLCBUVEFHX2ZwZ20gKTsKLSAgICBpZiAoIHJlc3VsdCApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICByZXN1bHQgPSBfdHRfY2hlY2tfcGF0ZW50c19pbl90YWJsZSggZmFjZSwgVFRBR19wcmVwICk7Ci0gICAgaWYgKCByZXN1bHQgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgRlRfRkFDRV9GSU5EX1NFUlZJQ0UoIGZhY2UsIHNlcnZpY2UsIFRUX0dMWUYgKTsKLSAgICBpZiAoIHNlcnZpY2UgPT0gTlVMTCApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBmb3IgKCBnaW5kZXggPSAwOyBnaW5kZXggPCAoRlRfVUludClmYWNlLT5udW1fZ2x5cGhzOyBnaW5kZXgrKyApCi0gICAgewotICAgICAgRlRfVUxvbmcgIG9mZnNldCwgbnVtX2lucywgc2l6ZTsKLSAgICAgIEZUX0ludCAgICBudW1fY29udG91cnM7Ci0KLQotICAgICAgb2Zmc2V0ID0gc2VydmljZS0+Z2V0X2xvY2F0aW9uKCBmYWNlLCBnaW5kZXgsICZzaXplICk7Ci0gICAgICBpZiAoIHNpemUgPT0gMCApCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBvZmZzZXQgKSAgICAgIHx8Ci0gICAgICAgICAgIEZUX1JFQURfU0hPUlQoIG51bV9jb250b3VycyApICkKLSAgICAgICAgY29udGludWU7Ci0KLSAgICAgIGlmICggbnVtX2NvbnRvdXJzID49IDAgKSAgLyogc2ltcGxlIGdseXBoICovCi0gICAgICB7Ci0gICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDggKyBudW1fY29udG91cnMgKiAyICkgKQotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgZWxzZSAgLyogY29tcG91bmQgZ2x5cGggKi8KLSAgICAgIHsKLSAgICAgICAgRlRfQm9vbCAgaGFzX2luc3RyID0gMDsKLQotCi0gICAgICAgIGlmICggRlRfU1RSRUFNX1NLSVAoIDggKSApCi0gICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLyogbm93IHJlYWQgZWFjaCBjb21wb25lbnQgKi8KLSAgICAgICAgZm9yICg7OykKLSAgICAgICAgewotICAgICAgICAgIEZUX1VJbnQgIGZsYWdzLCB0b3NraXA7Ci0KLQotICAgICAgICAgIGlmKCBGVF9SRUFEX1VTSE9SVCggZmxhZ3MgKSApCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIHRvc2tpcCA9IDIgKyAxICsgMTsKLQotICAgICAgICAgIGlmICggKCBmbGFncyAmICggMSA8PCAwICkgKSAhPSAwICkgICAgICAgLyogQVJHU19BUkVfV09SRFMgKi8KLSAgICAgICAgICAgIHRvc2tpcCArPSAyOwotCi0gICAgICAgICAgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDMgKSApICE9IDAgKSAgICAgICAvKiBXRV9IQVZFX0FfU0NBTEUgKi8KLSAgICAgICAgICAgIHRvc2tpcCArPSAyOwotICAgICAgICAgIGVsc2UgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDYgKSApICE9IDAgKSAgLyogV0VfSEFWRV9YX1lfU0NBTEUgKi8KLSAgICAgICAgICAgIHRvc2tpcCArPSA0OwotICAgICAgICAgIGVsc2UgaWYgKCAoIGZsYWdzICYgKCAxIDw8IDcgKSApICE9IDAgKSAgLyogV0VfSEFWRV9BXzJ4MiAqLwotICAgICAgICAgICAgdG9za2lwICs9IDg7Ci0KLSAgICAgICAgICBpZiAoICggZmxhZ3MgJiAoIDEgPDwgOCApICkgIT0gMCApICAgICAgIC8qIFdFX0hBVkVfSU5TVFJVQ1RJT05TICovCi0gICAgICAgICAgICBoYXNfaW5zdHIgPSAxOwotCi0gICAgICAgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggdG9za2lwICkgKQotICAgICAgICAgICAgZ290byBOZXh0R2x5cGg7Ci0KLSAgICAgICAgICBpZiAoICggZmxhZ3MgJiAoIDEgPDwgNSApICkgPT0gMCApICAgICAgIC8qIE1PUkVfQ09NUE9ORU5UUyAqLwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFoYXNfaW5zdHIgKQotICAgICAgICAgIGdvdG8gTmV4dEdseXBoOwotICAgICAgfQotCi0gICAgICBpZiAoIEZUX1JFQURfVVNIT1JUKCBudW1faW5zICkgKQotICAgICAgICBjb250aW51ZTsKLQotICAgICAgcmVzdWx0ID0gX3R0X2NoZWNrX3BhdGVudHNfaW5fcmFuZ2UoIHN0cmVhbSwgbnVtX2lucyApOwotICAgICAgaWYgKCByZXN1bHQgKQotICAgICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBOZXh0R2x5cGg6Ci0gICAgICA7Ci0gICAgfQotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotCi0KICAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmcmVldHlwZS5oICovCiAKICAgRlRfRVhQT1JUX0RFRiggRlRfQm9vbCApCiAgIEZUX0ZhY2VfQ2hlY2tUcnVlVHlwZVBhdGVudHMoIEZUX0ZhY2UgIGZhY2UgKQogICB7Ci0gICAgRlRfQm9vbCAgcmVzdWx0ID0gRkFMU0U7CisgICAgRlRfVU5VU0VEKCBmYWNlICk7CiAKLQotICAgIGlmICggZmFjZSAmJiBGVF9JU19TRk5UKCBmYWNlICkgKQotICAgICAgcmVzdWx0ID0gX3R0X2ZhY2VfY2hlY2tfcGF0ZW50cyggZmFjZSApOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gRkFMU0U7CiAgIH0KIAogCkBAIC0yNjYsMjIgKzQyLDEwIEBACiAgIEZUX0ZhY2VfU2V0VW5wYXRlbnRlZEhpbnRpbmcoIEZUX0ZhY2UgIGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgIHZhbHVlICkKICAgewotICAgIEZUX0Jvb2wgIHJlc3VsdCA9IEZBTFNFOwotCi0KLSNpZiBkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORyApICYmIFwKLSAgICAhZGVmaW5lZCggVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiApCi0gICAgaWYgKCBmYWNlICYmIEZUX0lTX1NGTlQoIGZhY2UgKSApCi0gICAgewotICAgICAgcmVzdWx0ID0gIWZhY2UtPmludGVybmFsLT5pZ25vcmVfdW5wYXRlbnRlZF9oaW50ZXI7Ci0gICAgICBmYWNlLT5pbnRlcm5hbC0+aWdub3JlX3VucGF0ZW50ZWRfaGludGVyID0gIXZhbHVlOwotICAgIH0KLSNlbHNlCiAgICAgRlRfVU5VU0VEKCBmYWNlICk7CiAgICAgRlRfVU5VU0VEKCB2YWx1ZSApOwotI2VuZGlmCiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBGQUxTRTsKICAgfQogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0cGZyLmMgYi9zcmMvYmFzZS9mdHBmci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWYwODllLi4wMDAwMDAwCi0tLSBhL3NyYy9iYXNlL2Z0cGZyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRwZnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEFQSSBmb3IgYWNjZXNzaW5nIFBGUi1zcGVjaWZpYyBkYXRhIChib2R5KS4gICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9JTlRFUk5BTF9ERUJVR19ICi0KLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfU0VSVklDRV9QRlJfSAotCi0KLSAgLyogY2hlY2sgdGhlIGZvcm1hdCAqLwotICBzdGF0aWMgRlRfU2VydmljZV9QZnJNZXRyaWNzCi0gIGZ0X3Bmcl9jaGVjayggRlRfRmFjZSAgZmFjZSApCi0gIHsKLSAgICBGVF9TZXJ2aWNlX1Bmck1ldHJpY3MgIHNlcnZpY2UgPSBOVUxMOwotCi0KLSAgICBpZiAoIGZhY2UgKQotICAgICAgRlRfRkFDRV9MT09LVVBfU0VSVklDRSggZmFjZSwgc2VydmljZSwgUEZSX01FVFJJQ1MgKTsKLQotICAgIHJldHVybiBzZXJ2aWNlOwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0cGZyLmggKi8KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUX0dldF9QRlJfTWV0cmljcyggRlRfRmFjZSAgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYW91dGxpbmVfcmVzb2x1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgKmFtZXRyaWNzX3Jlc29sdXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQgICphbWV0cmljc194X3NjYWxlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkICAqYW1ldHJpY3NfeV9zY2FsZSApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgICAgICAgICAgIGVycm9yID0gRlRfRXJyX09rOwotICAgIEZUX1NlcnZpY2VfUGZyTWV0cmljcyAgc2VydmljZTsKLQotCi0gICAgaWYgKCAhZmFjZSApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfRmFjZV9IYW5kbGUgKTsKLQotICAgIHNlcnZpY2UgPSBmdF9wZnJfY2hlY2soIGZhY2UgKTsKLSAgICBpZiAoIHNlcnZpY2UgKQotICAgIHsKLSAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X21ldHJpY3MoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhb3V0bGluZV9yZXNvbHV0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW1ldHJpY3NfcmVzb2x1dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtZXRyaWNzX3hfc2NhbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWV0cmljc195X3NjYWxlICk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICBGVF9GaXhlZCAgeF9zY2FsZSwgeV9zY2FsZTsKLQotCi0gICAgICAvKiB0aGlzIGlzIG5vdCBhIFBGUiBmb250ICovCi0gICAgICBpZiAoIGFvdXRsaW5lX3Jlc29sdXRpb24gKQotICAgICAgICAqYW91dGxpbmVfcmVzb2x1dGlvbiA9IGZhY2UtPnVuaXRzX3Blcl9FTTsKLQotICAgICAgaWYgKCBhbWV0cmljc19yZXNvbHV0aW9uICkKLSAgICAgICAgKmFtZXRyaWNzX3Jlc29sdXRpb24gPSBmYWNlLT51bml0c19wZXJfRU07Ci0KLSAgICAgIHhfc2NhbGUgPSB5X3NjYWxlID0gMHgxMDAwMEw7Ci0gICAgICBpZiAoIGZhY2UtPnNpemUgKQotICAgICAgewotICAgICAgICB4X3NjYWxlID0gZmFjZS0+c2l6ZS0+bWV0cmljcy54X3NjYWxlOwotICAgICAgICB5X3NjYWxlID0gZmFjZS0+c2l6ZS0+bWV0cmljcy55X3NjYWxlOwotICAgICAgfQotCi0gICAgICBpZiAoIGFtZXRyaWNzX3hfc2NhbGUgKQotICAgICAgICAqYW1ldHJpY3NfeF9zY2FsZSA9IHhfc2NhbGU7Ci0KLSAgICAgIGlmICggYW1ldHJpY3NfeV9zY2FsZSApCi0gICAgICAgICphbWV0cmljc195X3NjYWxlID0geV9zY2FsZTsKLQotICAgICAgZXJyb3IgPSBGVF9USFJPVyggVW5rbm93bl9GaWxlX0Zvcm1hdCApOwotICAgIH0KLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHBmci5oICovCi0KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9HZXRfUEZSX0tlcm5pbmcoIEZUX0ZhY2UgICAgIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICphdmVjdG9yICkKLSAgewotICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3I7Ci0gICAgRlRfU2VydmljZV9QZnJNZXRyaWNzICBzZXJ2aWNlOwotCi0KLSAgICBpZiAoICFmYWNlICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOwotCi0gICAgaWYgKCAhYXZlY3RvciApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgIHNlcnZpY2UgPSBmdF9wZnJfY2hlY2soIGZhY2UgKTsKLSAgICBpZiAoIHNlcnZpY2UgKQotICAgICAgZXJyb3IgPSBzZXJ2aWNlLT5nZXRfa2VybmluZyggZmFjZSwgbGVmdCwgcmlnaHQsIGF2ZWN0b3IgKTsKLSAgICBlbHNlCi0gICAgICBlcnJvciA9IEZUX0dldF9LZXJuaW5nKCBmYWNlLCBsZWZ0LCByaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0tFUk5JTkdfVU5TQ0FMRUQsIGF2ZWN0b3IgKTsKLQotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdHBmci5oICovCi0KLSAgRlRfRVhQT1JUX0RFRiggRlRfRXJyb3IgKQotICBGVF9HZXRfUEZSX0FkdmFuY2UoIEZUX0ZhY2UgICBmYWNlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9zICAgKmFhZHZhbmNlICkKLSAgewotICAgIEZUX0Vycm9yICAgICAgICAgICAgICAgZXJyb3I7Ci0gICAgRlRfU2VydmljZV9QZnJNZXRyaWNzICBzZXJ2aWNlOwotCi0KLSAgICBpZiAoICFmYWNlICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GYWNlX0hhbmRsZSApOwotCi0gICAgaWYgKCAhYWFkdmFuY2UgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICBzZXJ2aWNlID0gZnRfcGZyX2NoZWNrKCBmYWNlICk7Ci0gICAgaWYgKCBzZXJ2aWNlICkKLSAgICAgIGVycm9yID0gc2VydmljZS0+Z2V0X2FkdmFuY2UoIGZhY2UsIGdpbmRleCwgYWFkdmFuY2UgKTsKLSAgICBlbHNlCi0gICAgICAvKiBYWFg6IFRPRE86IFBST1ZJREUgQURWQU5DRS1MT0FESU5HIE1FVEhPRCBUTyBBTEwgRk9OVCBEUklWRVJTICovCi0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0cGljLmMgYi9zcmMvYmFzZS9mdHBpYy5jCmluZGV4IDZjNGIxY2QuLjAzNzY5ZGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0cGljLmMKKysrIGIvc3JjL2Jhc2UvZnRwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyAoYm9keSkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRyZm9yay5jIGIvc3JjL2Jhc2UvZnRyZm9yay5jCmluZGV4IGMzMGM3NjYuLjQ2NjBjOTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0cmZvcmsuYworKysgYi9zcmMvYmFzZS9mdHJmb3JrLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRW1iZWRkZWQgcmVzb3VyY2UgZm9ya3MgYWNjZXNzb3IgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDQtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA0LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBNYXNhdGFrZSBZQU1BVE8gYW5kIFJlZGhhdCBLLksuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIEZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8oKSBhbmQgcmFjY2Vzc19ndWVzc19kYXJ3aW5faGZzcGx1cygpIGFyZSAgICAgKi8KQEAgLTQwMyw3ICs0MDMsNyBAQAogICAgICAgICBlcnJvcnNbaV0gPSBGVF9FcnJfT2s7CiAKICAgICAgIGlmICggZXJyb3JzW2ldICkKLSAgICAgICAgY29udGludWUgOworICAgICAgICBjb250aW51ZTsKIAogICAgICAgZXJyb3JzW2ldID0gKEZUX1JBQ0NFU1NfR1VFU1NfVEFCTEVfR0VUW2ldLmZ1bmMpKCBsaWJyYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgYmFzZV9uYW1lLApkaWZmIC0tZ2l0IGEvc3JjL2Jhc2UvZnRzbmFtZXMuYyBiL3NyYy9iYXNlL2Z0c25hbWVzLmMKaW5kZXggODAzMDRlNS4uY2U3OTY0MSAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvZnRzbmFtZXMuYworKysgYi9zcmMvYmFzZS9mdHNuYW1lcy5jCkBAIC03LDcgKzcsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoaXMgaXMgX25vdF8gdXNlZCB0byByZXRyaWV2ZSBnbHlwaCBuYW1lcyEgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN0cmVhbS5jIGIvc3JjL2Jhc2UvZnRzdHJlYW0uYwppbmRleCBiNjhmM2Y4Li5iYjUxMmE3IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN0cmVhbS5jCisrKyBiL3NyYy9iYXNlL2Z0c3RyZWFtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSS9PIHN0cmVhbSBzdXBwb3J0IChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAwLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTc3OCw3ICs3NzgsNyBAQAogCiAgICAgICBjYXNlIGZ0X2ZyYW1lX3Nob3J0X2JlOgogICAgICAgY2FzZSBmdF9mcmFtZV91c2hvcnRfYmU6ICAvKiByZWFkIGEgMi1ieXRlIGJpZy1lbmRpYW4gc2hvcnQgKi8KLSAgICAgICAgdmFsdWUgPSBGVF9ORVhUX1VTSE9SVCggY3Vyc29yKSA7CisgICAgICAgIHZhbHVlID0gRlRfTkVYVF9VU0hPUlQoIGN1cnNvciApOwogICAgICAgICBzaWduX3NoaWZ0ID0gMTY7CiAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN0cm9rZS5jIGIvc3JjL2Jhc2UvZnRzdHJva2UuYwppbmRleCBmZWNiM2NjLi40ZjNjNDkzIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN0cm9rZS5jCisrKyBiL3NyYy9iYXNlL2Z0c3Ryb2tlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgcGF0aCBzdHJva2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDItMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTcxMiw5ICs3MTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX091dGxpbmUqICAgICAgb3V0bGluZSApCiAgIHsKICAgICAvKiBjb3B5IHBvaW50IGxvY2F0aW9ucyAqLwotICAgIEZUX0FSUkFZX0NPUFkoIG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzLAotICAgICAgICAgICAgICAgICAgIGJvcmRlci0+cG9pbnRzLAotICAgICAgICAgICAgICAgICAgIGJvcmRlci0+bnVtX3BvaW50cyApOworICAgIGlmICggYm9yZGVyLT5udW1fcG9pbnRzICkKKyAgICAgIEZUX0FSUkFZX0NPUFkoIG91dGxpbmUtPnBvaW50cyArIG91dGxpbmUtPm5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLT5wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICBib3JkZXItPm51bV9wb2ludHMgKTsKIAogICAgIC8qIGNvcHkgdGFncyAqLwogICAgIHsKZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0c3ludGguYyBiL3NyYy9iYXNlL2Z0c3ludGguYwppbmRleCBjZDY4NTMzLi40YjY2YTMzIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN5bnRoLmMKKysrIGIvc3JjL2Jhc2UvZnRzeW50aC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHN5bnRoZXNpemluZyBjb2RlIGZvciBlbWJvbGRlbmluZyBhbmQgc2xhbnRpbmcgKGJvZHkpLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHN5c3RlbS5jIGIvc3JjL2Jhc2UvZnRzeXN0ZW0uYwppbmRleCAxOTM4ZmQ4Li5hYzFmMDFjIDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHN5c3RlbS5jCisrKyBiL3NyYy9iYXNlL2Z0c3lzdGVtLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQU5TSS1zcGVjaWZpYyBGcmVlVHlwZSBsb3ctbGV2ZWwgc3lzdGVtIGludGVyZmFjZSAoYm9keSkuICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMgYi9zcmMvYmFzZS9mdHRyaWdvbi5jCmluZGV4IDViMjQzMDQuLjdiNTgyYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dHJpZ29uLmMKKysrIGIvc3JjL2Jhc2UvZnR0cmlnb24uYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSB0cmlnb25vbWV0cmljIGZ1bmN0aW9ucyAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzEsNyArNzEsOCBAQAogCiAgICAgLyogMHg0MDAwMDAwMCBjb21lcyBmcm9tIHJlZ3Jlc3Npb24gYW5hbHlzaXMgYmV0d2VlbiB0cnVlICovCiAgICAgLyogYW5kIENPUkRJQyBoeXBvdGVudXNlLCBzbyBpdCBtaW5pbWl6ZXMgdGhlIGVycm9yICAgICAgICovCi0gICAgdmFsID0gKEZUX0ZpeGVkKSggKCAoRlRfSW50NjQpdmFsICogRlRfVFJJR19TQ0FMRSArIDB4NDAwMDAwMDBVTCApID4+IDMyICk7CisgICAgdmFsID0gKEZUX0ZpeGVkKSgKKyAgICAgICAgICAgICggKEZUX1VJbnQ2NCl2YWwgKiBGVF9UUklHX1NDQUxFICsgMHg0MDAwMDAwMFVMICkgPj4gMzIgKTsKIAogICAgIHJldHVybiBzIDwgMCA/IC12YWwgOiB2YWw7CiAgIH0KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL2Z0dHlwZTEuYyBiL3NyYy9iYXNlL2Z0dHlwZTEuYwppbmRleCBjNTQ5MzgyLi41YzBmY2U4IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHR5cGUxLmMKKysrIGIvc3JjL2Jhc2UvZnR0eXBlMS5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgUFMgbmFtZXMgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHV0aWwuYyBiL3NyYy9iYXNlL2Z0dXRpbC5jCmluZGV4IGY1YjcyZGIuLmZhZDdkMWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYXNlL2Z0dXRpbC5jCisrKyBiL3NyYy9iYXNlL2Z0dXRpbC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIHV0aWxpdHkgZmlsZSBmb3IgbWVtb3J5IGFuZCBsaXN0IG1hbmFnZW1lbnQgKGJvZHkpLiAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvYmFzZS9mdHdpbmZudC5jIGIvc3JjL2Jhc2UvZnR3aW5mbnQuYwppbmRleCA3NmExOWFmLi44OWU5MTU1IDEwMDY0NAotLS0gYS9zcmMvYmFzZS9mdHdpbmZudC5jCisrKyBiL3NyYy9iYXNlL2Z0d2luZm50LmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgQVBJIGZvciBhY2Nlc3NpbmcgV2luZG93cyBGTlQgc3BlY2lmaWMgaW5mbyAoYm9keSkuICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYXNlL21kNS5jIGIvc3JjL2Jhc2UvbWQ1LmMKaW5kZXggNTJkOTZhYy4uYjIzNWUxNyAxMDA2NDQKLS0tIGEvc3JjL2Jhc2UvbWQ1LmMKKysrIGIvc3JjL2Jhc2UvbWQ1LmMKQEAgLTYzLDEyICs2MywxOSBAQAogCShhKSArPSAoYik7CiAKIC8qCi0gKiBTRVQgcmVhZHMgNCBpbnB1dCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIgYW5kIHN0b3JlcyB0aGVtCi0gKiBpbiBhIHByb3Blcmx5IGFsaWduZWQgd29yZCBpbiBob3N0IGJ5dGUgb3JkZXIuCisgKiBTRVQgcmVhZHMgNCBpbnB1dCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXIgYW5kIHN0b3JlcyB0aGVtIGluIGEKKyAqIHByb3Blcmx5IGFsaWduZWQgd29yZCBpbiBob3N0IGJ5dGUgb3JkZXIuCiAgKgotICogVGhlIGNoZWNrIGZvciBsaXR0bGUtZW5kaWFuIGFyY2hpdGVjdHVyZXMgdGhhdCB0b2xlcmF0ZSB1bmFsaWduZWQKLSAqIG1lbW9yeSBhY2Nlc3NlcyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbi4gIE5vdGhpbmcgd2lsbCBicmVhayBpZiBpdAotICogZG9lc24ndCB3b3JrLgorICogVGhlIGNoZWNrIGZvciBsaXR0bGUtZW5kaWFuIGFyY2hpdGVjdHVyZXMgdGhhdCB0b2xlcmF0ZSB1bmFsaWduZWQgbWVtb3J5CisgKiBhY2Nlc3NlcyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbi4gIE5vdGhpbmcgd2lsbCBicmVhayBpZiBpdCBmYWlscyB0byBkZXRlY3QKKyAqIGEgc3VpdGFibGUgYXJjaGl0ZWN0dXJlLgorICoKKyAqIFVuZm9ydHVuYXRlbHksIHRoaXMgb3B0aW1pemF0aW9uIG1heSBiZSBhIEMgc3RyaWN0IGFsaWFzaW5nIHJ1bGVzIHZpb2xhdGlvbgorICogaWYgdGhlIGNhbGxlcidzIGRhdGEgYnVmZmVyIGhhcyBlZmZlY3RpdmUgdHlwZSB0aGF0IGNhbm5vdCBiZSBhbGlhc2VkIGJ5CisgKiBNRDVfdTMycGx1cy4gIEluIHByYWN0aWNlLCB0aGlzIHByb2JsZW0gbWF5IG9jY3VyIGlmIHRoZXNlIE1ENSByb3V0aW5lcyBhcmUKKyAqIGlubGluZWQgaW50byBhIGNhbGxpbmcgZnVuY3Rpb24sIG9yIHdpdGggZnV0dXJlIGFuZCBkYW5nZXJvdXNseSBhZHZhbmNlZAorICogbGluay10aW1lIG9wdGltaXphdGlvbnMuICBGb3IgdGhlIHRpbWUgYmVpbmcsIGtlZXBpbmcgdGhlc2UgTUQ1IHJvdXRpbmVzIGluCisgKiB0aGVpciBvd24gdHJhbnNsYXRpb24gdW5pdCBhdm9pZHMgdGhlIHByb2JsZW0uCiAgKi8KICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX192YXhfXykKICNkZWZpbmUgU0VUKG4pIFwKQEAgLTg3LDggKzk0LDggQEAKICNlbmRpZgogCiAvKgotICogVGhpcyBwcm9jZXNzZXMgb25lIG9yIG1vcmUgNjQtYnl0ZSBkYXRhIGJsb2NrcywgYnV0IGRvZXMgTk9UIHVwZGF0ZQotICogdGhlIGJpdCBjb3VudGVycy4gIFRoZXJlIGFyZSBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgorICogVGhpcyBwcm9jZXNzZXMgb25lIG9yIG1vcmUgNjQtYnl0ZSBkYXRhIGJsb2NrcywgYnV0IGRvZXMgTk9UIHVwZGF0ZSB0aGUgYml0CisgKiBjb3VudGVycy4gIFRoZXJlIGFyZSBubyBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLgogICovCiBzdGF0aWMgY29uc3Qgdm9pZCAqYm9keShNRDVfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTI0Miw2ICsyNDksMTIgQEAKIAltZW1jcHkoY3R4LT5idWZmZXIsIGRhdGEsIHNpemUpOwogfQogCisjZGVmaW5lIE9VVChkc3QsIHNyYykgXAorCShkc3QpWzBdID0gKHVuc2lnbmVkIGNoYXIpKHNyYyk7IFwKKwkoZHN0KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoc3JjKSA+PiA4KTsgXAorCShkc3QpWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzcmMpID4+IDE2KTsgXAorCShkc3QpWzNdID0gKHVuc2lnbmVkIGNoYXIpKChzcmMpID4+IDI0KTsKKwogdm9pZCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqcmVzdWx0LCBNRDVfQ1RYICpjdHgpCiB7CiAJdW5zaWduZWQgbG9uZyB1c2VkLCBhdmFpbGFibGU7CkBAIC0yNjIsMzMgKzI3NSwxNSBAQAogCW1lbXNldCgmY3R4LT5idWZmZXJbdXNlZF0sIDAsIGF2YWlsYWJsZSAtIDgpOwogCiAJY3R4LT5sbyA8PD0gMzsKLQljdHgtPmJ1ZmZlcls1Nl0gPSBjdHgtPmxvOwotCWN0eC0+YnVmZmVyWzU3XSA9IGN0eC0+bG8gPj4gODsKLQljdHgtPmJ1ZmZlcls1OF0gPSBjdHgtPmxvID4+IDE2OwotCWN0eC0+YnVmZmVyWzU5XSA9IGN0eC0+bG8gPj4gMjQ7Ci0JY3R4LT5idWZmZXJbNjBdID0gY3R4LT5oaTsKLQljdHgtPmJ1ZmZlcls2MV0gPSBjdHgtPmhpID4+IDg7Ci0JY3R4LT5idWZmZXJbNjJdID0gY3R4LT5oaSA+PiAxNjsKLQljdHgtPmJ1ZmZlcls2M10gPSBjdHgtPmhpID4+IDI0OworCU9VVCgmY3R4LT5idWZmZXJbNTZdLCBjdHgtPmxvKQorCU9VVCgmY3R4LT5idWZmZXJbNjBdLCBjdHgtPmhpKQogCiAJYm9keShjdHgsIGN0eC0+YnVmZmVyLCA2NCk7CiAKLQlyZXN1bHRbMF0gPSBjdHgtPmE7Ci0JcmVzdWx0WzFdID0gY3R4LT5hID4+IDg7Ci0JcmVzdWx0WzJdID0gY3R4LT5hID4+IDE2OwotCXJlc3VsdFszXSA9IGN0eC0+YSA+PiAyNDsKLQlyZXN1bHRbNF0gPSBjdHgtPmI7Ci0JcmVzdWx0WzVdID0gY3R4LT5iID4+IDg7Ci0JcmVzdWx0WzZdID0gY3R4LT5iID4+IDE2OwotCXJlc3VsdFs3XSA9IGN0eC0+YiA+PiAyNDsKLQlyZXN1bHRbOF0gPSBjdHgtPmM7Ci0JcmVzdWx0WzldID0gY3R4LT5jID4+IDg7Ci0JcmVzdWx0WzEwXSA9IGN0eC0+YyA+PiAxNjsKLQlyZXN1bHRbMTFdID0gY3R4LT5jID4+IDI0OwotCXJlc3VsdFsxMl0gPSBjdHgtPmQ7Ci0JcmVzdWx0WzEzXSA9IGN0eC0+ZCA+PiA4OwotCXJlc3VsdFsxNF0gPSBjdHgtPmQgPj4gMTY7Ci0JcmVzdWx0WzE1XSA9IGN0eC0+ZCA+PiAyNDsKKwlPVVQoJnJlc3VsdFswXSwgY3R4LT5hKQorCU9VVCgmcmVzdWx0WzRdLCBjdHgtPmIpCisJT1VUKCZyZXN1bHRbOF0sIGN0eC0+YykKKwlPVVQoJnJlc3VsdFsxMl0sIGN0eC0+ZCkKIAogCW1lbXNldChjdHgsIDAsIHNpemVvZigqY3R4KSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2FjaGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlNTI3YS4uMDAwMDAwMAotLS0gYS9zcmMvY2FjaGUvZnRjYWNoZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjYWNoZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIFRoZSBGcmVlVHlwZSBDYWNoaW5nIHN1Yi1zeXN0ZW0gKGJvZHkgb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jZGVmaW5lIEZUX01BS0VfT1BUSU9OX1NJTkdMRV9PQkpFQ1QKLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSAiZnRjbXJ1LmMiCi0jaW5jbHVkZSAiZnRjbWFuYWcuYyIKLSNpbmNsdWRlICJmdGNjYWNoZS5jIgotI2luY2x1ZGUgImZ0Y2NtYXAuYyIKLSNpbmNsdWRlICJmdGNnbHlwaC5jIgotI2luY2x1ZGUgImZ0Y2ltYWdlLmMiCi0jaW5jbHVkZSAiZnRjc2JpdHMuYyIKLSNpbmNsdWRlICJmdGNiYXNpYy5jIgotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNjYWNoZS5jIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKaW5kZXggYjgyYTc4OS4uZDhjNWI5OSAxMDA2NDQKLS0tIGEvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKKysrIGIvc3JjL2NhY2hlL2Z0Y2NhY2hlLmMKQEAgLTU3Niw3ICs1NzYsNyBAQAogICAgICAgRlRDX05vZGUqICBwbm9kZSAgPSBidWNrZXQ7CiAKIAotICAgICAgZm9yICg7OykKKyAgICAgIGZvciAoIDs7ICkKICAgICAgIHsKICAgICAgICAgRlRDX05vZGUgIG5vZGUgPSAqcG5vZGU7CiAgICAgICAgIEZUX0Jvb2wgICBsaXN0X2NoYW5nZWQgPSBGQUxTRTsKZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNlcnJvci5oIGIvc3JjL2NhY2hlL2Z0Y2Vycm9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YWRlYzUuLjAwMDAwMDAKLS0tIGEvc3JjL2NhY2hlL2Z0Y2Vycm9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNlcnJvci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgQ2FjaGluZyBzdWItc3lzdGVtIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBUaGlzIGZpbGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGNhY2hpbmcgc3ViLXN5c3RlbSBlcnJvciBlbnVtZXJhdGlvbiAgKi8KLSAgLyogY29uc3RhbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX0ZUQ0VSUk9SX0hfXwotI2RlZmluZSBfX0ZUQ0VSUk9SX0hfXwotCi0jaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKLQotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCi0KLSN1bmRlZiAgRlRfRVJSX1BSRUZJWAotI2RlZmluZSBGVF9FUlJfUFJFRklYICBGVENfRXJyXwotI2RlZmluZSBGVF9FUlJfQkFTRSAgICBGVF9Nb2RfRXJyX0NhY2hlCi0KLSNpbmNsdWRlIEZUX0VSUk9SU19ICi0KLSNlbmRpZiAvKiBfX0ZUQ0VSUk9SX0hfXyAqLwotCi0vKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jYWNoZS9mdGNpbWFnZS5jIGIvc3JjL2NhY2hlL2Z0Y2ltYWdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MTlhNjEuLjAwMDAwMDAKLS0tIGEvc3JjL2NhY2hlL2Z0Y2ltYWdlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgZnRjaW1hZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgIEZyZWVUeXBlIEltYWdlIGNhY2hlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCi0vKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLwotLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0jaW5jbHVkZSA8ZnQyYnVpbGQuaD4KLSNpbmNsdWRlIEZUX0NBQ0hFX0gKLSNpbmNsdWRlICJmdGNpbWFnZS5oIgotI2luY2x1ZGUgRlRfSU5URVJOQUxfTUVNT1JZX0gKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotCi0jaW5jbHVkZSAiZnRjY2JhY2suaCIKLSNpbmNsdWRlICJmdGNlcnJvci5oIgotCi0KLSAgLyogZmluYWxpemUgYSBnaXZlbiBnbHlwaCBpbWFnZSBub2RlICovCi0gIEZUX0xPQ0FMX0RFRiggdm9pZCApCi0gIGZ0Y19pbm9kZV9mcmVlKCBGVENfTm9kZSAgIGZ0Y2lub2RlLAotICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICBjYWNoZSApCi0gIHsKLSAgICBGVENfSU5vZGUgIGlub2RlID0gKEZUQ19JTm9kZSlmdGNpbm9kZTsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5tZW1vcnk7Ci0KLQotICAgIGlmICggaW5vZGUtPmdseXBoICkKLSAgICB7Ci0gICAgICBGVF9Eb25lX0dseXBoKCBpbm9kZS0+Z2x5cGggKTsKLSAgICAgIGlub2RlLT5nbHlwaCA9IE5VTEw7Ci0gICAgfQotCi0gICAgRlRDX0dOb2RlX0RvbmUoIEZUQ19HTk9ERSggaW5vZGUgKSwgY2FjaGUgKTsKLSAgICBGVF9GUkVFKCBpbm9kZSApOwotICB9Ci0KLQotICBGVF9MT0NBTF9ERUYoIHZvaWQgKQotICBGVENfSU5vZGVfRnJlZSggRlRDX0lOb2RlICBpbm9kZSwKLSAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKQotICB7Ci0gICAgZnRjX2lub2RlX2ZyZWUoIEZUQ19OT0RFKCBpbm9kZSApLCBjYWNoZSApOwotICB9Ci0KLQotICAvKiBpbml0aWFsaXplIGEgbmV3IGdseXBoIGltYWdlIG5vZGUgKi8KLSAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCi0gIEZUQ19JTm9kZV9OZXcoIEZUQ19JTm9kZSAgICpwaW5vZGUsCi0gICAgICAgICAgICAgICAgIEZUQ19HUXVlcnkgICBncXVlcnksCi0gICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgICBjYWNoZSApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IGNhY2hlLT5tZW1vcnk7Ci0gICAgRlRfRXJyb3IgICBlcnJvcjsKLSAgICBGVENfSU5vZGUgIGlub2RlICA9IE5VTEw7Ci0KLQotICAgIGlmICggIUZUX05FVyggaW5vZGUgKSApCi0gICAgewotICAgICAgRlRDX0dOb2RlICAgICAgICAgZ25vZGUgID0gRlRDX0dOT0RFKCBpbm9kZSApOwotICAgICAgRlRDX0ZhbWlseSAgICAgICAgZmFtaWx5ID0gZ3F1ZXJ5LT5mYW1pbHk7Ci0gICAgICBGVF9VSW50ICAgICAgICAgICBnaW5kZXggPSBncXVlcnktPmdpbmRleDsKLSAgICAgIEZUQ19JRmFtaWx5Q2xhc3MgIGNsYXp6ICA9IEZUQ19DQUNIRV9fSUZBTUlMWV9DTEFTUyggY2FjaGUgKTsKLQotCi0gICAgICAvKiBpbml0aWFsaXplIGl0cyBpbm5lciBmaWVsZHMgKi8KLSAgICAgIEZUQ19HTm9kZV9Jbml0KCBnbm9kZSwgZ2luZGV4LCBmYW1pbHkgKTsKLQotICAgICAgLyogd2Ugd2lsbCBub3cgbG9hZCB0aGUgZ2x5cGggaW1hZ2UgKi8KLSAgICAgIGVycm9yID0gY2xhenotPmZhbWlseV9sb2FkX2dseXBoKCBmYW1pbHksIGdpbmRleCwgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlub2RlLT5nbHlwaCApOwotICAgICAgaWYgKCBlcnJvciApCi0gICAgICB7Ci0gICAgICAgIEZUQ19JTm9kZV9GcmVlKCBpbm9kZSwgY2FjaGUgKTsKLSAgICAgICAgaW5vZGUgPSBOVUxMOwotICAgICAgfQotICAgIH0KLQotICAgICpwaW5vZGUgPSBpbm9kZTsKLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBmdGNfaW5vZGVfbmV3KCBGVENfTm9kZSAgICpmdGNwaW5vZGUsCi0gICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGZ0Y2dxdWVyeSwKLSAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUgKQotICB7Ci0gICAgRlRDX0lOb2RlICAqcGlub2RlID0gKEZUQ19JTm9kZSopZnRjcGlub2RlOwotICAgIEZUQ19HUXVlcnkgIGdxdWVyeSA9IChGVENfR1F1ZXJ5KWZ0Y2dxdWVyeTsKLQotCi0gICAgcmV0dXJuIEZUQ19JTm9kZV9OZXcoIHBpbm9kZSwgZ3F1ZXJ5LCBjYWNoZSApOwotICB9Ci0KLQotICBGVF9MT0NBTF9ERUYoIEZUX09mZnNldCApCi0gIGZ0Y19pbm9kZV93ZWlnaHQoIEZUQ19Ob2RlICAgZnRjaW5vZGUsCi0gICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgZnRjY2FjaGUgKQotICB7Ci0gICAgRlRDX0lOb2RlICBpbm9kZSA9IChGVENfSU5vZGUpZnRjaW5vZGU7Ci0gICAgRlRfT2Zmc2V0ICBzaXplICA9IDA7Ci0gICAgRlRfR2x5cGggICBnbHlwaCA9IGlub2RlLT5nbHlwaDsKLQotICAgIEZUX1VOVVNFRCggZnRjY2FjaGUgKTsKLQotCi0gICAgc3dpdGNoICggZ2x5cGgtPmZvcm1hdCApCi0gICAgewotICAgIGNhc2UgRlRfR0xZUEhfRk9STUFUX0JJVE1BUDoKLSAgICAgIHsKLSAgICAgICAgRlRfQml0bWFwR2x5cGggIGJpdGc7Ci0KLQotICAgICAgICBiaXRnID0gKEZUX0JpdG1hcEdseXBoKWdseXBoOwotICAgICAgICBzaXplID0gYml0Zy0+Yml0bWFwLnJvd3MgKiAoRlRfT2Zmc2V0KUZUX0FCUyggYml0Zy0+Yml0bWFwLnBpdGNoICkgKwotICAgICAgICAgICAgICAgc2l6ZW9mICggKmJpdGcgKTsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGVF9HTFlQSF9GT1JNQVRfT1VUTElORToKLSAgICAgIHsKLSAgICAgICAgRlRfT3V0bGluZUdseXBoICBvdXRnOwotCi0KLSAgICAgICAgb3V0ZyA9IChGVF9PdXRsaW5lR2x5cGgpZ2x5cGg7Ci0gICAgICAgIHNpemUgPSAoRlRfT2Zmc2V0KW91dGctPm91dGxpbmUubl9wb2ludHMgKgotICAgICAgICAgICAgICAgICAoIHNpemVvZiAoIEZUX1ZlY3RvciApICsgc2l6ZW9mICggRlRfQnl0ZSApICkgKwotICAgICAgICAgICAgICAgKEZUX09mZnNldClvdXRnLT5vdXRsaW5lLm5fY29udG91cnMgKiBzaXplb2YgKCBGVF9TaG9ydCApICsKLSAgICAgICAgICAgICAgIHNpemVvZiAoICpvdXRnICk7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICA7Ci0gICAgfQotCi0gICAgc2l6ZSArPSBzaXplb2YgKCAqaW5vZGUgKTsKLSAgICByZXR1cm4gc2l6ZTsKLSAgfQotCi0KLSNpZiAwCi0KLSAgRlRfTE9DQUxfREVGKCBGVF9PZmZzZXQgKQotICBGVENfSU5vZGVfV2VpZ2h0KCBGVENfSU5vZGUgIGlub2RlICkKLSAgewotICAgIHJldHVybiBmdGNfaW5vZGVfd2VpZ2h0KCBGVENfTk9ERSggaW5vZGUgKSwgTlVMTCApOwotICB9Ci0KLSNlbmRpZiAvKiAwICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjaW1hZ2UuaCBiL3NyYy9jYWNoZS9mdGNpbWFnZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzEyZWFhLi4wMDAwMDAwCi0tLSBhL3NyYy9jYWNoZS9mdGNpbWFnZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y2ltYWdlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBHZW5lcmljIEltYWdlIGNhY2hlIChzcGVjaWZpY2F0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotIC8qCi0gICogIEZUQ19JQ2FjaGUgaXMgYW4gX2Fic3RyYWN0XyBjYWNoZSB1c2VkIHRvIHN0b3JlIGEgc2luZ2xlIEZUX0dseXBoCi0gICogIGltYWdlIHBlciBjYWNoZSBub2RlLgotICAqCi0gICogIEZUQ19JQ2FjaGUgZXh0ZW5kcyBGVENfR0NhY2hlLiAgRm9yIGFuIGltcGxlbWVudGF0aW9uIGV4YW1wbGUsCi0gICogIHNlZSBGVENfSW1hZ2VDYWNoZSBpbiBgc3JjL2NhY2hlL2Z0YmFzaWMuYycuCi0gICovCi0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIEVhY2ggaW1hZ2UgY2FjaGUgcmVhbGx5IG1hbmFnZXMgRlRfR2x5cGggb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZUQ0lNQUdFX0hfXwotI2RlZmluZSBfX0ZUQ0lNQUdFX0hfXwotCi0KLSNpbmNsdWRlIDxmdDJidWlsZC5oPgotI2luY2x1ZGUgRlRfQ0FDSEVfSAotI2luY2x1ZGUgImZ0Y2dseXBoLmgiCi0KLUZUX0JFR0lOX0hFQURFUgotCi0KLSAgLyogdGhlIEZUX0dseXBoIGltYWdlIG5vZGUgdHlwZSAtIHdlIHN0b3JlIG9ubHkgMSBnbHlwaCBwZXIgbm9kZSAqLwotICB0eXBlZGVmIHN0cnVjdCAgRlRDX0lOb2RlUmVjXwotICB7Ci0gICAgRlRDX0dOb2RlUmVjICBnbm9kZTsKLSAgICBGVF9HbHlwaCAgICAgIGdseXBoOwotCi0gIH0gRlRDX0lOb2RlUmVjLCAqRlRDX0lOb2RlOwotCi0jZGVmaW5lIEZUQ19JTk9ERSggeCApICAgICAgICAgKCAoRlRDX0lOb2RlKSggeCApICkKLSNkZWZpbmUgRlRDX0lOT0RFX0dJTkRFWCggeCApICBGVENfR05PREUoeCktPmdpbmRleAotI2RlZmluZSBGVENfSU5PREVfRkFNSUxZKCB4ICkgIEZUQ19HTk9ERSh4KS0+ZmFtaWx5Ci0KLSAgdHlwZWRlZiBGVF9FcnJvcgotICAoKkZUQ19JRmFtaWx5X0xvYWRHbHlwaEZ1bmMpKCBGVENfRmFtaWx5ICBmYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX0NhY2hlICAgY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0dseXBoICAgKmFnbHlwaCApOwotCi0gIHR5cGVkZWYgc3RydWN0ICBGVENfSUZhbWlseUNsYXNzUmVjXwotICB7Ci0gICAgRlRDX01ydUxpc3RDbGFzc1JlYyAgICAgICAgY2xheno7Ci0gICAgRlRDX0lGYW1pbHlfTG9hZEdseXBoRnVuYyAgZmFtaWx5X2xvYWRfZ2x5cGg7Ci0KLSAgfSBGVENfSUZhbWlseUNsYXNzUmVjOwotCi0gIHR5cGVkZWYgY29uc3QgRlRDX0lGYW1pbHlDbGFzc1JlYyogIEZUQ19JRmFtaWx5Q2xhc3M7Ci0KLSNkZWZpbmUgRlRDX0lGQU1JTFlfQ0xBU1MoIHggKSAgKChGVENfSUZhbWlseUNsYXNzKSh4KSkKLQotI2RlZmluZSBGVENfQ0FDSEVfX0lGQU1JTFlfQ0xBU1MoIHggKSBcCi0gICAgICAgICAgRlRDX0lGQU1JTFlfQ0xBU1MoIEZUQ19DQUNIRV9fR0NBQ0hFX0NMQVNTKHgpLT5mYW1pbHlfY2xhc3MgKQotCi0KLSAgLyogY2FuIGJlIHVzZWQgYXMgYSBARlRDX05vZGVfRnJlZUZ1bmMgKi8KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBGVENfSU5vZGVfRnJlZSggRlRDX0lOb2RlICBpbm9kZSwKLSAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgKTsKLQotICAvKiBDYW4gYmUgdXNlZCBhcyBARlRDX05vZGVfTmV3RnVuYy4gIGBncXVlcnkuaW5kZXgnIGFuZCBgZ3F1ZXJ5LmZhbWlseScKLSAgICogbXVzdCBiZSBzZXQgY29ycmVjdGx5LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwgdGhlIGBmYW1pbHlfbG9hZF9nbHlwaCcKLSAgICogbWV0aG9kIHRvIGxvYWQgdGhlIEZUX0dseXBoIGludG8gdGhlIGNhY2hlIG5vZGUuCi0gICAqLwotICBGVF9MT0NBTCggRlRfRXJyb3IgKQotICBGVENfSU5vZGVfTmV3KCBGVENfSU5vZGUgICAqcGlub2RlLAotICAgICAgICAgICAgICAgICBGVENfR1F1ZXJ5ICAgZ3F1ZXJ5LAotICAgICAgICAgICAgICAgICBGVENfQ2FjaGUgICAgY2FjaGUgKTsKLQotI2lmIDAKLSAgLyogY2FuIGJlIHVzZWQgYXMgQEZUQ19Ob2RlX1dlaWdodEZ1bmMgKi8KLSAgRlRfTE9DQUwoIEZUX1VMb25nICkKLSAgRlRDX0lOb2RlX1dlaWdodCggRlRDX0lOb2RlICBpbm9kZSApOwotI2VuZGlmCi0KLQotIC8qICovCi0KLUZUX0VORF9IRUFERVIKLQotI2VuZGlmIC8qIF9fRlRDSU1BR0VfSF9fICovCi0KLQotLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2FjaGUvZnRjbWFuYWcuYyBiL3NyYy9jYWNoZS9mdGNtYW5hZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTg2MTRjLi4wMDAwMDAwCi0tLSBhL3NyYy9jYWNoZS9mdGNtYW5hZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzAzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIGZ0Y21hbmFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBGcmVlVHlwZSBDYWNoZSBNYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCi0vKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLwotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KLS8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCi0vKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9DQUNIRV9ICi0jaW5jbHVkZSAiZnRjbWFuYWcuaCIKLSNpbmNsdWRlIEZUX0lOVEVSTkFMX09CSkVDVFNfSAotI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAotI2luY2x1ZGUgRlRfU0laRVNfSAotCi0jaW5jbHVkZSAiZnRjY2JhY2suaCIKLSNpbmNsdWRlICJmdGNlcnJvci5oIgotCi0jaWZkZWYgRlRfQ09ORklHX09QVElPTl9QSUMKLSNlcnJvciAiY2FjaGUgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgUElDIHlldCIKLSNlbmRpZgotCi0KLSN1bmRlZiAgRlRfQ09NUE9ORU5UCi0jZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfY2FjaGUKLQotCi0gIHN0YXRpYyBGVF9FcnJvcgotICBmdGNfc2NhbGVyX2xvb2t1cF9zaXplKCBGVENfTWFuYWdlciAgbWFuYWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRDX1NjYWxlciAgIHNjYWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfU2l6ZSAgICAgKmFzaXplICkKLSAgewotICAgIEZUX0ZhY2UgICBmYWNlOwotICAgIEZUX1NpemUgICBzaXplID0gTlVMTDsKLSAgICBGVF9FcnJvciAgZXJyb3I7Ci0KLQotICAgIGVycm9yID0gRlRDX01hbmFnZXJfTG9va3VwRmFjZSggbWFuYWdlciwgc2NhbGVyLT5mYWNlX2lkLCAmZmFjZSApOwotICAgIGlmICggZXJyb3IgKQotICAgICAgZ290byBFeGl0OwotCi0gICAgZXJyb3IgPSBGVF9OZXdfU2l6ZSggZmFjZSwgJnNpemUgKTsKLSAgICBpZiAoIGVycm9yICkKLSAgICAgIGdvdG8gRXhpdDsKLQotICAgIEZUX0FjdGl2YXRlX1NpemUoIHNpemUgKTsKLQotICAgIGlmICggc2NhbGVyLT5waXhlbCApCi0gICAgICBlcnJvciA9IEZUX1NldF9QaXhlbF9TaXplcyggZmFjZSwgc2NhbGVyLT53aWR0aCwgc2NhbGVyLT5oZWlnaHQgKTsKLSAgICBlbHNlCi0gICAgICBlcnJvciA9IEZUX1NldF9DaGFyX1NpemUoIGZhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9GMjZEb3Q2KXNjYWxlci0+d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGVF9GMjZEb3Q2KXNjYWxlci0+aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXItPnhfcmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXItPnlfcmVzICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgewotICAgICAgRlRfRG9uZV9TaXplKCBzaXplICk7Ci0gICAgICBzaXplID0gTlVMTDsKLSAgICB9Ci0KLSAgRXhpdDoKLSAgICAqYXNpemUgPSBzaXplOwotICAgIHJldHVybiBlcnJvcjsKLSAgfQotCi0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19TaXplTm9kZVJlY18KLSAgewotICAgIEZUQ19NcnVOb2RlUmVjICBub2RlOwotICAgIEZUX1NpemUgICAgICAgICBzaXplOwotICAgIEZUQ19TY2FsZXJSZWMgICBzY2FsZXI7Ci0KLSAgfSBGVENfU2l6ZU5vZGVSZWMsICpGVENfU2l6ZU5vZGU7Ci0KLSNkZWZpbmUgRlRDX1NJWkVfTk9ERSggeCApICggKEZUQ19TaXplTm9kZSkoIHggKSApCi0KLQotICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQotICBmdGNfc2l6ZV9ub2RlX2RvbmUoIEZUQ19NcnVOb2RlICBmdGNub2RlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBkYXRhICkKLSAgewotICAgIEZUQ19TaXplTm9kZSAgbm9kZSA9IChGVENfU2l6ZU5vZGUpZnRjbm9kZTsKLSAgICBGVF9TaXplICAgICAgIHNpemUgPSBub2RlLT5zaXplOwotICAgIEZUX1VOVVNFRCggZGF0YSApOwotCi0KLSAgICBpZiAoIHNpemUgKQotICAgICAgRlRfRG9uZV9TaXplKCBzaXplICk7Ci0gIH0KLQotCi0gIEZUX0NBTExCQUNLX0RFRiggRlRfQm9vbCApCi0gIGZ0Y19zaXplX25vZGVfY29tcGFyZSggRlRDX01ydU5vZGUgIGZ0Y25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y3NjYWxlciApCi0gIHsKLSAgICBGVENfU2l6ZU5vZGUgIG5vZGUgICAgPSAoRlRDX1NpemVOb2RlKWZ0Y25vZGU7Ci0gICAgRlRDX1NjYWxlciAgICBzY2FsZXIgID0gKEZUQ19TY2FsZXIpZnRjc2NhbGVyOwotICAgIEZUQ19TY2FsZXIgICAgc2NhbGVyMCA9ICZub2RlLT5zY2FsZXI7Ci0KLQotICAgIGlmICggRlRDX1NDQUxFUl9DT01QQVJFKCBzY2FsZXIwLCBzY2FsZXIgKSApCi0gICAgewotICAgICAgRlRfQWN0aXZhdGVfU2l6ZSggbm9kZS0+c2l6ZSApOwotICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotICB9Ci0KLQotICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKLSAgZnRjX3NpemVfbm9kZV9pbml0KCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjc2NhbGVyLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNtYW5hZ2VyICkKLSAgewotICAgIEZUQ19TaXplTm9kZSAgbm9kZSAgICA9IChGVENfU2l6ZU5vZGUpZnRjbm9kZTsKLSAgICBGVENfU2NhbGVyICAgIHNjYWxlciAgPSAoRlRDX1NjYWxlcilmdGNzY2FsZXI7Ci0gICAgRlRDX01hbmFnZXIgICBtYW5hZ2VyID0gKEZUQ19NYW5hZ2VyKWZ0Y21hbmFnZXI7Ci0KLQotICAgIG5vZGUtPnNjYWxlciA9IHNjYWxlclswXTsKLQotICAgIHJldHVybiBmdGNfc2NhbGVyX2xvb2t1cF9zaXplKCBtYW5hZ2VyLCBzY2FsZXIsICZub2RlLT5zaXplICk7Ci0gIH0KLQotCi0gIEZUX0NBTExCQUNLX0RFRiggRlRfRXJyb3IgKQotICBmdGNfc2l6ZV9ub2RlX3Jlc2V0KCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y3NjYWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y21hbmFnZXIgKQotICB7Ci0gICAgRlRDX1NpemVOb2RlICBub2RlICAgID0gKEZUQ19TaXplTm9kZSlmdGNub2RlOwotICAgIEZUQ19TY2FsZXIgICAgc2NhbGVyICA9IChGVENfU2NhbGVyKWZ0Y3NjYWxlcjsKLSAgICBGVENfTWFuYWdlciAgIG1hbmFnZXIgPSAoRlRDX01hbmFnZXIpZnRjbWFuYWdlcjsKLQotCi0gICAgRlRfRG9uZV9TaXplKCBub2RlLT5zaXplICk7Ci0KLSAgICBub2RlLT5zY2FsZXIgPSBzY2FsZXJbMF07Ci0KLSAgICByZXR1cm4gZnRjX3NjYWxlcl9sb29rdXBfc2l6ZSggbWFuYWdlciwgc2NhbGVyLCAmbm9kZS0+c2l6ZSApOwotICB9Ci0KLQotICBzdGF0aWMKLSAgY29uc3QgRlRDX01ydUxpc3RDbGFzc1JlYyAgZnRjX3NpemVfbGlzdF9jbGFzcyA9Ci0gIHsKLSAgICBzaXplb2YgKCBGVENfU2l6ZU5vZGVSZWMgKSwKLSAgICBmdGNfc2l6ZV9ub2RlX2NvbXBhcmUsCi0gICAgZnRjX3NpemVfbm9kZV9pbml0LAotICAgIGZ0Y19zaXplX25vZGVfcmVzZXQsCi0gICAgZnRjX3NpemVfbm9kZV9kb25lCi0gIH07Ci0KLQotICAvKiBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmdGNfZmFjZV9ub2RlX2RvbmUgKi8KLSAgc3RhdGljIEZUX0Jvb2wKLSAgZnRjX3NpemVfbm9kZV9jb21wYXJlX2ZhY2VpZCggRlRDX01ydU5vZGUgIGZ0Y25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNmYWNlX2lkICkKLSAgewotICAgIEZUQ19TaXplTm9kZSAgbm9kZSAgICA9IChGVENfU2l6ZU5vZGUpZnRjbm9kZTsKLSAgICBGVENfRmFjZUlEICAgIGZhY2VfaWQgPSAoRlRDX0ZhY2VJRClmdGNmYWNlX2lkOwotCi0KLSAgICByZXR1cm4gRlRfQk9PTCggbm9kZS0+c2NhbGVyLmZhY2VfaWQgPT0gZmFjZV9pZCApOwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRDX01hbmFnZXJfTG9va3VwU2l6ZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19TY2FsZXIgICBzY2FsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemUgICAgICphc2l6ZSApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7Ci0gICAgRlRDX01ydU5vZGUgIG1ydW5vZGU7Ci0KLQotICAgIGlmICggIWFzaXplIHx8ICFzY2FsZXIgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7Ci0KLSAgICAqYXNpemUgPSBOVUxMOwotCi0gICAgaWYgKCAhbWFuYWdlciApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQ2FjaGVfSGFuZGxlICk7Ci0KLSNpZmRlZiBGVENfSU5MSU5FCi0KLSAgICBGVENfTVJVTElTVF9MT09LVVBfQ01QKCAmbWFuYWdlci0+c2l6ZXMsIHNjYWxlciwgZnRjX3NpemVfbm9kZV9jb21wYXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ydW5vZGUsIGVycm9yICk7Ci0KLSNlbHNlCi0gICAgZXJyb3IgPSBGVENfTXJ1TGlzdF9Mb29rdXAoICZtYW5hZ2VyLT5zaXplcywgc2NhbGVyLCAmbXJ1bm9kZSApOwotI2VuZGlmCi0KLSAgICBpZiAoICFlcnJvciApCi0gICAgICAqYXNpemUgPSBGVENfU0laRV9OT0RFKCBtcnVub2RlICktPnNpemU7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICAgICAgRkFDRSBNUlUgSU1QTEVNRU5UQVRJT04gICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0gIHR5cGVkZWYgc3RydWN0ICBGVENfRmFjZU5vZGVSZWNfCi0gIHsKLSAgICBGVENfTXJ1Tm9kZVJlYyAgbm9kZTsKLSAgICBGVENfRmFjZUlEICAgICAgZmFjZV9pZDsKLSAgICBGVF9GYWNlICAgICAgICAgZmFjZTsKLQotICB9IEZUQ19GYWNlTm9kZVJlYywgKkZUQ19GYWNlTm9kZTsKLQotI2RlZmluZSBGVENfRkFDRV9OT0RFKCB4ICkgKCAoIEZUQ19GYWNlTm9kZSApKCB4ICkgKQotCi0KLSAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCi0gIGZ0Y19mYWNlX25vZGVfaW5pdCggRlRDX01ydU5vZGUgIGZ0Y25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y2ZhY2VfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGZ0Y21hbmFnZXIgKQotICB7Ci0gICAgRlRDX0ZhY2VOb2RlICBub2RlICAgID0gKEZUQ19GYWNlTm9kZSlmdGNub2RlOwotICAgIEZUQ19GYWNlSUQgICAgZmFjZV9pZCA9IChGVENfRmFjZUlEKWZ0Y2ZhY2VfaWQ7Ci0gICAgRlRDX01hbmFnZXIgICBtYW5hZ2VyID0gKEZUQ19NYW5hZ2VyKWZ0Y21hbmFnZXI7Ci0gICAgRlRfRXJyb3IgICAgICBlcnJvcjsKLQotCi0gICAgbm9kZS0+ZmFjZV9pZCA9IGZhY2VfaWQ7Ci0KLSAgICBlcnJvciA9IG1hbmFnZXItPnJlcXVlc3RfZmFjZSggZmFjZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci0+bGlicmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci0+cmVxdWVzdF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbm9kZS0+ZmFjZSApOwotICAgIGlmICggIWVycm9yICkKLSAgICB7Ci0gICAgICAvKiBkZXN0cm95IGluaXRpYWwgc2l6ZSBvYmplY3Q7IGl0IHdpbGwgYmUgcmUtY3JlYXRlZCBsYXRlciAqLwotICAgICAgaWYgKCBub2RlLT5mYWNlLT5zaXplICkKLSAgICAgICAgRlRfRG9uZV9TaXplKCBub2RlLT5mYWNlLT5zaXplICk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICBGVF9DQUxMQkFDS19ERUYoIHZvaWQgKQotICBmdGNfZmFjZV9ub2RlX2RvbmUoIEZUQ19NcnVOb2RlICBmdGNub2RlLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBmdGNtYW5hZ2VyICkKLSAgewotICAgIEZUQ19GYWNlTm9kZSAgbm9kZSAgICA9IChGVENfRmFjZU5vZGUpZnRjbm9kZTsKLSAgICBGVENfTWFuYWdlciAgIG1hbmFnZXIgPSAoRlRDX01hbmFnZXIpZnRjbWFuYWdlcjsKLQotCi0gICAgLyogd2UgbXVzdCBiZWdpbiBieSByZW1vdmluZyBhbGwgc2NhbGVycyBmb3IgdGhlIHRhcmdldCBmYWNlICovCi0gICAgLyogZnJvbSB0aGUgbWFuYWdlcidzIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKCAmbWFuYWdlci0+c2l6ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGNfc2l6ZV9ub2RlX2NvbXBhcmVfZmFjZWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+ZmFjZV9pZCApOwotCi0gICAgLyogYWxsIHJpZ2h0LCB3ZSBjYW4gZGlzY2FyZCB0aGUgZmFjZSBub3cgKi8KLSAgICBGVF9Eb25lX0ZhY2UoIG5vZGUtPmZhY2UgKTsKLSAgICBub2RlLT5mYWNlICAgID0gTlVMTDsKLSAgICBub2RlLT5mYWNlX2lkID0gTlVMTDsKLSAgfQotCi0KLSAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9Cb29sICkKLSAgZnRjX2ZhY2Vfbm9kZV9jb21wYXJlKCBGVENfTXJ1Tm9kZSAgZnRjbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgZnRjZmFjZV9pZCApCi0gIHsKLSAgICBGVENfRmFjZU5vZGUgIG5vZGUgICAgPSAoRlRDX0ZhY2VOb2RlKWZ0Y25vZGU7Ci0gICAgRlRDX0ZhY2VJRCAgICBmYWNlX2lkID0gKEZUQ19GYWNlSUQpZnRjZmFjZV9pZDsKLQotCi0gICAgcmV0dXJuIEZUX0JPT0woIG5vZGUtPmZhY2VfaWQgPT0gZmFjZV9pZCApOwotICB9Ci0KLQotICBzdGF0aWMKLSAgY29uc3QgRlRDX01ydUxpc3RDbGFzc1JlYyAgZnRjX2ZhY2VfbGlzdF9jbGFzcyA9Ci0gIHsKLSAgICBzaXplb2YgKCBGVENfRmFjZU5vZGVSZWMpLAotCi0gICAgZnRjX2ZhY2Vfbm9kZV9jb21wYXJlLAotICAgIGZ0Y19mYWNlX25vZGVfaW5pdCwKLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRlRDX01ydU5vZGVfUmVzZXRGdW5jICovCi0gICAgZnRjX2ZhY2Vfbm9kZV9kb25lCi0gIH07Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIEZUX0Vycm9yICkKLSAgRlRDX01hbmFnZXJfTG9va3VwRmFjZSggRlRDX01hbmFnZXIgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19GYWNlSUQgICBmYWNlX2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKQotICB7Ci0gICAgRlRfRXJyb3IgICAgIGVycm9yOwotICAgIEZUQ19NcnVOb2RlICBtcnVub2RlOwotCi0KLSAgICBpZiAoICFhZmFjZSB8fCAhZmFjZV9pZCApCi0gICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKLQotICAgICphZmFjZSA9IE5VTEw7Ci0KLSAgICBpZiAoICFtYW5hZ2VyICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9DYWNoZV9IYW5kbGUgKTsKLQotICAgIC8qIHdlIGJyZWFrIGVuY2Fwc3VsYXRpb24gZm9yIHRoZSBzYWtlIG9mIHNwZWVkICovCi0jaWZkZWYgRlRDX0lOTElORQotCi0gICAgRlRDX01SVUxJU1RfTE9PS1VQX0NNUCggJm1hbmFnZXItPmZhY2VzLCBmYWNlX2lkLCBmdGNfZmFjZV9ub2RlX2NvbXBhcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXJ1bm9kZSwgZXJyb3IgKTsKLQotI2Vsc2UKLSAgICBlcnJvciA9IEZUQ19NcnVMaXN0X0xvb2t1cCggJm1hbmFnZXItPmZhY2VzLCBmYWNlX2lkLCAmbXJ1bm9kZSApOwotI2VuZGlmCi0KLSAgICBpZiAoICFlcnJvciApCi0gICAgICAqYWZhY2UgPSBGVENfRkFDRV9OT0RFKCBtcnVub2RlICktPmZhY2U7Ci0KLSAgICByZXR1cm4gZXJyb3I7Ci0gIH0KLQotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCi0gIC8qKioqKiAgICAgICAgICAgICAgICAgICAgQ0FDSEUgTUFOQUdFUiBST1VUSU5FUyAgICAgICAgICAgICAgICAgICAgICoqKioqLwotICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNhY2hlLmggKi8KLQotICBGVF9FWFBPUlRfREVGKCBGVF9FcnJvciApCi0gIEZUQ19NYW5hZ2VyX05ldyggRlRfTGlicmFyeSAgICAgICAgICBsaWJyYXJ5LAotICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgbWF4X2ZhY2VzLAotICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgICAgICAgbWF4X3NpemVzLAotICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgICAgICAgbWF4X2J5dGVzLAotICAgICAgICAgICAgICAgICAgIEZUQ19GYWNlX1JlcXVlc3RlciAgcmVxdWVzdGVyLAotICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgcmVxX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgRlRDX01hbmFnZXIgICAgICAgICphbWFuYWdlciApCi0gIHsKLSAgICBGVF9FcnJvciAgICAgZXJyb3I7Ci0gICAgRlRfTWVtb3J5ICAgIG1lbW9yeTsKLSAgICBGVENfTWFuYWdlciAgbWFuYWdlciA9IDA7Ci0KLQotICAgIGlmICggIWxpYnJhcnkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0xpYnJhcnlfSGFuZGxlICk7Ci0KLSAgICBpZiAoICFhbWFuYWdlciB8fCAhcmVxdWVzdGVyICkKLSAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOwotCi0gICAgbWVtb3J5ID0gbGlicmFyeS0+bWVtb3J5OwotCi0gICAgaWYgKCBGVF9ORVcoIG1hbmFnZXIgKSApCi0gICAgICBnb3RvIEV4aXQ7Ci0KLSAgICBpZiAoIG1heF9mYWNlcyA9PSAwICkKLSAgICAgIG1heF9mYWNlcyA9IEZUQ19NQVhfRkFDRVNfREVGQVVMVDsKLQotICAgIGlmICggbWF4X3NpemVzID09IDAgKQotICAgICAgbWF4X3NpemVzID0gRlRDX01BWF9TSVpFU19ERUZBVUxUOwotCi0gICAgaWYgKCBtYXhfYnl0ZXMgPT0gMCApCi0gICAgICBtYXhfYnl0ZXMgPSBGVENfTUFYX0JZVEVTX0RFRkFVTFQ7Ci0KLSAgICBtYW5hZ2VyLT5saWJyYXJ5ICAgICAgPSBsaWJyYXJ5OwotICAgIG1hbmFnZXItPm1lbW9yeSAgICAgICA9IG1lbW9yeTsKLSAgICBtYW5hZ2VyLT5tYXhfd2VpZ2h0ICAgPSBtYXhfYnl0ZXM7Ci0KLSAgICBtYW5hZ2VyLT5yZXF1ZXN0X2ZhY2UgPSByZXF1ZXN0ZXI7Ci0gICAgbWFuYWdlci0+cmVxdWVzdF9kYXRhID0gcmVxX2RhdGE7Ci0KLSAgICBGVENfTXJ1TGlzdF9Jbml0KCAmbWFuYWdlci0+ZmFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgJmZ0Y19mYWNlX2xpc3RfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgbWF4X2ZhY2VzLAotICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7Ci0KLSAgICBGVENfTXJ1TGlzdF9Jbml0KCAmbWFuYWdlci0+c2l6ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgJmZ0Y19zaXplX2xpc3RfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgbWF4X3NpemVzLAotICAgICAgICAgICAgICAgICAgICAgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgbWVtb3J5ICk7Ci0KLSAgICAqYW1hbmFnZXIgPSBtYW5hZ2VyOwotCi0gIEV4aXQ6Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQotICBGVENfTWFuYWdlcl9Eb25lKCBGVENfTWFuYWdlciAgbWFuYWdlciApCi0gIHsKLSAgICBGVF9NZW1vcnkgIG1lbW9yeTsKLSAgICBGVF9VSW50ICAgIGlkeDsKLQotCi0gICAgaWYgKCAhbWFuYWdlciB8fCAhbWFuYWdlci0+bGlicmFyeSApCi0gICAgICByZXR1cm47Ci0KLSAgICBtZW1vcnkgPSBtYW5hZ2VyLT5tZW1vcnk7Ci0KLSAgICAvKiBub3cgZGlzY2FyZCBhbGwgY2FjaGVzICovCi0gICAgZm9yIChpZHggPSBtYW5hZ2VyLT5udW1fY2FjaGVzOyBpZHgtLSA+IDA7ICkKLSAgICB7Ci0gICAgICBGVENfQ2FjaGUgIGNhY2hlID0gbWFuYWdlci0+Y2FjaGVzW2lkeF07Ci0KLQotICAgICAgaWYgKCBjYWNoZSApCi0gICAgICB7Ci0gICAgICAgIGNhY2hlLT5jbGF6ei5jYWNoZV9kb25lKCBjYWNoZSApOwotICAgICAgICBGVF9GUkVFKCBjYWNoZSApOwotICAgICAgICBtYW5hZ2VyLT5jYWNoZXNbaWR4XSA9IE5VTEw7Ci0gICAgICB9Ci0gICAgfQotICAgIG1hbmFnZXItPm51bV9jYWNoZXMgPSAwOwotCi0gICAgLyogZGlzY2FyZCBmYWNlcyBhbmQgc2l6ZXMgKi8KLSAgICBGVENfTXJ1TGlzdF9Eb25lKCAmbWFuYWdlci0+c2l6ZXMgKTsKLSAgICBGVENfTXJ1TGlzdF9Eb25lKCAmbWFuYWdlci0+ZmFjZXMgKTsKLQotICAgIG1hbmFnZXItPmxpYnJhcnkgPSBOVUxMOwotICAgIG1hbmFnZXItPm1lbW9yeSAgPSBOVUxMOwotCi0gICAgRlRfRlJFRSggbWFuYWdlciApOwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQotICBGVENfTWFuYWdlcl9SZXNldCggRlRDX01hbmFnZXIgIG1hbmFnZXIgKQotICB7Ci0gICAgaWYgKCAhbWFuYWdlciApCi0gICAgICByZXR1cm47Ci0KLSAgICBGVENfTXJ1TGlzdF9SZXNldCggJm1hbmFnZXItPnNpemVzICk7Ci0gICAgRlRDX01ydUxpc3RfUmVzZXQoICZtYW5hZ2VyLT5mYWNlcyApOwotCi0gICAgRlRDX01hbmFnZXJfRmx1c2hOKCBtYW5hZ2VyLCBtYW5hZ2VyLT5udW1fbm9kZXMgKTsKLSAgfQotCi0KLSNpZmRlZiBGVF9ERUJVR19FUlJPUgotCi0gIHN0YXRpYyB2b2lkCi0gIEZUQ19NYW5hZ2VyX0NoZWNrKCBGVENfTWFuYWdlciAgbWFuYWdlciApCi0gIHsKLSAgICBGVENfTm9kZSAgbm9kZSwgZmlyc3Q7Ci0KLQotICAgIGZpcnN0ID0gbWFuYWdlci0+bm9kZXNfbGlzdDsKLQotICAgIC8qIGNoZWNrIG5vZGUgd2VpZ2h0cyAqLwotICAgIGlmICggZmlyc3QgKQotICAgIHsKLSAgICAgIEZUX09mZnNldCAgd2VpZ2h0ID0gMDsKLQotCi0gICAgICBub2RlID0gZmlyc3Q7Ci0KLSAgICAgIGRvCi0gICAgICB7Ci0gICAgICAgIEZUQ19DYWNoZSAgY2FjaGUgPSBtYW5hZ2VyLT5jYWNoZXNbbm9kZS0+Y2FjaGVfaW5kZXhdOwotCi0KLSAgICAgICAgaWYgKCAoRlRfVUludClub2RlLT5jYWNoZV9pbmRleCA+PSBtYW5hZ2VyLT5udW1fY2FjaGVzICkKLSAgICAgICAgICBGVF9UUkFDRTAoKCAiRlRDX01hbmFnZXJfQ2hlY2s6IGludmFsaWQgbm9kZSAoY2FjaGUgaW5kZXggPSAlbGRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2FjaGVfaW5kZXggKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICB3ZWlnaHQgKz0gY2FjaGUtPmNsYXp6Lm5vZGVfd2VpZ2h0KCBub2RlLCBjYWNoZSApOwotCi0gICAgICAgIG5vZGUgPSBGVENfTk9ERV9fTkVYVCggbm9kZSApOwotCi0gICAgICB9IHdoaWxlICggbm9kZSAhPSBmaXJzdCApOwotCi0gICAgICBpZiAoIHdlaWdodCAhPSBtYW5hZ2VyLT5jdXJfd2VpZ2h0ICkKLSAgICAgICAgRlRfVFJBQ0UwKCggIkZUQ19NYW5hZ2VyX0NoZWNrOiBpbnZhbGlkIHdlaWdodCAlbGQgaW5zdGVhZCBvZiAlbGRcbiIsCi0gICAgICAgICAgICAgICAgICAgIG1hbmFnZXItPmN1cl93ZWlnaHQsIHdlaWdodCApKTsKLSAgICB9Ci0KLSAgICAvKiBjaGVjayBjaXJjdWxhciBsaXN0ICovCi0gICAgaWYgKCBmaXJzdCApCi0gICAgewotICAgICAgRlRfVUZhc3QgIGNvdW50ID0gMDsKLQotCi0gICAgICBub2RlID0gZmlyc3Q7Ci0gICAgICBkbwotICAgICAgewotICAgICAgICBjb3VudCsrOwotICAgICAgICBub2RlID0gRlRDX05PREVfX05FWFQoIG5vZGUgKTsKLQotICAgICAgfSB3aGlsZSAoIG5vZGUgIT0gZmlyc3QgKTsKLQotICAgICAgaWYgKCBjb3VudCAhPSBtYW5hZ2VyLT5udW1fbm9kZXMgKQotICAgICAgICBGVF9UUkFDRTAoKCAiRlRDX01hbmFnZXJfQ2hlY2s6IgotICAgICAgICAgICAgICAgICAgICAiIGludmFsaWQgY2FjaGUgbm9kZSBjb3VudCAlZCBpbnN0ZWFkIG9mICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLT5udW1fbm9kZXMsIGNvdW50ICkpOwotICAgIH0KLSAgfQotCi0jZW5kaWYgLyogRlRfREVCVUdfRVJST1IgKi8KLQotCi0gIC8qIGBDb21wcmVzcycgdGhlIG1hbmFnZXIncyBkYXRhLCBpLmUuLCBnZXQgcmlkIG9mIG9sZCBjYWNoZSBub2RlcyAqLwotICAvKiB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBhbnltb3JlIGluIG9yZGVyIHRvIGxpbWl0IHRoZSB0b3RhbCAgICAgKi8KLSAgLyogbWVtb3J5IHVzZWQgYnkgdGhlIGNhY2hlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogZG9jdW1lbnRhdGlvbiBpcyBpbiBmdGNtYW5hZy5oICovCi0KLSAgRlRfTE9DQUxfREVGKCB2b2lkICkKLSAgRlRDX01hbmFnZXJfQ29tcHJlc3MoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKLSAgewotICAgIEZUQ19Ob2RlICAgbm9kZSwgZmlyc3Q7Ci0KLQotICAgIGlmICggIW1hbmFnZXIgKQotICAgICAgcmV0dXJuOwotCi0gICAgZmlyc3QgPSBtYW5hZ2VyLT5ub2Rlc19saXN0OwotCi0jaWZkZWYgRlRfREVCVUdfRVJST1IKLSAgICBGVENfTWFuYWdlcl9DaGVjayggbWFuYWdlciApOwotCi0gICAgRlRfVFJBQ0UwKCggImNvbXByZXNzaW5nLCB3ZWlnaHQgPSAlbGQsIG1heCA9ICVsZCwgbm9kZXMgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICBtYW5hZ2VyLT5jdXJfd2VpZ2h0LCBtYW5hZ2VyLT5tYXhfd2VpZ2h0LAotICAgICAgICAgICAgICAgIG1hbmFnZXItPm51bV9ub2RlcyApKTsKLSNlbmRpZgotCi0gICAgaWYgKCBtYW5hZ2VyLT5jdXJfd2VpZ2h0IDwgbWFuYWdlci0+bWF4X3dlaWdodCB8fCBmaXJzdCA9PSBOVUxMICkKLSAgICAgIHJldHVybjsKLQotICAgIC8qIGdvIHRvIGxhc3Qgbm9kZSAtLSBpdCdzIGEgY2lyY3VsYXIgbGlzdCAqLwotICAgIG5vZGUgPSBGVENfTk9ERV9fUFJFViggZmlyc3QgKTsKLSAgICBkbwotICAgIHsKLSAgICAgIEZUQ19Ob2RlICBwcmV2OwotCi0KLSAgICAgIHByZXYgPSAoIG5vZGUgPT0gZmlyc3QgKSA/IE5VTEwgOiBGVENfTk9ERV9fUFJFViggbm9kZSApOwotCi0gICAgICBpZiAoIG5vZGUtPnJlZl9jb3VudCA8PSAwICkKLSAgICAgICAgZnRjX25vZGVfZGVzdHJveSggbm9kZSwgbWFuYWdlciApOwotCi0gICAgICBub2RlID0gcHJldjsKLQotICAgIH0gd2hpbGUgKCBub2RlICYmIG1hbmFnZXItPmN1cl93ZWlnaHQgPiBtYW5hZ2VyLT5tYXhfd2VpZ2h0ICk7Ci0gIH0KLQotCi0gIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjbWFuYWcuaCAqLwotCi0gIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQotICBGVENfTWFuYWdlcl9SZWdpc3RlckNhY2hlKCBGVENfTWFuYWdlciAgICAgIG1hbmFnZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZUNsYXNzICAgY2xhenosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19DYWNoZSAgICAgICAqYWNhY2hlICkKLSAgewotICAgIEZUX0Vycm9yICAgZXJyb3IgPSBGVF9FUlIoIEludmFsaWRfQXJndW1lbnQgKTsKLSAgICBGVENfQ2FjaGUgIGNhY2hlID0gTlVMTDsKLQotCi0gICAgaWYgKCBtYW5hZ2VyICYmIGNsYXp6ICYmIGFjYWNoZSApCi0gICAgewotICAgICAgRlRfTWVtb3J5ICBtZW1vcnkgPSBtYW5hZ2VyLT5tZW1vcnk7Ci0KLQotICAgICAgaWYgKCBtYW5hZ2VyLT5udW1fY2FjaGVzID49IEZUQ19NQVhfQ0FDSEVTICkKLSAgICAgIHsKLSAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggVG9vX01hbnlfQ2FjaGVzICk7Ci0gICAgICAgIEZUX0VSUk9SKCggIkZUQ19NYW5hZ2VyX1JlZ2lzdGVyQ2FjaGU6IgotICAgICAgICAgICAgICAgICAgICIgdG9vIG1hbnkgcmVnaXN0ZXJlZCBjYWNoZXNcbiIgKSk7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICAgIH0KLQotICAgICAgaWYgKCAhRlRfQUxMT0MoIGNhY2hlLCBjbGF6ei0+Y2FjaGVfc2l6ZSApICkKLSAgICAgIHsKLSAgICAgICAgY2FjaGUtPm1hbmFnZXIgICA9IG1hbmFnZXI7Ci0gICAgICAgIGNhY2hlLT5tZW1vcnkgICAgPSBtZW1vcnk7Ci0gICAgICAgIGNhY2hlLT5jbGF6eiAgICAgPSBjbGF6elswXTsKLSAgICAgICAgY2FjaGUtPm9yZ19jbGFzcyA9IGNsYXp6OwotCi0gICAgICAgIC8qIFRISVMgSVMgVkVSWSBJTVBPUlRBTlQhICBJVCBXSUxMIFdSRVRDSCBUSEUgTUFOQUdFUiAqLwotICAgICAgICAvKiBJRiBJVCBJUyBOT1QgU0VUIENPUlJFQ1RMWSAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgY2FjaGUtPmluZGV4ID0gbWFuYWdlci0+bnVtX2NhY2hlczsKLQotICAgICAgICBlcnJvciA9IGNsYXp6LT5jYWNoZV9pbml0KCBjYWNoZSApOwotICAgICAgICBpZiAoIGVycm9yICkKLSAgICAgICAgewotICAgICAgICAgIGNsYXp6LT5jYWNoZV9kb25lKCBjYWNoZSApOwotICAgICAgICAgIEZUX0ZSRUUoIGNhY2hlICk7Ci0gICAgICAgICAgZ290byBFeGl0OwotICAgICAgICB9Ci0KLSAgICAgICAgbWFuYWdlci0+Y2FjaGVzW21hbmFnZXItPm51bV9jYWNoZXMrK10gPSBjYWNoZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgRXhpdDoKLSAgICBpZiAoIGFjYWNoZSApCi0gICAgICAqYWNhY2hlID0gY2FjaGU7Ci0gICAgcmV0dXJuIGVycm9yOwotICB9Ci0KLQotICBGVF9MT0NBTF9ERUYoIEZUX1VJbnQgKQotICBGVENfTWFuYWdlcl9GbHVzaE4oIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICBjb3VudCApCi0gIHsKLSAgICBGVENfTm9kZSAgZmlyc3QgPSBtYW5hZ2VyLT5ub2Rlc19saXN0OwotICAgIEZUQ19Ob2RlICBub2RlOwotICAgIEZUX1VJbnQgICByZXN1bHQ7Ci0KLQotICAgIC8qIHRyeSB0byByZW1vdmUgYGNvdW50JyBub2RlcyBmcm9tIHRoZSBsaXN0ICovCi0gICAgaWYgKCBmaXJzdCA9PSBOVUxMICkgIC8qIGVtcHR5IGxpc3QhICovCi0gICAgICByZXR1cm4gMDsKLQotICAgIC8qIGdvIHRvIGxhc3Qgbm9kZSAtIGl0J3MgYSBjaXJjdWxhciBsaXN0ICovCi0gICAgbm9kZSA9IEZUQ19OT0RFX19QUkVWKGZpcnN0KTsKLSAgICBmb3IgKCByZXN1bHQgPSAwOyByZXN1bHQgPCBjb3VudDsgKQotICAgIHsKLSAgICAgIEZUQ19Ob2RlICBwcmV2ID0gRlRDX05PREVfX1BSRVYoIG5vZGUgKTsKLQotCi0gICAgICAvKiBkb24ndCB0b3VjaCBsb2NrZWQgbm9kZXMgKi8KLSAgICAgIGlmICggbm9kZS0+cmVmX2NvdW50IDw9IDAgKQotICAgICAgewotICAgICAgICBmdGNfbm9kZV9kZXN0cm95KCBub2RlLCBtYW5hZ2VyICk7Ci0gICAgICAgIHJlc3VsdCsrOwotICAgICAgfQotCi0gICAgICBpZiAoIG5vZGUgPT0gZmlyc3QgKQotICAgICAgICBicmVhazsKLQotICAgICAgbm9kZSA9IHByZXY7Ci0gICAgfQotICAgIHJldHVybiAgcmVzdWx0OwotICB9Ci0KLQotICAvKiBkb2N1bWVudGF0aW9uIGlzIGluIGZ0Y2FjaGUuaCAqLwotCi0gIEZUX0VYUE9SVF9ERUYoIHZvaWQgKQotICBGVENfTWFuYWdlcl9SZW1vdmVGYWNlSUQoIEZUQ19NYW5hZ2VyICBtYW5hZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUQ19GYWNlSUQgICBmYWNlX2lkICkKLSAgewotICAgIEZUX1VJbnQgIG5uOwotCi0KLSAgICBpZiAoICFtYW5hZ2VyIHx8ICFmYWNlX2lkICkKLSAgICAgIHJldHVybjsKLQotICAgIC8qIHRoaXMgd2lsbCByZW1vdmUgYWxsIEZUQ19TaXplTm9kZSB0aGF0IGNvcnJlc3BvbmQgdG8KLSAgICAgKiB0aGUgZmFjZV9pZCBhcyB3ZWxsCi0gICAgICovCi0gICAgRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKCAmbWFuYWdlci0+ZmFjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGNfZmFjZV9ub2RlX2NvbXBhcmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlX2lkICk7Ci0KLSAgICBmb3IgKCBubiA9IDA7IG5uIDwgbWFuYWdlci0+bnVtX2NhY2hlczsgbm4rKyApCi0gICAgICBGVENfQ2FjaGVfUmVtb3ZlRmFjZUlEKCBtYW5hZ2VyLT5jYWNoZXNbbm5dLCBmYWNlX2lkICk7Ci0gIH0KLQotCi0gIC8qIGRvY3VtZW50YXRpb24gaXMgaW4gZnRjYWNoZS5oICovCi0KLSAgRlRfRVhQT1JUX0RFRiggdm9pZCApCi0gIEZUQ19Ob2RlX1VucmVmKCBGVENfTm9kZSAgICAgbm9kZSwKLSAgICAgICAgICAgICAgICAgIEZUQ19NYW5hZ2VyICBtYW5hZ2VyICkKLSAgewotICAgIGlmICggbm9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBtYW5hZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgIChGVF9VSW50KW5vZGUtPmNhY2hlX2luZGV4IDwgbWFuYWdlci0+bnVtX2NhY2hlcyApCi0gICAgICBub2RlLT5yZWZfY291bnQtLTsKLSAgfQotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NhY2hlL2Z0Y21ydS5oIGIvc3JjL2NhY2hlL2Z0Y21ydS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGMzNWY5Li4wMDAwMDAwCi0tLSBhL3NyYy9jYWNoZS9mdGNtcnUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBmdGNtcnUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgU2ltcGxlIE1SVSBsaXN0LWNhY2hlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDAtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwotLyogIG1vZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0ICAgICAgKi8KLS8qICBsaWNlbnNlLCBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgICAgICovCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLwotLyogIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdCBmdWxseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBBbiBNUlUgaXMgYSBsaXN0IHRoYXQgY2Fubm90IGhvbGQgbW9yZSB0aGFuIGEgY2VydGFpbiBudW1iZXIgb2YgICAgICAgKi8KLSAgLyogZWxlbWVudHMgKGBtYXhfZWxlbWVudHMnKS4gIEFsbCBlbGVtZW50cyBpbiB0aGUgbGlzdCBhcmUgc29ydGVkIGluICAgICovCi0gIC8qIGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIsIGkuZS4sIHRoZSBgb2xkZXN0JyBlbGVtZW50IGlzIGF0IHRoZSB0YWlsICAqLwotICAvKiBvZiB0aGUgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFdoZW4gZG9pbmcgYSBsb29rdXAgKGVpdGhlciB0aHJvdWdoIGBMb29rdXAoKScgb3IgYExvb2t1cF9Ob2RlKCknKSwgICAqLwotICAvKiB0aGUgbGlzdCBpcyBzZWFyY2hlZCBmb3IgYW4gZWxlbWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGtleS4gIElmICAgKi8KLSAgLyogaXQgaXMgZm91bmQsIHRoZSBlbGVtZW50IGlzIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0IGFuZCBpcyAgICAgICovCi0gIC8qIHJldHVybmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSWYgbm8gY29ycmVzcG9uZGluZyBlbGVtZW50IGlzIGZvdW5kLCB0aGUgbG9va3VwIHJvdXRpbmUgd2lsbCB0cnkgdG8gICovCi0gIC8qIG9idGFpbiBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHJlbGV2YW50IGtleS4gIElmIHRoZSBsaXN0IGlzIGFscmVhZHkgICAqLwotICAvKiBmdWxsLCB0aGUgb2xkZXN0IGVsZW1lbnQgZnJvbSB0aGUgbGlzdCBpcyBkaXNjYXJkZWQgYW5kIHJlcGxhY2VkIGJ5IGEgKi8KLSAgLyogbmV3IG9uZTsgYSBuZXcgZWxlbWVudCBpcyBhZGRlZCB0byB0aGUgbGlzdCBvdGhlcndpc2UuICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gcHJlLWFsbG9jYXRlIHRoZSBlbGVtZW50IGxpc3Qgbm9kZXMuICAgICAgKi8KLSAgLyogVGhpcyBpcyBoYW5keSBpZiBgbWF4X2VsZW1lbnRzJyBpcyBzdWZmaWNpZW50bHkgc21hbGwsIGFzIGl0IHNhdmVzICAgICovCi0gIC8qIGFsbG9jYXRpb25zL3JlbGVhc2VzIGR1cmluZyB0aGUgbG9va3VwIHByb2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmbmRlZiBfX0ZUQ01SVV9IX18KLSNkZWZpbmUgX19GVENNUlVfSF9fCi0KLQotI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ci0jaW5jbHVkZSBGVF9GUkVFVFlQRV9ICi0KLSNpZmRlZiBGUkVFVFlQRV9ICi0jZXJyb3IgImZyZWV0eXBlLmggb2YgRnJlZVR5cGUgMSBoYXMgYmVlbiBsb2FkZWQhIgotI2Vycm9yICJQbGVhc2UgZml4IHRoZSBkaXJlY3Rvcnkgc2VhcmNoIG9yZGVyIGZvciBoZWFkZXIgZmlsZXMiCi0jZXJyb3IgInNvIHRoYXQgZnJlZXR5cGUuaCBvZiBGcmVlVHlwZSAyIGlzIGZvdW5kIGZpcnN0LiIKLSNlbmRpZgotCi0jZGVmaW5lICB4eEZUX0RFQlVHX0VSUk9SCi0jZGVmaW5lICBGVENfSU5MSU5FCi0KLUZUX0JFR0lOX0hFQURFUgotCi0gIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVOb2RlUmVjXyogIEZUQ19NcnVOb2RlOwotCi0gIHR5cGVkZWYgc3RydWN0ICBGVENfTXJ1Tm9kZVJlY18KLSAgewotICAgIEZUQ19NcnVOb2RlICBuZXh0OwotICAgIEZUQ19NcnVOb2RlICBwcmV2OwotCi0gIH0gRlRDX01ydU5vZGVSZWM7Ci0KLQotICBGVF9MT0NBTCggdm9pZCApCi0gIEZUQ19NcnVOb2RlX1ByZXBlbmQoIEZUQ19NcnVOb2RlICAqcGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUQ19NcnVOb2RlICAgbm9kZSApOwotCi0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgRlRDX01ydU5vZGVfVXAoIEZUQ19NcnVOb2RlICAqcGxpc3QsCi0gICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKTsKLQotICBGVF9MT0NBTCggdm9pZCApCi0gIEZUQ19NcnVOb2RlX1JlbW92ZSggRlRDX01ydU5vZGUgICpwbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgIG5vZGUgKTsKLQotCi0gIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVMaXN0UmVjXyogICAgICAgICAgICAgIEZUQ19NcnVMaXN0OwotCi0gIHR5cGVkZWYgc3RydWN0IEZUQ19NcnVMaXN0Q2xhc3NSZWNfIGNvbnN0ICogIEZUQ19NcnVMaXN0Q2xhc3M7Ci0KLQotICB0eXBlZGVmIEZUX0Jvb2wKLSAgKCpGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGtleSApOwotCi0gIHR5cGVkZWYgRlRfRXJyb3IKLSAgKCpGVENfTXJ1Tm9kZV9Jbml0RnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBkYXRhICk7Ci0KLSAgdHlwZWRlZiBGVF9FcnJvcgotICAoKkZUQ19NcnVOb2RlX1Jlc2V0RnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGRhdGEgKTsKLQotICB0eXBlZGVmIHZvaWQKLSAgKCpGVENfTXJ1Tm9kZV9Eb25lRnVuYykoIEZUQ19NcnVOb2RlICBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgIGRhdGEgKTsKLQotCi0gIHR5cGVkZWYgc3RydWN0ICBGVENfTXJ1TGlzdENsYXNzUmVjXwotICB7Ci0gICAgRlRfT2Zmc2V0ICAgICAgICAgICAgICAgIG5vZGVfc2l6ZTsKLSAgICBGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyAgbm9kZV9jb21wYXJlOwotICAgIEZUQ19NcnVOb2RlX0luaXRGdW5jICAgICBub2RlX2luaXQ7Ci0gICAgRlRDX01ydU5vZGVfUmVzZXRGdW5jICAgIG5vZGVfcmVzZXQ7Ci0gICAgRlRDX01ydU5vZGVfRG9uZUZ1bmMgICAgIG5vZGVfZG9uZTsKLQotICB9IEZUQ19NcnVMaXN0Q2xhc3NSZWM7Ci0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUQ19NcnVMaXN0UmVjXwotICB7Ci0gICAgRlRfVUludCAgICAgICAgICAgICAgbnVtX25vZGVzOwotICAgIEZUX1VJbnQgICAgICAgICAgICAgIG1heF9ub2RlczsKLSAgICBGVENfTXJ1Tm9kZSAgICAgICAgICBub2RlczsKLSAgICBGVF9Qb2ludGVyICAgICAgICAgICBkYXRhOwotICAgIEZUQ19NcnVMaXN0Q2xhc3NSZWMgIGNsYXp6OwotICAgIEZUX01lbW9yeSAgICAgICAgICAgIG1lbW9yeTsKLQotICB9IEZUQ19NcnVMaXN0UmVjOwotCi0KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBGVENfTXJ1TGlzdF9Jbml0KCBGVENfTXJ1TGlzdCAgICAgICBsaXN0LAotICAgICAgICAgICAgICAgICAgICBGVENfTXJ1TGlzdENsYXNzICBjbGF6eiwKLSAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICAgICAgbWF4X25vZGVzLAotICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnkgKTsKLQotICBGVF9MT0NBTCggdm9pZCApCi0gIEZUQ19NcnVMaXN0X1Jlc2V0KCBGVENfTXJ1TGlzdCAgbGlzdCApOwotCi0KLSAgRlRfTE9DQUwoIHZvaWQgKQotICBGVENfTXJ1TGlzdF9Eb25lKCBGVENfTXJ1TGlzdCAgbGlzdCApOwotCi0KLSAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgRlRDX01ydUxpc3RfTmV3KCBGVENfTXJ1TGlzdCAgIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICBrZXksCi0gICAgICAgICAgICAgICAgICAgRlRDX01ydU5vZGUgICphbm9kZSApOwotCi0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgRlRDX01ydUxpc3RfUmVtb3ZlKCBGVENfTXJ1TGlzdCAgbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZSAgbm9kZSApOwotCi0gIEZUX0xPQ0FMKCB2b2lkICkKLSAgRlRDX01ydUxpc3RfUmVtb3ZlU2VsZWN0aW9uKCBGVENfTXJ1TGlzdCAgICAgICAgICAgICAgbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVENfTXJ1Tm9kZV9Db21wYXJlRnVuYyAgc2VsZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgICAgICAgICAgICAgICBrZXkgKTsKLQotCi0jaWZkZWYgRlRDX0lOTElORQotCi0jZGVmaW5lIEZUQ19NUlVMSVNUX0xPT0tVUF9DTVAoIGxpc3QsIGtleSwgY29tcGFyZSwgbm9kZSwgZXJyb3IgKSAgICAgICAgICAgXAotICBGVF9CRUdJTl9TVE1OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBGVENfTXJ1Tm9kZSogICAgICAgICAgICAgX3BmaXJzdCAgPSAmKGxpc3QpLT5ub2RlczsgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRlRDX01ydU5vZGVfQ29tcGFyZUZ1bmMgIF9jb21wYXJlID0gKEZUQ19NcnVOb2RlX0NvbXBhcmVGdW5jKShjb21wYXJlKTsgXAotICAgIEZUQ19NcnVOb2RlICAgICAgICAgICAgICBfZmlyc3QsIF9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVycm9yICA9IEZUX0Vycl9PazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfZmlyc3QgPSAqKF9wZmlyc3QpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX25vZGUgID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIF9maXJzdCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgX25vZGUgPSBfZmlyc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIF9jb21wYXJlKCBfbm9kZSwgKGtleSkgKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgaWYgKCBfbm9kZSAhPSBfZmlyc3QgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRDX01ydU5vZGVfVXAoIF9wZmlyc3QsIF9ub2RlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgbm9kZSA9IF9ub2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgIGdvdG8gX01ydU9rOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9ub2RlID0gX25vZGUtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCBfbm9kZSAhPSBfZmlyc3QpIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlcnJvciA9IEZUQ19NcnVMaXN0X05ldyggKGxpc3QpLCAoa2V5KSwgKEZUQ19NcnVOb2RlKikodm9pZCopJihub2RlKSApOyBcCi0gIF9NcnVPazogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRU5EX1NUTU5UCi0KLSNkZWZpbmUgRlRDX01SVUxJU1RfTE9PS1VQKCBsaXN0LCBrZXksIG5vZGUsIGVycm9yICkgXAotICBGVENfTVJVTElTVF9MT09LVVBfQ01QKCBsaXN0LCBrZXksIChsaXN0KS0+Y2xhenoubm9kZV9jb21wYXJlLCBub2RlLCBlcnJvciApCi0KLSNlbHNlICAvKiAhRlRDX0lOTElORSAqLwotCi0gIEZUX0xPQ0FMKCBGVENfTXJ1Tm9kZSApCi0gIEZUQ19NcnVMaXN0X0ZpbmQoIEZUQ19NcnVMaXN0ICBsaXN0LAotICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAga2V5ICk7Ci0KLSAgRlRfTE9DQUwoIEZUX0Vycm9yICkKLSAgRlRDX01ydUxpc3RfTG9va3VwKCBGVENfTXJ1TGlzdCAgIGxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgRlRfUG9pbnRlciAgICBrZXksCi0gICAgICAgICAgICAgICAgICAgICAgRlRDX01ydU5vZGUgICpwbm9kZSApOwotCi0jZGVmaW5lIEZUQ19NUlVMSVNUX0xPT0tVUCggbGlzdCwga2V5LCBub2RlLCBlcnJvciApIFwKLSAgZXJyb3IgPSBGVENfTXJ1TGlzdF9Mb29rdXAoIChsaXN0KSwgKGtleSksIChGVENfTXJ1Tm9kZSopJihub2RlKSApCi0KLSNlbmRpZiAvKiAhRlRDX0lOTElORSAqLwotCi0KLSNkZWZpbmUgRlRDX01SVUxJU1RfTE9PUCggbGlzdCwgbm9kZSApICAgICAgICBcCi0gIEZUX0JFR0lOX1NUTU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEZUQ19NcnVOb2RlICBfZmlyc3QgPSAobGlzdCktPm5vZGVzOyAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggX2ZpcnN0ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBGVENfTXJ1Tm9kZSAgX25vZGUgPSBfZmlyc3Q7ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKihGVENfTXJ1Tm9kZSopJihub2RlKSA9IF9ub2RlOwotCi0KLSNkZWZpbmUgRlRDX01SVUxJU1RfTE9PUF9FTkQoKSAgICAgICAgICAgICAgIFwKLSAgICAgICAgX25vZGUgPSBfbm9kZS0+bmV4dDsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIH0gd2hpbGUgKCBfbm9kZSAhPSBfZmlyc3QgKTsgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgRlRfRU5EX1NUTU5UCi0KLSAvKiAqLwotCi1GVF9FTkRfSEVBREVSCi0KLQotI2VuZGlmIC8qIF9fRlRDTVJVX0hfXyAqLwotCi0KLS8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZjJhcnJzdC5oIGIvc3JjL2NmZi9jZjJhcnJzdC5oCmluZGV4IGZmNWFkOGIuLjNjMjFhM2IgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyYXJyc3QuaAorKysgYi9zcmMvY2ZmL2NmMmFycnN0LmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMkFSUlNUX0hfXwotI2RlZmluZSBfX0NGMkFSUlNUX0hfXworI2lmbmRlZiBDRjJBUlJTVF9IXworI2RlZmluZSBDRjJBUlJTVF9IXwogCiAKICNpbmNsdWRlICJjZjJlcnJvci5oIgpAQCAtOTQsNyArOTQsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkFSUlNUX0hfXyAqLworI2VuZGlmIC8qIENGMkFSUlNUX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmJsdWVzLmggYi9zcmMvY2ZmL2NmMmJsdWVzLmgKaW5kZXggMmYzOGZjYS4uOTZmYjYwZiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJibHVlcy5oCisrKyBiL3NyYy9jZmYvY2YyYmx1ZXMuaApAQCAtNjUsOCArNjUsOCBAQAogICAgKi8KIAogCi0jaWZuZGVmIF9fQ0YyQkxVRVNfSF9fCi0jZGVmaW5lIF9fQ0YyQkxVRVNfSF9fCisjaWZuZGVmIENGMkJMVUVTX0hfCisjZGVmaW5lIENGMkJMVUVTX0hfCiAKIAogI2luY2x1ZGUgImNmMmdsdWUuaCIKQEAgLTE3OSw3ICsxNzksNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkJMVUVTX0hfXyAqLworI2VuZGlmIC8qIENGMkJMVUVTX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmVycm9yLmggYi9zcmMvY2ZmL2NmMmVycm9yLmgKaW5kZXggNjQ1M2ViYy4uNTEyZWRkMSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJlcnJvci5oCisrKyBiL3NyYy9jZmYvY2YyZXJyb3IuaApAQCAtMzYsMTMgKzM2LDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJFUlJPUl9IX18KLSNkZWZpbmUgX19DRjJFUlJPUl9IX18KKyNpZm5kZWYgQ0YyRVJST1JfSF8KKyNkZWZpbmUgQ0YyRVJST1JfSF8KIAogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIENGMl9FcnJfCkBAIC03MCw3ICs3MCw3IEBACiAgICAqIFVwb24gYSBmdW5jdGlvbiBjYWxsIGlmIHRoZSBlcnJvciBjb2RlIGlzIGFueXRoaW5nIG90aGVyIHRoYW4KICAgICogYEZUX0Vycl9PaycsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybywgd2UKICAgICogd2lsbCByZXR1cm4gd2l0aG91dCBhbHRlcmluZyB0aGF0IGVycm9yLiAgVGhpcyB3aWxsIGFsbG93IHRoZQotICAgKiBlcnJvciB0byBwcm9wb2dhdGUgYW5kIGJlIGhhbmRsZWQgYXQgdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uIGluCisgICAqIGVycm9yIHRvIHByb3BhZ2F0ZSBhbmQgYmUgaGFuZGxlZCBhdCB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gaW4KICAgICogdGhlIGNvZGUuCiAgICAqCiAgICAqIFRoaXMgYWxsb3dzIGEgc3R5bGUgb2YgY29kZSB3aGVyZSB0aGUgZXJyb3IgY29kZSBpcyBpbml0aWFsaXplZApAQCAtMTEzLDcgKzExMyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyRVJST1JfSF9fICovCisjZW5kaWYgLyogQ0YyRVJST1JfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZml4ZWQuaCBiL3NyYy9jZmYvY2YyZml4ZWQuaAppbmRleCBkNmQ5ZmFmLi43NGFmMzc3IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZpeGVkLmgKKysrIGIvc3JjL2NmZi9jZjJmaXhlZC5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJGSVhFRF9IX18KLSNkZWZpbmUgX19DRjJGSVhFRF9IX18KKyNpZm5kZWYgQ0YyRklYRURfSF8KKyNkZWZpbmUgQ0YyRklYRURfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTg5LDcgKzg5LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogIF9fQ0YyRklYRURfSF9fICovCisjZW5kaWYgLyogQ0YyRklYRURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZm9udC5oIGIvc3JjL2NmZi9jZjJmb250LmgKaW5kZXggODZjZjAyZi4uYmQwNWU2OSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJmb250LmgKKysrIGIvc3JjL2NmZi9jZjJmb250LmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMkZPTlRfSF9fCi0jZGVmaW5lIF9fQ0YyRk9OVF9IX18KKyNpZm5kZWYgQ0YyRk9OVF9IXworI2RlZmluZSBDRjJGT05UX0hfCiAKIAogI2luY2x1ZGUgImNmMmZ0LmgiCkBAIC01NCw2ICs1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIFczOyAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDguMmQ2ZTE7IDIwMTQtMTItMTkpIHRoYXQgZXhjZWVkICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgbGltaXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIENGMl9TVE9SQUdFX1NJWkUgICAgICAgIDMyCiAKIAogICAvKiB0eXBlZGVmIGlzIGluIGBjZjJnbHVlLmgnICovCkBAIC0xMTUsNyArMTE2LDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19DRjJGT05UX0hfXyAqLworI2VuZGlmIC8qIENGMkZPTlRfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyZnQuaCBiL3NyYy9jZmYvY2YyZnQuaAppbmRleCA5ODEwNTExLi44ZTU1ZTg0IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmZ0LmgKKysrIGIvc3JjL2NmZi9jZjJmdC5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJGVF9IX18KLSNkZWZpbmUgX19DRjJGVF9IX18KKyNpZm5kZWYgQ0YyRlRfSF8KKyNkZWZpbmUgQ0YyRlRfSF8KIAogCiAjaW5jbHVkZSAiY2YydHlwZXMuaCIKQEAgLTE0MSw3ICsxNDEsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGMkZUX0hfXyAqLworI2VuZGlmIC8qIENGMkZUX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmdsdWUuaCBiL3NyYy9jZmYvY2YyZ2x1ZS5oCmluZGV4IGEyNGRhMzkuLjU2YTdjMjQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2YyZ2x1ZS5oCisrKyBiL3NyYy9jZmYvY2YyZ2x1ZS5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJHTFVFX0hfXwotI2RlZmluZSBfX0NGMkdMVUVfSF9fCisjaWZuZGVmIENGMkdMVUVfSF8KKyNkZWZpbmUgQ0YyR0xVRV9IXwogCiAKIC8qIGNvbW1vbiBpbmNsdWRlcyBmb3Igb3RoZXIgbW9kdWxlcyAqLwpAQCAtMTM4LDcgKzEzOCw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyR0xVRV9IX18gKi8KKyNlbmRpZiAvKiBDRjJHTFVFX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmhpbnRzLmggYi9zcmMvY2ZmL2NmMmhpbnRzLmgKaW5kZXggZjI1ZDkxYi4uYTg5ODQ1NCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJoaW50cy5oCisrKyBiL3NyYy9jZmYvY2YyaGludHMuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YySElOVFNfSF9fCi0jZGVmaW5lIF9fQ0YySElOVFNfSF9fCisjaWZuZGVmIENGMkhJTlRTX0hfCisjZGVmaW5lIENGMkhJTlRTX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC0yMjAsNyArMjIwLDcgQEAKIAogICAgIC8qIGNoYXJhY3RlciBzcGFjZSBtaXRlciBsaW1pdCB0aHJlc2hvbGQgKi8KICAgICBDRjJfRml4ZWQgIG1pdGVyTGltaXQ7Ci0gICAgLyogdmVydGljYWwvaG9yeml6b250YWwgc25hcCBkaXN0YW5jZSBpbiBjaGFyYWN0ZXIgc3BhY2UgKi8KKyAgICAvKiB2ZXJ0aWNhbC9ob3Jpem9udGFsIHNuYXAgZGlzdGFuY2UgaW4gY2hhcmFjdGVyIHNwYWNlICovCiAgICAgQ0YyX0ZpeGVkICBzbmFwVGhyZXNob2xkOwogCiAgICAgRlRfVmVjdG9yICBvZmZzZXRTdGFydDA7ICAvKiBmaXJzdCBhbmQgc2Vjb25kIHBvaW50cyBvZiBmaXJzdCAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YySElOVFNfSF9fICovCisjZW5kaWYgLyogQ0YySElOVFNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YyaW50cnAuYyBiL3NyYy9jZmYvY2YyaW50cnAuYwppbmRleCAxOTEwZjFiLi4xMGU3YjRiIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMmludHJwLmMKKysrIGIvc3JjL2NmZi9jZjJpbnRycC5jCkBAIC0yOTMsNyArMjkzLDggQEAKICAgICAvKiB2YXJpYWJsZSBhY2N1bXVsYXRlcyBkZWx0YSB2YWx1ZXMgZnJvbSBvcGVyYW5kIHN0YWNrICovCiAgICAgQ0YyX0ZpeGVkICBwb3NpdGlvbiA9IGhpbnRPZmZzZXQ7CiAKLSAgICBpZiAoIGhhc1dpZHRoQXJnICYmICEgKmhhdmVXaWR0aCApCisKKyAgICBpZiAoIGhhc1dpZHRoQXJnICYmICEqaGF2ZVdpZHRoICkKICAgICAgICp3aWR0aCA9IGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCAwICkgKwogICAgICAgICAgICAgICAgICBjZjJfZ2V0Tm9taW5hbFdpZHRoWCggZm9udC0+ZGVjb2RlciApOwogCkBAIC00NDYsNiArNDQ3LDggQEAKICAgICBDRjJfU3RhY2sgIG9wU3RhY2sgPSBOVUxMOwogICAgIEZUX0J5dGUgICAgb3AxOyAgICAgICAgICAgICAgICAgICAgICAgLyogZmlyc3Qgb3Bjb2RlIGJ5dGUgKi8KIAorICAgIENGMl9GMTZEb3QxNiAgc3RvcmFnZVtDRjJfU1RPUkFHRV9TSVpFXTsgICAgLyogZm9yIGBwdXQnIGFuZCBgZ2V0JyAqLworCiAgICAgLyogaW5zdHJ1Y3Rpb24gbGltaXQ7IDIwLDAwMCwwMDAgbWF0Y2hlcyBBdmFsb24gKi8KICAgICBGVF9VSW50MzIgIGluc3RydWN0aW9uTGltaXQgPSAyMDAwMDAwMFVMOwogCkBAIC00NjYsNiArNDY5LDggQEAKICAgICBDRjJfR2x5cGhQYXRoUmVjICBnbHlwaFBhdGg7CiAKIAorICAgIEZUX1pFUk8oICZzdG9yYWdlICk7CisKICAgICAvKiBpbml0aWFsaXplIHRoZSByZW1haW5pbmcgb2JqZWN0cyAqLwogICAgIGNmMl9hcnJzdGFja19pbml0KCAmc3ViclN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnksCkBAIC02MDgsNyArNjEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIDAgKTsKIAogICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgICAgICBicmVhazsKIApAQCAtNjMyLDcgKzYzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAwICk7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgYnJlYWs7CiAKQEAgLTY0Niw3ICs2NTEsNyBAQAogICAgICAgICBoYXZlV2lkdGggPSBUUlVFOwogCiAgICAgICAgIGlmICggZm9udC0+ZGVjb2Rlci0+d2lkdGhfb25seSApCi0gICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgZ290byBleGl0OwogCiAgICAgICAgIGN1clkgKz0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CiAKQEAgLTgzMyw4NCArODM4LDE4OSBAQAogCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIC8qIFRPRE86IHNob3VsZCB0aGVzZSBvcGVyYXRvcnMgYmUgc3VwcG9ydGVkPyAqLwotICAgICAgICAgIGNhc2UgY2YyX2VzY0FORDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhbmRcbiIgKSk7CisgICAgICAgICAgY2FzZSBjZjJfZXNjQU5EOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NPUjogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBvclxuIiApKTsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhbmRcbiIgKSk7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBhcmcyID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGFyZzEgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY05PVDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBub3RcbiIgKSk7CisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCBhcmcxICYmIGFyZzIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgY2YyX2VzY09SOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzE7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMjsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0FCUzogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhYnNcbiIgKSk7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG9yXG4iICkpOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjQUREOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFkZFxuIiApKTsKKyAgICAgICAgICAgICAgYXJnMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBhcmcxID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgYXJnMSB8fCBhcmcyICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjU1VCOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIHN1YlxuIiApKTsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NOT1Q6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0RJVjogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkaXZcbiIgKSk7CisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbm90XG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgYXJnID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NORUc6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbmVnXG4iICkpOworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEludCggb3BTdGFjaywgIWFyZyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBjZjJfZXNjQUJTOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY0VROiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGVxXG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBhYnNcbiIgKSk7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NEUk9QOiAvKiBpbiBzcGVjICovCisgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIEZUX0FCUyggYXJnICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NBREQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VtbWFuZDE7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgc3VtbWFuZDI7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGFkZFxuIiApKTsKKworICAgICAgICAgICAgICBzdW1tYW5kMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBzdW1tYW5kMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIHN1bW1hbmQxICsgc3VtbWFuZDIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NTVUI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgbWludWVuZDsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBzdWJ0cmFoZW5kOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdWJcbiIgKSk7CisKKyAgICAgICAgICAgICAgc3VidHJhaGVuZCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBtaW51ZW5kICAgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgbWludWVuZCAtIHN1YnRyYWhlbmQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NESVY6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgZGl2aWRlbmQ7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgZGl2aXNvcjsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZGl2XG4iICkpOworCisgICAgICAgICAgICAgIGRpdmlzb3IgID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIGRpdmlkZW5kID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgRlRfRGl2Rml4KCBkaXZpZGVuZCwgZGl2aXNvciApICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjTkVHOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbmVnXG4iICkpOworCisgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIC1hcmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NFUToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGVxXG4iICkpOworCisgICAgICAgICAgICAgIGFyZzIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgYXJnMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoSW50KCBvcFN0YWNrLCBhcmcxID09IGFyZzIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NEUk9QOgogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkcm9wXG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICh2b2lkKWNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KIAotICAgICAgICAgIGNhc2UgY2YyX2VzY1BVVDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBwdXRcbiIgKSk7CisgICAgICAgICAgY2FzZSBjZjJfZXNjUFVUOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIHZhbDsKKyAgICAgICAgICAgICAgQ0YyX0ludCAgICAgICBpZHg7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjR0VUOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGdldFxuIiApKTsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBwdXRcbiIgKSk7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBpZHggPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisgICAgICAgICAgICAgIHZhbCA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjSUZFTFNFOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGlmZWxzZVxuIiApKTsKKyAgICAgICAgICAgICAgaWYgKCBpZHggPj0gMCAmJiBpZHggPCBDRjJfU1RPUkFHRV9TSVpFICkKKyAgICAgICAgICAgICAgICBzdG9yYWdlW2lkeF0gPSB2YWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIGNmMl9lc2NHRVQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9JbnQgIGlkeDsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgZ2V0XG4iICkpOworCisgICAgICAgICAgICAgIGlkeCA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKworICAgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICYmIGlkeCA8IENGMl9TVE9SQUdFX1NJWkUgKQorICAgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIHN0b3JhZ2VbaWR4XSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY0lGRUxTRToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGFyZzI7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgY29uZDE7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgY29uZDI7CisKKworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGlmZWxzZVxuIiApKTsKKworICAgICAgICAgICAgICBjb25kMiA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBjb25kMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBhcmcyICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBhcmcxICA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGNvbmQxIDw9IGNvbmQyID8gYXJnMSA6IGFyZzIgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKICAgICAgICAgICBjYXNlIGNmMl9lc2NSQU5ET006IC8qIGluIHNwZWMgKi8KICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcmFuZG9tXG4iICkpOwpAQCAtOTE4LDQxICsxMDI4LDEyNiBAQAogICAgICAgICAgICAgQ0YyX0ZJWE1FOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICBjYXNlIGNmMl9lc2NNVUw6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbXVsXG4iICkpOworICAgICAgICAgIGNhc2UgY2YyX2VzY01VTDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBmYWN0b3IxOworICAgICAgICAgICAgICBDRjJfRjE2RG90MTYgIGZhY3RvcjI7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjU1FSVDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzcXJ0XG4iICkpOworICAgICAgICAgICAgICBGVF9UUkFDRTQoKCAiIG11bFxuIiApKTsKIAotICAgICAgICAgICAgQ0YyX0ZJWE1FOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGZhY3RvcjIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgZmFjdG9yMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjRFVQOiAvKiBpbiBzcGVjICovCi0gICAgICAgICAgICBGVF9UUkFDRTQoKCAiIGR1cFxuIiApKTsKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgRlRfTXVsRml4KCBmYWN0b3IxLCBmYWN0b3IyICkgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgY2YyX2VzY1NRUlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjRVhDSDogLyogaW4gc3BlYyAqLwotICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBzcXJ0XG4iICkpOwogCi0gICAgICAgICAgY2FzZSBjZjJfZXNjSU5ERVg6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaW5kZXhcbiIgKSk7CisgICAgICAgICAgICAgIGFyZyA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworICAgICAgICAgICAgICBpZiAoIGFyZyA+IDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRlRfRml4ZWQgIHJvb3QgPSBhcmc7CisgICAgICAgICAgICAgICAgRlRfRml4ZWQgIG5ld19yb290OwogCi0gICAgICAgICAgICBDRjJfRklYTUU7Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgIGNhc2UgY2YyX2VzY1JPTEw6IC8qIGluIHNwZWMgKi8KLSAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKKyAgICAgICAgICAgICAgICAvKiBCYWJ5bG9uaWFuIG1ldGhvZCAqLworICAgICAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgbmV3X3Jvb3QgPSAoIHJvb3QgKyBGVF9EaXZGaXgoIGFyZywgcm9vdCApICsgMSApID4+IDE7CisgICAgICAgICAgICAgICAgICBpZiAoIG5ld19yb290ID09IHJvb3QgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIHJvb3QgPSBuZXdfcm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnID0gbmV3X3Jvb3Q7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZyA9IDA7CiAKLSAgICAgICAgICAgIENGMl9GSVhNRTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLCBhcmcgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCisKKyAgICAgICAgICBjYXNlIGNmMl9lc2NEVVA6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBkdXBcbiIgKSk7CisKKyAgICAgICAgICAgICAgYXJnID0gY2YyX3N0YWNrX3BvcEZpeGVkKCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnICk7CisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZyApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY0VYQ0g6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENGMl9GMTZEb3QxNiAgYXJnMTsKKyAgICAgICAgICAgICAgQ0YyX0YxNkRvdDE2ICBhcmcyOworCisKKyAgICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBleGNoXG4iICkpOworCisgICAgICAgICAgICAgIGFyZzIgPSBjZjJfc3RhY2tfcG9wRml4ZWQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgYXJnMSA9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGNmMl9zdGFja19wdXNoRml4ZWQoIG9wU3RhY2ssIGFyZzIgKTsKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3B1c2hGaXhlZCggb3BTdGFjaywgYXJnMSApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7IC8qIGRvIG5vdCBjbGVhciB0aGUgc3RhY2sgKi8KKworICAgICAgICAgIGNhc2UgY2YyX2VzY0lOREVYOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICBDRjJfSW50ICAgaWR4OworICAgICAgICAgICAgICBDRjJfVUludCAgc2l6ZTsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgaW5kZXhcbiIgKSk7CisKKyAgICAgICAgICAgICAgaWR4ICA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgc2l6ZSA9IGNmMl9zdGFja19jb3VudCggb3BTdGFjayApOworCisgICAgICAgICAgICAgIGlmICggc2l6ZSA+IDAgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogZm9yIGBjZjJfc3RhY2tfZ2V0UmVhbCcsIGluZGV4IDAgaXMgYm90dG9tIG9mIHN0YWNrICovCisgICAgICAgICAgICAgICAgQ0YyX1VJbnQgIGdyX2lkeDsKKworCisgICAgICAgICAgICAgICAgaWYgKCBpZHggPCAwICkKKyAgICAgICAgICAgICAgICAgIGdyX2lkeCA9IHNpemUgLSAxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoQ0YyX1VJbnQpaWR4ID49IHNpemUgKQorICAgICAgICAgICAgICAgICAgZ3JfaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBncl9pZHggPSBzaXplIC0gMSAtIChDRjJfVUludClpZHg7CisKKyAgICAgICAgICAgICAgICBjZjJfc3RhY2tfcHVzaEZpeGVkKCBvcFN0YWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9zdGFja19nZXRSZWFsKCBvcFN0YWNrLCBncl9pZHggKSApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsgLyogZG8gbm90IGNsZWFyIHRoZSBzdGFjayAqLworCisgICAgICAgICAgY2FzZSBjZjJfZXNjUk9MTDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0YyX0ludCAgaWR4OworICAgICAgICAgICAgICBDRjJfSW50ICBjb3VudDsKKworCisgICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcm9sbFxuIiApKTsKKworICAgICAgICAgICAgICBpZHggICA9IGNmMl9zdGFja19wb3BJbnQoIG9wU3RhY2sgKTsKKyAgICAgICAgICAgICAgY291bnQgPSBjZjJfc3RhY2tfcG9wSW50KCBvcFN0YWNrICk7CisKKyAgICAgICAgICAgICAgY2YyX3N0YWNrX3JvbGwoIG9wU3RhY2ssIGNvdW50LCBpZHggKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBkbyBub3QgY2xlYXIgdGhlIHN0YWNrICovCiAKICAgICAgICAgICBjYXNlIGNmMl9lc2NIRkxFWDoKICAgICAgICAgICAgIHsKQEAgLTEwODUsNyArMTI4MCw3IEBACiAgICAgICAgIGhhdmVXaWR0aCA9IFRSVUU7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgLyogY2xvc2UgcGF0aCBpZiBzdGlsbCBvcGVuICovCiAgICAgICAgIGNmMl9nbHlwaHBhdGhfY2xvc2VPcGVuUGF0aCggJmdseXBoUGF0aCApOwpAQCAtMTExNyw4ICsxMzEyLDggQEAKICAgICAgICAgICBlcnJvcjIgPSBjZjJfZ2V0U2VhY0NvbXBvbmVudCggZGVjb2RlciwgYWNoYXIsICZjb21wb25lbnQgKTsKICAgICAgICAgICBpZiAoIGVycm9yMiApCiAgICAgICAgICAgewotICAgICAgICAgICAgIGxhc3RFcnJvciA9IGVycm9yMjsgICAgICAvKiBwYXNzIEZyZWVUeXBlIGVycm9yIHRocm91Z2ggKi8KLSAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBsYXN0RXJyb3IgPSBlcnJvcjI7ICAgICAgLyogcGFzcyBGcmVlVHlwZSBlcnJvciB0aHJvdWdoICovCisgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgfQogICAgICAgICAgIGNmMl9pbnRlcnBUMkNoYXJTdHJpbmcoIGZvbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudCwKQEAgLTExNzIsNyArMTM2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAwICk7CiAKICAgICAgICAgaWYgKCBmb250LT5kZWNvZGVyLT53aWR0aF9vbmx5ICkKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICAgICAgaWYgKCBvcDEgPT0gY2YyX2NtZEhJTlRNQVNLICkKICAgICAgICAgewpAQCAtMTIzMSw3ICsxNDI2LDcgQEAKICAgICAgICAgaGF2ZVdpZHRoID0gVFJVRTsKIAogICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgICAgICBjdXJZICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogICAgICAgICBjdXJYICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwpAQCAtMTI1MCw3ICsxNDQ1LDcgQEAKICAgICAgICAgaGF2ZVdpZHRoID0gVFJVRTsKIAogICAgICAgICBpZiAoIGZvbnQtPmRlY29kZXItPndpZHRoX29ubHkgKQotICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgIGdvdG8gZXhpdDsKIAogICAgICAgICBjdXJYICs9IGNmMl9zdGFja19wb3BGaXhlZCggb3BTdGFjayApOwogCkBAIC0xNDYzLDkgKzE2NTgsMTIgQEAKICAgICAgICAgewogICAgICAgICAgIENGMl9JbnQgIHY7CiAKKyAgICAgICAgICBDRjJfSW50ICBieXRlMSA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKKyAgICAgICAgICBDRjJfSW50ICBieXRlMiA9IGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKTsKIAotICAgICAgICAgIHYgPSAoRlRfU2hvcnQpKCAoIGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCA4ICkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSAgICAgICAgKTsKKworICAgICAgICAgIHYgPSAoRlRfU2hvcnQpKCAoIGJ5dGUxIDw8IDggKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZTIgICAgICAgICk7CiAKICAgICAgICAgICBGVF9UUkFDRTQoKCAiICVkIiwgdiApKTsKIApAQCAtMTUyNywxMiArMTcyNSwxNiBAQAogICAgICAgICAgIHsKICAgICAgICAgICAgIENGMl9GaXhlZCAgdjsKIAorICAgICAgICAgICAgRlRfVUludDMyICBieXRlMSA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMiA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlMyA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOworICAgICAgICAgICAgRlRfVUludDMyICBieXRlNCA9IChGVF9VSW50MzIpY2YyX2J1Zl9yZWFkQnl0ZSggY2hhcnN0cmluZyApOwogCi0gICAgICAgICAgICB2ID0gKENGMl9GaXhlZCkKLSAgICAgICAgICAgICAgICAgICggKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAyNCApIHwKLSAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAxNiApIHwKLSAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSA8PCAgOCApIHwKLSAgICAgICAgICAgICAgICAgICAgICAoRlRfVUludDMyKWNmMl9idWZfcmVhZEJ5dGUoIGNoYXJzdHJpbmcgKSAgICAgICAgICk7CisKKyAgICAgICAgICAgIHYgPSAoQ0YyX0ZpeGVkKSggKCBieXRlMSA8PCAyNCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMiA8PCAxNiApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCBieXRlMyA8PCAgOCApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlNCAgICAgICAgICk7CiAKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgJS4yZiIsIHYgLyA2NTUzNi4wICkpOwogCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMmludHJwLmggYi9zcmMvY2ZmL2NmMmludHJwLmgKaW5kZXggYjVkODk0Ny4uZWMwMzBlOCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJpbnRycC5oCisrKyBiL3NyYy9jZmYvY2YyaW50cnAuaApAQCAtMzYsOCArMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0YySU5UUlBfSF9fCi0jZGVmaW5lIF9fQ0YySU5UUlBfSF9fCisjaWZuZGVmIENGMklOVFJQX0hfCisjZGVmaW5lIENGMklOVFJQX0hfCiAKIAogI2luY2x1ZGUgImNmMmZ0LmgiCkBAIC03Nyw3ICs3Nyw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YySU5UUlBfSF9fICovCisjZW5kaWYgLyogQ0YySU5UUlBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YycmVhZC5oIGIvc3JjL2NmZi9jZjJyZWFkLmgKaW5kZXggN2VmN2M4Yy4uYjBiMGRiOCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJyZWFkLmgKKysrIGIvc3JjL2NmZi9jZjJyZWFkLmgKQEAgLTM2LDggKzM2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGMlJFQURfSF9fCi0jZGVmaW5lIF9fQ0YyUkVBRF9IX18KKyNpZm5kZWYgQ0YyUkVBRF9IXworI2RlZmluZSBDRjJSRUFEX0hfCiAKIAogRlRfQkVHSU5fSEVBREVSCkBAIC02Miw3ICs2Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyUkVBRF9IX18gKi8KKyNlbmRpZiAvKiBDRjJSRUFEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmMnN0YWNrLmMgYi9zcmMvY2ZmL2NmMnN0YWNrLmMKaW5kZXggODMzMmI1ZC4uOGYzYWRiNiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZjJzdGFjay5jCisrKyBiL3NyYy9jZmYvY2Yyc3RhY2suYwpAQCAtNTMsMTQgKzUzLDE0IEBACiAgIGNmMl9zdGFja19pbml0KCBGVF9NZW1vcnkgIG1lbW9yeSwKICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yKiAgZSApCiAgIHsKLSAgICBGVF9FcnJvciAgZXJyb3IgPSBGVF9FcnJfT2s7ICAgICAvKiBmb3IgRlRfUU5FVyAqLworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsgICAgIC8qIGZvciBGVF9ORVcgKi8KIAogICAgIENGMl9TdGFjayAgc3RhY2sgPSBOVUxMOwogCiAKLSAgICBpZiAoICFGVF9RTkVXKCBzdGFjayApICkKKyAgICBpZiAoICFGVF9ORVcoIHN0YWNrICkgKQogICAgIHsKLSAgICAgIC8qIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZTsgRlRfUU5FVyB6ZXJvZXMgaXQgKi8KKyAgICAgIC8qIGluaXRpYWxpemUgdGhlIHN0cnVjdHVyZTsgRlRfTkVXIHplcm9lcyBpdCAqLwogICAgICAgc3RhY2stPm1lbW9yeSA9IG1lbW9yeTsKICAgICAgIHN0YWNrLT5lcnJvciAgPSBlOwogICAgICAgc3RhY2stPnRvcCAgICA9ICZzdGFjay0+YnVmZmVyWzBdOyAvKiBlbXB0eSBzdGFjayAqLwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAKIAogICAvKiBOb3RlOiB0eXBlIG1pc21hdGNoIGlzIHNpbGVudGx5IGNhc3QgKi8KLSAgLyogVE9ETzogY2hlY2sgdGhpcyAqLworICAvKiBUT0RPOiBjaGVjayB0aGlzICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBDRjJfRml4ZWQgKQogICBjZjJfc3RhY2tfcG9wRml4ZWQoIENGMl9TdGFjayAgc3RhY2sgKQogICB7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogCiAgIC8qIE5vdGU6IHR5cGUgbWlzbWF0Y2ggaXMgc2lsZW50bHkgY2FzdCAqLwotICAvKiBUT0RPOiBjaGVjayB0aGlzICovCisgIC8qIFRPRE86IGNoZWNrIHRoaXMgICAgICAgICAgICAgICAgICAgICAqLwogICBGVF9MT0NBTF9ERUYoIENGMl9GaXhlZCApCiAgIGNmMl9zdGFja19nZXRSZWFsKCBDRjJfU3RhY2sgIHN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICBpZHggKQpAQCAtMTk1LDYgKzE5NSw4NiBAQAogICB9CiAKIAorICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19yb2xsKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgc2hpZnQgKQorICB7CisgICAgLyogd2UgaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCisgICAgQ0YyX1N0YWNrTnVtYmVyICBsYXN0ID0geyB7IDAgfSwgQ0YyX051bWJlckludCB9OworCisgICAgQ0YyX0ludCAgc3RhcnRfaWR4LCBpZHgsIGk7CisKKworICAgIGlmICggY291bnQgPCAyICkKKyAgICAgIHJldHVybjsgLyogbm90aGluZyB0byBkbyAodmFsdWVzIDAgYW5kIDEpLCBvciB1bmRlZmluZWQgdmFsdWUgKi8KKworICAgIGlmICggKENGMl9VSW50KWNvdW50ID4gY2YyX3N0YWNrX2NvdW50KCBzdGFjayApICkKKyAgICB7CisgICAgICBDRjJfU0VUX0VSUk9SKCBzdGFjay0+ZXJyb3IsIFN0YWNrX092ZXJmbG93ICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCBzaGlmdCA8IDAgKQorICAgICAgc2hpZnQgPSAtKCAoIC1zaGlmdCApICUgY291bnQgKTsKKyAgICBlbHNlCisgICAgICBzaGlmdCAlPSBjb3VudDsKKworICAgIGlmICggc2hpZnQgPT0gMCApCisgICAgICByZXR1cm47IC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIC8qIFdlIHVzZSB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBkbyB0aGUgcm9sbGluZywgKi8KKyAgICAvKiB3aGljaCBuZWVkcyB0d28gdGVtcG9yYXJ5IHZhcmlhYmxlcyBvbmx5LiAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIEV4YW1wbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBjb3VudCA9IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgc2hpZnQgPSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICBzdGFjayBpbmRpY2VzIGJlZm9yZSByb2xsOiAgNyA2IDUgNCAzIDIgMSAwICAgICAqLworICAgIC8qICAgc3RhY2sgaW5kaWNlcyBhZnRlciByb2xsOiAgIDEgMCA3IDYgNSA0IDMgMiAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogVGhlIHZhbHVlIG9mIGluZGV4IDAgZ2V0cyBtb3ZlZCB0byBpbmRleCAyLCB3aGlsZSAqLworICAgIC8qIHRoZSBvbGQgdmFsdWUgb2YgaW5kZXggMiBnZXRzIG1vdmVkIHRvIGluZGV4IDQsICAgKi8KKyAgICAvKiBhbmQgc28gb24uICBXZSB0aHVzIGhhdmUgdGhlIGZvbGxvd2luZyBjb3B5aW5nICAgICovCisgICAgLyogY2hhaW5zIGZvciBzaGlmdCB2YWx1ZSAyLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIDAgLT4gMiAtPiA0IC0+IDYgLT4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICAxIC0+IDMgLT4gNSAtPiA3IC0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBJZiBgY291bnQnIGFuZCBgc2hpZnQnIGFyZSBpbmNvbW1lbnN1cmFibGUsIHdlICAgICovCisgICAgLyogaGF2ZSBhIHNpbmdsZSBjaGFpbiBvbmx5LiAgT3RoZXJ3aXNlLCBpbmNyZWFzZSAgICAqLworICAgIC8qIHRoZSBzdGFydCBpbmRleCBieSAxIGFmdGVyIHRoZSBmaXJzdCBjaGFpbiwgdGhlbiAgKi8KKyAgICAvKiBkbyB0aGUgbmV4dCBjaGFpbiB1bnRpbCBhbGwgZWxlbWVudHMgaW4gYWxsICAgICAgICovCisgICAgLyogY2hhaW5zIGFyZSBoYW5kbGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgc3RhcnRfaWR4ID0gLTE7CisgICAgaWR4ICAgICAgID0gLTE7CisgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICB7CisgICAgICBDRjJfU3RhY2tOdW1iZXIgIHRtcDsKKworCisgICAgICBpZiAoIHN0YXJ0X2lkeCA9PSBpZHggKQorICAgICAgeworICAgICAgICBzdGFydF9pZHgrKzsKKyAgICAgICAgaWR4ICA9IHN0YXJ0X2lkeDsKKyAgICAgICAgbGFzdCA9IHN0YWNrLT5idWZmZXJbaWR4XTsKKyAgICAgIH0KKworICAgICAgaWR4ICs9IHNoaWZ0OworICAgICAgaWYgKCBpZHggPj0gY291bnQgKQorICAgICAgICBpZHggLT0gY291bnQ7CisgICAgICBlbHNlIGlmICggaWR4IDwgMCApCisgICAgICAgIGlkeCArPSBjb3VudDsKKworICAgICAgdG1wICAgICAgICAgICAgICAgID0gc3RhY2stPmJ1ZmZlcltpZHhdOworICAgICAgc3RhY2stPmJ1ZmZlcltpZHhdID0gbGFzdDsKKyAgICAgIGxhc3QgICAgICAgICAgICAgICA9IHRtcDsKKyAgICB9CisgIH0KKworCiAgIEZUX0xPQ0FMX0RFRiggdm9pZCApCiAgIGNmMl9zdGFja19jbGVhciggQ0YyX1N0YWNrICBzdGFjayApCiAgIHsKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Yyc3RhY2suaCBiL3NyYy9jZmYvY2Yyc3RhY2suaAppbmRleCA3ZDZkMTk2Li5lNzQwYTdhIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMnN0YWNrLmgKKysrIGIvc3JjL2NmZi9jZjJzdGFjay5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJTVEFDS19IX18KLSNkZWZpbmUgX19DRjJTVEFDS19IX18KKyNpZm5kZWYgQ0YyU1RBQ0tfSF8KKyNkZWZpbmUgQ0YyU1RBQ0tfSF8KIAogCiBGVF9CRUdJTl9IRUFERVIKQEAgLTk0LDEzICs5NCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgQ0YyX1VJbnQgICBpZHggKTsKIAogICBGVF9MT0NBTCggdm9pZCApCisgIGNmMl9zdGFja19yb2xsKCBDRjJfU3RhY2sgIHN0YWNrLAorICAgICAgICAgICAgICAgICAgQ0YyX0ludCAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgIENGMl9JbnQgICAgaWR4ICk7CisKKyAgRlRfTE9DQUwoIHZvaWQgKQogICBjZjJfc3RhY2tfY2xlYXIoIENGMl9TdGFjayAgc3RhY2sgKTsKIAogCiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyU1RBQ0tfSF9fICovCisjZW5kaWYgLyogQ0YyU1RBQ0tfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2YydHlwZXMuaCBiL3NyYy9jZmYvY2YydHlwZXMuaAppbmRleCBhYzZhMDIyLi41YjdlMTIzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmMnR5cGVzLmgKKysrIGIvc3JjL2NmZi9jZjJ0eXBlcy5oCkBAIC0zNiw4ICszNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRjJUWVBFU19IX18KLSNkZWZpbmUgX19DRjJUWVBFU19IX18KKyNpZm5kZWYgQ0YyVFlQRVNfSF8KKyNkZWZpbmUgQ0YyVFlQRVNfSF8KIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC03Miw3ICs3Miw3IEBACiBGVF9FTkRfSEVBREVSCiAKIAotI2VuZGlmIC8qIF9fQ0YyVFlQRVNfSF9fICovCisjZW5kaWYgLyogQ0YyVFlQRVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmLmMgYi9zcmMvY2ZmL2NmZi5jCmluZGV4IGJiMmNmYjUuLjg2Y2ExYmUgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmLmMKKysrIGIvc3JjL2NmZi9jZmYuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBPcGVuVHlwZSBkcml2ZXIgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZjbWFwLmMgYi9zcmMvY2ZmL2NmZmNtYXAuYwppbmRleCBlNzUzOGU5Li4zZWY0ODMyIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmNtYXAuYworKysgYi9zcmMvY2ZmL2NmZmNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZjbWFwLmggYi9zcmMvY2ZmL2NmZmNtYXAuaAppbmRleCA2ZWFlZDYzLi4yMzc5NWQ1IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmNtYXAuaAorKysgYi9zcmMvY2ZmL2NmZmNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgKGNtYXApIHN1cHBvcnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGQ01BUF9IX18KLSNkZWZpbmUgX19DRkZDTUFQX0hfXworI2lmbmRlZiBDRkZDTUFQX0hfCisjZGVmaW5lIENGRkNNQVBfSF8KIAogI2luY2x1ZGUgImNmZm9ianMuaCIKIApAQCAtNjEsNyArNjEsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkNNQVBfSF9fICovCisjZW5kaWYgLyogQ0ZGQ01BUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZkcml2ci5jIGIvc3JjL2NmZi9jZmZkcml2ci5jCmluZGV4IDlhMDZiN2MuLjY3YmYwOWQgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZHJpdnIuYworKysgYi9zcmMvY2ZmL2NmZmRyaXZyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY1OSwyNiArNjU5LDYyIEBACiAgIHN0YXRpYyBGVF9FcnJvcgogICBjZmZfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIENGRl9Ecml2ZXIgKi8KICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIHByb3BlcnR5X25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHZhbHVlX2lzX3N0cmluZyApCiAgIHsKICAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7CiAgICAgQ0ZGX0RyaXZlciAgZHJpdmVyID0gKENGRl9Ecml2ZXIpbW9kdWxlOwogCisjaWZuZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgIEZUX1VOVVNFRCggdmFsdWVfaXNfc3RyaW5nICk7CisjZW5kaWYKKwogCiAgICAgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAiZGFya2VuaW5nLXBhcmFtZXRlcnMiICkgKQogICAgIHsKLSAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKKyAgICAgIEZUX0ludCogIGRhcmtlbl9wYXJhbXM7CisgICAgICBGVF9JbnQgICB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQ7CiAKLSAgICAgIEZUX0ludCAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOwotICAgICAgRlRfSW50ICB5MSA9IGRhcmtlbl9wYXJhbXNbMV07Ci0gICAgICBGVF9JbnQgIHgyID0gZGFya2VuX3BhcmFtc1syXTsKLSAgICAgIEZUX0ludCAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOwotICAgICAgRlRfSW50ICB4MyA9IGRhcmtlbl9wYXJhbXNbNF07Ci0gICAgICBGVF9JbnQgIHkzID0gZGFya2VuX3BhcmFtc1s1XTsKLSAgICAgIEZUX0ludCAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOwotICAgICAgRlRfSW50ICB5NCA9IGRhcmtlbl9wYXJhbXNbN107CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBGVF9JbnQgICBkcFs4XTsKIAogCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOworICAgICAgICBjaGFyKiAgICAgICAgZXA7CisgICAgICAgIGludCAgICAgICAgICBpOworCisKKyAgICAgICAgLyogZWlnaHQgY29tbWEtc2VwYXJhdGVkIG51bWJlcnMgKi8KKyAgICAgICAgZm9yICggaSA9IDA7IGkgPCA3OyBpKysgKQorICAgICAgICB7CisgICAgICAgICAgZHBbaV0gPSAoRlRfSW50KWZ0X3N0cnRvbCggcywgJmVwLCAxMCApOworICAgICAgICAgIGlmICggKmVwICE9ICcsJyB8fCBzID09IGVwICkKKyAgICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICAgICAgcyA9IGVwICsgMTsKKyAgICAgICAgfQorCisgICAgICAgIGRwWzddID0gKEZUX0ludClmdF9zdHJ0b2woIHMsICZlcCwgMTAgKTsKKyAgICAgICAgaWYgKCAhKCAqZXAgPT0gJ1wwJyB8fCAqZXAgPT0gJyAnICkgfHwgcyA9PSBlcCApCisgICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisKKyAgICAgICAgZGFya2VuX3BhcmFtcyA9IGRwOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRhcmtlbl9wYXJhbXMgPSAoRlRfSW50Kil2YWx1ZTsKKworICAgICAgeDEgPSBkYXJrZW5fcGFyYW1zWzBdOworICAgICAgeTEgPSBkYXJrZW5fcGFyYW1zWzFdOworICAgICAgeDIgPSBkYXJrZW5fcGFyYW1zWzJdOworICAgICAgeTIgPSBkYXJrZW5fcGFyYW1zWzNdOworICAgICAgeDMgPSBkYXJrZW5fcGFyYW1zWzRdOworICAgICAgeTMgPSBkYXJrZW5fcGFyYW1zWzVdOworICAgICAgeDQgPSBkYXJrZW5fcGFyYW1zWzZdOworICAgICAgeTQgPSBkYXJrZW5fcGFyYW1zWzddOworCiAgICAgICBpZiAoIHgxIDwgMCAgIHx8IHgyIDwgMCAgIHx8IHgzIDwgMCAgIHx8IHg0IDwgMCAgIHx8CiAgICAgICAgICAgIHkxIDwgMCAgIHx8IHkyIDwgMCAgIHx8IHkzIDwgMCAgIHx8IHk0IDwgMCAgIHx8CiAgICAgICAgICAgIHgxID4geDIgIHx8IHgyID4geDMgIHx8IHgzID4geDQgICAgICAgICAgICAgIHx8CkBAIC02OTgsMjQgKzczNCw2MiBAQAogICAgIH0KICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImhpbnRpbmctZW5naW5lIiApICkKICAgICB7Ci0gICAgICBGVF9VSW50KiAgaGludGluZ19lbmdpbmUgPSAoRlRfVUludCopdmFsdWU7CisjaWZkZWYgRlRfQ09ORklHX09QVElPTl9FTlZJUk9OTUVOVF9QUk9QRVJUSUVTCisgICAgICBpZiAoIHZhbHVlX2lzX3N0cmluZyApCisgICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKXZhbHVlOwogCiAKLSNpZm5kZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQotICAgICAgaWYgKCAqaGludGluZ19lbmdpbmUgIT0gRlRfQ0ZGX0hJTlRJTkdfQURPQkUgKQotICAgICAgICBlcnJvciA9IEZUX0VSUiggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CisgICAgICAgIGlmICggIWZ0X3N0cmNtcCggcywgImFkb2JlIiApICkKKyAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfQURPQkU7CisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgICBlbHNlIGlmICggIWZ0X3N0cmNtcCggcywgImZyZWV0eXBlIiApICkKKyAgICAgICAgICBkcml2ZXItPmhpbnRpbmdfZW5naW5lID0gRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEU7CisjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgfQogICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIGRyaXZlci0+aGludGluZ19lbmdpbmUgPSAqaGludGluZ19lbmdpbmU7CisgICAgICB7CisgICAgICAgIEZUX1VJbnQqICBoaW50aW5nX2VuZ2luZSA9IChGVF9VSW50Kil2YWx1ZTsKIAotICAgICAgcmV0dXJuIGVycm9yOworICAgICAgICBpZiAoICpoaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19BRE9CRQorI2lmZGVmIENGRl9DT05GSUdfT1BUSU9OX09MRF9FTkdJTkUKKyAgICAgICAgICAgICB8fCAqaGludGluZ19lbmdpbmUgPT0gRlRfQ0ZGX0hJTlRJTkdfRlJFRVRZUEUKKyNlbmRpZgorICAgICAgICAgICApCisgICAgICAgICAgZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9ICpoaW50aW5nX2VuZ2luZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVycm9yID0gRlRfRVJSKCBVbmltcGxlbWVudGVkX0ZlYXR1cmUgKTsKKworICAgICAgICByZXR1cm4gZXJyb3I7CisgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKCAhZnRfc3RyY21wKCBwcm9wZXJ0eV9uYW1lLCAibm8tc3RlbS1kYXJrZW5pbmciICkgKQogICAgIHsKLSAgICAgIEZUX0Jvb2wqICBub19zdGVtX2RhcmtlbmluZyA9IChGVF9Cb29sKil2YWx1ZTsKKyNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICAgIGlmICggdmFsdWVfaXNfc3RyaW5nICkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogIHMgICA9IChjb25zdCBjaGFyKil2YWx1ZTsKKyAgICAgICAgbG9uZyAgICAgICAgIG5zZCA9IGZ0X3N0cnRvbCggcywgTlVMTCwgMTAgKTsKIAogCi0gICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gKm5vX3N0ZW1fZGFya2VuaW5nOworICAgICAgICBpZiAoIG5zZCA9PSAwICkKKyAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gMDsKKyAgICAgICAgZWxzZSBpZiAoIG5zZCA9PSAxICkKKyAgICAgICAgICBkcml2ZXItPm5vX3N0ZW1fZGFya2VuaW5nID0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisgICAgICAgIEZUX0Jvb2wqICBub19zdGVtX2RhcmtlbmluZyA9IChGVF9Cb29sKil2YWx1ZTsKKworCisgICAgICAgIGRyaXZlci0+bm9fc3RlbV9kYXJrZW5pbmcgPSAqbm9fc3RlbV9kYXJrZW5pbmc7CisgICAgICB9CiAKICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmRyaXZyLmggYi9zcmMvY2ZmL2NmZmRyaXZyLmgKaW5kZXggOTUyN2Y1ZS4uZDdiMDU5OCAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZkcml2ci5oCisrKyBiL3NyYy9jZmYvY2ZmZHJpdnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIE9wZW5UeXBlIGRyaXZlciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGRFJJVkVSX0hfXwotI2RlZmluZSBfX0NGRkRSSVZFUl9IX18KKyNpZm5kZWYgQ0ZGRFJJVkVSX0hfCisjZGVmaW5lIENGRkRSSVZFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzIsNyArMzIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkRSSVZFUl9IX18gKi8KKyNlbmRpZiAvKiBDRkZEUklWRVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmZXJycy5oIGIvc3JjL2NmZi9jZmZlcnJzLmgKaW5kZXggNTQzYmRiMC4uZTdmYzZlYiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZlcnJzLmgKKysrIGIvc3JjL2NmZi9jZmZlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyLDEyICsyMiwxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19DRkZFUlJTX0hfXwotI2RlZmluZSBfX0NGRkVSUlNfSF9fCisjaWZuZGVmIENGRkVSUlNfSF8KKyNkZWZpbmUgQ0ZGRVJSU19IXwogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIENGRl9FcnJfCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICiAKLSNlbmRpZiAvKiBfX0NGRkVSUlNfSF9fICovCisjZW5kaWYgLyogQ0ZGRVJSU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZnbG9hZC5jIGIvc3JjL2NmZi9jZmZnbG9hZC5jCmluZGV4IDVmNTc0MDMuLjRmMzc1YTYgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmZ2xvYWQuYworKysgYi9zcmMvY2ZmL2NmZmdsb2FkLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgR2x5cGggTG9hZGVyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTY4MCw3ICs2ODAsNyBAQAogI2VuZGlmIC8qIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwgKi8KIAogICAgIHsKLSAgICAgIENGRl9Gb250ICBjZmYgID0gKENGRl9Gb250KShmYWNlLT5leHRyYS5kYXRhKTsKKyAgICAgIENGRl9Gb250ICBjZmYgPSAoQ0ZGX0ZvbnQpKGZhY2UtPmV4dHJhLmRhdGEpOwogCiAKICAgICAgIHJldHVybiBjZmZfaW5kZXhfYWNjZXNzX2VsZW1lbnQoICZjZmYtPmNoYXJzdHJpbmdzX2luZGV4LCBnbHlwaF9pbmRleCwKQEAgLTgyNiw3ICs4MjYsNyBAQAogICAgICAgLyogdGhlIHNlYWMgb3BlcmF0b3IgbXVzdCBub3QgYmUgbmVzdGVkICovCiAgICAgICBkZWNvZGVyLT5zZWFjID0gVFJVRTsKICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIGRlY29kZXIsIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4sIDAgKTsKICAgICAgIGRlY29kZXItPnNlYWMgPSBGQUxTRTsKIAogICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsIGNoYXJzdHJpbmdfbGVuICk7CkBAIC04NTYsNyArODU2LDcgQEAKICAgICAgIC8qIHRoZSBzZWFjIG9wZXJhdG9yIG11c3Qgbm90IGJlIG5lc3RlZCAqLwogICAgICAgZGVjb2Rlci0+c2VhYyA9IFRSVUU7CiAgICAgICBlcnJvciA9IGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBkZWNvZGVyLCBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLCAwICk7CiAgICAgICBkZWNvZGVyLT5zZWFjID0gRkFMU0U7CiAKICAgICAgIGNmZl9mcmVlX2dseXBoX2RhdGEoIGZhY2UsICZjaGFyc3RyaW5nLCBjaGFyc3RyaW5nX2xlbiApOwpAQCAtODk1LDEzICs4OTUsMTcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIGNoYXJzdHJpbmdfbGVuICA6OiBUaGUgbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBjaGFyc3RyaW5nIHN0cmVhbS4gICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaW5fZGljdCAgICAgICAgIDo6IFNldCB0byAxIGlmIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRvcCBvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIERJQ1QgKG5lZWRlZCBmb3IgTXVsdGlwbGUgTWFzdGVyIENGRnMpLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwIG1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgRlRfTE9DQUxfREVGKCBGVF9FcnJvciApCiAgIGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzKCBDRkZfRGVjb2RlciogIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgIGNoYXJzdHJpbmdfYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICAgICAgY2hhcnN0cmluZ19sZW4gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgaW5fZGljdCApCiAgIHsKICAgICBGVF9FcnJvciAgICAgICAgICAgZXJyb3I7CiAgICAgQ0ZGX0RlY29kZXJfWm9uZSogIHpvbmU7CkBAIC05MTMsNiArOTE3LDEwIEBACiAgICAgRlRfRml4ZWQqICAgICAgICAgIHN0YWNrOwogICAgIEZUX0ludCAgICAgICAgICAgICBjaGFyc3RyaW5nX3R5cGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0LmNoYXJzdHJpbmdfdHlwZTsKKyAgICBGVF9VU2hvcnQgICAgICAgICAgbnVtX2Rlc2lnbnMgPQorICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXItPmNmZi0+dG9wX2ZvbnQuZm9udF9kaWN0Lm51bV9kZXNpZ25zOworICAgIEZUX1VTaG9ydCAgICAgICAgICBudW1fYXhlcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci0+Y2ZmLT50b3BfZm9udC5mb250X2RpY3QubnVtX2F4ZXM7CiAKICAgICBUMl9IaW50c19GdW5jcyAgICAgaGludGVyOwogCkBAIC0xMjQxLDYgKzEyNDksNDQgQEAKICAgICAgICAgaWYgKCBvcCA9PSBjZmZfb3BfdW5rbm93biApCiAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgLyogaW4gTXVsdGlwbGUgTWFzdGVyIENGRnMsIFQyIGNoYXJzdHJpbmdzIGNhbiBhcHBlYXIgaW4gKi8KKyAgICAgICAgLyogZGljdGlvbmFyaWVzLCBidXQgc29tZSBvcGVyYXRvcnMgYXJlIHByb2hpYml0ZWQgICAgICAgKi8KKyAgICAgICAgaWYgKCBpbl9kaWN0ICkKKyAgICAgICAgeworICAgICAgICAgIHN3aXRjaCAoIG9wICkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW06CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW06CisgICAgICAgICAgY2FzZSBjZmZfb3Bfdm1vdmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ybGluZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hsaW5ldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfdmxpbmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ycmN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHN0ZW1obToKKyAgICAgICAgICBjYXNlIGNmZl9vcF9oaW50bWFzazoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9jbnRybWFzazoKKyAgICAgICAgICBjYXNlIGNmZl9vcF9ybW92ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2htb3ZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnN0ZW1obToKKyAgICAgICAgICBjYXNlIGNmZl9vcF9yY3VydmVsaW5lOgorICAgICAgICAgIGNhc2UgY2ZmX29wX3JsaW5lY3VydmU6CisgICAgICAgICAgY2FzZSBjZmZfb3BfdnZjdXJ2ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hoY3VydmV0bzoKKyAgICAgICAgICBjYXNlIGNmZl9vcF92aGN1cnZldG86CisgICAgICAgICAgY2FzZSBjZmZfb3BfaHZjdXJ2ZXRvOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2hmbGV4OgorICAgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXg6CisgICAgICAgICAgY2FzZSBjZmZfb3BfaGZsZXgxOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2ZsZXgxOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxzdWJyOgorICAgICAgICAgIGNhc2UgY2ZmX29wX2NhbGxnc3VicjoKKyAgICAgICAgICAgIGdvdG8gTU1fRXJyb3I7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgLyogY2hlY2sgYXJndW1lbnRzICovCiAgICAgICAgIHJlcV9hcmdzID0gY2ZmX2FyZ3VtZW50X2NvdW50c1tvcF07CiAgICAgICAgIGlmICggcmVxX2FyZ3MgJiBDRkZfQ09VTlRfQ0hFQ0tfV0lEVEggKQpAQCAtMTI3OCw3ICsxMzI0LDkgQEAKICAgICAgICAgICAgIGNhc2UgY2ZmX29wX2VuZGNoYXI6CiAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgd2lkdGggc3BlY2lmaWVkIGZvciBlbmRjaGFyLCB3ZSBlaXRoZXIgaGF2ZSAqLwogICAgICAgICAgICAgICAvKiAxIGFyZ3VtZW50IG9yIDUgYXJndW1lbnRzLiAgV2UgbGlrZSB0byBhcmd1ZS4gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgc2V0X3dpZHRoX29rID0gKCBudW1fYXJncyA9PSA1ICkgfHwgKCBudW1fYXJncyA9PSAxICk7CisgICAgICAgICAgICAgIHNldF93aWR0aF9vayA9IGluX2RpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICggKCBudW1fYXJncyA9PSA1ICkgfHwgKCBudW1fYXJncyA9PSAxICkgKTsKICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xOTcxLDYgKzIwMTksMTAgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKIAogICAgICAgICBjYXNlIGNmZl9vcF9lbmRjaGFyOgorICAgICAgICAgIC8qIGluIGRpY3Rpb25hcmllcywgYGVuZGNoYXInIHNpbXBseSBpbmRpY2F0ZXMgZW5kIG9mIGRhdGEgKi8KKyAgICAgICAgICBpZiAoIGluX2RpY3QgKQorICAgICAgICAgICAgcmV0dXJuIGVycm9yOworCiAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlbmRjaGFyXG4iICkpOwogCiAgICAgICAgICAgLyogV2UgYXJlIGdvaW5nIHRvIGVtdWxhdGUgdGhlIHNlYWMgb3BlcmF0b3IuICovCkBAIC0yMDgyLDE1ICsyMTM0LDE0IEBACiAKICAgICAgICAgICBpZiAoIGFyZ3NbMF0gPiAwICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9JbnQgICAgY291bnQgPSA5OwotICAgICAgICAgICAgRlRfRml4ZWQgIHJvb3QgID0gYXJnc1swXTsKKyAgICAgICAgICAgIEZUX0ZpeGVkICByb290ID0gYXJnc1swXTsKICAgICAgICAgICAgIEZUX0ZpeGVkICBuZXdfcm9vdDsKIAogCiAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBuZXdfcm9vdCA9ICggcm9vdCArIEZUX0RpdkZpeCggYXJnc1swXSwgcm9vdCApICsgMSApID4+IDE7Ci0gICAgICAgICAgICAgIGlmICggbmV3X3Jvb3QgPT0gcm9vdCB8fCBjb3VudCA8PSAwICkKKyAgICAgICAgICAgICAgaWYgKCBuZXdfcm9vdCA9PSByb290ICkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgcm9vdCA9IG5ld19yb290OwogICAgICAgICAgICAgfQpAQCAtMjE5OSw2ICsyMjUwLDEwIEBACiAKICAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgcHV0XG4iICkpOwogCisgICAgICAgICAgICAvKiB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiBiZWZvcmUgdmVyc2lvbiAxNi1NYXJjaC0yMDAwICovCisgICAgICAgICAgICAvKiBkaWRuJ3QgZ2l2ZSBhIGhhcmQtY29kZWQgc2l6ZSBsaW1pdCBvZiB0aGUgdGVtcG9yYXJ5ICovCisgICAgICAgICAgICAvKiBzdG9yYWdlIGFycmF5OyBpbnN0ZWFkLCBhbiBhcmd1bWVudCBvZiB0aGUgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yIHNldCB0aGUgc2l6ZSAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgKQogICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IHZhbDsKICAgICAgICAgICB9CkBAIC0yMjIxLDE0ICsyMjc2LDY4IEBACiAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBjZmZfb3Bfc3RvcmU6Ci0gICAgICAgICAgRlRfVFJBQ0U0KCggIiBzdG9yZVxuIikpOworICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igd2FzIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLworICAgICAgICAgIC8qIGluIHZlcnNpb24gMTYtTWFyY2gtMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgZ290byBVbmltcGxlbWVudGVkOworICAgICAgICAgIC8qIHNpbmNlIHdlIGN1cnJlbnRseSBkb24ndCBoYW5kbGUgaW50ZXJwb2xhdGlvbiBvZiBtdWx0aXBsZSAqLworICAgICAgICAgIC8qIG1hc3RlciBmb250cywgdGhpcyBpcyBhIG5vLW9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgIEZUX1RSQUNFNCgoICIgc3RvcmVcbiIpKTsKKyAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIGNmZl9vcF9sb2FkOgotICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKyAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIHdhcyByZW1vdmVkIGZyb20gdGhlIFR5cGUyIHNwZWNpZmljYXRpb24gKi8KKyAgICAgICAgICAvKiBpbiB2ZXJzaW9uIDE2LU1hcmNoLTIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBGVF9JbnQgIHJlZ19pZHggPSAoRlRfSW50KWFyZ3NbMF07CisgICAgICAgICAgICBGVF9JbnQgIGlkeCAgICAgPSAoRlRfSW50KWFyZ3NbMV07CisgICAgICAgICAgICBGVF9JbnQgIGNvdW50ICAgPSAoRlRfSW50KWFyZ3NbMl07CiAKLSAgICAgICAgICBnb3RvIFVuaW1wbGVtZW50ZWQ7CisKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbG9hZFxuIiApKTsKKworICAgICAgICAgICAgLyogc2luY2Ugd2UgY3VycmVudGx5IGRvbid0IGhhbmRsZSBpbnRlcnBvbGF0aW9uIG9mIG11bHRpcGxlICovCisgICAgICAgICAgICAvKiBtYXN0ZXIgZm9udHMsIHdlIHN0b3JlIGEgdmVjdG9yIFsxIDAgMCAuLi5dIGluIHRoZSAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIHRlbXBvcmFyeSBzdG9yYWdlIGFycmF5IHJlZ2FyZGxlc3Mgb2YgdGhlIFJlZ2lzdHJ5IGluZGV4ICAqLworICAgICAgICAgICAgaWYgKCByZWdfaWR4ID49IDAgJiYgcmVnX2lkeCA8PSAyICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgIGlkeCA+PSAwICYmIGlkeCA8IENGRl9NQVhfVFJBTlNfRUxFTUVOVFMgJiYKKyAgICAgICAgICAgICAgICAgY291bnQgPj0gMCAmJiBjb3VudCA8PSBudW1fYXhlcyAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEZUX0ludCAgZW5kLCBpOworCisKKyAgICAgICAgICAgICAgZW5kID0gRlRfTUlOKCBpZHggKyBjb3VudCwgQ0ZGX01BWF9UUkFOU19FTEVNRU5UUyApOworCisgICAgICAgICAgICAgIGlmICggaWR4IDwgZW5kICkKKyAgICAgICAgICAgICAgICBkZWNvZGVyLT5idWlsZGNoYXJbaWR4XSA9IDEgPDwgMTY7CisKKyAgICAgICAgICAgICAgZm9yICggaSA9IGlkeCArIDE7IGkgPCBlbmQ7IGkrKyApCisgICAgICAgICAgICAgICAgZGVjb2Rlci0+YnVpbGRjaGFyW2ldID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfYmxlbmQ6CisgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBUeXBlMiBzcGVjaWZpY2F0aW9uICovCisgICAgICAgICAgLyogaW4gdmVyc2lvbiAxNi1NYXJjaC0yMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfSW50ICBudW1fcmVzdWx0cyA9IChGVF9JbnQpKCBhcmdzWzBdID4+IDE2ICk7CisKKworICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBibGVuZFxuIiApKTsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyA8IDAgKQorICAgICAgICAgICAgICBnb3RvIFN5bnRheF9FcnJvcjsKKworICAgICAgICAgICAgaWYgKCBudW1fcmVzdWx0cyAqIChGVF9JbnQpbnVtX2Rlc2lnbnMgPiBudW1fYXJncyApCisgICAgICAgICAgICAgIGdvdG8gU3RhY2tfVW5kZXJmbG93OworCisgICAgICAgICAgICAvKiBzaW5jZSB3ZSBjdXJyZW50bHkgZG9uJ3QgaGFuZGxlIGludGVycG9sYXRpb24gb2YgbXVsdGlwbGUgKi8KKyAgICAgICAgICAgIC8qIG1hc3RlciBmb250cywgcmV0dXJuIHRoZSBgbnVtX3Jlc3VsdHMnIHZhbHVlcyBvZiB0aGUgICAgICAqLworICAgICAgICAgICAgLyogZmlyc3QgbWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBhcmdzICAgICAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgICBudW1fYXJncyAtPSBudW1fcmVzdWx0cyAqICggbnVtX2Rlc2lnbnMgLSAxICk7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgY2ZmX29wX2RvdHNlY3Rpb246CiAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBpcyBkZXByZWNhdGVkIGFuZCBpZ25vcmVkIGJ5IHRoZSBwYXJzZXIgKi8KQEAgLTIzNTgsMTEgKzI0NjcsMjMgQEAKICAgICAgICAgICB9CiAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBjZmZfb3BfZXE6CisgICAgICAgIGNhc2UgY2ZmX29wX25vdDoKICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9GaXhlZCAgY29uZCA9ICFhcmdzWzBdOwogCiAKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIgbm90XG4iICkpOworCisgICAgICAgICAgICBhcmdzWzBdID0gY29uZCA/IDB4MTAwMDBMIDogMDsKKyAgICAgICAgICAgIGFyZ3MrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBjZmZfb3BfZXE6CisgICAgICAgICAgeworICAgICAgICAgICAgRlRfRml4ZWQgIGNvbmQgPSBhcmdzWzBdID09IGFyZ3NbMV07CisKKwogICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiBlcVxuIiApKTsKIAogICAgICAgICAgICAgYXJnc1swXSA9IGNvbmQgPyAweDEwMDAwTCA6IDA7CkBAIC0yNDg5LDcgKzI2MTAsNiBAQAogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVuaW1wbGVtZW50ZWQ6CiAgICAgICAgICAgRlRfRVJST1IoKCAiVW5pbXBsZW1lbnRlZCBvcGNvZGU6ICVkIiwgaXBbLTFdICkpOwogCiAgICAgICAgICAgaWYgKCBpcFstMV0gPT0gMTIgKQpAQCAtMjUxMyw2ICsyNjMzLDExIEBACiAgIEZhaWw6CiAgICAgcmV0dXJuIGVycm9yOwogCisgIE1NX0Vycm9yOgorICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczoiCisgICAgICAgICAgICAgICAgIiBpbnZhbGlkIG9wY29kZSBmb3VuZCBpbiB0b3AgRElDVCBjaGFyc3RyaW5nXG4iKSk7CisgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7CisKICAgU3ludGF4X0Vycm9yOgogICAgIEZUX1RSQUNFNCgoICJjZmZfZGVjb2Rlcl9wYXJzZV9jaGFyc3RyaW5nczogc3ludGF4IGVycm9yXG4iICkpOwogICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOwpAQCAtMjU4Niw3ICsyNzExLDggQEAKICAgICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ19sZW4gKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICk7CiAKICAgICAgICAgY2ZmX2ZyZWVfZ2x5cGhfZGF0YSggZmFjZSwgJmNoYXJzdHJpbmcsICZjaGFyc3RyaW5nX2xlbiApOwogICAgICAgfQpAQCAtMjgxNiw2ICsyOTQyLDcgQEAKICAgICAgIGNmZl9kZWNvZGVyX2luaXQoICZkZWNvZGVyLCBmYWNlLCBzaXplLCBnbHlwaCwgaGludGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSApOwogCisgICAgICAvKiB0aGlzIGlzIGZvciBwdXJlIENGRnMgKi8KICAgICAgIGlmICggbG9hZF9mbGFncyAmIEZUX0xPQURfQURWQU5DRV9PTkxZICkKICAgICAgICAgZGVjb2Rlci53aWR0aF9vbmx5ID0gVFJVRTsKIApAQCAtMjgzNyw3ICsyOTY0LDggQEAKICAgICAgIGlmICggZHJpdmVyLT5oaW50aW5nX2VuZ2luZSA9PSBGVF9DRkZfSElOVElOR19GUkVFVFlQRSApCiAgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCApOwogICAgICAgZWxzZQogI2VuZGlmCiAgICAgICB7CmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmdsb2FkLmggYi9zcmMvY2ZmL2NmZmdsb2FkLmgKaW5kZXggNWYyNjU1Zi4uYjg3NWZiZSAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZnbG9hZC5oCisrKyBiL3NyYy9jZmYvY2ZmZ2xvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBHbHlwaCBMb2FkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGR0xPQURfSF9fCi0jZGVmaW5lIF9fQ0ZGR0xPQURfSF9fCisjaWZuZGVmIENGRkdMT0FEX0hfCisjZGVmaW5lIENGRkdMT0FEX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yMjcsNyArMjI3LDggQEAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoIENGRl9EZWNvZGVyKiAgZGVjb2RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICAgY2hhcnN0cmluZ19iYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICBjaGFyc3RyaW5nX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICAgaW5fZGljdCApOwogI2VuZGlmCiAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKQEAgLTIzOSw3ICsyNDAsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRkdMT0FEX0hfXyAqLworI2VuZGlmIC8qIENGRkdMT0FEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZmxvYWQuYyBiL3NyYy9jZmYvY2ZmbG9hZC5jCmluZGV4IGM2MTIyMmQuLjQ3MGZhODIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmbG9hZC5jCisrKyBiL3NyYy9jZmYvY2ZmbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9wZW5UeXBlIGFuZCBDRkYgZGF0YS9wcm9ncmFtIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zODIsMTMgKzM4MiwxNSBAQAogICBzdGF0aWMgRlRfRXJyb3IKICAgY2ZmX2luZGV4X2dldF9wb2ludGVycyggQ0ZGX0luZGV4ICAgaWR4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKioqICB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSoqICAgcG9vbCApCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqKiAgIHBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nKiAgIHBvb2xfc2l6ZSApCiAgIHsKICAgICBGVF9FcnJvciAgIGVycm9yICAgICA9IEZUX0Vycl9PazsKICAgICBGVF9NZW1vcnkgIG1lbW9yeSAgICA9IGlkeC0+c3RyZWFtLT5tZW1vcnk7CiAKICAgICBGVF9CeXRlKiogIHQgICAgICAgICA9IE5VTEw7CiAgICAgRlRfQnl0ZSogICBuZXdfYnl0ZXMgPSBOVUxMOworICAgIEZUX1VMb25nICAgbmV3X3NpemU7CiAKIAogICAgICp0YWJsZSA9IE5VTEw7CkBAIC00MDAsMTAgKzQwMiwxMSBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfQogCi0gICAgaWYgKCBpZHgtPmNvdW50ID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgotICAgICAgICAgIUZUX05FV19BUlJBWSggdCwgaWR4LT5jb3VudCArIDEgKSAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICggIXBvb2wgfHwgIUZUX0FMTE9DKCBuZXdfYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4LT5kYXRhX3NpemUgKyBpZHgtPmNvdW50ICkgKSApCisgICAgbmV3X3NpemUgPSBpZHgtPmRhdGFfc2l6ZSArIGlkeC0+Y291bnQ7CisKKyAgICBpZiAoIGlkeC0+Y291bnQgPiAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgIUZUX05FV19BUlJBWSggdCwgaWR4LT5jb3VudCArIDEgKSAgICAgICAgICAgICYmCisgICAgICAgICAoICFwb29sIHx8ICFGVF9BTExPQyggbmV3X2J5dGVzLCBuZXdfc2l6ZSApICkgKQogICAgIHsKICAgICAgIEZUX1VMb25nICBuLCBjdXJfb2Zmc2V0OwogICAgICAgRlRfVUxvbmcgIGV4dHJhID0gMDsKQEAgLTQ1OSw2ICs0NjIsOCBAQAogCiAgICAgICBpZiAoIHBvb2wgKQogICAgICAgICAqcG9vbCA9IG5ld19ieXRlczsKKyAgICAgIGlmICggcG9vbF9zaXplICkKKyAgICAgICAgKnBvb2xfc2l6ZSA9IG5ld19zaXplOwogICAgIH0KIAogICBFeGl0OgpAQCAtNTAxLDggKzUwNiw4IEBACiAgICAgICAgICAgewogICAgICAgICAgICAgZWxlbWVudCsrOwogICAgICAgICAgICAgb2ZmMiA9IGNmZl9pbmRleF9yZWFkX29mZnNldCggaWR4LCAmZXJyb3IgKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2hpbGUgKCBvZmYyID09IDAgJiYgZWxlbWVudCA8IGlkeC0+Y291bnQgKTsKKworICAgICAgICAgIH0gd2hpbGUgKCBvZmYyID09IDAgJiYgZWxlbWVudCA8IGlkeC0+Y291bnQgKTsKICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSAgIC8qIHVzZSBvZmZzZXRzIHRhYmxlICovCkBAIC01OTcsNyArNjAyLDggQEAKIAogICAgIGlmICggIUZUX0FMTE9DKCBuYW1lLCBieXRlX2xlbiArIDEgKSApCiAgICAgewotICAgICAgRlRfTUVNX0NPUFkoIG5hbWUsIGJ5dGVzLCBieXRlX2xlbiApOworICAgICAgaWYgKCBieXRlX2xlbiApCisgICAgICAgIEZUX01FTV9DT1BZKCBuYW1lLCBieXRlcywgYnl0ZV9sZW4gKTsKICAgICAgIG5hbWVbYnl0ZV9sZW5dID0gMDsKICAgICB9CiAgICAgY2ZmX2luZGV4X2ZvcmdldF9lbGVtZW50KCBpZHgsICZieXRlcyApOwpAQCAtODA5LDcgKzgxNSw3IEBACiAgICAgLyogV2hlbiBtdWx0aXBsZSBHSURzIG1hcCB0byB0aGUgc2FtZSBDSUQsIHdlIGNob29zZSB0aGUgbG93ZXN0ICovCiAgICAgLyogR0lELiAgVGhpcyBpcyBub3QgZGVzY3JpYmVkIGluIGFueSBzcGVjLCBidXQgaXQgbWF0Y2hlcyB0aGUgICovCiAgICAgLyogYmVoYXZpb3VyIG9mIHJlY2VudCBBY3JvcmVhZCB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgZm9yICggaiA9IChGVF9Mb25nKW51bV9nbHlwaHMgLSAxOyBqID49IDAgOyBqLS0gKQorICAgIGZvciAoIGogPSAoRlRfTG9uZyludW1fZ2x5cGhzIC0gMTsgaiA+PSAwOyBqLS0gKQogICAgICAgY2hhcnNldC0+Y2lkc1tjaGFyc2V0LT5zaWRzW2pdXSA9IChGVF9VU2hvcnQpajsKIAogICAgIGNoYXJzZXQtPm1heF9jaWQgICAgPSBtYXhfY2lkOwpAQCAtODcxLDggKzg3Nyw4IEBACiAgICAgRlRfVVNob3J0ICBnbHlwaF9zaWQ7CiAKIAotICAgIC8qIElmIHRoZSB0aGUgb2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiAyLCB3ZSBoYXZlIHRvIHBhcnNlIHRoZSAqLwotICAgIC8qIGNoYXJzZXQgdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIElmIHRoZSBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIDIsIHdlIGhhdmUgdG8gcGFyc2UgdGhlIGNoYXJzZXQgKi8KKyAgICAvKiB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCBvZmZzZXQgPiAyICkKICAgICB7CiAgICAgICBGVF9VSW50ICBqOwpAQCAtMTMxNiw3ICsxMzIyLDEyIEBACiAgICAgQ0ZGX1ByaXZhdGUgICAgICBwcml2ID0gJmZvbnQtPnByaXZhdGVfZGljdDsKIAogCi0gICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLCBDRkZfQ09ERV9UT1BESUNULCAmZm9udC0+Zm9udF9kaWN0LCBsaWJyYXJ5ICk7CisgICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgQ0ZGX0NPREVfVE9QRElDVCwKKyAgICAgICAgICAgICAgICAgICAgICZmb250LT5mb250X2RpY3QsCisgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgIDAgKTsKIAogICAgIC8qIHNldCBkZWZhdWx0cyAqLwogICAgIEZUX01FTV9aRVJPKCB0b3AsIHNpemVvZiAoICp0b3AgKSApOwpAQCAtMTM3MCw3ICsxMzgxLDEyIEBACiAgICAgICBwcml2LT5leHBhbnNpb25fZmFjdG9yID0gKEZUX0ZpeGVkKSggMC4wNiAqIDB4MTAwMDBMICk7CiAgICAgICBwcml2LT5ibHVlX3NjYWxlICAgICAgID0gKEZUX0ZpeGVkKSggMC4wMzk2MjUgKiAweDEwMDAwTCAqIDEwMDAgKTsKIAotICAgICAgY2ZmX3BhcnNlcl9pbml0KCAmcGFyc2VyLCBDRkZfQ09ERV9QUklWQVRFLCBwcml2LCBsaWJyYXJ5ICk7CisgICAgICBjZmZfcGFyc2VyX2luaXQoICZwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgIENGRl9DT0RFX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAgICAgIHByaXYsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnksCisgICAgICAgICAgICAgICAgICAgICAgIHRvcC0+bnVtX2Rlc2lnbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHRvcC0+bnVtX2F4ZXMgKTsKIAogICAgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggYmFzZV9vZmZzZXQgKyBmb250LT5mb250X2RpY3QucHJpdmF0ZV9vZmZzZXQgKSB8fAogICAgICAgICAgICBGVF9GUkFNRV9FTlRFUiggZm9udC0+Zm9udF9kaWN0LnByaXZhdGVfc2l6ZSApICAgICAgICAgICAgICAgICApCkBAIC0xNDAwLDcgKzE0MTYsNyBAQAogICAgICAgICBnb3RvIEV4aXQ7CiAKICAgICAgIGVycm9yID0gY2ZmX2luZGV4X2dldF9wb2ludGVycyggJmZvbnQtPmxvY2FsX3N1YnJzX2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+bG9jYWxfc3VicnMsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPmxvY2FsX3N1YnJzLCBOVUxMLCBOVUxMICk7CiAgICAgICBpZiAoIGVycm9yICkKICAgICAgICAgZ290byBFeGl0OwogICAgIH0KQEAgLTE0NzgsMTYgKzE0OTQsMTcgQEAKIAogICAgIC8qIHJlYWQgdGhlIG5hbWUsIHRvcCBkaWN0LCBzdHJpbmcgYW5kIGdsb2JhbCBzdWJycyBpbmRleCAqLwogICAgIGlmICggRlRfU0VUX0VSUk9SKCBjZmZfaW5kZXhfaW5pdCggJmZvbnQtPm5hbWVfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDAgKSApICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMCApICkgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9pbml0KCAmZm9udC0+Zm9udF9kaWN0X2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAwICkgKSAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDAgKSApICAgICAgICAgICAgICAgICAgICAgICB8fAogICAgICAgICAgRlRfU0VUX0VSUk9SKCBjZmZfaW5kZXhfaW5pdCggJnN0cmluZ19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMSApICkgICAgICAgICAgICAgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLCAxICkgKSAgICAgICAgICAgICAgICAgICAgICAgfHwKICAgICAgICAgIEZUX1NFVF9FUlJPUiggY2ZmX2luZGV4X2luaXQoICZmb250LT5nbG9iYWxfc3VicnNfaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sIDEgKSApICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwgMSApICkgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBGVF9TRVRfRVJST1IoIGNmZl9pbmRleF9nZXRfcG9pbnRlcnMoICZzdHJpbmdfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5zdHJpbmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+c3RyaW5nX3Bvb2wgKSApICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQtPnN0cmluZ19wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9udC0+c3RyaW5nX3Bvb2xfc2l6ZSApICkgKQogICAgICAgZ290byBFeGl0OwogCiAgICAgZm9udC0+bnVtX3N0cmluZ3MgPSBzdHJpbmdfaW5kZXguY291bnQ7CkBAIC0xNjE0LDcgKzE2MzEsNyBAQAogICAgIGZvbnQtPm51bV9nbHlwaHMgPSBmb250LT5jaGFyc3RyaW5nc19pbmRleC5jb3VudDsKIAogICAgIGVycm9yID0gY2ZmX2luZGV4X2dldF9wb2ludGVycyggJmZvbnQtPmdsb2JhbF9zdWJyc19pbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5nbG9iYWxfc3VicnMsIE5VTEwgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb250LT5nbG9iYWxfc3VicnMsIE5VTEwsIE5VTEwgKTsKIAogICAgIGlmICggZXJyb3IgKQogICAgICAgZ290byBFeGl0OwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZsb2FkLmggYi9zcmMvY2ZmL2NmZmxvYWQuaAppbmRleCA0NTllN2IwLi4xZGQwN2JhIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZmxvYWQuaAorKysgYi9zcmMvY2ZmL2NmZmxvYWQuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSAmIENGRiBkYXRhL3Byb2dyYW0gdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGTE9BRF9IX18KLSNkZWZpbmUgX19DRkZMT0FEX0hfXworI2lmbmRlZiBDRkZMT0FEX0hfCisjZGVmaW5lIENGRkxPQURfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTc3LDcgKzc3LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19DRkZMT0FEX0hfXyAqLworI2VuZGlmIC8qIENGRkxPQURfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2Zmb2Jqcy5jIGIvc3JjL2NmZi9jZmZvYmpzLmMKaW5kZXggZDYyOGI2OC4uMGYwNzY5NiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZvYmpzLmMKKysrIGIvc3JjL2NmZi9jZmZvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgT3BlblR5cGUgb2JqZWN0cyBtYW5hZ2VyIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTU4Niw3ICs1ODYsMTAgQEAKICAgICAgIC8qIGlmIHdlIGFyZSBwZXJmb3JtaW5nIGEgc2ltcGxlIGZvbnQgZm9ybWF0IGNoZWNrLCBleGl0IGltbWVkaWF0ZWx5ICovCiAgICAgICAvKiAodGhpcyBpcyBoZXJlIGZvciBwdXJlIENGRikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgaWYgKCBmYWNlX2luZGV4IDwgMCApCisgICAgICB7CisgICAgICAgIGNmZmZhY2UtPm51bV9mYWNlcyA9IChGVF9Mb25nKWNmZi0+bnVtX2ZhY2VzOwogICAgICAgICByZXR1cm4gRlRfRXJyX09rOworICAgICAgfQogCiAgICAgICBjZmYtPnBzaGludGVyID0gcHNoaW50ZXI7CiAgICAgICBjZmYtPnBzbmFtZXMgID0gcHNuYW1lczsKQEAgLTYyMiwxMSArNjI1LDQ0IEBACiAgICAgICAgIEZUX1RSQUNFNCgoICJTSURzXG4iICkpOwogCiAgICAgICAgIC8qIGR1bXAgc3RyaW5nIGluZGV4LCBpbmNsdWRpbmcgZGVmYXVsdCBzdHJpbmdzIGZvciBjb252ZW5pZW5jZSAqLwotICAgICAgICBmb3IgKCBpZHggPSAwOyBpZHggPCBjZmYtPm51bV9zdHJpbmdzICsgMzkwOyBpZHgrKyApCisgICAgICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8PSAzOTA7IGlkeCsrICkKICAgICAgICAgewogICAgICAgICAgIHMgPSBjZmZfaW5kZXhfZ2V0X3NpZF9zdHJpbmcoIGNmZiwgaWR4ICk7CiAgICAgICAgICAgaWYgKCBzICkKLSAgICAgICAgICAgIEZUX1RSQUNFNCgoIiAgJTVkICVzXG4iLCBpZHgsIHMgKSk7CisgICAgICAgICAgICBGVF9UUkFDRTQoKCAiICAlNWQgJXNcbiIsIGlkeCwgcyApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEluIE11bHRpcGxlIE1hc3RlciBDRkZzLCB0d28gU0lEcyBob2xkIHRoZSBOb3JtYWxpemUgRGVzaWduICAqLworICAgICAgICAvKiBWZWN0b3IgKE5EVikgYW5kIENvbnZlcnQgRGVzaWduIFZlY3RvciAoQ0RWKSBjaGFyc3RyaW5ncywgICAgKi8KKyAgICAgICAgLyogd2hpY2ggbWF5IGNvbnRhaW4gTlVMTCBieXRlcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBkYXRhLCB0b28uICovCisgICAgICAgIC8qIFdlIHRodXMgYWNjZXNzIGBjZmYtPnN0cmluZ3MnIGRpcmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBmb3IgKCBpZHggPSAxOyBpZHggPCBjZmYtPm51bV9zdHJpbmdzOyBpZHgrKyApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9CeXRlKiAgICBzMSAgICA9IGNmZi0+c3RyaW5nc1tpZHggLSAxXTsKKyAgICAgICAgICBGVF9CeXRlKiAgICBzMiAgICA9IGNmZi0+c3RyaW5nc1tpZHhdOworICAgICAgICAgIEZUX1B0ckRpc3QgIHMxbGVuID0gczIgLSBzMSAtIDE7IC8qIHdpdGhvdXQgdGhlIGZpbmFsIE5VTEwgYnl0ZSAqLworICAgICAgICAgIEZUX1B0ckRpc3QgIGw7CisKKworICAgICAgICAgIEZUX1RSQUNFNCgoICIgICU1ZCAiLCBpZHggKyAzOTAgKSk7CisgICAgICAgICAgZm9yICggbCA9IDA7IGwgPCBzMWxlbjsgbCsrICkKKyAgICAgICAgICAgIEZUX1RSQUNFNCgoICIlYyIsIHMxW2xdICkpOworICAgICAgICAgIEZUX1RSQUNFNCgoICJcbiIgKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBwcmludCBsYXN0IGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKCBjZmYtPm51bV9zdHJpbmdzICkKKyAgICAgICAgeworICAgICAgICAgIEZUX0J5dGUqICAgIHMxICAgID0gY2ZmLT5zdHJpbmdzW2NmZi0+bnVtX3N0cmluZ3MgLSAxXTsKKyAgICAgICAgICBGVF9CeXRlKiAgICBzMiAgICA9IGNmZi0+c3RyaW5nX3Bvb2wgKyBjZmYtPnN0cmluZ19wb29sX3NpemU7CisgICAgICAgICAgRlRfUHRyRGlzdCAgczFsZW4gPSBzMiAtIHMxIC0gMTsKKyAgICAgICAgICBGVF9QdHJEaXN0ICBsOworCisKKyAgICAgICAgICBGVF9UUkFDRTQoKCAiICAlNWQgIiwgY2ZmLT5udW1fc3RyaW5ncyArIDM5MCApKTsKKyAgICAgICAgICBmb3IgKCBsID0gMDsgbCA8IHMxbGVuOyBsKysgKQorICAgICAgICAgICAgRlRfVFJBQ0U0KCggIiVjIiwgczFbbF0gKSk7CisgICAgICAgICAgRlRfVFJBQ0U0KCggIlxuIiApKTsKICAgICAgICAgfQogICAgICAgfQogI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCkBAIC02MzQsMTAgKzY3MCwxMSBAQAogICAgICAgaWYgKCAhZGljdC0+aGFzX2ZvbnRfbWF0cml4ICkKICAgICAgICAgZGljdC0+dW5pdHNfcGVyX2VtID0gcHVyZV9jZmYgPyAxMDAwIDogZmFjZS0+cm9vdC51bml0c19wZXJfRU07CiAKLSAgICAgIC8qIE5vcm1hbGl6ZSB0aGUgZm9udCBtYXRyaXggc28gdGhhdCBgbWF0cml4LT55eScgaXMgMTsgdGhlICovCi0gICAgICAvKiBzY2FsaW5nIGlzIGRvbmUgd2l0aCBgdW5pdHNfcGVyX2VtJyB0aGVuIChhdCB0aGlzIHBvaW50LCAqLwotICAgICAgLyogaXQgYWxyZWFkeSBjb250YWlucyB0aGUgc2NhbGluZyBmYWN0b3IsIGJ1dCB3aXRob3V0ICAgICAgKi8KLSAgICAgIC8qIG5vcm1hbGl6YXRpb24gb2YgdGhlIG1hdHJpeCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBOb3JtYWxpemUgdGhlIGZvbnQgbWF0cml4IHNvIHRoYXQgYG1hdHJpeC0+eXknIGlzIDE7IGlmICAqLworICAgICAgLyogaXQgaXMgemVybywgd2UgdXNlIGBtYXRyaXgtPnl4JyBpbnN0ZWFkLiAgVGhlIHNjYWxpbmcgaXMgKi8KKyAgICAgIC8qIGRvbmUgd2l0aCBgdW5pdHNfcGVyX2VtJyB0aGVuIChhdCB0aGlzIHBvaW50LCBpdCBhbHJlYWR5ICovCisgICAgICAvKiBjb250YWlucyB0aGUgc2NhbGluZyBmYWN0b3IsIGJ1dCB3aXRob3V0IG5vcm1hbGl6YXRpb24gICAqLworICAgICAgLyogb2YgdGhlIG1hdHJpeCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAvKiBOb3RlIHRoYXQgdGhlIG9mZnNldHMgbXVzdCBiZSBleHByZXNzZWQgaW4gaW50ZWdlciBmb250ICAqLwogICAgICAgLyogdW5pdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTY0Niw5ICs2ODMsMTIgQEAKICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4ID0gJmRpY3QtPmZvbnRfbWF0cml4OwogICAgICAgICBGVF9WZWN0b3IqICBvZmZzZXQgPSAmZGljdC0+Zm9udF9vZmZzZXQ7CiAgICAgICAgIEZUX1VMb25nKiAgIHVwbSAgICA9ICZkaWN0LT51bml0c19wZXJfZW07Ci0gICAgICAgIEZUX0ZpeGVkICAgIHRlbXAgICA9IEZUX0FCUyggbWF0cml4LT55eSApOworICAgICAgICBGVF9GaXhlZCAgICB0ZW1wOwogCiAKKyAgICAgICAgdGVtcCA9IG1hdHJpeC0+eXkgPyBGVF9BQlMoIG1hdHJpeC0+eXkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZUX0FCUyggbWF0cml4LT55eCApOworCiAgICAgICAgIGlmICggdGVtcCAhPSAweDEwMDAwTCApCiAgICAgICAgIHsKICAgICAgICAgICAqdXBtID0gKEZUX1VMb25nKUZUX0RpdkZpeCggKEZUX0xvbmcpKnVwbSwgdGVtcCApOwpAQCAtNzE2LDcgKzc1NiwxMCBAQAogICAgICAgICBtYXRyaXggPSAmc3ViLT5mb250X21hdHJpeDsKICAgICAgICAgb2Zmc2V0ID0gJnN1Yi0+Zm9udF9vZmZzZXQ7CiAgICAgICAgIHVwbSAgICA9ICZzdWItPnVuaXRzX3Blcl9lbTsKLSAgICAgICAgdGVtcCAgID0gRlRfQUJTKCBtYXRyaXgtPnl5ICk7CisKKyAgICAgICAgdGVtcCA9IG1hdHJpeC0+eXkgPyBGVF9BQlMoIG1hdHJpeC0+eXkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IEZUX0FCUyggbWF0cml4LT55eCApOworCiAKICAgICAgICAgaWYgKCB0ZW1wICE9IDB4MTAwMDBMICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZvYmpzLmggYi9zcmMvY2ZmL2NmZm9ianMuaAppbmRleCAzY2M5NTMxLi45ZGM3NzUzIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZm9ianMuaAorKysgYi9zcmMvY2ZmL2NmZm9ianMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBPcGVuVHlwZSBvYmplY3RzIG1hbmFnZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fQ0ZGT0JKU19IX18KLSNkZWZpbmUgX19DRkZPQkpTX0hfXworI2lmbmRlZiBDRkZPQkpTX0hfCisjZGVmaW5lIENGRk9CSlNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE3OSw3ICsxNzksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX0NGRk9CSlNfSF9fICovCisjZW5kaWYgLyogQ0ZGT0JKU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZwYXJzZS5jIGIvc3JjL2NmZi9jZmZwYXJzZS5jCmluZGV4IDA2M2IzNTEuLmE0Zjk4NmIgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmcGFyc2UuYworKysgYi9zcmMvY2ZmL2NmZnBhcnNlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKGJvZHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgImNmZmVycnMuaCIKICNpbmNsdWRlICJjZmZwaWMuaCIKKyNpbmNsdWRlICJjZmZnbG9hZC5oIgogCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zOSw3ICs0MCw5IEBACiAgIGNmZl9wYXJzZXJfaW5pdCggQ0ZGX1BhcnNlciAgcGFyc2VyLAogICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGNvZGUsCiAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgb2JqZWN0LAotICAgICAgICAgICAgICAgICAgIEZUX0xpYnJhcnkgIGxpYnJhcnkpCisgICAgICAgICAgICAgICAgICAgRlRfTGlicmFyeSAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICBudW1fZGVzaWducywKKyAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICBudW1fYXhlcyApCiAgIHsKICAgICBGVF9NRU1fWkVSTyggcGFyc2VyLCBzaXplb2YgKCAqcGFyc2VyICkgKTsKIApAQCAtNDcsNiArNTAsOCBAQAogICAgIHBhcnNlci0+b2JqZWN0X2NvZGUgPSBjb2RlOwogICAgIHBhcnNlci0+b2JqZWN0ICAgICAgPSBvYmplY3Q7CiAgICAgcGFyc2VyLT5saWJyYXJ5ICAgICA9IGxpYnJhcnk7CisgICAgcGFyc2VyLT5udW1fZGVzaWducyA9IG51bV9kZXNpZ25zOworICAgIHBhcnNlci0+bnVtX2F4ZXMgICAgPSBudW1fYXhlczsKICAgfQogCiAKQEAgLTUxNiw3ICs1MjEsMTEgQEAKIAogICAgIGlmICggcGFyc2VyLT50b3AgPj0gcGFyc2VyLT5zdGFjayArIDYgKQogICAgIHsKLSAgICAgIEZUX0xvbmcgIHNjYWxpbmc7CisgICAgICBGVF9GaXhlZCAgdmFsdWVzWzZdOworICAgICAgRlRfTG9uZyAgIHNjYWxpbmdzWzZdOworCisgICAgICBGVF9Mb25nICBtaW5fc2NhbGluZywgbWF4X3NjYWxpbmc7CisgICAgICBpbnQgICAgICBpOwogCiAKICAgICAgIGVycm9yID0gRlRfRXJyX09rOwpAQCAtNTI1LDIyICs1MzQsMzYgQEAKIAogICAgICAgLyogV2UgZXhwZWN0IGEgd2VsbC1mb3JtZWQgZm9udCBtYXRyaXgsIHRoaXMgaXMsIHRoZSBtYXRyaXggZWxlbWVudHMgKi8KICAgICAgIC8qIGB4eCcgYW5kIGB5eScgYXJlIG9mIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgbWFnbml0dWRlLiAgVG8gYXZvaWQgICovCi0gICAgICAvKiBsb3NzIG9mIHByZWNpc2lvbiwgd2UgdXNlIHRoZSBtYWduaXR1ZGUgb2YgZWxlbWVudCBgeHgnIHRvIHNjYWxlICAqLwotICAgICAgLyogYWxsIG90aGVyIGVsZW1lbnRzLiAgVGhlIHNjYWxpbmcgZmFjdG9yIGlzIHRoZW4gY29udGFpbmVkIGluIHRoZSAgKi8KLSAgICAgIC8qIGB1bml0c19wZXJfZW0nIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBsb3NzIG9mIHByZWNpc2lvbiwgd2UgdXNlIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGxhcmdlc3QgbWF0cml4ICAgICAqLworICAgICAgLyogZWxlbWVudCB0byBzY2FsZSBhbGwgb3RoZXIgZWxlbWVudHMuICBUaGUgc2NhbGluZyBmYWN0b3IgaXMgdGhlbiAgKi8KKyAgICAgIC8qIGNvbnRhaW5lZCBpbiB0aGUgYHVuaXRzX3Blcl9lbScgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgIG1hdHJpeC0+eHggPSBjZmZfcGFyc2VfZml4ZWRfZHluYW1pYyggZGF0YSsrLCAmc2NhbGluZyApOworICAgICAgbWF4X3NjYWxpbmcgPSBGVF9MT05HX01JTjsKKyAgICAgIG1pbl9zY2FsaW5nID0gRlRfTE9OR19NQVg7CiAKLSAgICAgIHNjYWxpbmcgPSAtc2NhbGluZzsKKyAgICAgIGZvciAoIGkgPSAwOyBpIDwgNjsgaSsrICkKKyAgICAgIHsKKyAgICAgICAgdmFsdWVzW2ldID0gY2ZmX3BhcnNlX2ZpeGVkX2R5bmFtaWMoIGRhdGErKywgJnNjYWxpbmdzW2ldICk7CisgICAgICAgIGlmICggdmFsdWVzW2ldICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggc2NhbGluZ3NbaV0gPiBtYXhfc2NhbGluZyApCisgICAgICAgICAgICBtYXhfc2NhbGluZyA9IHNjYWxpbmdzW2ldOworICAgICAgICAgIGlmICggc2NhbGluZ3NbaV0gPCBtaW5fc2NhbGluZyApCisgICAgICAgICAgICBtaW5fc2NhbGluZyA9IHNjYWxpbmdzW2ldOworICAgICAgICB9CisgICAgICB9CiAKLSAgICAgIGlmICggc2NhbGluZyA8IDAgfHwgc2NhbGluZyA+IDkgKQorICAgICAgaWYgKCBtYXhfc2NhbGluZyA8IC05ICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgbWF4X3NjYWxpbmcgPiAwICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICggbWF4X3NjYWxpbmcgLSBtaW5fc2NhbGluZyApIDwgMCB8fAorICAgICAgICAgICAoIG1heF9zY2FsaW5nIC0gbWluX3NjYWxpbmcgKSA+IDkgKQogICAgICAgewogICAgICAgICAvKiBSZXR1cm4gZGVmYXVsdCBtYXRyaXggaW4gY2FzZSBvZiB1bmxpa2VseSB2YWx1ZXMuICovCiAKICAgICAgICAgRlRfVFJBQ0UxKCggImNmZl9wYXJzZV9mb250X21hdHJpeDoiCi0gICAgICAgICAgICAgICAgICAgICIgc3RyYW5nZSBzY2FsaW5nIHZhbHVlIGZvciB4eCBlbGVtZW50ICglZCksXG4iCisgICAgICAgICAgICAgICAgICAgICIgc3RyYW5nZSBzY2FsaW5nIHZhbHVlcyAobWluaW11bSAlZCwgbWF4aW11bSAlZCksXG4iCiAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIGRlZmF1bHQgbWF0cml4XG4iLCBzY2FsaW5nICkpOworICAgICAgICAgICAgICAgICAgICAiIHVzaW5nIGRlZmF1bHQgbWF0cml4XG4iLCBtaW5fc2NhbGluZywgbWF4X3NjYWxpbmcgKSk7CiAKICAgICAgICAgbWF0cml4LT54eCA9IDB4MTAwMDBMOwogICAgICAgICBtYXRyaXgtPnl4ID0gMDsKQEAgLTU1MywxMyArNTc2LDQyIEBACiAgICAgICAgIGdvdG8gRXhpdDsKICAgICAgIH0KIAotICAgICAgbWF0cml4LT55eCA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOwotICAgICAgbWF0cml4LT54eSA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOwotICAgICAgbWF0cml4LT55eSA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOwotICAgICAgb2Zmc2V0LT54ICA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGErKywgc2NhbGluZyApOwotICAgICAgb2Zmc2V0LT55ICA9IGNmZl9wYXJzZV9maXhlZF9zY2FsZWQoIGRhdGEsICAgc2NhbGluZyApOworICAgICAgZm9yICggaSA9IDA7IGkgPCA2OyBpKysgKQorICAgICAgeworICAgICAgICBGVF9GaXhlZCAgdmFsdWUgPSB2YWx1ZXNbaV07CisgICAgICAgIEZUX0xvbmcgICBkaXZpc29yLCBoYWxmX2Rpdmlzb3I7CiAKLSAgICAgICp1cG0gPSAoRlRfVUxvbmcpcG93ZXJfdGVuc1tzY2FsaW5nXTsKKworICAgICAgICBpZiAoICF2YWx1ZSApCisgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGl2aXNvciAgICAgID0gcG93ZXJfdGVuc1ttYXhfc2NhbGluZyAtIHNjYWxpbmdzW2ldXTsKKyAgICAgICAgaGFsZl9kaXZpc29yID0gZGl2aXNvciA+PiAxOworCisgICAgICAgIGlmICggdmFsdWUgPCAwICkKKyAgICAgICAgeworICAgICAgICAgIGlmICggRlRfTE9OR19NSU4gKyBoYWxmX2Rpdmlzb3IgPCB2YWx1ZSApCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSAoIHZhbHVlIC0gaGFsZl9kaXZpc29yICkgLyBkaXZpc29yOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IEZUX0xPTkdfTUlOIC8gZGl2aXNvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIEZUX0xPTkdfTUFYIC0gaGFsZl9kaXZpc29yID4gdmFsdWUgKQorICAgICAgICAgICAgdmFsdWVzW2ldID0gKCB2YWx1ZSArIGhhbGZfZGl2aXNvciApIC8gZGl2aXNvcjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBGVF9MT05HX01BWCAvIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgbWF0cml4LT54eCA9IHZhbHVlc1swXTsKKyAgICAgIG1hdHJpeC0+eXggPSB2YWx1ZXNbMV07CisgICAgICBtYXRyaXgtPnh5ID0gdmFsdWVzWzJdOworICAgICAgbWF0cml4LT55eSA9IHZhbHVlc1szXTsKKyAgICAgIG9mZnNldC0+eCAgPSB2YWx1ZXNbNF07CisgICAgICBvZmZzZXQtPnkgID0gdmFsdWVzWzVdOworCisgICAgICAqdXBtID0gKEZUX1VMb25nKXBvd2VyX3RlbnNbLW1heF9zY2FsaW5nXTsKIAogICAgICAgRlRfVFJBQ0U0KCggIiBbJWYgJWYgJWYgJWYgJWYgJWZdXG4iLAogICAgICAgICAgICAgICAgICAgKGRvdWJsZSltYXRyaXgtPnh4IC8gKnVwbSAvIDY1NTM2LApAQCAtNjQ5LDYgKzcwMSw1NiBAQAogICB9CiAKIAorICAvKiBUaGUgYE11bHRpcGxlTWFzdGVyJyBvcGVyYXRvciBjb21lcyBiZWZvcmUgYW55ICAqLworICAvKiB0b3AgRElDVCBvcGVyYXRvcnMgdGhhdCBjb250YWluIFQyIGNoYXJzdHJpbmdzLiAqLworCisgIHN0YXRpYyBGVF9FcnJvcgorICBjZmZfcGFyc2VfbXVsdGlwbGVfbWFzdGVyKCBDRkZfUGFyc2VyICBwYXJzZXIgKQorICB7CisgICAgQ0ZGX0ZvbnRSZWNEaWN0ICBkaWN0ID0gKENGRl9Gb250UmVjRGljdClwYXJzZXItPm9iamVjdDsKKyAgICBGVF9FcnJvciAgICAgICAgIGVycm9yOworCisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgIC8qIGJlYXV0aWZ5IHRyYWNpbmcgbWVzc2FnZSAqLworICAgIGlmICggZnRfdHJhY2VfbGV2ZWxzW0ZUX0NPTVBPTkVOVF0gPCA0ICkKKyAgICAgIEZUX1RSQUNFMSgoICJNdWx0aXBsZSBNYXN0ZXIgQ0ZGcyBub3Qgc3VwcG9ydGVkIHlldCwiCisgICAgICAgICAgICAgICAgICAiIGhhbmRsaW5nIGZpcnN0IG1hc3RlciBkZXNpZ24gb25seVxuIiApKTsKKyAgICBlbHNlCisgICAgICBGVF9UUkFDRTEoKCAiIChub3Qgc3VwcG9ydGVkIHlldCwiCisgICAgICAgICAgICAgICAgICAiIGhhbmRsaW5nIGZpcnN0IG1hc3RlciBkZXNpZ24gb25seSlcbiIgKSk7CisjZW5kaWYKKworICAgIGVycm9yID0gRlRfRVJSKCBTdGFja19VbmRlcmZsb3cgKTsKKworICAgIC8qIGN1cnJlbnRseSwgd2UgaGFuZGxlIG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50ICovCisgICAgaWYgKCBwYXJzZXItPnRvcCA+PSBwYXJzZXItPnN0YWNrICsgNSApCisgICAgeworICAgICAgRlRfTG9uZyAgbnVtX2Rlc2lnbnMgPSBjZmZfcGFyc2VfbnVtKCBwYXJzZXItPnN0YWNrICk7CisKKworICAgICAgaWYgKCBudW1fZGVzaWducyA+IDE2IHx8IG51bV9kZXNpZ25zIDwgMiApCisgICAgICB7CisgICAgICAgIEZUX0VSUk9SKCggImNmZl9wYXJzZV9tdWx0aXBsZV9tYXN0ZXI6IgorICAgICAgICAgICAgICAgICAgICIgSW52YWxpZCBudW1iZXIgb2YgZGVzaWduc1xuIiApKTsKKyAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9GaWxlX0Zvcm1hdCApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBkaWN0LT5udW1fZGVzaWducyAgID0gKEZUX1VTaG9ydCludW1fZGVzaWduczsKKyAgICAgICAgZGljdC0+bnVtX2F4ZXMgICAgICA9IChGVF9VU2hvcnQpKCBwYXJzZXItPnRvcCAtIHBhcnNlci0+c3RhY2sgLSA0ICk7CisKKyAgICAgICAgcGFyc2VyLT5udW1fZGVzaWducyA9IGRpY3QtPm51bV9kZXNpZ25zOworICAgICAgICBwYXJzZXItPm51bV9heGVzICAgID0gZGljdC0+bnVtX2F4ZXM7CisKKyAgICAgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKwogICBzdGF0aWMgRlRfRXJyb3IKICAgY2ZmX3BhcnNlX2NpZF9yb3MoIENGRl9QYXJzZXIgIHBhcnNlciApCiAgIHsKQEAgLTk3Miw3ICsxMDc0LDcgQEAKICAgICAgICAgaWYgKCBwYXJzZXItPnRvcCAtIHBhcnNlci0+c3RhY2sgPj0gQ0ZGX01BWF9TVEFDS19ERVBUSCApCiAgICAgICAgICAgZ290byBTdGFja19PdmVyZmxvdzsKIAotICAgICAgICAqcGFyc2VyLT50b3AgKysgPSBwOworICAgICAgICAqcGFyc2VyLT50b3ArKyA9IHA7CiAKICAgICAgICAgLyogbm93LCBza2lwIGl0ICovCiAgICAgICAgIGlmICggdiA9PSAzMCApCkBAIC0xMDAxLDYgKzExMDMsMTM2IEBACiAgICAgICAgIGVsc2UgaWYgKCB2ID4gMjQ2ICkKICAgICAgICAgICBwICs9IDE7CiAgICAgICB9CisjaWZkZWYgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VOR0lORQorICAgICAgZWxzZSBpZiAoIHYgPT0gMzEgKQorICAgICAgeworICAgICAgICAvKiBhIFR5cGUgMiBjaGFyc3RyaW5nICovCisKKyAgICAgICAgQ0ZGX0RlY29kZXIgIGRlY29kZXI7CisgICAgICAgIENGRl9Gb250UmVjICBjZmZfcmVjOworICAgICAgICBGVF9CeXRlKiAgICAgY2hhcnN0cmluZ19iYXNlOworICAgICAgICBGVF9VTG9uZyAgICAgY2hhcnN0cmluZ19sZW47CisKKyAgICAgICAgRlRfRml4ZWQqICBzdGFjazsKKyAgICAgICAgRlRfQnl0ZSogICBxOworCisKKyAgICAgICAgY2hhcnN0cmluZ19iYXNlID0gKytwOworCisgICAgICAgIC8qIHNlYXJjaCBgZW5kY2hhcicgb3BlcmF0b3IgKi8KKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgeworICAgICAgICAgIGlmICggcCA+PSBsaW1pdCApCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgICAgaWYgKCAqcCA9PSAxNCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBwKys7CisgICAgICAgIH0KKworICAgICAgICBjaGFyc3RyaW5nX2xlbiA9IChGVF9VTG9uZykoIHAgLSBjaGFyc3RyaW5nX2Jhc2UgKSArIDE7CisKKyAgICAgICAgLyogY29uc3RydWN0IENGRl9EZWNvZGVyIG9iamVjdCAqLworICAgICAgICBGVF9NRU1fWkVSTyggJmRlY29kZXIsIHNpemVvZiAoIGRlY29kZXIgKSApOworICAgICAgICBGVF9NRU1fWkVSTyggJmNmZl9yZWMsIHNpemVvZiAoIGNmZl9yZWMgKSApOworCisgICAgICAgIGNmZl9yZWMudG9wX2ZvbnQuZm9udF9kaWN0Lm51bV9kZXNpZ25zID0gcGFyc2VyLT5udW1fZGVzaWduczsKKyAgICAgICAgY2ZmX3JlYy50b3BfZm9udC5mb250X2RpY3QubnVtX2F4ZXMgICAgPSBwYXJzZXItPm51bV9heGVzOworICAgICAgICBkZWNvZGVyLmNmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZjZmZfcmVjOworCisgICAgICAgIGVycm9yID0gY2ZmX2RlY29kZXJfcGFyc2VfY2hhcnN0cmluZ3MoICZkZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nX2Jhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICk7CisKKyAgICAgICAgLyogTm93IGNvcHkgdGhlIHN0YWNrIGRhdGEgaW4gdGhlIHRlbXBvcmFyeSBkZWNvZGVyIG9iamVjdCwgICAgKi8KKyAgICAgICAgLyogY29udmVydGluZyBpdCBiYWNrIHRvIGNoYXJzdHJpbmcgbnVtYmVyIHJlcHJlc2VudGF0aW9ucyAgICAgKi8KKyAgICAgICAgLyogKHRoaXMgaXMgdWdseSwgSSBrbm93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogV2Ugb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCB0b3AgRElDVCBjaGFyc3RyaW5nIHVuZGVyIHRoZSAgICAgKi8KKyAgICAgICAgLyogYXNzdW1wdGlvbiB0aGF0IHRoZSBjaGFyc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHQgKi8KKyAgICAgICAgLyogb2YgYGNmZl9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzJyBpcyBzaG9ydGVyLCB3aGljaCBzaG91bGQgKi8KKyAgICAgICAgLyogYmUgYWx3YXlzIHRydWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICBxICAgICA9IGNoYXJzdHJpbmdfYmFzZSAtIDE7CisgICAgICAgIHN0YWNrID0gZGVjb2Rlci5zdGFjazsKKworICAgICAgICB3aGlsZSAoIHN0YWNrIDwgZGVjb2Rlci50b3AgKQorICAgICAgICB7CisgICAgICAgICAgRlRfVUxvbmcgIG51bTsKKyAgICAgICAgICBGVF9Cb29sICAgbmVnOworCisKKyAgICAgICAgICBpZiAoIHBhcnNlci0+dG9wIC0gcGFyc2VyLT5zdGFjayA+PSBDRkZfTUFYX1NUQUNLX0RFUFRIICkKKyAgICAgICAgICAgIGdvdG8gU3RhY2tfT3ZlcmZsb3c7CisKKyAgICAgICAgICAqcGFyc2VyLT50b3ArKyA9IHE7CisKKyAgICAgICAgICBpZiAoICpzdGFjayA8IDAgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG51bSA9IChGVF9VTG9uZyktKnN0YWNrOworICAgICAgICAgICAgbmVnID0gMTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIG51bSA9IChGVF9VTG9uZykqc3RhY2s7CisgICAgICAgICAgICBuZWcgPSAwOworICAgICAgICAgIH0KKworICAgICAgICAgIGlmICggbnVtICYgMHhGRkZGVSApCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCBuZWcgKQorICAgICAgICAgICAgICBudW0gPSAoRlRfVUxvbmcpLW51bTsKKworICAgICAgICAgICAgKnErKyA9IDI1NTsKKyAgICAgICAgICAgICpxKysgPSAoIG51bSAmIDB4RkYwMDAwMDBVICkgPj4gMjQ7CisgICAgICAgICAgICAqcSsrID0gKCBudW0gJiAweDAwRkYwMDAwVSApID4+IDE2OworICAgICAgICAgICAgKnErKyA9ICggbnVtICYgMHgwMDAwRkYwMFUgKSA+PiAgODsKKyAgICAgICAgICAgICpxKysgPSAgIG51bSAmIDB4MDAwMDAwRkZVOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICAgbnVtID4+PSAxNjsKKworICAgICAgICAgICAgaWYgKCBuZWcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoIG51bSA8PSAxMDcgKQorICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoIDEzOSAtIG51bSApOworICAgICAgICAgICAgICBlbHNlIGlmICggbnVtIDw9IDExMzEgKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggKCAoIG51bSAtIDEwOCApID4+IDggKSArIDI1MSApOworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoICggbnVtIC0gMTA4ICkgJiAweEZGICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbnVtID0gKEZUX1VMb25nKS1udW07CisKKyAgICAgICAgICAgICAgICAqcSsrID0gMjg7CisgICAgICAgICAgICAgICAgKnErKyA9IChGVF9CeXRlKSggbnVtID4+IDggKTsKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCBudW0gJiAweEZGICk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCBudW0gPD0gMTA3ICkKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCBudW0gKyAxMzkgKTsKKyAgICAgICAgICAgICAgZWxzZSBpZiAoIG51bSA8PSAxMTMxICkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoICggKCBudW0gLSAxMDggKSA+PiA4ICkgKyAyNDcgKTsKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCAoIG51bSAtIDEwOCApICYgMHhGRiApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpxKysgPSAyODsKKyAgICAgICAgICAgICAgICAqcSsrID0gKEZUX0J5dGUpKCBudW0gPj4gOCApOworICAgICAgICAgICAgICAgICpxKysgPSAoRlRfQnl0ZSkoIG51bSAmIDB4RkYgKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIHN0YWNrKys7CisgICAgICAgIH0KKyAgICAgIH0KKyNlbmRpZiAvKiBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCiAgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIC8qIFRoaXMgaXMgbm90IGEgbnVtYmVyLCBoZW5jZSBpdCdzIGFuIG9wZXJhdG9yLiAgQ29tcHV0ZSBpdHMgY29kZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZwYXJzZS5oIGIvc3JjL2NmZi9jZmZwYXJzZS5oCmluZGV4IDhhZDAyZWEuLmE5NTk3MGUgMTAwNjQ0Ci0tLSBhL3NyYy9jZmYvY2ZmcGFyc2UuaAorKysgYi9zcmMvY2ZmL2NmZnBhcnNlLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgQ0ZGIHRva2VuIHN0cmVhbSBwYXJzZXIgKHNwZWNpZmljYXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGRl9QQVJTRV9IX18KLSNkZWZpbmUgX19DRkZfUEFSU0VfSF9fCisjaWZuZGVmIENGRlBBUlNFX0hfCisjZGVmaW5lIENGRlBBUlNFX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zNiwxNiArMzYsMTkgQEAKIAogICB0eXBlZGVmIHN0cnVjdCAgQ0ZGX1BhcnNlclJlY18KICAgewotICAgIEZUX0xpYnJhcnkgbGlicmFyeTsKLSAgICBGVF9CeXRlKiAgIHN0YXJ0OwotICAgIEZUX0J5dGUqICAgbGltaXQ7Ci0gICAgRlRfQnl0ZSogICBjdXJzb3I7CisgICAgRlRfTGlicmFyeSAgbGlicmFyeTsKKyAgICBGVF9CeXRlKiAgICBzdGFydDsKKyAgICBGVF9CeXRlKiAgICBsaW1pdDsKKyAgICBGVF9CeXRlKiAgICBjdXJzb3I7CiAKLSAgICBGVF9CeXRlKiAgIHN0YWNrW0NGRl9NQVhfU1RBQ0tfREVQVEggKyAxXTsKLSAgICBGVF9CeXRlKiogIHRvcDsKKyAgICBGVF9CeXRlKiAgICBzdGFja1tDRkZfTUFYX1NUQUNLX0RFUFRIICsgMV07CisgICAgRlRfQnl0ZSoqICAgdG9wOwogCi0gICAgRlRfVUludCAgICBvYmplY3RfY29kZTsKLSAgICB2b2lkKiAgICAgIG9iamVjdDsKKyAgICBGVF9VSW50ICAgICBvYmplY3RfY29kZTsKKyAgICB2b2lkKiAgICAgICBvYmplY3Q7CisKKyAgICBGVF9VU2hvcnQgICBudW1fZGVzaWduczsgLyogYSBjb3B5IG9mIGBDRkZfRm9udFJlY0RpY3QtPm51bV9kZXNpZ25zJyAqLworICAgIEZUX1VTaG9ydCAgIG51bV9heGVzOyAgICAvKiBhIGNvcHkgb2YgYENGRl9Gb250UmVjRGljdC0+bnVtX2F4ZXMnICAgICovCiAKICAgfSBDRkZfUGFyc2VyUmVjLCAqQ0ZGX1BhcnNlcjsKIApAQCAtNTQsNyArNTcsOSBAQAogICBjZmZfcGFyc2VyX2luaXQoIENGRl9QYXJzZXIgIHBhcnNlciwKICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBjb2RlLAogICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgIG9iamVjdCwKLSAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5KTsKKyAgICAgICAgICAgICAgICAgICBGVF9MaWJyYXJ5ICBsaWJyYXJ5LAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgIG51bV9kZXNpZ25zLAorICAgICAgICAgICAgICAgICAgIEZUX1VTaG9ydCAgIG51bV9heGVzICk7CiAKICAgRlRfTE9DQUwoIEZUX0Vycm9yICkKICAgY2ZmX3BhcnNlcl9ydW4oIENGRl9QYXJzZXIgIHBhcnNlciwKQEAgLTEwMCw3ICsxMDUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX0NGRl9QQVJTRV9IX18gKi8KKyNlbmRpZiAvKiBDRkZQQVJTRV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NmZi9jZmZwaWMuYyBiL3NyYy9jZmYvY2ZmcGljLmMKaW5kZXggZDQwZGVjNS4uYTBiYzM0ZiAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZwaWMuYworKysgYi9zcmMvY2ZmL2NmZnBpYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBjZmYgbW9kdWxlLiAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnBpYy5oIGIvc3JjL2NmZi9jZmZwaWMuaAppbmRleCA5YTIyMWE3Li5iZWQ2YjM1IDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnBpYy5oCisrKyBiL3NyYy9jZmYvY2ZmcGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIGNmZiBtb2R1bGUuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0NGRlBJQ19IX18KLSNkZWZpbmUgX19DRkZQSUNfSF9fCisjaWZuZGVmIENGRlBJQ19IXworI2RlZmluZSBDRkZQSUNfSF8KIAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSApAQCAtMTAyLDcgKzEwMiw3IEBACiAKICAvKiAqLwogCi0jZW5kaWYgLyogX19DRkZQSUNfSF9fICovCisjZW5kaWYgLyogQ0ZGUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvY2ZmL2NmZnRva2VuLmggYi9zcmMvY2ZmL2NmZnRva2VuLmgKaW5kZXggNWIzMjA3Ni4uMjI2MzdjNyAxMDA2NDQKLS0tIGEvc3JjL2NmZi9jZmZ0b2tlbi5oCisrKyBiL3NyYy9jZmYvY2ZmdG9rZW4uaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBDRkYgdG9rZW4gZGVmaW5pdGlvbnMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzgsNiArMzgsOSBAQAogICBDRkZfRklFTERfTlVNICAgICAoIDEzLCAgICB1bmlxdWVfaWQsICAgICAgICAgICAiVW5pcXVlSUQiICkKICAgQ0ZGX0ZJRUxEX0NBTExCQUNLKCA1LCAgICAgZm9udF9iYm94LCAgICAgICAgICAgIkZvbnRCQm94IiApCiAgIENGRl9GSUVMRF9OVU0gICAgICggMHgxMDgsIHN0cm9rZV93aWR0aCwgICAgICAgICJTdHJva2VXaWR0aCIgKQorI2lmIDAKKyAgQ0ZGX0ZJRUxEX0RFTFRBICAgKCAxNCwgICAgeHVpZCwgMTYsICAgICAgICAgICAgIlhVSUQiICkKKyNlbmRpZgogICBDRkZfRklFTERfTlVNICAgICAoIDE1LCAgICBjaGFyc2V0X29mZnNldCwgICAgICAiY2hhcnNldCIgKQogICBDRkZfRklFTERfTlVNICAgICAoIDE2LCAgICBlbmNvZGluZ19vZmZzZXQsICAgICAiRW5jb2RpbmciICkKICAgQ0ZGX0ZJRUxEX05VTSAgICAgKCAxNywgICAgY2hhcnN0cmluZ3Nfb2Zmc2V0LCAgIkNoYXJTdHJpbmdzIiApCkBAIC00OCw4ICs1MSwxMyBAQAogI2lmIDAKICAgQ0ZGX0ZJRUxEX1NUUklORyAgKCAweDExNiwgYmFzZV9mb250X25hbWUsICAgICAgIkJhc2VGb250TmFtZSIgKQogICBDRkZfRklFTERfREVMVEEgICAoIDB4MTE3LCBiYXNlX2ZvbnRfYmxlbmQsIDE2LCAiQmFzZUZvbnRCbGVuZCIgKQorI2VuZGlmCisKKyAgLyogdGhlIG5leHQgdHdvIG9wZXJhdG9ycyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGUgVHlwZTIgc3BlY2lmaWNhdGlvbiAqLworICAvKiBpbiB2ZXJzaW9uIDE2LU1hcmNoLTIwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMTgsIG11bHRpcGxlX21hc3RlciwgICAgICJNdWx0aXBsZU1hc3RlciIgKQotICBDRkZfRklFTERfQ0FMTEJBQ0soIDB4MTE5LCBibGVuZF9heGlzX3R5cGVzLCAgICAiQmxlbmRBeGlzVHlwZXMiICkKKyNpZiAwCisgIENGRl9GSUVMRF9DQUxMQkFDSyggMHgxMUEsIGJsZW5kX2F4aXNfdHlwZXMsICAgICJCbGVuZEF4aXNUeXBlcyIgKQogI2VuZGlmCiAKICAgQ0ZGX0ZJRUxEX0NBTExCQUNLKCAweDExRSwgY2lkX3JvcywgICAgICAgICAgICAgICJST1MiICkKZGlmZiAtLWdpdCBhL3NyYy9jZmYvY2ZmdHlwZXMuaCBiL3NyYy9jZmYvY2ZmdHlwZXMuaAppbmRleCBkZThhNWVlLi40NDI2YzdlIDEwMDY0NAotLS0gYS9zcmMvY2ZmL2NmZnR5cGVzLmgKKysrIGIvc3JjL2NmZi9jZmZ0eXBlcy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgQmFzaWMgT3BlblR5cGUvQ0ZGIHR5cGUgZGVmaW5pdGlvbnMgYW5kIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbiAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19DRkZUWVBFU19IX18KLSNkZWZpbmUgX19DRkZUWVBFU19IX18KKyNpZm5kZWYgQ0ZGVFlQRVNfSF8KKyNkZWZpbmUgQ0ZGVFlQRVNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE0NSw2ICsxNDUsMTIgQEAKICAgICBGVF9VTG9uZyAgIGNpZF9mZF9zZWxlY3Rfb2Zmc2V0OwogICAgIEZUX1VJbnQgICAgY2lkX2ZvbnRfbmFtZTsKIAorICAgIC8qIHRoZSBuZXh0IGZpZWxkcyBjb21lIGZyb20gdGhlIGRhdGEgb2YgdGhlIGRlcHJlY2F0ZWQgICAgICAgICAgKi8KKyAgICAvKiBgTXVsdGlwbGVNYXN0ZXInIG9wZXJhdG9yOyB0aGV5IGFyZSBuZWVkZWQgdG8gcGFyc2UgdGhlIChhbHNvICovCisgICAgLyogZGVwcmVjYXRlZCkgYGJsZW5kJyBvcGVyYXRvciBpbiBUeXBlIDIgY2hhcnN0cmluZ3MgICAgICAgICAgICAqLworICAgIEZUX1VTaG9ydCAgbnVtX2Rlc2lnbnM7CisgICAgRlRfVVNob3J0ICBudW1fYXhlczsKKwogICB9IENGRl9Gb250UmVjRGljdFJlYywgKkNGRl9Gb250UmVjRGljdDsKIAogCkBAIC0yNTAsNiArMjU2LDcgQEAKICAgICBGVF9VSW50ICAgICAgICAgIG51bV9zdHJpbmdzOwogICAgIEZUX0J5dGUqKiAgICAgICAgc3RyaW5nczsKICAgICBGVF9CeXRlKiAgICAgICAgIHN0cmluZ19wb29sOworICAgIEZUX1VMb25nICAgICAgICAgc3RyaW5nX3Bvb2xfc2l6ZTsKIAogICAgIENGRl9TdWJGb250UmVjICAgdG9wX2ZvbnQ7CiAgICAgRlRfVUludCAgICAgICAgICBudW1fc3ViZm9udHM7CkBAIC0yNzgsNyArMjg1LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19DRkZUWVBFU19IX18gKi8KKyNlbmRpZiAvKiBDRkZUWVBFU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2d6aXAvZnRnemlwLmMgYi9zcmMvZ3ppcC9mdGd6aXAuYwppbmRleCAyN2M2MjU0Li45Y2FiODBlIDEwMDY0NAotLS0gYS9zcmMvZ3ppcC9mdGd6aXAuYworKysgYi9zcmMvZ3ppcC9mdGd6aXAuYwpAQCAtOCw3ICs4LDcgQEAKIC8qICBwYXJzZSBjb21wcmVzc2VkIFBDRiBmb250cywgYXMgZm91bmQgd2l0aCBtYW55IFgxMSBzZXJ2ZXIgICAgICAgICAgICAgICovCiAvKiAgZGlzdHJpYnV0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIEd6aXBfRXJyXwpAQCAtNTksNyArNTksNyBAQAogIC8qIG9yaWdpbmFsIFpMaWIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogI2lmbmRlZiBVU0VfWkxJQl9aQ0FMTE9DCi0jZGVmaW5lIE1ZX1pDQUxMT0MgLyogcHJldmVudCBhbGwgemNhbGxvYygpICYgemZyZWUoKSBpbiB6dXRpbHMuYyAqLworI2RlZmluZSBNWV9aQ0FMTE9DIC8qIHByZXZlbnQgYWxsIHpjYWxsb2MoKSAmIHpmcmVlKCkgaW4genV0aWwuYyAqLwogI2VuZGlmCiAKICNpbmNsdWRlICJ6bGliLmgiCmRpZmYgLS1naXQgYS9zcmMvZ3ppcC96bGliLmggYi9zcmMvZ3ppcC96bGliLmgKaW5kZXggNTBkMGQzZi4uZDM2MWZmNCAxMDA2NDQKLS0tIGEvc3JjL2d6aXAvemxpYi5oCisrKyBiL3NyYy9nemlwL3psaWIuaApAQCAtNTYwLDcgKzU2MCw3IEBACiAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwgWl9CVUZfRVJST1IKICAgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKICAgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gSW4gdGhlIHN1Y2Nlc3MKLSAgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4gd2hpY2gKKyAgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luIHdoaWNoCiAgIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlCiAgIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVhY2ggdGltZSwKICAgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCmRpZmYgLS1naXQgYS9zcmMvcGZyL3BmcmxvYWQuYyBiL3NyYy9wZnIvcGZybG9hZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNzMxMWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvcGZyL3BmcmxvYWQuYwpAQCAtMCwwICsxLDk0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgcGZybG9hZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZyZWVUeXBlIFBGUiBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAyLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KKy8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovCisvKiAgbGljZW5zZSwgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlICAgICAqLworLyogIHRoaXMgZmlsZSB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCAgICAgICAgICAgICAgKi8KKy8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSAicGZybG9hZC5oIgorI2luY2x1ZGUgRlRfSU5URVJOQUxfREVCVUdfSAorI2luY2x1ZGUgRlRfSU5URVJOQUxfU1RSRUFNX0gKKworI2luY2x1ZGUgInBmcmVycm9yLmgiCisKKyN1bmRlZiAgRlRfQ09NUE9ORU5UCisjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcGZyCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBIElURU1TICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZXh0cmFfaXRlbXNfc2tpcCggRlRfQnl0ZSogICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgbGltaXQgKQorICB7CisgICAgcmV0dXJuIHBmcl9leHRyYV9pdGVtc19wYXJzZSggcHAsIGxpbWl0LCBOVUxMLCBOVUxMICk7CisgIH0KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfZXh0cmFfaXRlbXNfcGFyc2UoIEZUX0J5dGUqICAgICAgICpwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX0V4dHJhSXRlbSAgIGl0ZW1fbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Qb2ludGVyICAgICAgaXRlbV9kYXRhICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvciA9IEZUX0Vycl9PazsKKyAgICBGVF9CeXRlKiAgcCAgICAgPSAqcHA7CisgICAgRlRfVUludCAgIG51bV9pdGVtcywgaXRlbV90eXBlLCBpdGVtX3NpemU7CisKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIG51bV9pdGVtcyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIGZvciAoIDsgbnVtX2l0ZW1zID4gMDsgbnVtX2l0ZW1zLS0gKQorICAgIHsKKyAgICAgIFBGUl9DSEVDSyggMiApOworICAgICAgaXRlbV9zaXplID0gUEZSX05FWFRfQllURSggcCApOworICAgICAgaXRlbV90eXBlID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgICBQRlJfQ0hFQ0soIGl0ZW1fc2l6ZSApOworCisgICAgICBpZiAoIGl0ZW1fbGlzdCApCisgICAgICB7CisgICAgICAgIFBGUl9FeHRyYUl0ZW0gIGV4dHJhID0gaXRlbV9saXN0OworCisKKyAgICAgICAgZm9yICggZXh0cmEgPSBpdGVtX2xpc3Q7IGV4dHJhLT5wYXJzZXIgIT0gTlVMTDsgZXh0cmErKyApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIGV4dHJhLT50eXBlID09IGl0ZW1fdHlwZSApCisgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3IgPSBleHRyYS0+cGFyc2VyKCBwLCBwICsgaXRlbV9zaXplLCBpdGVtX2RhdGEgKTsKKyAgICAgICAgICAgIGlmICggZXJyb3IgKSBnb3RvIEV4aXQ7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBwICs9IGl0ZW1fc2l6ZTsKKyAgICB9CisKKyAgRXhpdDoKKyAgICAqcHAgPSBwOworICAgIHJldHVybiBlcnJvcjsKKworICBUb29fU2hvcnQ6CisgICAgRlRfRVJST1IoKCAicGZyX2V4dHJhX2l0ZW1zX3BhcnNlOiBpbnZhbGlkIGV4dHJhIGl0ZW1zIHRhYmxlXG4iICkpOworICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSIEhFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICBzdGF0aWMgY29uc3QgRlRfRnJhbWVfRmllbGQgIHBmcl9oZWFkZXJfZmllbGRzW10gPQorICAgeworI3VuZGVmICBGVF9TVFJVQ1RVUkUKKyNkZWZpbmUgRlRfU1RSVUNUVVJFICBQRlJfSGVhZGVyUmVjCisKKyAgICAgRlRfRlJBTUVfU1RBUlQoIDU4ICksCisgICAgICAgRlRfRlJBTUVfVUxPTkcgKCBzaWduYXR1cmUgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHZlcnNpb24gKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIHNpZ25hdHVyZTIgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGhlYWRlcl9zaXplICksCisKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIGxvZ19kaXJfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbG9nX2Rpcl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbG9nX2ZvbnRfbWF4X3NpemUgKSwKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIGxvZ19mb250X3NlY3Rpb25fc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggbG9nX2ZvbnRfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggcGh5X2ZvbnRfbWF4X3NpemUgKSwKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIHBoeV9mb250X3NlY3Rpb25fc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggcGh5X2ZvbnRfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggZ3BzX21heF9zaXplICksCisgICAgICAgRlRfRlJBTUVfVU9GRjMgKCBncHNfc2VjdGlvbl9zaXplICksCisgICAgICAgRlRfRlJBTUVfVU9GRjMgKCBncHNfc2VjdGlvbl9vZmZzZXQgKSwKKworICAgICAgIEZUX0ZSQU1FX0JZVEUgICggbWF4X2JsdWVfdmFsdWVzICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfeF9vcnVzICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfeV9vcnVzICksCisKKyAgICAgICBGVF9GUkFNRV9CWVRFICAoIHBoeV9mb250X21heF9zaXplX2hpZ2ggKSwKKyAgICAgICBGVF9GUkFNRV9CWVRFICAoIGNvbG9yX2ZsYWdzICksCisKKyAgICAgICBGVF9GUkFNRV9VT0ZGMyAoIGJjdF9tYXhfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggYmN0X3NldF9tYXhfc2l6ZSApLAorICAgICAgIEZUX0ZSQU1FX1VPRkYzICggcGh5X2JjdF9zZXRfbWF4X3NpemUgKSwKKworICAgICAgIEZUX0ZSQU1FX1VTSE9SVCggbnVtX3BoeV9mb250cyApLAorICAgICAgIEZUX0ZSQU1FX0JZVEUgICggbWF4X3ZlcnRfc3RlbV9zbmFwICksCisgICAgICAgRlRfRlJBTUVfQllURSAgKCBtYXhfaG9yel9zdGVtX3NuYXAgKSwKKyAgICAgICBGVF9GUkFNRV9VU0hPUlQoIG1heF9jaGFycyApLAorICAgICBGVF9GUkFNRV9FTkQKKyAgIH07CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2hlYWRlcl9sb2FkKCBQRlJfSGVhZGVyICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgRlRfU3RyZWFtICAgc3RyZWFtICkKKyAgeworICAgIEZUX0Vycm9yICBlcnJvcjsKKworCisgICAgLyogcmVhZCBoZWFkZXIgZGlyZWN0bHkgKi8KKyAgICBpZiAoICFGVF9TVFJFQU1fU0VFSyggMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgIUZUX1NUUkVBTV9SRUFEX0ZJRUxEUyggcGZyX2hlYWRlcl9maWVsZHMsIGhlYWRlciApICkKKyAgICB7CisgICAgICAvKiBtYWtlIGEgZmV3IGFkanVzdG1lbnRzIHRvIHRoZSBoZWFkZXIgKi8KKyAgICAgIGhlYWRlci0+cGh5X2ZvbnRfbWF4X3NpemUgKz0KKyAgICAgICAgKEZUX1VJbnQzMiloZWFkZXItPnBoeV9mb250X21heF9zaXplX2hpZ2ggPDwgMTY7CisgICAgfQorCisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Jvb2wgKQorICBwZnJfaGVhZGVyX2NoZWNrKCBQRlJfSGVhZGVyICBoZWFkZXIgKQorICB7CisgICAgRlRfQm9vbCAgcmVzdWx0ID0gMTsKKworCisgICAgLyogY2hlY2sgc2lnbmF0dXJlIGFuZCBoZWFkZXIgc2l6ZSAqLworICAgIGlmICggaGVhZGVyLT5zaWduYXR1cmUgICE9IDB4NTA0NjUyMzBMIHx8ICAgLyogIlBGUjAiICovCisgICAgICAgICBoZWFkZXItPnZlcnNpb24gICAgID4gNCAgICAgICAgICAgfHwKKyAgICAgICAgIGhlYWRlci0+aGVhZGVyX3NpemUgPCA1OCAgICAgICAgICB8fAorICAgICAgICAgaGVhZGVyLT5zaWduYXR1cmUyICE9IDB4MEQwQSAgICAgICkgICAgLyogQ1IvTEYgICovCisgICAgeworICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisgICAgcmV0dXJuICByZXN1bHQ7CisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgUEZSIExPR0lDQUwgRk9OVFMgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIEZUX0xPQ0FMX0RFRiggRlRfRXJyb3IgKQorICBwZnJfbG9nX2ZvbnRfY291bnQoIEZUX1N0cmVhbSAgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQzMiAgc2VjdGlvbl9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICphY291bnQgKQorICB7CisgICAgRlRfRXJyb3IgIGVycm9yOworICAgIEZUX1VJbnQgICBjb3VudDsKKyAgICBGVF9VSW50ICAgcmVzdWx0ID0gMDsKKworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggc2VjdGlvbl9vZmZzZXQgKSB8fCBGVF9SRUFEX1VTSE9SVCggY291bnQgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICByZXN1bHQgPSBjb3VudDsKKworICBFeGl0OgorICAgICphY291bnQgPSAoRlRfTG9uZylyZXN1bHQ7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2xvZ19mb250X2xvYWQoIFBGUl9Mb2dGb250ICBsb2dfZm9udCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICAgaWR4LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHNlY3Rpb25fb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgIHNpemVfaW5jcmVtZW50ICkKKyAgeworICAgIEZUX1VJbnQgICAgbnVtX2xvZ19mb250czsKKyAgICBGVF9VSW50ICAgIGZsYWdzOworICAgIEZUX1VJbnQzMiAgb2Zmc2V0OworICAgIEZUX1VJbnQzMiAgc2l6ZTsKKyAgICBGVF9FcnJvciAgIGVycm9yOworCisKKyAgICBpZiAoIEZUX1NUUkVBTV9TRUVLKCBzZWN0aW9uX29mZnNldCApIHx8CisgICAgICAgICBGVF9SRUFEX1VTSE9SVCggbnVtX2xvZ19mb250cyApICApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIGlkeCA+PSBudW1fbG9nX2ZvbnRzICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0tJUCggaWR4ICogNSApIHx8CisgICAgICAgICBGVF9SRUFEX1VTSE9SVCggc2l6ZSApICAgIHx8CisgICAgICAgICBGVF9SRUFEX1VPRkYzICggb2Zmc2V0ICkgICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIHNhdmUgbG9naWNhbCBmb250IHNpemUgYW5kIG9mZnNldCAqLworICAgIGxvZ19mb250LT5zaXplICAgPSBzaXplOworICAgIGxvZ19mb250LT5vZmZzZXQgPSBvZmZzZXQ7CisKKyAgICAvKiBub3csIGNoZWNrIHRoZSByZXN0IG9mIHRoZSB0YWJsZSBiZWZvcmUgbG9hZGluZyBpdCAqLworICAgIHsKKyAgICAgIEZUX0J5dGUqICBwOworICAgICAgRlRfQnl0ZSogIGxpbWl0OworICAgICAgRlRfVUludCAgIGxvY2FsOworCisKKyAgICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIG9mZnNldCApIHx8IEZUX0ZSQU1FX0VOVEVSKCBzaXplICkgKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICAgIHAgICAgID0gc3RyZWFtLT5jdXJzb3I7CisgICAgICBsaW1pdCA9IHAgKyBzaXplOworCisgICAgICBQRlJfQ0hFQ0soMTMpOworCisgICAgICBsb2dfZm9udC0+bWF0cml4WzBdID0gUEZSX05FWFRfTE9ORyggcCApOworICAgICAgbG9nX2ZvbnQtPm1hdHJpeFsxXSA9IFBGUl9ORVhUX0xPTkcoIHAgKTsKKyAgICAgIGxvZ19mb250LT5tYXRyaXhbMl0gPSBQRlJfTkVYVF9MT05HKCBwICk7CisgICAgICBsb2dfZm9udC0+bWF0cml4WzNdID0gUEZSX05FWFRfTE9ORyggcCApOworCisgICAgICBmbGFncyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgbG9jYWwgPSAwOworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfU1RST0tFICkKKyAgICAgIHsKKyAgICAgICAgbG9jYWwrKzsKKyAgICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfMkJZVEVfU1RST0tFICkKKyAgICAgICAgICBsb2NhbCsrOworCisgICAgICAgIGlmICggKGZsYWdzICYgUEZSX0xJTkVfSk9JTl9NQVNLKSA9PSBQRlJfTElORV9KT0lOX01JVEVSICkKKyAgICAgICAgICBsb2NhbCArPSAzOworICAgICAgfQorICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfQk9MRCApCisgICAgICB7CisgICAgICAgIGxvY2FsKys7CisgICAgICAgIGlmICggZmxhZ3MgJiBQRlJfTE9HXzJCWVRFX0JPTEQgKQorICAgICAgICAgIGxvY2FsKys7CisgICAgICB9CisKKyAgICAgIFBGUl9DSEVDSyggbG9jYWwgKTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfU1RST0tFICkKKyAgICAgIHsKKyAgICAgICAgbG9nX2ZvbnQtPnN0cm9rZV90aGlja25lc3MgPSAoIGZsYWdzICYgUEZSX0xPR18yQllURV9TVFJPS0UgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICAgIGlmICggKCBmbGFncyAmIFBGUl9MSU5FX0pPSU5fTUFTSyApID09IFBGUl9MSU5FX0pPSU5fTUlURVIgKQorICAgICAgICAgIGxvZ19mb250LT5taXRlcl9saW1pdCA9IFBGUl9ORVhUX0xPTkcoIHAgKTsKKyAgICAgIH0KKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9MT0dfQk9MRCApCisgICAgICB7CisgICAgICAgIGxvZ19mb250LT5ib2xkX3RoaWNrbmVzcyA9ICggZmxhZ3MgJiBQRlJfTE9HXzJCWVRFX0JPTEQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1NIT1JUKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgICB9CisKKyAgICAgIGlmICggZmxhZ3MgJiBQRlJfTE9HX0VYVFJBX0lURU1TICkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgPSBwZnJfZXh0cmFfaXRlbXNfc2tpcCggJnAsIGxpbWl0ICk7CisgICAgICAgIGlmIChlcnJvcikgZ290byBGYWlsOworICAgICAgfQorCisgICAgICBQRlJfQ0hFQ0soNSk7CisgICAgICBsb2dfZm9udC0+cGh5c19zaXplICAgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIGxvZ19mb250LT5waHlzX29mZnNldCA9IFBGUl9ORVhUX1VMT05HKCBwICk7CisgICAgICBpZiAoIHNpemVfaW5jcmVtZW50ICkKKyAgICAgIHsKKyAgICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICAgIGxvZ19mb250LT5waHlzX3NpemUgKz0gKEZUX1VJbnQzMilQRlJfTkVYVF9CWVRFKCBwICkgPDwgMTY7CisgICAgICB9CisgICAgfQorCisgIEZhaWw6CisgICAgRlRfRlJBTUVfRVhJVCgpOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBGVF9FUlJPUigoICJwZnJfbG9nX2ZvbnRfbG9hZDogaW52YWxpZCBsb2dpY2FsIGZvbnQgdGFibGVcbiIgKSk7CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIGdvdG8gRmFpbDsKKyAgfQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKyAgLyoqKioqICAgICAgICAgICAgICAgICAgICBQRlIgUEhZU0lDQUwgRk9OVFMgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworICAvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyogbG9hZCBiaXRtYXAgc3RyaWtlcyBsaXN0cyAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9iaXRtYXBfaW5mbyggRlRfQnl0ZSogICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0J5dGUqICAgICBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIEZUX01lbW9yeSAgIG1lbW9yeSA9IHBoeV9mb250LT5tZW1vcnk7CisgICAgUEZSX1N0cmlrZSAgc3RyaWtlOworICAgIEZUX1VJbnQgICAgIGZsYWdzMDsKKyAgICBGVF9VSW50ICAgICBuLCBjb3VudCwgc2l6ZTE7CisgICAgRlRfRXJyb3IgICAgZXJyb3IgPSBGVF9FcnJfT2s7CisKKworICAgIFBGUl9DSEVDSyggNSApOworCisgICAgcCArPSAzOyAgLyogc2tpcCBiY3RTaXplICovCisgICAgZmxhZ3MwID0gUEZSX05FWFRfQllURSggcCApOworICAgIGNvdW50ICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIC8qIHJlLWFsbG9jYXRlIHdoZW4gbmVlZGVkICovCisgICAgaWYgKCBwaHlfZm9udC0+bnVtX3N0cmlrZXMgKyBjb3VudCA+IHBoeV9mb250LT5tYXhfc3RyaWtlcyApCisgICAgeworICAgICAgRlRfVUludCAgbmV3X21heCA9IEZUX1BBRF9DRUlMKCBwaHlfZm9udC0+bnVtX3N0cmlrZXMgKyBjb3VudCwgNCApOworCisKKyAgICAgIGlmICggRlRfUkVORVdfQVJSQVkoIHBoeV9mb250LT5zdHJpa2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2ZvbnQtPm51bV9zdHJpa2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X21heCApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBwaHlfZm9udC0+bWF4X3N0cmlrZXMgPSBuZXdfbWF4OworICAgIH0KKworICAgIHNpemUxID0gMSArIDEgKyAxICsgMiArIDIgKyAxOworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9YUFBNICkKKyAgICAgIHNpemUxKys7CisKKyAgICBpZiAoIGZsYWdzMCAmIFBGUl9TVFJJS0VfMkJZVEVfWVBQTSApCisgICAgICBzaXplMSsrOworCisgICAgaWYgKCBmbGFnczAgJiBQRlJfU1RSSUtFXzNCWVRFX1NJWkUgKQorICAgICAgc2l6ZTErKzsKKworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8zQllURV9PRkZTRVQgKQorICAgICAgc2l6ZTErKzsKKworICAgIGlmICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9DT1VOVCApCisgICAgICBzaXplMSsrOworCisgICAgc3RyaWtlID0gcGh5X2ZvbnQtPnN0cmlrZXMgKyBwaHlfZm9udC0+bnVtX3N0cmlrZXM7CisKKyAgICBQRlJfQ0hFQ0soIGNvdW50ICogc2l6ZTEgKTsKKworICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKywgc3RyaWtlKysgKQorICAgIHsKKyAgICAgIHN0cmlrZS0+eF9wcG0gICAgICAgPSAoIGZsYWdzMCAmIFBGUl9TVFJJS0VfMkJZVEVfWFBQTSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICBzdHJpa2UtPnlfcHBtICAgICAgID0gKCBmbGFnczAgJiBQRlJfU1RSSUtFXzJCWVRFX1lQUE0gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfVVNIT1JUKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgc3RyaWtlLT5mbGFncyAgICAgICA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgICAgc3RyaWtlLT5iY3Rfc2l6ZSAgICA9ICggZmxhZ3MwICYgUEZSX1NUUklLRV8zQllURV9TSVpFICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VMT05HKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFBGUl9ORVhUX1VTSE9SVCggcCApOworCisgICAgICBzdHJpa2UtPmJjdF9vZmZzZXQgID0gKCBmbGFnczAgJiBQRlJfU1RSSUtFXzNCWVRFX09GRlNFVCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VTE9ORyggcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKworICAgICAgc3RyaWtlLT5udW1fYml0bWFwcyA9ICggZmxhZ3MwICYgUEZSX1NUUklLRV8yQllURV9DT1VOVCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworICAgIH0KKworICAgIHBoeV9mb250LT5udW1fc3RyaWtlcyArPSBjb3VudDsKKworICBFeGl0OgorICAgIHJldHVybiBlcnJvcjsKKworICBUb29fU2hvcnQ6CisgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9UYWJsZSApOworICAgIEZUX0VSUk9SKCggInBmcl9leHRyYV9pdGVtX2xvYWRfYml0bWFwX2luZm86IgorICAgICAgICAgICAgICAgIiBpbnZhbGlkIGJpdG1hcCBpbmZvIHRhYmxlXG4iICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKyAgLyogTG9hZCBmb250IElELiAgVGhpcyBpcyBhIHNvLWNhbGxlZCAidW5pcXVlIiBuYW1lIHRoYXQgaXMgcmF0aGVyCisgICAqIGxvbmcgYW5kIGRlc2NyaXB0aXZlIChsaWtlICJUaXJlc2lhcyBTY3JlZW5Gb250IHY3LjUxIikuCisgICAqCisgICAqIE5vdGUgdGhhdCBhIFBGUiBmb250J3MgZmFtaWx5IG5hbWUgaXMgY29udGFpbmVkIGluIGFuICp1bmRvY3VtZW50ZWQqCisgICAqIHN0cmluZyBvZiB0aGUgImF1eGlsaWFyeSBkYXRhIiBwb3J0aW9uIG9mIGEgcGh5c2ljYWwgZm9udCByZWNvcmQuICBUaGlzCisgICAqIG1heSBhbHNvIGNvbnRhaW4gdGhlICJyZWFsIiBzdHlsZSBuYW1lIQorICAgKgorICAgKiBJZiBubyBmYW1pbHkgbmFtZSBpcyBwcmVzZW50LCB0aGUgZm9udCBJRCBpcyB1c2VkIGluc3RlYWQgZm9yIHRoZQorICAgKiBmYW1pbHkuCisgICAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9mb250X2lkKCBGVF9CeXRlKiAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGh5X2ZvbnQtPm1lbW9yeTsKKyAgICBGVF9VSW50ICAgIGxlbiAgICA9IChGVF9VSW50KSggbGltaXQgLSBwICk7CisKKworICAgIGlmICggcGh5X2ZvbnQtPmZvbnRfaWQgIT0gTlVMTCApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBpZiAoIEZUX0FMTE9DKCBwaHlfZm9udC0+Zm9udF9pZCwgbGVuICsgMSApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIC8qIGNvcHkgZm9udCBJRCBuYW1lLCBhbmQgdGVybWluYXRlIGl0IGZvciBzYWZldHkgKi8KKyAgICBGVF9NRU1fQ09QWSggcGh5X2ZvbnQtPmZvbnRfaWQsIHAsIGxlbiApOworICAgIHBoeV9mb250LT5mb250X2lkW2xlbl0gPSAwOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICAvKiBsb2FkIHN0ZW0gc25hcCB0YWJsZXMgKi8KKyAgRlRfQ0FMTEJBQ0tfREVGKCBGVF9FcnJvciApCisgIHBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyggRlRfQnl0ZSogICAgIHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQnl0ZSogICAgIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGUl9QaHlGb250ICBwaHlfZm9udCApCisgIHsKKyAgICBGVF9VSW50ICAgIGNvdW50LCBudW1fdmVydCwgbnVtX2hvcno7CisgICAgRlRfSW50KiAgICBzbmFwcyAgPSBOVUxMOworICAgIEZUX0Vycm9yICAgZXJyb3IgID0gRlRfRXJyX09rOworICAgIEZUX01lbW9yeSAgbWVtb3J5ID0gcGh5X2ZvbnQtPm1lbW9yeTsKKworCisgICAgaWYgKCBwaHlfZm9udC0+dmVydGljYWwuc3RlbV9zbmFwcyAhPSBOVUxMICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIFBGUl9DSEVDSyggMSApOworICAgIGNvdW50ID0gUEZSX05FWFRfQllURSggcCApOworCisgICAgbnVtX3ZlcnQgPSBjb3VudCAmIDE1OworICAgIG51bV9ob3J6ID0gY291bnQgPj4gNDsKKyAgICBjb3VudCAgICA9IG51bV92ZXJ0ICsgbnVtX2hvcno7CisKKyAgICBQRlJfQ0hFQ0soIGNvdW50ICogMiApOworCisgICAgaWYgKCBGVF9ORVdfQVJSQVkoIHNuYXBzLCBjb3VudCApICkKKyAgICAgIGdvdG8gRXhpdDsKKworICAgIHBoeV9mb250LT52ZXJ0aWNhbC5zdGVtX3NuYXBzID0gc25hcHM7CisgICAgcGh5X2ZvbnQtPmhvcml6b250YWwuc3RlbV9zbmFwcyA9IHNuYXBzICsgbnVtX3ZlcnQ7CisKKyAgICBmb3IgKCA7IGNvdW50ID4gMDsgY291bnQtLSwgc25hcHMrKyApCisgICAgICAqc25hcHMgPSBGVF9ORVhUX1NIT1JUKCBwICk7CisKKyAgRXhpdDoKKyAgICByZXR1cm4gZXJyb3I7CisKKyAgVG9vX1Nob3J0OgorICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfVGFibGUgKTsKKyAgICBGVF9FUlJPUigoICJwZnJfZXh0YV9pdGVtX2xvYWRfc3RlbV9zbmFwczoiCisgICAgICAgICAgICAgICAiIGludmFsaWQgc3RlbSBzbmFwcyB0YWJsZVxuIiApKTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworCisKKyAgLyogbG9hZCBrZXJuaW5nIHBhaXIgZGF0YSAqLworICBGVF9DQUxMQkFDS19ERUYoIEZUX0Vycm9yICkKKyAgcGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzKCBGVF9CeXRlKiAgICAgcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9CeXRlKiAgICAgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZSX1BoeUZvbnQgIHBoeV9mb250ICkKKyAgeworICAgIFBGUl9LZXJuSXRlbSAgaXRlbSAgID0gTlVMTDsKKyAgICBGVF9FcnJvciAgICAgIGVycm9yICA9IEZUX0Vycl9PazsKKyAgICBGVF9NZW1vcnkgICAgIG1lbW9yeSA9IHBoeV9mb250LT5tZW1vcnk7CisKKworICAgIEZUX1RSQUNFMigoICJwZnJfZXh0cmFfaXRlbV9sb2FkX2tlcm5pbmdfcGFpcnMoKVxuIiApKTsKKworICAgIGlmICggRlRfTkVXKCBpdGVtICkgKQorICAgICAgZ290byBFeGl0OworCisgICAgUEZSX0NIRUNLKCA0ICk7CisKKyAgICBpdGVtLT5wYWlyX2NvdW50ID0gUEZSX05FWFRfQllURSggcCApOworICAgIGl0ZW0tPmJhc2VfYWRqICAgPSBQRlJfTkVYVF9TSE9SVCggcCApOworICAgIGl0ZW0tPmZsYWdzICAgICAgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgaXRlbS0+b2Zmc2V0ICAgICA9IHBoeV9mb250LT5vZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAoRlRfT2Zmc2V0KSggcCAtIHBoeV9mb250LT5jdXJzb3IgKTsKKworI2lmbmRlZiBQRlJfQ09ORklHX05PX0NIRUNLUworICAgIGl0ZW0tPnBhaXJfc2l6ZSA9IDM7CisKKyAgICBpZiAoIGl0ZW0tPmZsYWdzICYgUEZSX0tFUk5fMkJZVEVfQ0hBUiApCisgICAgICBpdGVtLT5wYWlyX3NpemUgKz0gMjsKKworICAgIGlmICggaXRlbS0+ZmxhZ3MgJiBQRlJfS0VSTl8yQllURV9BREogKQorICAgICAgaXRlbS0+cGFpcl9zaXplICs9IDE7CisKKyAgICBQRlJfQ0hFQ0soIGl0ZW0tPnBhaXJfY291bnQgKiBpdGVtLT5wYWlyX3NpemUgKTsKKyNlbmRpZgorCisgICAgLyogbG9hZCBmaXJzdCBhbmQgbGFzdCBwYWlycyBpbnRvIHRoZSBpdGVtIHRvIHNwZWVkIHVwICovCisgICAgLyogbG9va3VwIGxhdGVyLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBpdGVtLT5wYWlyX2NvdW50ID4gMCApCisgICAgeworICAgICAgRlRfVUludCAgIGNoYXIxLCBjaGFyMjsKKyAgICAgIEZUX0J5dGUqICBxOworCisKKyAgICAgIGlmICggaXRlbS0+ZmxhZ3MgJiBQRlJfS0VSTl8yQllURV9DSEFSICkKKyAgICAgIHsKKyAgICAgICAgcSAgICAgPSBwOworICAgICAgICBjaGFyMSA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIxID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworCisgICAgICAgIHEgPSBwICsgaXRlbS0+cGFpcl9zaXplICogKCBpdGVtLT5wYWlyX2NvdW50IC0gMSApOworICAgICAgICBjaGFyMSA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX1VTSE9SVCggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIyID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgeworICAgICAgICBxICAgICA9IHA7CisgICAgICAgIGNoYXIxID0gUEZSX05FWFRfQllURSggcSApOworICAgICAgICBjaGFyMiA9IFBGUl9ORVhUX0JZVEUoIHEgKTsKKworICAgICAgICBpdGVtLT5wYWlyMSA9IFBGUl9LRVJOX0lOREVYKCBjaGFyMSwgY2hhcjIgKTsKKworICAgICAgICBxID0gcCArIGl0ZW0tPnBhaXJfc2l6ZSAqICggaXRlbS0+cGFpcl9jb3VudCAtIDEgKTsKKyAgICAgICAgY2hhcjEgPSBQRlJfTkVYVF9CWVRFKCBxICk7CisgICAgICAgIGNoYXIyID0gUEZSX05FWFRfQllURSggcSApOworCisgICAgICAgIGl0ZW0tPnBhaXIyID0gUEZSX0tFUk5fSU5ERVgoIGNoYXIxLCBjaGFyMiApOworICAgICAgfQorCisgICAgICAvKiBhZGQgbmV3IGl0ZW0gdG8gdGhlIGN1cnJlbnQgbGlzdCAqLworICAgICAgaXRlbS0+bmV4dCAgICAgICAgICAgICAgICAgPSBOVUxMOworICAgICAgKnBoeV9mb250LT5rZXJuX2l0ZW1zX3RhaWwgPSBpdGVtOworICAgICAgcGh5X2ZvbnQtPmtlcm5faXRlbXNfdGFpbCAgPSAmaXRlbS0+bmV4dDsKKyAgICAgIHBoeV9mb250LT5udW1fa2Vybl9wYWlycyAgKz0gaXRlbS0+cGFpcl9jb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGVtcHR5IGl0ZW0hICovCisgICAgICBGVF9GUkVFKCBpdGVtICk7CisgICAgfQorCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBGVF9GUkVFKCBpdGVtICk7CisKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgRlRfRVJST1IoKCAicGZyX2V4dHJhX2l0ZW1fbG9hZF9rZXJuaW5nX3BhaXJzOiIKKyAgICAgICAgICAgICAgICIgaW52YWxpZCBrZXJuaW5nIHBhaXJzIHRhYmxlXG4iICkpOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisKKworICBzdGF0aWMgY29uc3QgUEZSX0V4dHJhSXRlbVJlYyAgcGZyX3BoeV9mb250X2V4dHJhX2l0ZW1zW10gPQorICB7CisgICAgeyAxLCAoUEZSX0V4dHJhSXRlbV9QYXJzZUZ1bmMpcGZyX2V4dHJhX2l0ZW1fbG9hZF9iaXRtYXBfaW5mbyB9LAorICAgIHsgMiwgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfZm9udF9pZCB9LAorICAgIHsgMywgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfc3RlbV9zbmFwcyB9LAorICAgIHsgNCwgKFBGUl9FeHRyYUl0ZW1fUGFyc2VGdW5jKXBmcl9leHRyYV9pdGVtX2xvYWRfa2VybmluZ19wYWlycyB9LAorICAgIHsgMCwgTlVMTCB9CisgIH07CisKKworICAvKiBMb2FkcyBhIG5hbWUgZnJvbSB0aGUgYXV4aWxpYXJ5IGRhdGEuICBTaW5jZSB0aGlzIGV4dHJhY3RzIHVuZG9jdW1lbnRlZAorICAgKiBzdHJpbmdzIGZyb20gdGhlIGZvbnQgZmlsZSwgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGhlcmUuCisgICAqLworICBzdGF0aWMgRlRfRXJyb3IKKyAgcGZyX2F1eF9uYW1lX2xvYWQoIEZUX0J5dGUqICAgICBwLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIEZUX01lbW9yeSAgICBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICAqYXN0cmluZyApCisgIHsKKyAgICBGVF9FcnJvciAgICBlcnJvciAgPSBGVF9FcnJfT2s7CisgICAgRlRfU3RyaW5nKiAgcmVzdWx0ID0gTlVMTDsKKyAgICBGVF9VSW50ICAgICBuLCBvazsKKworCisgICAgaWYgKCBsZW4gPiAwICYmIHBbbGVuIC0gMV0gPT0gMCApCisgICAgICBsZW4tLTsKKworICAgIC8qIGNoZWNrIHRoYXQgZWFjaCBjaGFyYWN0ZXIgaXMgQVNDSUkgZm9yIG1ha2luZyBzdXJlIG5vdCB0bworICAgICAgIGxvYWQgZ2FyYmFnZQorICAgICAqLworICAgIG9rID0gKCBsZW4gPiAwICk7CisgICAgZm9yICggbiA9IDA7IG4gPCBsZW47IG4rKyApCisgICAgICBpZiAoIHBbbl0gPCAzMiB8fCBwW25dID4gMTI3ICkKKyAgICAgIHsKKyAgICAgICAgb2sgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGlmICggb2sgKQorICAgIHsKKyAgICAgIGlmICggRlRfQUxMT0MoIHJlc3VsdCwgbGVuICsgMSApICkKKyAgICAgICAgZ290byBFeGl0OworCisgICAgICBGVF9NRU1fQ09QWSggcmVzdWx0LCBwLCBsZW4gKTsKKyAgICAgIHJlc3VsdFtsZW5dID0gMDsKKyAgICB9CisgIEV4aXQ6CisgICAgKmFzdHJpbmcgPSByZXN1bHQ7CisgICAgcmV0dXJuIGVycm9yOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIHZvaWQgKQorICBwZnJfcGh5X2ZvbnRfZG9uZSggUEZSX1BoeUZvbnQgIHBoeV9mb250LAorICAgICAgICAgICAgICAgICAgICAgRlRfTWVtb3J5ICAgIG1lbW9yeSApCisgIHsKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+Zm9udF9pZCApOworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5mYW1pbHlfbmFtZSApOworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5zdHlsZV9uYW1lICk7CisKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+dmVydGljYWwuc3RlbV9zbmFwcyApOworICAgIHBoeV9mb250LT52ZXJ0aWNhbC5udW1fc3RlbV9zbmFwcyA9IDA7CisKKyAgICBwaHlfZm9udC0+aG9yaXpvbnRhbC5zdGVtX3NuYXBzICAgICA9IE5VTEw7CisgICAgcGh5X2ZvbnQtPmhvcml6b250YWwubnVtX3N0ZW1fc25hcHMgPSAwOworCisgICAgRlRfRlJFRSggcGh5X2ZvbnQtPnN0cmlrZXMgKTsKKyAgICBwaHlfZm9udC0+bnVtX3N0cmlrZXMgPSAwOworICAgIHBoeV9mb250LT5tYXhfc3RyaWtlcyA9IDA7CisKKyAgICBGVF9GUkVFKCBwaHlfZm9udC0+Y2hhcnMgKTsKKyAgICBwaHlfZm9udC0+bnVtX2NoYXJzICAgID0gMDsKKyAgICBwaHlfZm9udC0+Y2hhcnNfb2Zmc2V0ID0gMDsKKworICAgIEZUX0ZSRUUoIHBoeV9mb250LT5ibHVlX3ZhbHVlcyApOworICAgIHBoeV9mb250LT5udW1fYmx1ZV92YWx1ZXMgPSAwOworCisgICAgeworICAgICAgUEZSX0tlcm5JdGVtICBpdGVtLCBuZXh0OworCisKKyAgICAgIGl0ZW0gPSBwaHlfZm9udC0+a2Vybl9pdGVtczsKKyAgICAgIHdoaWxlICggaXRlbSApCisgICAgICB7CisgICAgICAgIG5leHQgPSBpdGVtLT5uZXh0OworICAgICAgICBGVF9GUkVFKCBpdGVtICk7CisgICAgICAgIGl0ZW0gPSBuZXh0OworICAgICAgfQorICAgICAgcGh5X2ZvbnQtPmtlcm5faXRlbXMgICAgICA9IE5VTEw7CisgICAgICBwaHlfZm9udC0+a2Vybl9pdGVtc190YWlsID0gTlVMTDsKKyAgICB9CisKKyAgICBwaHlfZm9udC0+bnVtX2tlcm5fcGFpcnMgPSAwOworICB9CisKKworICBGVF9MT0NBTF9ERUYoIEZUX0Vycm9yICkKKyAgcGZyX3BoeV9mb250X2xvYWQoIFBGUl9QaHlGb250ICBwaHlfZm9udCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmVhbSAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludDMyICAgIHNpemUgKQorICB7CisgICAgRlRfRXJyb3IgICBlcnJvcjsKKyAgICBGVF9NZW1vcnkgIG1lbW9yeSA9IHN0cmVhbS0+bWVtb3J5OworICAgIEZUX1VJbnQgICAgZmxhZ3M7CisgICAgRlRfVUxvbmcgICBudW1fYXV4OworICAgIEZUX0J5dGUqICAgcDsKKyAgICBGVF9CeXRlKiAgIGxpbWl0OworCisKKyAgICBwaHlfZm9udC0+bWVtb3J5ID0gbWVtb3J5OworICAgIHBoeV9mb250LT5vZmZzZXQgPSBvZmZzZXQ7CisKKyAgICBwaHlfZm9udC0+a2Vybl9pdGVtcyAgICAgID0gTlVMTDsKKyAgICBwaHlfZm9udC0+a2Vybl9pdGVtc190YWlsID0gJnBoeV9mb250LT5rZXJuX2l0ZW1zOworCisgICAgaWYgKCBGVF9TVFJFQU1fU0VFSyggb2Zmc2V0ICkgfHwgRlRfRlJBTUVfRU5URVIoIHNpemUgKSApCisgICAgICBnb3RvIEV4aXQ7CisKKyAgICBwaHlfZm9udC0+Y3Vyc29yID0gc3RyZWFtLT5jdXJzb3I7CisKKyAgICBwICAgICA9IHN0cmVhbS0+Y3Vyc29yOworICAgIGxpbWl0ID0gcCArIHNpemU7CisKKyAgICBQRlJfQ0hFQ0soIDE1ICk7CisgICAgcGh5X2ZvbnQtPmZvbnRfcmVmX251bWJlciAgICA9IFBGUl9ORVhUX1VTSE9SVCggcCApOworICAgIHBoeV9mb250LT5vdXRsaW5lX3Jlc29sdXRpb24gPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICBwaHlfZm9udC0+bWV0cmljc19yZXNvbHV0aW9uID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueE1pbiAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueU1pbiAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueE1heCAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmJib3gueU1heCAgICAgICAgICA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgcGh5X2ZvbnQtPmZsYWdzICAgICAgPSBmbGFncyA9IFBGUl9ORVhUX0JZVEUoIHAgKTsKKworICAgIC8qIGdldCB0aGUgc3RhbmRhcmQgYWR2YW5jZSBmb3Igbm9uLXByb3BvcnRpb25hbCBmb250cyAqLworICAgIGlmICggIShmbGFncyAmIFBGUl9QSFlfUFJPUE9SVElPTkFMKSApCisgICAgeworICAgICAgUEZSX0NIRUNLKCAyICk7CisgICAgICBwaHlfZm9udC0+c3RhbmRhcmRfYWR2YW5jZSA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgfQorCisgICAgLyogbG9hZCB0aGUgZXh0cmEgaXRlbXMgd2hlbiBwcmVzZW50ICovCisgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfRVhUUkFfSVRFTVMgKQorICAgIHsKKyAgICAgIGVycm9yID0gIHBmcl9leHRyYV9pdGVtc19wYXJzZSggJnAsIGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZnJfcGh5X2ZvbnRfZXh0cmFfaXRlbXMsIHBoeV9mb250ICk7CisKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgfQorCisgICAgLyogSW4gY2VydGFpbiBmb250cywgdGhlIGF1eGlsaWFyeSBieXRlcyBjb250YWluIGludGVyZXN0aW5nICAqLworICAgIC8qIGluZm9ybWF0aW9uLiBUaGVzZSBhcmUgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIGJ1dCBjYW4gYmUgKi8KKyAgICAvKiBndWVzc2VkIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbnRlbnQgb2YgYSBmZXcgUEZSMCBmb250cy4gICAgICovCisgICAgUEZSX0NIRUNLKCAzICk7CisgICAgbnVtX2F1eCA9IFBGUl9ORVhUX1VMT05HKCBwICk7CisKKyAgICBpZiAoIG51bV9hdXggPiAwICkKKyAgICB7CisgICAgICBGVF9CeXRlKiAgcSA9IHA7CisgICAgICBGVF9CeXRlKiAgcTI7CisKKworICAgICAgUEZSX0NIRUNLKCBudW1fYXV4ICk7CisgICAgICBwICs9IG51bV9hdXg7CisKKyAgICAgIHdoaWxlICggbnVtX2F1eCA+IDAgKQorICAgICAgeworICAgICAgICBGVF9VSW50ICBsZW5ndGgsIHR5cGU7CisKKworICAgICAgICBpZiAoIHEgKyA0ID4gcCApCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbGVuZ3RoID0gUEZSX05FWFRfVVNIT1JUKCBxICk7CisgICAgICAgIGlmICggbGVuZ3RoIDwgNCB8fCBsZW5ndGggPiBudW1fYXV4ICkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBxMiAgID0gcSArIGxlbmd0aCAtIDI7CisgICAgICAgIHR5cGUgPSBQRlJfTkVYVF9VU0hPUlQoIHEgKTsKKworICAgICAgICBzd2l0Y2ggKCB0eXBlICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgLyogdGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIHRoZSBmb250J3MgZmFtaWx5IG5hbWUsCisgICAgICAgICAgICogcGFkZGVkIHRvIDE2LWJpdHMgd2l0aCBvbmUgemVybyB3aGVuIG5lY2Vzc2FyeQorICAgICAgICAgICAqLworICAgICAgICAgIGVycm9yID0gcGZyX2F1eF9uYW1lX2xvYWQoIHEsIGxlbmd0aCAtIDRVLCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9mb250LT5mYW1pbHlfbmFtZSApOworICAgICAgICAgIGlmICggZXJyb3IgKQorICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICBpZiAoIHEgKyAzMiA+IHEyICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgcSArPSAxMDsKKyAgICAgICAgICBwaHlfZm9udC0+YXNjZW50ICA9IFBGUl9ORVhUX1NIT1JUKCBxICk7CisgICAgICAgICAgcGh5X2ZvbnQtPmRlc2NlbnQgPSBQRlJfTkVYVF9TSE9SVCggcSApOworICAgICAgICAgIHBoeV9mb250LT5sZWFkaW5nID0gUEZSX05FWFRfU0hPUlQoIHEgKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgLyogdGhpcyBzZWVtcyB0byBjb3JyZXNwb25kIHRvIHRoZSBmb250J3Mgc3R5bGUgbmFtZSwKKyAgICAgICAgICAgKiBwYWRkZWQgdG8gMTYtYml0cyB3aXRoIG9uZSB6ZXJvIHdoZW4gbmVjZXNzYXJ5CisgICAgICAgICAgICovCisgICAgICAgICAgZXJyb3IgPSBwZnJfYXV4X25hbWVfbG9hZCggcSwgbGVuZ3RoIC0gNFUsIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGh5X2ZvbnQtPnN0eWxlX25hbWUgKTsKKyAgICAgICAgICBpZiAoIGVycm9yICkKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIDsKKyAgICAgICAgfQorCisgICAgICAgIHEgICAgICAgID0gcTI7CisgICAgICAgIG51bV9hdXggLT0gbGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAgIC8qIHJlYWQgdGhlIGJsdWUgdmFsdWVzICovCisgICAgeworICAgICAgRlRfVUludCAgbiwgY291bnQ7CisKKworICAgICAgUEZSX0NIRUNLKCAxICk7CisgICAgICBwaHlfZm9udC0+bnVtX2JsdWVfdmFsdWVzID0gY291bnQgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICAgIFBGUl9DSEVDSyggY291bnQgKiAyICk7CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwaHlfZm9udC0+Ymx1ZV92YWx1ZXMsIGNvdW50ICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIGZvciAoIG4gPSAwOyBuIDwgY291bnQ7IG4rKyApCisgICAgICAgIHBoeV9mb250LT5ibHVlX3ZhbHVlc1tuXSA9IFBGUl9ORVhUX1NIT1JUKCBwICk7CisgICAgfQorCisgICAgUEZSX0NIRUNLKCA4ICk7CisgICAgcGh5X2ZvbnQtPmJsdWVfZnV6eiAgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisgICAgcGh5X2ZvbnQtPmJsdWVfc2NhbGUgPSBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICBwaHlfZm9udC0+dmVydGljYWwuc3RhbmRhcmQgICA9IFBGUl9ORVhUX1VTSE9SVCggcCApOworICAgIHBoeV9mb250LT5ob3Jpem9udGFsLnN0YW5kYXJkID0gUEZSX05FWFRfVVNIT1JUKCBwICk7CisKKyAgICAvKiByZWFkIHRoZSBjaGFyYWN0ZXIgZGVzY3JpcHRvcnMgKi8KKyAgICB7CisgICAgICBGVF9VSW50ICBuLCBjb3VudCwgU2l6ZTsKKworCisgICAgICBwaHlfZm9udC0+bnVtX2NoYXJzICAgID0gY291bnQgPSBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIHBoeV9mb250LT5jaGFyc19vZmZzZXQgPSBvZmZzZXQgKyAoRlRfT2Zmc2V0KSggcCAtIHN0cmVhbS0+Y3Vyc29yICk7CisKKyAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwaHlfZm9udC0+Y2hhcnMsIGNvdW50ICkgKQorICAgICAgICBnb3RvIEZhaWw7CisKKyAgICAgIFNpemUgPSAxICsgMSArIDI7CisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9DSEFSQ09ERSApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfUFJPUE9SVElPTkFMICkKKyAgICAgICAgU2l6ZSArPSAyOworCisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV9BU0NJSV9DT0RFICkKKyAgICAgICAgU2l6ZSArPSAxOworCisgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9HUFNfU0laRSApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgaWYgKCBmbGFncyAmIFBGUl9QSFlfM0JZVEVfR1BTX09GRlNFVCApCisgICAgICAgIFNpemUgKz0gMTsKKworICAgICAgUEZSX0NIRUNLKCBjb3VudCAqIFNpemUgKTsKKworICAgICAgZm9yICggbiA9IDA7IG4gPCBjb3VudDsgbisrICkKKyAgICAgIHsKKyAgICAgICAgUEZSX0NoYXIgIGN1ciA9ICZwaHlfZm9udC0+Y2hhcnNbbl07CisKKworICAgICAgICBjdXItPmNoYXJfY29kZSA9ICggZmxhZ3MgJiBQRlJfUEhZXzJCWVRFX0NIQVJDT0RFICkKKyAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VTSE9SVCggcCApCisgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9CWVRFKCBwICk7CisKKyAgICAgICAgY3VyLT5hZHZhbmNlICAgPSAoIGZsYWdzICYgUEZSX1BIWV9QUk9QT1JUSU9OQUwgKQorICAgICAgICAgICAgICAgICAgICAgICAgID8gUEZSX05FWFRfU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIDogcGh5X2ZvbnQtPnN0YW5kYXJkX2FkdmFuY2U7CisKKyNpZiAwCisgICAgICAgIGN1ci0+YXNjaWkgICAgID0gKCBmbGFncyAmIFBGUl9QSFlfQVNDSUlfQ09ERSApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9CWVRFKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisjZWxzZQorICAgICAgICBpZiAoIGZsYWdzICYgUEZSX1BIWV9BU0NJSV9DT0RFICkKKyAgICAgICAgICBwICs9IDE7CisjZW5kaWYKKyAgICAgICAgY3VyLT5ncHNfc2l6ZSAgPSAoIGZsYWdzICYgUEZSX1BIWV8yQllURV9HUFNfU0laRSApCisgICAgICAgICAgICAgICAgICAgICAgICAgPyBQRlJfTkVYVF9VU0hPUlQoIHAgKQorICAgICAgICAgICAgICAgICAgICAgICAgIDogUEZSX05FWFRfQllURSggcCApOworCisgICAgICAgIGN1ci0+Z3BzX29mZnNldCA9ICggZmxhZ3MgJiBQRlJfUEhZXzNCWVRFX0dQU19PRkZTRVQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBGUl9ORVhUX1VMT05HKCBwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBQRlJfTkVYVF9VU0hPUlQoIHAgKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiB0aGF0J3MgaXQhICovCisKKyAgRmFpbDoKKyAgICBGVF9GUkFNRV9FWElUKCk7CisKKyAgICAvKiBzYXZlIHBvc2l0aW9uIG9mIGJpdG1hcCBpbmZvICovCisgICAgcGh5X2ZvbnQtPmJjdF9vZmZzZXQgPSBGVF9TVFJFQU1fUE9TKCk7CisgICAgcGh5X2ZvbnQtPmN1cnNvciAgICAgPSBOVUxMOworCisgIEV4aXQ6CisgICAgcmV0dXJuIGVycm9yOworCisgIFRvb19TaG9ydDoKKyAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1RhYmxlICk7CisgICAgRlRfRVJST1IoKCAicGZyX3BoeV9mb250X2xvYWQ6IGludmFsaWQgcGh5c2ljYWwgZm9udCB0YWJsZVxuIiApKTsKKyAgICBnb3RvIEZhaWw7CisgIH0KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC9wc29ianMuYyBiL3NyYy9wc2F1eC9wc29ianMuYwppbmRleCAxZDNjN2U2Li5jN2NiYzY3IDEwMDY0NAotLS0gYS9zcmMvcHNhdXgvcHNvYmpzLmMKKysrIGIvc3JjL3BzYXV4L3Bzb2Jqcy5jCkBAIC01OTQsOSArNTk0LDYgQEAKICAgICAgIGVycm9yID0gRlRfVEhST1coIEludmFsaWRfRmlsZV9Gb3JtYXQgKTsKICAgICB9CiAKLSAgICBpZiAoIGN1ciA+IGxpbWl0ICkKLSAgICAgIGN1ciA9IGxpbWl0OwotCiAgICAgcGFyc2VyLT5lcnJvciAgPSBlcnJvcjsKICAgICBwYXJzZXItPmN1cnNvciA9IGN1cjsKICAgfQpAQCAtMTIzMiwxNyArMTIyOSwxNSBAQAogICAgICAgICAgICAgaWYgKCByZXN1bHQgPCAwIHx8IChGVF9VSW50KXJlc3VsdCA8IG1heF9vYmplY3RzICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgRlRfRVJST1IoKCAicHNfcGFyc2VyX2xvYWRfZmllbGQ6IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgJWQgaW50ZWdlciVzIGluIHRoZSAlcyBzdWJhcnJheVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgJWQgaW50ZWdlcnMgaW4gdGhlICVzIHN1YmFycmF5XG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9mIC9Gb250QkJveCBpbiB0aGUgL0JsZW5kIGRpY3Rpb25hcnlcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWF4X29iamVjdHMsIG1heF9vYmplY3RzID4gMSA/ICJzIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9vYmplY3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT0gMCA/ICJmaXJzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMSA/ICJzZWNvbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoIGkgPT0gMiA/ICJ0aGlyZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImZvdXJ0aCIgKSApICkpOwogICAgICAgICAgICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0ZpbGVfRm9ybWF0ICk7Ci0KLSAgICAgICAgICAgICAgRlRfRlJFRSggdGVtcCApOwogICAgICAgICAgICAgICBnb3RvIEV4aXQ7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9wc2F1eC90MWRlY29kZS5jIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmMKaW5kZXggNTgxMWZjYi4uMmUxOTkyOCAxMDA2NDQKLS0tIGEvc3JjL3BzYXV4L3QxZGVjb2RlLmMKKysrIGIvc3JjL3BzYXV4L3QxZGVjb2RlLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAxMjoKLSAgICAgICAgaWYgKCBpcCA+PSBsaW1pdCApCisgICAgICAgIGlmICggaXAgPiBsaW1pdCApCiAgICAgICAgIHsKICAgICAgICAgICBGVF9FUlJPUigoICJ0MV9kZWNvZGVyX3BhcnNlX2NoYXJzdHJpbmdzOiIKICAgICAgICAgICAgICAgICAgICAgICIgaW52YWxpZCBlc2NhcGUgKDEyK0VPRilcbiIgKSk7CkBAIC02NjksNyArNjY5LDcgQEAKICAgICAgICAgaWYgKCBsYXJnZV9pbnQgKQogICAgICAgICAgIEZUX1RSQUNFNCgoICIgJWxkIiwgdmFsdWUgKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBGVF9UUkFDRTQoKCAiICVsZCIsIHZhbHVlIC8gNjU1MzYgKSk7CisgICAgICAgICAgRlRfVFJBQ0U0KCggIiAlbGQiLCBGaXgySW50KCB2YWx1ZSApICkpOwogI2VuZGlmCiAKICAgICAgICAgKnRvcCsrICAgICAgID0gdmFsdWU7CmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5jIGIvc3JjL3BzaGludGVyL3BzaGFsZ28uYwppbmRleCA2ZTY1NGNiLi44ZjEzMWJlIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNoYWxnby5jCisrKyBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUG9zdFNjcmlwdCBoaW50aW5nIGFsZ29yaXRobSAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KQEAgLTc3OSw3ICs3NzksNyBAQAogICAgICAgICAgICAqIEl0IHR1cm5zIG91dCB0aG91Z2ggdGhhdCBtaW5pbWl6aW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgbGl0CiAgICAgICAgICAgICogcGl4ZWxzIGlzIGFsc28gaW1wb3J0YW50LCBzbyBwb3NpdGlvbiBDKSwgd2l0aCBvbmUgZWRnZQogICAgICAgICAgICAqIGFsaWduZWQgd2l0aCBhIHBpeGVsIGJvdW5kYXJ5IGlzIGFjdHVhbGx5IHByZWZlcmFibGUKLSAgICAgICAgICAgKiB0byBBKS4gIFRoZXJlIGFyZSBhbHNvIG1vcmUgcG9zc2liaWxlIHBvc2l0aW9ucyBmb3IgQykgdGhhbgorICAgICAgICAgICAqIHRvIEEpLiAgVGhlcmUgYXJlIGFsc28gbW9yZSBwb3NzaWJsZSBwb3NpdGlvbnMgZm9yIEMpIHRoYW4KICAgICAgICAgICAgKiBmb3IgQSkgb3IgQiksIHNvIGl0IGludm9sdmVzIGxlc3MgZGlzdG9ydGlvbiBvZiB0aGUgb3ZlcmFsbAogICAgICAgICAgICAqIGNoYXJhY3RlciBzaGFwZS4KICAgICAgICAgICAgKi8KQEAgLTgwMiw3ICs4MDIsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBXZSBjaG9vc2UgYmV0d2VlbiBCKSBhbmQgQykgYWJvdmUgYmFzZWQgb24gdGhlIGFtb3VudAotICAgICAgICAgICAgICogb2YgZnJhY3RpbmFsIHN0ZW0gd2lkdGg7IGZvciBzbWFsbCBhbW91bnRzLCBjaG9vc2UKKyAgICAgICAgICAgICAqIG9mIGZyYWN0aW9uYWwgc3RlbSB3aWR0aDsgZm9yIHNtYWxsIGFtb3VudHMsIGNob29zZQogICAgICAgICAgICAgICogQykgYWx3YXlzLCBmb3IgbGFyZ2UgYW1vdW50cywgQikgYWx3YXlzLCBhbmQgaW5iZXR3ZWVuLAogICAgICAgICAgICAgICogcGljayB3aGljaGV2ZXIgb25lIGludm9sdmVzIGxlc3Mgc3RlbSBtb3ZlbWVudC4KICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGFsZ28uaCBiL3NyYy9wc2hpbnRlci9wc2hhbGdvLmgKaW5kZXggODM3M2U1ZS4uZjFiZGE2NSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGFsZ28uaAorKysgYi9zcmMvcHNoaW50ZXIvcHNoYWxnby5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBvc3RTY3JpcHQgaGludGluZyBhbGdvcml0aG0gKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0hBTEdPX0hfXwotI2RlZmluZSBfX1BTSEFMR09fSF9fCisjaWZuZGVmIFBTSEFMR09fSF8KKyNkZWZpbmUgUFNIQUxHT19IXwogCiAKICNpbmNsdWRlICJwc2hyZWMuaCIKQEAgLTIzNSw3ICsyMzUsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1BTSEFMR09fSF9fICovCisjZW5kaWYgLyogUFNIQUxHT19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaGdsb2IuYyBiL3NyYy9wc2hpbnRlci9wc2hnbG9iLmMKaW5kZXggNDYxNmJkYy4uMmFjNWVmMSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGdsb2IuYworKysgYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgUG9zdFNjcmlwdCBoaW50ZXIgZ2xvYmFsIGhpbnRpbmcgbWFuYWdlbWVudCAoYm9keSkuICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEluc3BpcmVkIGJ5IHRoZSBuZXcgYXV0by1oaW50ZXIgbW9kdWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCkBAIC04MCw3ICs4MCw3IEBACiAKICNpZiAwCiAKLSAgLyogb3JnX3dpZHRoIGlzIGlzIGZvbnQgdW5pdHMsIHJlc3VsdCBpbiBkZXZpY2UgcGl4ZWxzLCAyNi42IGZvcm1hdCAqLworICAvKiBvcmdfd2lkdGggaXMgaW4gZm9udCB1bml0cywgcmVzdWx0IGluIGRldmljZSBwaXhlbHMsIDI2LjYgZm9ybWF0ICovCiAgIEZUX0xPQ0FMX0RFRiggRlRfUG9zICkKICAgcHNoX2RpbWVuc2lvbl9zbmFwX3dpZHRoKCBQU0hfRGltZW5zaW9uICBkaW1lbnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICAgb3JnX3dpZHRoICkKZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmggYi9zcmMvcHNoaW50ZXIvcHNoZ2xvYi5oCmluZGV4IGMzNzZkZjcuLjQ1Yzk1N2IgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hnbG9iLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaGdsb2IuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGhpbnRlciBnbG9iYWwgaGludGluZyBtYW5hZ2VtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUFNIR0xPQl9IX18KLSNkZWZpbmUgX19QU0hHTE9CX0hfXworI2lmbmRlZiBQU0hHTE9CX0hfCisjZGVmaW5lIFBTSEdMT0JfSF8KIAogCiAjaW5jbHVkZSBGVF9GUkVFVFlQRV9ICkBAIC0xOTAsNyArMTkwLDcgQEAKIEZUX0VORF9IRUFERVIKIAogCi0jZW5kaWYgLyogX19QU0hHTE9CX0hfXyAqLworI2VuZGlmIC8qIFBTSEdMT0JfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hpbnRlci5jIGIvc3JjL3BzaGludGVyL3BzaGludGVyLmMKaW5kZXggOWU2NWZlMi4uNjE0ZTBiYiAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaGludGVyLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaGludGVyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUG9zdFNjcmlwdCBIaW50aW5nIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2htb2QuYyBiL3NyYy9wc2hpbnRlci9wc2htb2QuYwppbmRleCA5NjFiNDY4Li5mYTRhZDFmIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNobW9kLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaG1vZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgaGludGVyIG1vZHVsZSBpbXBsZW1lbnRhdGlvbiAoYm9keSkuICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNobW9kLmggYi9zcmMvcHNoaW50ZXIvcHNobW9kLmgKaW5kZXggYTU4ZDg1Ni4uMzkxMTJhOSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaG1vZC5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2htb2QuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGhpbnRlciBtb2R1bGUgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUFNITU9EX0hfXwotI2RlZmluZSBfX1BTSE1PRF9IX18KKyNpZm5kZWYgUFNITU9EX0hfCisjZGVmaW5lIFBTSE1PRF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzMsNyArMzMsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1BTSE1PRF9IX18gKi8KKyNlbmRpZiAvKiBQU0hNT0RfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hudGVyci5oIGIvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKaW5kZXggY2U3OTBhOC4uN2E5NDU4OCAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaG50ZXJyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFMgSGludGVyIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIyLDEyICsyMiwxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19QU0hOVEVSUl9IX18KLSNkZWZpbmUgX19QU0hOVEVSUl9IX18KKyNpZm5kZWYgUFNITlRFUlJfSF8KKyNkZWZpbmUgUFNITlRFUlJfSF8KIAogI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICiAKLSN1bmRlZiBfX0ZURVJST1JTX0hfXworI3VuZGVmIEZURVJST1JTX0hfCiAKICN1bmRlZiAgRlRfRVJSX1BSRUZJWAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBQU0hfRXJyXwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19QU0hOVEVSUl9IX18gKi8KKyNlbmRpZiAvKiBQU0hOVEVSUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzaGludGVyL3BzaHBpYy5jIGIvc3JjL3BzaGludGVyL3BzaHBpYy5jCmluZGV4IGFmZDhmYjkuLmQwYTNkOGUgMTAwNjQ0Ci0tLSBhL3NyYy9wc2hpbnRlci9wc2hwaWMuYworKysgYi9zcmMvcHNoaW50ZXIvcHNocGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHBzaGludGVyIG1vZHVsZS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hwaWMuaCBiL3NyYy9wc2hpbnRlci9wc2hwaWMuaAppbmRleCBjYTM1Y2Q2Li43NWVlNTczIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNocGljLmgKKysrIGIvc3JjL3BzaGludGVyL3BzaHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc2hpbnRlciBtb2R1bGUuICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU0hQSUNfSF9fCi0jZGVmaW5lIF9fUFNIUElDX0hfXworI2lmbmRlZiBQU0hQSUNfSF8KKyNkZWZpbmUgUFNIUElDX0hfCiAKIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKQEAgLTU3LDcgKzU3LDcgQEAKIAogIC8qICovCiAKLSNlbmRpZiAvKiBfX1BTSFBJQ19IX18gKi8KKyNlbmRpZiAvKiBQU0hQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc2hpbnRlci9wc2hyZWMuYyBiL3NyYy9wc2hpbnRlci9wc2hyZWMuYwppbmRleCBmODg5NWZjLi5kN2NjNGEwIDEwMDY0NAotLS0gYS9zcmMvcHNoaW50ZXIvcHNocmVjLmMKKysrIGIvc3JjL3BzaGludGVyL3BzaHJlYy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEZyZWVUeXBlIFBvc3RTY3JpcHQgaGludHMgcmVjb3JkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvcHNoaW50ZXIvcHNocmVjLmggYi9zcmMvcHNoaW50ZXIvcHNocmVjLmgKaW5kZXggMmIxYWQ5NC4uOTdlNmYwZSAxMDA2NDQKLS0tIGEvc3JjL3BzaGludGVyL3BzaHJlYy5oCisrKyBiL3NyYy9wc2hpbnRlci9wc2hyZWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0c2NyaXB0IChUeXBlMS9UeXBlMikgaGludHMgcmVjb3JkZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjgsOCArMjgsOCBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1BTSFJFQ19IX18KLSNkZWZpbmUgX19QU0hSRUNfSF9fCisjaWZuZGVmIFBTSFJFQ19IXworI2RlZmluZSBQU0hSRUNfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE2Niw3ICsxNjYsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1BTX0hJTlRFUl9SRUNPUkRfSF9fICovCisjZW5kaWYgLyogUFNIUkVDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5jIGIvc3JjL3BzbmFtZXMvcHNtb2R1bGUuYwppbmRleCA1NDA2MDk4Li4zNDU0MDJkIDEwMDY0NAotLS0gYS9zcmMvcHNuYW1lcy9wc21vZHVsZS5jCisrKyBiL3NyYy9wc25hbWVzL3BzbW9kdWxlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUFNOYW1lcyBtb2R1bGUgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbW9kdWxlLmggYi9zcmMvcHNuYW1lcy9wc21vZHVsZS5oCmluZGV4IGY4NWYzMjIuLmVlM2M2Y2IgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbW9kdWxlLmgKKysrIGIvc3JjL3BzbmFtZXMvcHNtb2R1bGUuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBIaWdoLWxldmVsIFBTTmFtZXMgbW9kdWxlIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUFNNT0RVTEVfSF9fCi0jZGVmaW5lIF9fUFNNT0RVTEVfSF9fCisjaWZuZGVmIFBTTU9EVUxFX0hfCisjZGVmaW5lIFBTTU9EVUxFX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0zMiw3ICszMiw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fUFNNT0RVTEVfSF9fICovCisjZW5kaWYgLyogUFNNT0RVTEVfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmggYi9zcmMvcHNuYW1lcy9wc25hbWVyci5oCmluZGV4IDA5Y2MyNDcuLjNhOWY2NTMgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbmFtZXJyLmgKKysrIGIvc3JjL3BzbmFtZXMvcHNuYW1lcnIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQUyBuYW1lcyBtb2R1bGUgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDEtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjMsMTIgKzIzLDEyIEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmbmRlZiBfX1BTTkFNRVJSX0hfXwotI2RlZmluZSBfX1BTTkFNRVJSX0hfXworI2lmbmRlZiBQU05BTUVSUl9IXworI2RlZmluZSBQU05BTUVSUl9IXwogCiAjaW5jbHVkZSBGVF9NT0RVTEVfRVJST1JTX0gKIAotI3VuZGVmIF9fRlRFUlJPUlNfSF9fCisjdW5kZWYgRlRFUlJPUlNfSF8KIAogI3VuZGVmICBGVF9FUlJfUFJFRklYCiAjZGVmaW5lIEZUX0VSUl9QUkVGSVggIFBTbmFtZXNfRXJyXwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19QU05BTUVSUl9IX18gKi8KKyNlbmRpZiAvKiBQU05BTUVSUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNuYW1lcy5jIGIvc3JjL3BzbmFtZXMvcHNuYW1lcy5jCmluZGV4IGE0Mzg1OTYuLmU3YjJjMGIgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzbmFtZXMuYworKysgYi9zcmMvcHNuYW1lcy9wc25hbWVzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgUFNOYW1lcyBtb2R1bGUgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzcGljLmMgYi9zcmMvcHNuYW1lcy9wc3BpYy5jCmluZGV4IDEzOTRmOTcuLmE3OGVjNWEgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzcGljLmMKKysrIGIvc3JjL3BzbmFtZXMvcHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcHNuYW1lcyBtb2R1bGUuICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3BzbmFtZXMvcHNwaWMuaCBiL3NyYy9wc25hbWVzL3BzcGljLmgKaW5kZXggNDQzMjI1YS4uNDgzNDg3NiAxMDA2NDQKLS0tIGEvc3JjL3BzbmFtZXMvcHNwaWMuaAorKysgYi9zcmMvcHNuYW1lcy9wc3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBwc25hbWVzIG1vZHVsZS4gICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QU1BJQ19IX18KLSNkZWZpbmUgX19QU1BJQ19IX18KKyNpZm5kZWYgUFNQSUNfSF8KKyNkZWZpbmUgUFNQSUNfSF8KIAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSApAQCAtNjIsNyArNjIsNyBAQAogCiAgLyogKi8KIAotI2VuZGlmIC8qIF9fUFNQSUNfSF9fICovCisjZW5kaWYgLyogUFNQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9wc25hbWVzL3BzdGFibGVzLmggYi9zcmMvcHNuYW1lcy9wc3RhYmxlcy5oCmluZGV4IDNmMzFjMzEuLmViODI3ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9wc25hbWVzL3BzdGFibGVzLmgKKysrIGIvc3JjL3BzbmFtZXMvcHN0YWJsZXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBQb3N0U2NyaXB0IGdseXBoIG5hbWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdG1pc2MuaCBiL3NyYy9yYXN0ZXIvZnRtaXNjLmgKaW5kZXggYjg3ZTBiNi4uOTgxY2UzMiAxMDA2NDQKLS0tIGEvc3JjL3Jhc3Rlci9mdG1pc2MuaAorKysgYi9zcmMvcmFzdGVyL2Z0bWlzYy5oCkBAIC01LDcgKzUsNyBAQAogLyogICAgTWlzY2VsbGFuZW91cyBtYWNyb3MgZm9yIHN0YW5kLWFsb25lIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24gICAgICAgKi8KIC8qICAgIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQgICAgICAgICovCkBAIC0yNCw4ICsyNCw4IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19GVE1JU0NfSF9fCi0jZGVmaW5lIF9fRlRNSVNDX0hfXworI2lmbmRlZiBGVE1JU0NfSF8KKyNkZWZpbmUgRlRNSVNDX0hfCiAKIAogICAvKiBtZW1zZXQgKi8KQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIHJldHVybiAoIHMgPiAwICkgPyBkIDogLWQ7CiAgIH0KIAotI2VuZGlmIC8qIF9fRlRNSVNDX0hfXyAqLworI2VuZGlmIC8qIEZUTUlTQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5jCmluZGV4IGU0YmFiOTguLjBmYTJmMjYgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuYworKysgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE4LDcgKzE4LDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGlzIGZpbGUgY2FuIGJlIGNvbXBpbGVkIHdpdGhvdXQgdGhlIHJlc3Qgb2YgdGhlIEZyZWVUeXBlIGVuZ2luZSwgYnkgKi8KLSAgLyogZGVmaW5pbmcgdGhlIF9TVEFOREFMT05FXyBtYWNybyB3aGVuIGNvbXBpbGluZyBpdC4gIFlvdSBhbHNvIG5lZWQgdG8gICovCisgIC8qIGRlZmluaW5nIHRoZSBTVEFOREFMT05FXyBtYWNybyB3aGVuIGNvbXBpbGluZyBpdC4gIFlvdSBhbHNvIG5lZWQgdG8gICAqLwogICAvKiBwdXQgdGhlIGZpbGVzIGBmdGltYWdlLmgnIGFuZCBgZnRtaXNjLmgnIGludG8gdGhlICQoaW5jZGlyKSAgICAgICAgICAgKi8KICAgLyogZGlyZWN0b3J5LiAgVHlwaWNhbGx5LCB5b3Ugc2hvdWxkIGRvIHNvbWV0aGluZyBsaWtlICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjcsOSArMjcsOSBAQAogICAvKiAtIGNvcHkgYGluY2x1ZGUvZnJlZXR5cGUvZnRpbWFnZS5oJyBhbmQgYHNyYy9yYXN0ZXIvZnRtaXNjLmgnIHRvIHlvdXIgKi8KICAgLyogICBjdXJyZW50IGRpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAtIGNvbXBpbGUgYGZ0cmFzdGVyJyB3aXRoIHRoZSBfU1RBTkRBTE9ORV8gbWFjcm8gZGVmaW5lZCwgYXMgaW4gICAgICAgKi8KKyAgLyogLSBjb21waWxlIGBmdHJhc3Rlcicgd2l0aCB0aGUgU1RBTkRBTE9ORV8gbWFjcm8gZGVmaW5lZCwgYXMgaW4gICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiAgICAgY2MgLWMgLURfU1RBTkRBTE9ORV8gZnRyYXN0ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgIGNjIC1jIC1EU1RBTkRBTE9ORV8gZnRyYXN0ZXIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBUaGUgcmVuZGVyZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYSBjYWxsIHRvICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogYGZ0X3N0YW5kYXJkX3Jhc3Rlci5yYXN0ZXJfbmV3JzsgYSBiaXRtYXAgY2FuIGJlIGdlbmVyYXRlZCAgICAgICAgICAgICovCkBAIC00Nyw3ICs0Nyw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIF9TVEFOREFMT05FXworI2lmZGVmIFNUQU5EQUxPTkVfCiAKICAgLyogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHJlbmRlciBwb29sIHVzZWQgYnkgdGhlIHNjYW4tbGluZSBjb252ZXJ0ZXIgICovCiAgIC8qIHRvIGRvIGFsbCBvZiBpdHMgd29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgImZ0bWlzYy5oIgogI2luY2x1ZGUgImZ0aW1hZ2UuaCIKIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgImZ0cmFzdGVyLmgiCkBAIC02OCw3ICs2OCw3IEBACiAKICNpbmNsdWRlICJyYXN0cGljLmgiCiAKLSNlbmRpZiAvKiAhX1NUQU5EQUxPTkVfICovCisjZW5kaWYgLyogIVNUQU5EQUxPTkVfICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MywxNCArMTczLDEyIEBACiAjZGVmaW5lIEZUX0NPTVBPTkVOVCAgdHJhY2VfcmFzdGVyCiAKIAotI2lmZGVmIF9TVEFOREFMT05FXworI2lmZGVmIFNUQU5EQUxPTkVfCiAKICAgLyogQXV4aWxpYXJ5IG1hY3JvcyBmb3IgdG9rZW4gY29uY2F0ZW5hdGlvbi4gKi8KICNkZWZpbmUgRlRfRVJSX1hDQVQoIHgsIHkgKSAgeCAjIyB5CiAjZGVmaW5lIEZUX0VSUl9DQVQoIHgsIHkgKSAgIEZUX0VSUl9YQ0FUKCB4LCB5ICkKIAotI2RlZmluZSBGVF9NQVgoIGEsIGIgKSAgKCAoYSkgPiAoYikgPyAoYSkgOiAoYikgKQotCiAgIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rpb24gcGFyYW1ldGVyIGlzIHVudXNlZC4gKi8KICAgLyogSXRzIHB1cnBvc2UgaXMgc2ltcGx5IHRvIHJlZHVjZSBjb21waWxlciB3YXJuaW5ncy4gIE5vdGUgYWxzbyB0aGF0ICAqLwogICAvKiBzaW1wbHkgZGVmaW5pbmcgaXQgYXMgYCh2b2lkKXgnIGRvZXNuJ3QgYXZvaWQgd2FybmluZ3Mgd2l0aCBjZXJ0YWluICovCkBAIC0yMjYsNyArMjI0LDcgQEAKICAgICAgICAgICAgIHJhc3Rlcl9kb25lXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgfTsKIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfT0JKRUNUU19ICkBAIC0yNDIsNyArMjQwLDcgQEAKICNkZWZpbmUgUmFzdGVyX0Vycl9VbnN1cHBvcnRlZCAgUmFzdGVyX0Vycl9DYW5ub3RfUmVuZGVyX0dseXBoCiAKIAotI2VuZGlmIC8qICFfU1RBTkRBTE9ORV8gKi8KKyNlbmRpZiAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAjaWZuZGVmIEZUX01FTV9TRVQKQEAgLTQ1OSw2ICs0NTcsMTIgQEAKICNkZWZpbmUgSVNfVE9QX09WRVJTSE9PVCggeCApICAgIFwKICAgICAgICAgICAoQm9vbCkoIHggLSBGTE9PUiggeCApID49IHJhcy5wcmVjaXNpb25faGFsZiApCiAKKyNpZiBGVF9SRU5ERVJfUE9PTF9TSVpFID4gMjA0OAorI2RlZmluZSBGVF9NQVhfQkxBQ0tfUE9PTCAgKCBGVF9SRU5ERVJfUE9PTF9TSVpFIC8gc2l6ZW9mICggTG9uZyApICkKKyNlbHNlCisjZGVmaW5lIEZUX01BWF9CTEFDS19QT09MICAoIDIwNDggLyBzaXplb2YgKCBMb25nICkgKQorI2VuZGlmCisKICAgLyogVGhlIG1vc3QgdXNlZCB2YXJpYWJsZXMgYXJlIHBvc2l0aW9uZWQgYXQgdGhlIHRvcCBvZiB0aGUgc3RydWN0dXJlLiAqLwogICAvKiBUaHVzLCB0aGVpciBvZmZzZXQgY2FuIGJlIGNvZGVkIHdpdGggbGVzcyBvcGNvZGVzLCByZXN1bHRpbmcgaW4gYSAgICovCiAgIC8qIHNtYWxsZXIgZXhlY3V0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMwNDEsNyArMzA0NSw3IEBACiAgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RhdGljIG9iamVjdC4gICAgICAgICAgICAgICAgICAqKioqKi8KIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogCiAgIHN0YXRpYyBpbnQKQEAgLTMwNjgsNyArMzA3Miw3IEBACiAgIH0KIAogCi0jZWxzZSAvKiAhX1NUQU5EQUxPTkVfICovCisjZWxzZSAvKiAhU1RBTkRBTE9ORV8gKi8KIAogCiAgIHN0YXRpYyBpbnQKQEAgLTMxMDIsMTMgKzMxMDYsMTMgQEAKICAgfQogCiAKLSNlbmRpZiAvKiAhX1NUQU5EQUxPTkVfICovCisjZW5kaWYgLyogIVNUQU5EQUxPTkVfICovCiAKIAogICBzdGF0aWMgdm9pZAotICBmdF9ibGFja19yZXNldCggYmxhY2tfUFJhc3RlciAgcmFzdGVyLAotICAgICAgICAgICAgICAgICAgY2hhciogICAgICAgICAgcG9vbF9iYXNlLAotICAgICAgICAgICAgICAgICAgTG9uZyAgICAgICAgICAgcG9vbF9zaXplICkKKyAgZnRfYmxhY2tfcmVzZXQoIEZUX1Jhc3RlciAgcmFzdGVyLAorICAgICAgICAgICAgICAgICAgUEJ5dGUgICAgICBwb29sX2Jhc2UsCisgICAgICAgICAgICAgICAgICBVTG9uZyAgICAgIHBvb2xfc2l6ZSApCiAgIHsKICAgICBGVF9VTlVTRUQoIHJhc3RlciApOwogICAgIEZUX1VOVVNFRCggcG9vbF9iYXNlICk7CkBAIC0zMTE3LDIwICszMTIxLDIwIEBACiAKIAogICBzdGF0aWMgaW50Ci0gIGZ0X2JsYWNrX3NldF9tb2RlKCBibGFja19QUmFzdGVyICByYXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgICBVTG9uZyAgICAgICAgICBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgcGFsZXR0ZSApCisgIGZ0X2JsYWNrX3NldF9tb2RlKCBGVF9SYXN0ZXIgIHJhc3RlciwKKyAgICAgICAgICAgICAgICAgICAgIFVMb25nICAgICAgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgYXJncyApCiAgIHsKICAgICBGVF9VTlVTRUQoIHJhc3RlciApOwogICAgIEZUX1VOVVNFRCggbW9kZSApOwotICAgIEZUX1VOVVNFRCggcGFsZXR0ZSApOworICAgIEZUX1VOVVNFRCggYXJncyApOwogCiAgICAgcmV0dXJuIDA7CiAgIH0KIAogCiAgIHN0YXRpYyBpbnQKLSAgZnRfYmxhY2tfcmVuZGVyKCBibGFja19QUmFzdGVyICAgICAgICAgICAgcmFzdGVyLAorICBmdF9ibGFja19yZW5kZXIoIEZUX1Jhc3RlciAgICAgICAgICAgICAgICByYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCiAgIHsKICAgICBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSAgICA9IChjb25zdCBGVF9PdXRsaW5lKilwYXJhbXMtPnNvdXJjZTsKQEAgLTMxMzgsNyArMzE0Miw3IEBACiAKICAgICBibGFja19UV29ya2VyICB3b3JrZXJbMV07CiAKLSAgICBMb25nICBidWZmZXJbRlRfTUFYKCBGVF9SRU5ERVJfUE9PTF9TSVpFLCAyMDQ4ICkgLyBzaXplb2YgKCBMb25nICldOworICAgIExvbmcgIGJ1ZmZlcltGVF9NQVhfQkxBQ0tfUE9PTF07CiAKIAogICAgIGlmICggIXJhc3RlciApCkBAIC0zMTc1LDYgKzMxNzksMjAgQEAKICAgICBpZiAoICF0YXJnZXRfbWFwLT5idWZmZXIgKQogICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkICk7CiAKKyAgICAvKiByZWplY3QgdG9vIGxhcmdlIG91dGxpbmUgY29vcmRpbmF0ZXMgKi8KKyAgICB7CisgICAgICBGVF9WZWN0b3IqICB2ZWMgICA9IG91dGxpbmUtPnBvaW50czsKKyAgICAgIEZUX1ZlY3RvciogIGxpbWl0ID0gdmVjICsgb3V0bGluZS0+bl9wb2ludHM7CisKKworICAgICAgZm9yICggOyB2ZWMgPCBsaW1pdDsgdmVjKysgKQorICAgICAgeworICAgICAgICBpZiAoIHZlYy0+eCA8IC0weDEwMDAwMDBMIHx8IHZlYy0+eCA+IDB4MTAwMDAwMEwgfHwKKyAgICAgICAgICAgICB2ZWMtPnkgPCAtMHgxMDAwMDAwTCB8fCB2ZWMtPnkgPiAweDEwMDAwMDBMICkKKyAgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZCApOworICAgICAgfQorICAgIH0KKwogICAgIHJhcy5vdXRsaW5lID0gKm91dGxpbmU7CiAgICAgcmFzLnRhcmdldCAgPSAqdGFyZ2V0X21hcDsKIApkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oIGIvc3JjL3Jhc3Rlci9mdHJhc3Rlci5oCmluZGV4IGEyNzBkNDguLjY1Y2Q1ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvZnRyYXN0ZXIuaAorKysgYi9zcmMvcmFzdGVyL2Z0cmFzdGVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIGdseXBoIHJhc3Rlcml6ZXIgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCAgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX0ZUUkFTVEVSX0hfXwotI2RlZmluZSBfX0ZUUkFTVEVSX0hfXworI2lmbmRlZiBGVFJBU1RFUl9IXworI2RlZmluZSBGVFJBU1RFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzMsMTQgKzMzLDE0IEBACiAgIC8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IGFyZSB1c2luZyBmdHJhc3Rlci5jIGFzIGEgICAgICAgICAqLwogICAvKiBzdGFuZGFsb25lIG1vZHVsZSwgZnVsbHkgaW5kZXBlbmRlbnQgb2YgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIF9TVEFOREFMT05FXyAqLworLyogI2RlZmluZSBTVEFOREFMT05FXyAqLwogCiAgIEZUX0VYUE9SVF9WQVIoIGNvbnN0IEZUX1Jhc3Rlcl9GdW5jcyApICBmdF9zdGFuZGFyZF9yYXN0ZXI7CiAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFJBU1RFUl9IX18gKi8KKyNlbmRpZiAvKiBGVFJBU1RFUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmMgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwppbmRleCBmMzE0MzkyLi40OTRmMTEyIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmVuZDEuYworKysgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9mdHJlbmQxLmggYi9zcmMvcmFzdGVyL2Z0cmVuZDEuaAppbmRleCBlZGM1ZDEzLi5hNDMxZjE4IDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL2Z0cmVuZDEuaAorKysgYi9zcmMvcmFzdGVyL2Z0cmVuZDEuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgZ2x5cGggcmFzdGVyaXplciBpbnRlcmZhY2UgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRSRU5EMV9IX18KLSNkZWZpbmUgX19GVFJFTkQxX0hfXworI2lmbmRlZiBGVFJFTkQxX0hfCisjZGVmaW5lIEZUUkVORDFfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTMyLDcgKzMyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFJFTkQxX0hfXyAqLworI2VuZGlmIC8qIEZUUkVORDFfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMgYi9zcmMvcmFzdGVyL3Jhc3Rlci5jCmluZGV4IDIxYmIxNmQuLjViMjFkY2IgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVyLmMKKysrIGIvc3JjL3Jhc3Rlci9yYXN0ZXIuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBtb25vY2hyb21lIHJhc3RlcmVyIG1vZHVsZSBjb21wb25lbnQgKGJvZHkgb25seSkuICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oIGIvc3JjL3Jhc3Rlci9yYXN0ZXJycy5oCmluZGV4IGU3ZjAwYmMuLjQ0ZGE3ZmMgMTAwNjQ0Ci0tLSBhL3NyYy9yYXN0ZXIvcmFzdGVycnMuaAorKysgYi9zcmMvcmFzdGVyL3Jhc3RlcnJzLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgbW9ub2Nocm9tZSByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDAxLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTIzLDEyICsyMywxMiBAQAogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZm5kZWYgX19SQVNURVJSU19IX18KLSNkZWZpbmUgX19SQVNURVJSU19IX18KKyNpZm5kZWYgUkFTVEVSUlNfSF8KKyNkZWZpbmUgUkFTVEVSUlNfSF8KIAogI2luY2x1ZGUgRlRfTU9EVUxFX0VSUk9SU19ICiAKLSN1bmRlZiBfX0ZURVJST1JTX0hfXworI3VuZGVmIEZURVJST1JTX0hfCiAKICN1bmRlZiAgRlRfRVJSX1BSRUZJWAogI2RlZmluZSBGVF9FUlJfUFJFRklYICBSYXN0ZXJfRXJyXwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19SQVNURVJSU19IX18gKi8KKyNlbmRpZiAvKiBSQVNURVJSU19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0cGljLmMgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuYwppbmRleCA3N2U3ZWMzLi5kY2ZhOTJlIDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3RwaWMuYworKysgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Jhc3Rlci9yYXN0cGljLmggYi9zcmMvcmFzdGVyL3Jhc3RwaWMuaAppbmRleCA0MDg5OTZhLi43ODE1ODc2IDEwMDY0NAotLS0gYS9zcmMvcmFzdGVyL3Jhc3RwaWMuaAorKysgYi9zcmMvcmFzdGVyL3Jhc3RwaWMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3IgcmFzdGVyIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fUkFTVFBJQ19IX18KLSNkZWZpbmUgX19SQVNUUElDX0hfXworI2lmbmRlZiBSQVNUUElDX0hfCisjZGVmaW5lIFJBU1RQSUNfSF8KIAogCiAjaW5jbHVkZSBGVF9JTlRFUk5BTF9QSUNfSApAQCAtNTcsNyArNTcsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1JBU1RQSUNfSF9fICovCisjZW5kaWYgLyogUkFTVFBJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvcG5nc2hpbS5jIGIvc3JjL3NmbnQvcG5nc2hpbS5jCmluZGV4IGVhNjA0NTIuLjI4MTU3NTkgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3BuZ3NoaW0uYworKysgYi9zcmMvc2ZudC9wbmdzaGltLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgUE5HIEJpdG1hcCBnbHlwaCBzdXBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMTMtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDEzLTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBHb29nbGUsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgV3JpdHRlbiBieSBTdHVhcnQgR2lsbCBhbmQgQmVoZGFkIEVzZmFoYm9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3BuZ3NoaW0uaCBiL3NyYy9zZm50L3BuZ3NoaW0uaAppbmRleCA0Y2M1YzJiLi5mZjA1ODcxIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9wbmdzaGltLmgKKysrIGIvc3JjL3NmbnQvcG5nc2hpbS5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFBORyBCaXRtYXAgZ2x5cGggc3VwcG9ydC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEzLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMy0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFdyaXR0ZW4gYnkgU3R1YXJ0IEdpbGwgYW5kIEJlaGRhZCBFc2ZhaGJvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19QTkdTSElNX0hfXwotI2RlZmluZSBfX1BOR1NISU1fSF9fCisjaWZuZGVmIFBOR1NISU1fSF8KKyNkZWZpbmUgUE5HU0hJTV9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDQsNyArNDQsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1BOR1NISU1fSF9fICovCisjZW5kaWYgLyogUE5HU0hJTV9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuYyBiL3NyYy9zZm50L3NmZHJpdmVyLmMKaW5kZXggNWRkODQ0OS4uMjIzMzI2OSAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuYworKysgYi9zcmMvc2ZudC9zZmRyaXZlci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC00NTksNTUgKzQ1OSw2MiBAQAogCiAgIEZUX0RFRklORV9TRk5UX0lOVEVSRkFDRSgKICAgICBzZm50X2ludGVyZmFjZSwKLSAgICB0dF9mYWNlX2dvdG9fdGFibGUsCisgICAgdHRfZmFjZV9nb3RvX3RhYmxlLCAgICAgLyogVFRfTG9hZGVyX0dvdG9UYWJsZUZ1bmMgZ290b190YWJsZSAgICAgICovCiAKLSAgICBzZm50X2luaXRfZmFjZSwKLSAgICBzZm50X2xvYWRfZmFjZSwKLSAgICBzZm50X2RvbmVfZmFjZSwKLSAgICBzZm50X2dldF9pbnRlcmZhY2UsCisgICAgc2ZudF9pbml0X2ZhY2UsICAgICAgICAgLyogVFRfSW5pdF9GYWNlX0Z1bmMgICAgICAgaW5pdF9mYWNlICAgICAgICovCisgICAgc2ZudF9sb2FkX2ZhY2UsICAgICAgICAgLyogVFRfTG9hZF9GYWNlX0Z1bmMgICAgICAgbG9hZF9mYWNlICAgICAgICovCisgICAgc2ZudF9kb25lX2ZhY2UsICAgICAgICAgLyogVFRfRG9uZV9GYWNlX0Z1bmMgICAgICAgZG9uZV9mYWNlICAgICAgICovCisgICAgc2ZudF9nZXRfaW50ZXJmYWNlLCAgICAgLyogRlRfTW9kdWxlX1JlcXVlc3RlciAgICAgZ2V0X2ludGVyZmFjZSAgICovCiAKLSAgICB0dF9mYWNlX2xvYWRfYW55LAorICAgIHR0X2ZhY2VfbG9hZF9hbnksICAgICAgIC8qIFRUX0xvYWRfQW55X0Z1bmMgICAgICAgIGxvYWRfYW55ICAgICAgICAqLwogCi0gICAgdHRfZmFjZV9sb2FkX2hlYWQsCi0gICAgdHRfZmFjZV9sb2FkX2hoZWEsCi0gICAgdHRfZmFjZV9sb2FkX2NtYXAsCi0gICAgdHRfZmFjZV9sb2FkX21heHAsCi0gICAgdHRfZmFjZV9sb2FkX29zMiwKLSAgICB0dF9mYWNlX2xvYWRfcG9zdCwKKyAgICB0dF9mYWNlX2xvYWRfaGVhZCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2hlYWQgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfaGhlYSwgICAgICAvKiBUVF9Mb2FkX01ldHJpY3NfRnVuYyAgICBsb2FkX2hoZWEgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfY21hcCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2NtYXAgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfbWF4cCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX21heHAgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfb3MyLCAgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX29zMiAgICAgICAgKi8KKyAgICB0dF9mYWNlX2xvYWRfcG9zdCwgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX3Bvc3QgICAgICAgKi8KIAotICAgIHR0X2ZhY2VfbG9hZF9uYW1lLAotICAgIHR0X2ZhY2VfZnJlZV9uYW1lLAorICAgIHR0X2ZhY2VfbG9hZF9uYW1lLCAgICAgIC8qIFRUX0xvYWRfVGFibGVfRnVuYyAgICAgIGxvYWRfbmFtZSAgICAgICAqLworICAgIHR0X2ZhY2VfZnJlZV9uYW1lLCAgICAgIC8qIFRUX0ZyZWVfVGFibGVfRnVuYyAgICAgIGZyZWVfbmFtZSAgICAgICAqLwogCi0gICAgdHRfZmFjZV9sb2FkX2tlcm4sCi0gICAgdHRfZmFjZV9sb2FkX2dhc3AsCi0gICAgdHRfZmFjZV9sb2FkX3BjbHQsCisgICAgdHRfZmFjZV9sb2FkX2tlcm4sICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9rZXJuICAgICAgICovCisgICAgdHRfZmFjZV9sb2FkX2dhc3AsICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9nYXNwICAgICAgICovCisgICAgdHRfZmFjZV9sb2FkX3BjbHQsICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9pbml0ICAgICAgICovCiAKICAgICAvKiBzZWUgYHR0bG9hZC5oJyAqLwogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX2xvYWRfYmhlZCApLAotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9iaGVkICAgICAgICovCiAgICAgUFVUX0VNQkVEREVEX0JJVE1BUFMoIHR0X2ZhY2VfbG9hZF9zYml0X2ltYWdlICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfTG9hZF9TQml0X0ltYWdlX0Z1bmMgbG9hZF9zYml0X2ltYWdlICovCiAKICAgICAvKiBzZWUgYHR0cG9zdC5oJyAqLwogICAgIFBVVF9QU19OQU1FUyggdHRfZmFjZV9nZXRfcHNfbmFtZSAgICksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVFRfR2V0X1BTX05hbWVfRnVuYyAgICAgZ2V0X3BzbmFtZSAgICAgICovCiAgICAgUFVUX1BTX05BTUVTKCB0dF9mYWNlX2ZyZWVfcHNfbmFtZXMgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICBmcmVlX3BzbmFtZXMgICAgKi8KIAogICAgIC8qIHNpbmNlIHZlcnNpb24gMi4xLjggKi8KLSAgICB0dF9mYWNlX2dldF9rZXJuaW5nLAorICAgIHR0X2ZhY2VfZ2V0X2tlcm5pbmcsICAgIC8qIFRUX0ZhY2VfR2V0S2VybmluZ0Z1bmMgIGdldF9rZXJuaW5nICAgICAqLwogCiAgICAgLyogc2luY2UgdmVyc2lvbiAyLjIgKi8KLSAgICB0dF9mYWNlX2xvYWRfZm9udF9kaXIsCi0gICAgdHRfZmFjZV9sb2FkX2htdHgsCisgICAgdHRfZmFjZV9sb2FkX2ZvbnRfZGlyLCAgLyogVFRfTG9hZF9UYWJsZV9GdW5jICAgICAgbG9hZF9mb250X2RpciAgICovCisgICAgdHRfZmFjZV9sb2FkX2htdHgsICAgICAgLyogVFRfTG9hZF9NZXRyaWNzX0Z1bmMgICAgbG9hZF9obXR4ICAgICAgICovCiAKICAgICAvKiBzZWUgYHR0c2JpdC5oJyBhbmQgYHNmbnQuaCcgKi8KICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9sb2FkX3NiaXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9Mb2FkX1RhYmxlX0Z1bmMgICAgICBsb2FkX2VibGMgICAgICAgKi8KICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9mcmVlX3NiaXQgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9GcmVlX1RhYmxlX0Z1bmMgICAgICBmcmVlX2VibGMgICAgICAgKi8KIAogICAgIFBVVF9FTUJFRERFRF9CSVRNQVBTKCB0dF9mYWNlX3NldF9zYml0X3N0cmlrZSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUVF9TZXRfU0JpdF9TdHJpa2VfRnVuYyBzZXRfc2JpdF9zdHJpa2UgKi8KICAgICBQVVRfRU1CRURERURfQklUTUFQUyggdHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzICksCisgICAgICAgICAgICAgICAgICAgIC8qIFRUX0xvYWRfU3RyaWtlX01ldHJpY3NfRnVuYyBsb2FkX3N0cmlrZV9tZXRyaWNzICovCiAKLSAgICB0dF9mYWNlX2dldF9tZXRyaWNzLAorICAgIHR0X2ZhY2VfZ2V0X21ldHJpY3MsICAgIC8qIFRUX0dldF9NZXRyaWNzX0Z1bmMgICAgIGdldF9tZXRyaWNzICAgICAqLwogCi0gICAgdHRfZmFjZV9nZXRfbmFtZQorICAgIHR0X2ZhY2VfZ2V0X25hbWUgICAgICAgIC8qIFRUX0dldF9OYW1lX0Z1bmMgICAgICAgIGdldF9uYW1lICAgICAgICAqLwogICApCiAKIApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2Zkcml2ZXIuaCBiL3NyYy9zZm50L3NmZHJpdmVyLmgKaW5kZXggOTQ0MTE5Yy4uMjY5NDQ4OCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2Zkcml2ZXIuaAorKysgYi9zcmMvc2ZudC9zZmRyaXZlci5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEhpZ2gtbGV2ZWwgU0ZOVCBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TRkRSSVZFUl9IX18KLSNkZWZpbmUgX19TRkRSSVZFUl9IX18KKyNpZm5kZWYgU0ZEUklWRVJfSF8KKyNkZWZpbmUgU0ZEUklWRVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTMyLDcgKzMyLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19TRkRSSVZFUl9IX18gKi8KKyNlbmRpZiAvKiBTRkRSSVZFUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZlcnJvcnMuaCBiL3NyYy9zZm50L3NmZXJyb3JzLmgKaW5kZXggZTNiZWYzZi4uYzJmOWZkZiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZlcnJvcnMuaAorKysgYi9zcmMvc2ZudC9zZmVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgZXJyb3IgY29kZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMiwxMiArMjIsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fU0ZFUlJPUlNfSF9fCi0jZGVmaW5lIF9fU0ZFUlJPUlNfSF9fCisjaWZuZGVmIFNGRVJST1JTX0hfCisjZGVmaW5lIFNGRVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgU0ZOVF9FcnJfCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlIEZUX0VSUk9SU19ICiAKLSNlbmRpZiAvKiBfX1NGRVJST1JTX0hfXyAqLworI2VuZGlmIC8qIFNGRVJST1JTX0hfICovCisKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm50LmMgYi9zcmMvc2ZudC9zZm50LmMKaW5kZXggMGI4YjVmNC4uOTUyZDZkNCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZudC5jCisrKyBiL3NyYy9zZm50L3NmbnQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBTaW5nbGUgb2JqZWN0IGxpYnJhcnkgY29tcG9uZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvc2ZudHBpYy5jIGIvc3JjL3NmbnQvc2ZudHBpYy5jCmluZGV4IDJhYWY0YmMuLjFmNTk2YzAgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3NmbnRwaWMuYworKysgYi9zcmMvc2ZudC9zZm50cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHNmbnQgbW9kdWxlLiAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3NmbnRwaWMuaCBiL3NyYy9zZm50L3NmbnRwaWMuaAppbmRleCBkOTliZTZhLi41Y2U5NmQzIDEwMDY0NAotLS0gYS9zcmMvc2ZudC9zZm50cGljLmgKKysrIGIvc3JjL3NmbnQvc2ZudHBpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzZm50IG1vZHVsZS4gICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TRk5UUElDX0hfXwotI2RlZmluZSBfX1NGTlRQSUNfSF9fCisjaWZuZGVmIFNGTlRQSUNfSF8KKyNkZWZpbmUgU0ZOVFBJQ19IXwogCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICkBAIC0xMDYsNyArMTA2LDcgQEAKIAogICAvKiAqLwogCi0jZW5kaWYgLyogX19TRk5UUElDX0hfXyAqLworI2VuZGlmIC8qIFNGTlRQSUNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3Nmb2Jqcy5jIGIvc3JjL3NmbnQvc2ZvYmpzLmMKaW5kZXggZGUwMzBlYS4uY2VlYWUyMCAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvc2ZvYmpzLmMKKysrIGIvc3JjL3NmbnQvc2ZvYmpzLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgU0ZOVCBvYmplY3QgbWFuYWdlbWVudCAoYmFzZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTk0OSw2ICs5NDksMTAgQEAKICAgICAgICAgICAgICBpbnN0YW5jZV9zaXplICogbnVtX2luc3RhbmNlcyA+IGZ2YXJfbGVuICkKICAgICAgICAgbnVtX2luc3RhbmNlcyA9IDA7CiAKKyAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgTXVsdGlwbGUgTWFzdGVyIENGRnMgeWV0ICovCisgICAgICBpZiAoICFmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX0NGRiwgc3RyZWFtLCAwICkgKQorICAgICAgICBudW1faW5zdGFuY2VzID0gMDsKKwogICAgICAgLyogd2Ugc3VwcG9ydCBhdCBtb3N0IDJeMTUgLSAxIGluc3RhbmNlcyAqLwogICAgICAgaWYgKCBudW1faW5zdGFuY2VzID49ICggMVUgPDwgMTUgKSAtIDEgKQogICAgICAgewpAQCAtOTczLDcgKzk3Nyw3IEBACiAjZW5kaWYKIAogICAgIGZhY2UtPnJvb3QubnVtX2ZhY2VzICA9IGZhY2UtPnR0Y19oZWFkZXIuY291bnQ7Ci0gICAgZmFjZS0+cm9vdC5mYWNlX2luZGV4ID0gZmFjZV9pbmRleDsKKyAgICBmYWNlLT5yb290LmZhY2VfaW5kZXggPSBmYWNlX2luc3RhbmNlX2luZGV4OwogCiAgICAgcmV0dXJuIGVycm9yOwogICB9CkBAIC0xNDA3LDcgKzE0MTEsNyBAQAogICAgICAgICogIGRlcHRocyBpbiB0aGUgRlRfQml0bWFwX1NpemUgcmVjb3JkLiAgVGhpcyBpcyBhIGRlc2lnbiBlcnJvci4KICAgICAgICAqLwogICAgICAgewotICAgICAgICBGVF9VSW50ICBpLCBjb3VudDsKKyAgICAgICAgRlRfVUludCAgY291bnQ7CiAKIAogICAgICAgICBjb3VudCA9IGZhY2UtPnNiaXRfbnVtX3N0cmlrZXM7CkBAIC0xNDE5LDYgKzE0MjMsOSBAQAogICAgICAgICAgIEZUX1Nob3J0ICAgICAgICAgYXZnd2lkdGggPSBmYWNlLT5vczIueEF2Z0NoYXJXaWR0aDsKICAgICAgICAgICBGVF9TaXplX01ldHJpY3MgIG1ldHJpY3M7CiAKKyAgICAgICAgICBGVF9VSW50KiAgc2JpdF9zdHJpa2VfbWFwID0gTlVMTDsKKyAgICAgICAgICBGVF9VSW50ICAgc3RyaWtlX2lkeCwgYnNpemVfaWR4OworCiAKICAgICAgICAgICBpZiAoIGVtX3NpemUgPT0gMCB8fCBmYWNlLT5vczIudmVyc2lvbiA9PSAweEZGRkZVICkKICAgICAgICAgICB7CkBAIC0xNDI2LDMxICsxNDMzLDUwIEBACiAgICAgICAgICAgICBlbV9zaXplID0gMTsKICAgICAgICAgICB9CiAKLSAgICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggcm9vdC0+YXZhaWxhYmxlX3NpemVzLCBjb3VudCApICkKKyAgICAgICAgICAvKiB0byBhdm9pZCBpbnZhbGlkIHN0cmlrZSBkYXRhIGluIHRoZSBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCAqLworICAgICAgICAgIC8qIG9mIGBGVF9GYWNlJywgd2UgbWFwIGBhdmFpbGFibGVfc2l6ZXMnIGluZGljZXMgdG8gc3RyaWtlICAgICovCisgICAgICAgICAgLyogaW5kaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIEZUX05FV19BUlJBWSggcm9vdC0+YXZhaWxhYmxlX3NpemVzLCBjb3VudCApIHx8CisgICAgICAgICAgICAgICBGVF9ORVdfQVJSQVkoIHNiaXRfc3RyaWtlX21hcCwgY291bnQgKSApCiAgICAgICAgICAgICBnb3RvIEV4aXQ7CiAKLSAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgICAgICAgIGJzaXplX2lkeCA9IDA7CisgICAgICAgICAgZm9yICggc3RyaWtlX2lkeCA9IDA7IHN0cmlrZV9pZHggPCBjb3VudDsgc3RyaWtlX2lkeCsrICkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBGVF9CaXRtYXBfU2l6ZSogIGJzaXplID0gcm9vdC0+YXZhaWxhYmxlX3NpemVzICsgaTsKKyAgICAgICAgICAgIEZUX0JpdG1hcF9TaXplKiAgYnNpemUgPSByb290LT5hdmFpbGFibGVfc2l6ZXMgKyBic2l6ZV9pZHg7CiAKIAotICAgICAgICAgICAgZXJyb3IgPSBzZm50LT5sb2FkX3N0cmlrZV9tZXRyaWNzKCBmYWNlLCBpLCAmbWV0cmljcyApOworICAgICAgICAgICAgZXJyb3IgPSBzZm50LT5sb2FkX3N0cmlrZV9tZXRyaWNzKCBmYWNlLCBzdHJpa2VfaWR4LCAmbWV0cmljcyApOwogICAgICAgICAgICAgaWYgKCBlcnJvciApCi0gICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGJzaXplLT5oZWlnaHQgPSAoRlRfU2hvcnQpKCBtZXRyaWNzLmhlaWdodCA+PiA2ICk7Ci0gICAgICAgICAgICBic2l6ZS0+d2lkdGggPSAoRlRfU2hvcnQpKAotICAgICAgICAgICAgICAgICggYXZnd2lkdGggKiBtZXRyaWNzLnhfcHBlbSArIGVtX3NpemUgLyAyICkgLyBlbV9zaXplICk7CisgICAgICAgICAgICBic2l6ZS0+d2lkdGggID0gKEZUX1Nob3J0KSgKKyAgICAgICAgICAgICAgKCBhdmd3aWR0aCAqIG1ldHJpY3MueF9wcGVtICsgZW1fc2l6ZSAvIDIgKSAvIGVtX3NpemUgKTsKIAogICAgICAgICAgICAgYnNpemUtPnhfcHBlbSA9IG1ldHJpY3MueF9wcGVtIDw8IDY7CiAgICAgICAgICAgICBic2l6ZS0+eV9wcGVtID0gbWV0cmljcy55X3BwZW0gPDwgNjsKIAogICAgICAgICAgICAgLyogYXNzdW1lIDcyZHBpICovCiAgICAgICAgICAgICBic2l6ZS0+c2l6ZSAgID0gbWV0cmljcy55X3BwZW0gPDwgNjsKKworICAgICAgICAgICAgLyogb25seSB1c2Ugc3RyaWtlcyB3aXRoIHZhbGlkIFBQRU0gdmFsdWVzICovCisgICAgICAgICAgICBpZiAoIGJzaXplLT54X3BwZW0gJiYgYnNpemUtPnlfcHBlbSApCisgICAgICAgICAgICAgIHNiaXRfc3RyaWtlX21hcFtic2l6ZV9pZHgrK10gPSBzdHJpa2VfaWR4OwogICAgICAgICAgIH0KIAotICAgICAgICAgIHJvb3QtPmZhY2VfZmxhZ3MgICAgIHw9IEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUzsKLSAgICAgICAgICByb290LT5udW1fZml4ZWRfc2l6ZXMgPSAoRlRfSW50KWNvdW50OworICAgICAgICAgIC8qIHJlZHVjZSBhcnJheSBzaXplIHRvIHRoZSBhY3R1YWxseSB1c2VkIGVsZW1lbnRzICovCisgICAgICAgICAgKHZvaWQpRlRfUkVORVdfQVJSQVkoIHNiaXRfc3RyaWtlX21hcCwgY291bnQsIGJzaXplX2lkeCApOworCisgICAgICAgICAgLyogZnJvbSBub3cgb24sIGFsbCBzdHJpa2UgaW5kaWNlcyBhcmUgbWFwcGVkICovCisgICAgICAgICAgLyogdXNpbmcgYHNiaXRfc3RyaWtlX21hcCcgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgaWYgKCBic2l6ZV9pZHggKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZhY2UtPnNiaXRfc3RyaWtlX21hcCA9IHNiaXRfc3RyaWtlX21hcDsKKworICAgICAgICAgICAgcm9vdC0+ZmFjZV9mbGFncyAgICAgfD0gRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTOworICAgICAgICAgICAgcm9vdC0+bnVtX2ZpeGVkX3NpemVzID0gKEZUX0ludClic2l6ZV9pZHg7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAKQEAgLTE2NDQsNiArMTY3MCw3IEBACiAKICAgICAvKiBmcmVlaW5nIHNiaXQgc2l6ZSB0YWJsZSAqLwogICAgIEZUX0ZSRUUoIGZhY2UtPnJvb3QuYXZhaWxhYmxlX3NpemVzICk7CisgICAgRlRfRlJFRSggZmFjZS0+c2JpdF9zdHJpa2VfbWFwICk7CiAgICAgZmFjZS0+cm9vdC5udW1fZml4ZWRfc2l6ZXMgPSAwOwogCiAgICAgRlRfRlJFRSggZmFjZS0+cG9zdHNjcmlwdF9uYW1lICk7CmRpZmYgLS1naXQgYS9zcmMvc2ZudC9zZm9ianMuaCBiL3NyYy9zZm50L3Nmb2Jqcy5oCmluZGV4IDQ1NWY4NjcuLjYwYjU2OTggMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3Nmb2Jqcy5oCisrKyBiL3NyYy9zZm50L3Nmb2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFNGTlQgb2JqZWN0IG1hbmFnZW1lbnQgKHNwZWNpZmljYXRpb24pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19TRk9CSlNfSF9fCi0jZGVmaW5lIF9fU0ZPQkpTX0hfXworI2lmbmRlZiBTRk9CSlNfSF8KKyNkZWZpbmUgU0ZPQkpTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01Myw3ICs1Myw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fU0ZEUklWRVJfSF9fICovCisjZW5kaWYgLyogU0ZEUklWRVJfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0YmRmLmMgYi9zcmMvc2ZudC90dGJkZi5jCmluZGV4IDA5OGI3ODEuLmY4OTE2OTEgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0YmRmLmMKKysrIGIvc3JjL3NmbnQvdHRiZGYuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgQkRGIHByb3BlcnRpZXMgKGJvZHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRiZGYuaCBiL3NyYy9zZm50L3R0YmRmLmgKaW5kZXggZmU0YmE0OC4uYWU1MjFjNiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRiZGYuaAorKysgYi9zcmMvc2ZudC90dGJkZi5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBCREYgcHJvcGVydGllcyAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA1LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVEJERl9IX18KLSNkZWZpbmUgX19UVEJERl9IX18KKyNpZm5kZWYgVFRCREZfSF8KKyNkZWZpbmUgVFRCREZfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQwLDcgKzQwLDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVEJERl9IX18gKi8KKyNlbmRpZiAvKiBUVEJERl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjbWFwLmMgYi9zcmMvc2ZudC90dGNtYXAuYwppbmRleCAyYjEzMzdmLi5jZDc0NjdkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNtYXAuYworKysgYi9zcmMvc2ZudC90dGNtYXAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoYm9keSkuICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtNzYzLDYgKzc2Myw5IEBACiAgIHN0YXRpYyB2b2lkCiAgIHR0X2NtYXA0X25leHQoIFRUX0NNYXA0ICBjbWFwICkKICAgeworICAgIFRUX0ZhY2UgICBmYWNlICA9IChUVF9GYWNlKWNtYXAtPmNtYXAuY21hcC5jaGFybWFwLmZhY2U7CisgICAgRlRfQnl0ZSogIGxpbWl0ID0gZmFjZS0+Y21hcF90YWJsZSArIGZhY2UtPmNtYXBfc2l6ZTsKKwogICAgIEZUX1VJbnQgIGNoYXJjb2RlOwogCiAKQEAgLTc4OCwxNSArNzkxLDE5IEBACiAgICAgICAgICAgRlRfQnl0ZSogIHAgPSB2YWx1ZXMgKyAyICogKCBjaGFyY29kZSAtIGNtYXAtPmN1cl9zdGFydCApOwogCiAKKyAgICAgICAgICAvKiBpZiBwID4gbGltaXQsIHRoZSB3aG9sZSBzZWdtZW50IGlzIGludmFsaWQgKi8KKyAgICAgICAgICBpZiAoIHAgPiBsaW1pdCApCisgICAgICAgICAgICBnb3RvIE5leHRfU2VnbWVudDsKKwogICAgICAgICAgIGRvCiAgICAgICAgICAgewogICAgICAgICAgICAgRlRfVUludCAgZ2luZGV4ID0gRlRfTkVYVF9VU0hPUlQoIHAgKTsKIAogCi0gICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgICAgICAgIGlmICggZ2luZGV4ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWdpbmRleCArIGRlbHRhICkgJiAweEZGRkZVOwotICAgICAgICAgICAgICBpZiAoIGdpbmRleCAhPSAwICkKKyAgICAgICAgICAgICAgaWYgKCBnaW5kZXggKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY21hcC0+Y3VyX2NoYXJjb2RlID0gY2hhcmNvZGU7CiAgICAgICAgICAgICAgICAgY21hcC0+Y3VyX2dpbmRleCAgID0gZ2luZGV4OwpAQCAtODEyLDcgKzgxOSwyNiBAQAogICAgICAgICAgICAgRlRfVUludCAgZ2luZGV4ID0gKEZUX1VJbnQpKCAoRlRfSW50KWNoYXJjb2RlICsgZGVsdGEgKSAmIDB4RkZGRlU7CiAKIAotICAgICAgICAgICAgaWYgKCBnaW5kZXggIT0gMCApCisgICAgICAgICAgICBpZiAoIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvKiB3ZSBoYXZlIGFuIGludmFsaWQgZ2x5cGggaW5kZXg7IGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCAqLworICAgICAgICAgICAgICAvKiB3ZSBjYW4gYWRqdXN0IGBjaGFyY29kZScsIG90aGVyd2lzZSB0aGUgd2hvbGUgc2VnbWVudCBpcyAqLworICAgICAgICAgICAgICAvKiBpbnZhbGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICBnaW5kZXggPSAwOworCisgICAgICAgICAgICAgIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMCAmJgorICAgICAgICAgICAgICAgICAgIChGVF9JbnQpZW5kICsgZGVsdGEgPj0gMCAgICAgKQorICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAtZGVsdGEgKTsKKworICAgICAgICAgICAgICBlbHNlIGlmICggKEZUX0ludCljaGFyY29kZSArIGRlbHRhIDwgMHgxMDAwMEwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChGVF9JbnQpZW5kICsgZGVsdGEgPj0gMHgxMDAwMEwgICAgICkKKyAgICAgICAgICAgICAgICBjaGFyY29kZSA9IChGVF9VSW50KSggMHgxMDAwMEwgLSBkZWx0YSApOworCisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIE5leHRfU2VnbWVudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBnaW5kZXggKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjbWFwLT5jdXJfY2hhcmNvZGUgPSBjaGFyY29kZTsKICAgICAgICAgICAgICAgY21hcC0+Y3VyX2dpbmRleCAgID0gZ2luZGV4OwpAQCAtODIyLDYgKzg0OCw3IEBACiAgICAgICAgIH0KICAgICAgIH0KIAorICAgIE5leHRfU2VnbWVudDoKICAgICAgIC8qIHdlIG5lZWQgdG8gZmluZCBhbm90aGVyIHJhbmdlICovCiAgICAgICBpZiAoIHR0X2NtYXA0X3NldF9yYW5nZSggY21hcCwgY21hcC0+Y3VyX3JhbmdlICsgMSApIDwgMCApCiAgICAgICAgIGJyZWFrOwpAQCAtMTE3MCw2ICsxMTk3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50MzIqICBwY2hhcmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgICAgbmV4dCApCiAgIHsKKyAgICBUVF9GYWNlICAgZmFjZSAgPSAoVFRfRmFjZSljbWFwLT5jbWFwLmNoYXJtYXAuZmFjZTsKKyAgICBGVF9CeXRlKiAgbGltaXQgPSBmYWNlLT5jbWFwX3RhYmxlICsgZmFjZS0+Y21hcF9zaXplOworCiAgICAgRlRfVUludCAgIG51bV9zZWdzMiwgc3RhcnQsIGVuZCwgb2Zmc2V0OwogICAgIEZUX0ludCAgICBkZWx0YTsKICAgICBGVF9VSW50ICAgbWF4LCBtaW4sIG1pZCwgbnVtX3NlZ3M7CkBAIC0xMjIxLDEwICsxMjUxLDYgQEAKICAgICAgICAgaWYgKCBtaWQgPj0gbnVtX3NlZ3MgLSAxICAgICAgICAgICAgICAgICYmCiAgICAgICAgICAgICAgc3RhcnQgPT0gMHhGRkZGVSAmJiBlbmQgPT0gMHhGRkZGVSApCiAgICAgICAgIHsKLSAgICAgICAgICBUVF9GYWNlICAgZmFjZSAgPSAoVFRfRmFjZSljbWFwLT5jbWFwLmNoYXJtYXAuZmFjZTsKLSAgICAgICAgICBGVF9CeXRlKiAgbGltaXQgPSBmYWNlLT5jbWFwX3RhYmxlICsgZmFjZS0+Y21hcF9zaXplOwotCi0KICAgICAgICAgICBpZiAoIG9mZnNldCAmJiBwICsgb2Zmc2V0ICsgMiA+IGxpbWl0ICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBkZWx0YSAgPSAxOwpAQCAtMTI0NSw3ICsxMjcxLDcgQEAKICAgICAgICAgICAgIG1pZCA9IG1heCArIDE7CiAKICAgICAgICAgICAvKiBzZWFyY2ggaW4gc2VnbWVudHMgYmVmb3JlIHRoZSBjdXJyZW50IHNlZ21lbnQgKi8KLSAgICAgICAgICBmb3IgKCBpID0gbWF4IDsgaSA+IDA7IGktLSApCisgICAgICAgICAgZm9yICggaSA9IG1heDsgaSA+IDA7IGktLSApCiAgICAgICAgICAgewogICAgICAgICAgICAgRlRfVUludCAgIHByZXZfZW5kOwogICAgICAgICAgICAgRlRfQnl0ZSogIG9sZF9wOwpAQCAtMTM0NywxMyArMTM3Myw0MCBAQAogICAgICAgICBpZiAoIG9mZnNldCApCiAgICAgICAgIHsKICAgICAgICAgICBwICs9IG9mZnNldCArICggY2hhcmNvZGUgLSBzdGFydCApICogMjsKKworICAgICAgICAgIC8qIGlmIHAgPiBsaW1pdCwgdGhlIHdob2xlIHNlZ21lbnQgaXMgaW52YWxpZCAqLworICAgICAgICAgIGlmICggbmV4dCAmJiBwID4gbGltaXQgKQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICBnaW5kZXggPSBUVF9QRUVLX1VTSE9SVCggcCApOwotICAgICAgICAgIGlmICggZ2luZGV4ICE9IDAgKQorICAgICAgICAgIGlmICggZ2luZGV4ICkKKyAgICAgICAgICB7CiAgICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpZ2luZGV4ICsgZGVsdGEgKSAmIDB4RkZGRlU7CisgICAgICAgICAgICBpZiAoIGdpbmRleCA+PSAoRlRfVUludClmYWNlLT5yb290Lm51bV9nbHlwaHMgKQorICAgICAgICAgICAgICBnaW5kZXggPSAwOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCisgICAgICAgIHsKICAgICAgICAgICBnaW5kZXggPSAoRlRfVUludCkoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSApICYgMHhGRkZGVTsKIAorICAgICAgICAgIGlmICggbmV4dCAmJiBnaW5kZXggPj0gKEZUX1VJbnQpZmFjZS0+cm9vdC5udW1fZ2x5cGhzICkKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiB3ZSBoYXZlIGFuIGludmFsaWQgZ2x5cGggaW5kZXg7IGlmIHRoZXJlIGlzIGFuIG92ZXJmbG93LCAqLworICAgICAgICAgICAgLyogd2UgY2FuIGFkanVzdCBgY2hhcmNvZGUnLCBvdGhlcndpc2UgdGhlIHdob2xlIHNlZ21lbnQgaXMgKi8KKyAgICAgICAgICAgIC8qIGludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBnaW5kZXggPSAwOworCisgICAgICAgICAgICBpZiAoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSA8IDAgJiYKKyAgICAgICAgICAgICAgICAgKEZUX0ludCllbmQgKyBkZWx0YSA+PSAwICAgICApCisgICAgICAgICAgICAgIGNoYXJjb2RlID0gKEZUX1VJbnQpKCAtZGVsdGEgKTsKKworICAgICAgICAgICAgZWxzZSBpZiAoIChGVF9JbnQpY2hhcmNvZGUgKyBkZWx0YSA8IDB4MTAwMDBMICYmCisgICAgICAgICAgICAgICAgICAgICAgKEZUX0ludCllbmQgKyBkZWx0YSA+PSAweDEwMDAwTCAgICAgKQorICAgICAgICAgICAgICBjaGFyY29kZSA9IChGVF9VSW50KSggMHgxMDAwMEwgLSBkZWx0YSApOworICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGJyZWFrOwogICAgICAgfQogICAgIH0KQEAgLTMxMDQsNyArMzE1Nyw3IEBACiAKICAgICAgIGlmICggY2hhcl9jb2RlIDwgc3RhcnQgKQogICAgICAgICBtYXggPSBtaWQ7Ci0gICAgICBlbHNlIGlmICggY2hhcl9jb2RlID4gc3RhcnQrY250ICkKKyAgICAgIGVsc2UgaWYgKCBjaGFyX2NvZGUgPiBzdGFydCArIGNudCApCiAgICAgICAgIG1pbiA9IG1pZCArIDE7CiAgICAgICBlbHNlCiAgICAgICAgIHJldHVybiBUUlVFOwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjbWFwLmggYi9zcmMvc2ZudC90dGNtYXAuaAppbmRleCBiN2VhOGVlLi4yMjczY2JkIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGNtYXAuaAorKysgYi9zcmMvc2ZudC90dGNtYXAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSAoY21hcCkgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMi0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDItMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRDTUFQX0hfXwotI2RlZmluZSBfX1RUQ01BUF9IX18KKyNpZm5kZWYgVFRDTUFQX0hfCisjZGVmaW5lIFRUQ01BUF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMTUyLDcgKzE1Miw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRDTUFQX0hfXyAqLworI2VuZGlmIC8qIFRUQ01BUF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRjbWFwYy5oIGIvc3JjL3NmbnQvdHRjbWFwYy5oCmluZGV4IDRhNDg5NDAuLjdjNzMyZmIgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0Y21hcGMuaAorKysgYi9zcmMvc2ZudC90dGNtYXBjLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVFQgQ01BUCBjbGFzc2VzIGRlZmluaXRpb25zIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0a2Vybi5jIGIvc3JjL3NmbnQvdHRrZXJuLmMKaW5kZXggNGZjY2M1My4uNmY5ZmE1MiAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRrZXJuLmMKKysrIGIvc3JjL3NmbnQvdHRrZXJuLmMKQEAgLTUsNyArNSw3IEBACiAvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLwogLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy9zZm50L3R0a2Vybi5oIGIvc3JjL3NmbnQvdHRrZXJuLmgKaW5kZXggODljYjI0Zi4uODVkZDVjMyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRrZXJuLmgKKysrIGIvc3JjL3NmbnQvdHRrZXJuLmgKQEAgLTUsNyArNSw3IEBACiAvKiAgICBMb2FkIHRoZSBiYXNpYyBUcnVlVHlwZSBrZXJuaW5nIHRhYmxlLiAgVGhpcyBkb2Vzbid0IGhhbmRsZSAgICAgICAgICAqLwogLyogICAga2VybmluZyBkYXRhIHdpdGhpbiB0aGUgR1BPUyB0YWJsZSBhdCB0aGUgbW9tZW50LiAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE3LDggKzE3LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUS0VSTl9IX18KLSNkZWZpbmUgX19UVEtFUk5fSF9fCisjaWZuZGVmIFRUS0VSTl9IXworI2RlZmluZSBUVEtFUk5fSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTQ2LDcgKzQ2LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19UVEtFUk5fSF9fICovCisjZW5kaWYgLyogVFRLRVJOX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dGxvYWQuYyBiL3NyYy9zZm50L3R0bG9hZC5jCmluZGV4IGMxYmQ3ZjAuLmE2NTNhNzEgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0bG9hZC5jCisrKyBiL3NyYy9zZm50L3R0bG9hZC5jCkBAIC01LDcgKzUsNyBAQAogLyogICAgTG9hZCB0aGUgYmFzaWMgVHJ1ZVR5cGUgdGFibGVzLCBpLmUuLCB0YWJsZXMgdGhhdCBjYW4gYmUgZWl0aGVyIGluICAgKi8KIC8qICAgIFRURiBvciBPVEYgZm9udHMgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC03NzUsMTUgKzc3NSw2IEBACiAKICAgICAgICAgbWF4UHJvZmlsZS0+bWF4VHdpbGlnaHRQb2ludHMgPSAweEZGRkZVIC0gNDsKICAgICAgIH0KLQotICAgICAgLyogd2UgYXJiaXRyYXJpbHkgbGltaXQgcmVjdXJzaW9uIHRvIGF2b2lkIHN0YWNrIGV4aGF1c3Rpb24gKi8KLSAgICAgIGlmICggbWF4UHJvZmlsZS0+bWF4Q29tcG9uZW50RGVwdGggPiAxMDAgKQotICAgICAgewotICAgICAgICBGVF9UUkFDRTAoKCAidHRfZmFjZV9sb2FkX21heHA6IgotICAgICAgICAgICAgICAgICAgICAiIGFibm9ybWFsbHkgbGFyZ2UgY29tcG9uZW50IGRlcHRoICglZCkgc2V0IHRvIDEwMFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbWF4UHJvZmlsZS0+bWF4Q29tcG9uZW50RGVwdGggKSk7Ci0gICAgICAgIG1heFByb2ZpbGUtPm1heENvbXBvbmVudERlcHRoID0gMTAwOwotICAgICAgfQogICAgIH0KIAogICAgIEZUX1RSQUNFMygoICJudW1HbHlwaHM6ICV1XG4iLCBtYXhQcm9maWxlLT5udW1HbHlwaHMgKSk7CkBAIC0xMTkzLDggKzExODQsOCBAQAogI2RlZmluZSBGVF9TVFJVQ1RVUkUgIFRUX1Bvc3RzY3JpcHQKIAogICAgICAgRlRfRlJBTUVfU1RBUlQoIDMyICksCi0gICAgICAgIEZUX0ZSQU1FX1VMT05HKCBGb3JtYXRUeXBlICksCi0gICAgICAgIEZUX0ZSQU1FX1VMT05HKCBpdGFsaWNBbmdsZSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICggRm9ybWF0VHlwZSApLAorICAgICAgICBGVF9GUkFNRV9MT05HICggaXRhbGljQW5nbGUgKSwKICAgICAgICAgRlRfRlJBTUVfU0hPUlQoIHVuZGVybGluZVBvc2l0aW9uICksCiAgICAgICAgIEZUX0ZSQU1FX1NIT1JUKCB1bmRlcmxpbmVUaGlja25lc3MgKSwKICAgICAgICAgRlRfRlJBTUVfVUxPTkcoIGlzRml4ZWRQaXRjaCApLApkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRsb2FkLmggYi9zcmMvc2ZudC90dGxvYWQuaAppbmRleCBhNmQ5MWM1Li5iZWM0MmI5IDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dGxvYWQuaAorKysgYi9zcmMvc2ZudC90dGxvYWQuaApAQCAtNSw3ICs1LDcgQEAKIC8qICAgIExvYWQgdGhlIGJhc2ljIFRydWVUeXBlIHRhYmxlcywgaS5lLiwgdGFibGVzIHRoYXQgY2FuIGJlIGVpdGhlciBpbiAgICovCiAvKiAgICBUVEYgb3IgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTcsOCArMTcsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRMT0FEX0hfXwotI2RlZmluZSBfX1RUTE9BRF9IX18KKyNpZm5kZWYgVFRMT0FEX0hfCisjZGVmaW5lIFRUTE9BRF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMTA2LDcgKzEwNiw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRMT0FEX0hfXyAqLworI2VuZGlmIC8qIFRUTE9BRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRtdHguYyBiL3NyYy9zZm50L3R0bXR4LmMKaW5kZXggNTgzMDlhYS4uMTg2Zjg3MyAxMDA2NDQKLS0tIGEvc3JjL3NmbnQvdHRtdHguYworKysgYi9zcmMvc2ZudC90dG10eC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIExvYWQgdGhlIG1ldHJpY3MgdGFibGVzIGNvbW1vbiB0byBUVEYgYW5kIE9URiBmb250cyAoYm9keSkuICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNi0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dG10eC5oIGIvc3JjL3NmbnQvdHRtdHguaAppbmRleCAwOTZlZTA2Li43ODM5NWRlIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dG10eC5oCisrKyBiL3NyYy9zZm50L3R0bXR4LmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgTG9hZCB0aGUgbWV0cmljcyB0YWJsZXMgY29tbW9uIHRvIFRURiBhbmQgT1RGIGZvbnRzIChzcGVjaWZpY2F0aW9uKS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUTVRYX0hfXwotI2RlZmluZSBfX1RUTVRYX0hfXworI2lmbmRlZiBUVE1UWF9IXworI2RlZmluZSBUVE1UWF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNDksNyArNDksNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUTVRYX0hfXyAqLworI2VuZGlmIC8qIFRUTVRYX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHBvc3QuYyBiL3NyYy9zZm50L3R0cG9zdC5jCmluZGV4IDhkMjlkMWUuLjMyNzdmMWUgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0cG9zdC5jCisrKyBiL3NyYy9zZm50L3R0cG9zdC5jCkBAIC0yLDEwICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0cG9zdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0Y3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgKi8KIC8qICAgIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHBvc3QuaCBiL3NyYy9zZm50L3R0cG9zdC5oCmluZGV4IGUzZWNhMDIuLmVkZTQ1ZmQgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0cG9zdC5oCisrKyBiL3NyYy9zZm50L3R0cG9zdC5oCkBAIC0yLDEwICsyLDEwIEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIHR0cG9zdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICBQb3N0Y3JpcHQgbmFtZSB0YWJsZSBwcm9jZXNzaW5nIGZvciBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZm9udHMgICAgICAqLworLyogICAgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIHByb2Nlc3NpbmcgZm9yIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBmb250cyAgICAgKi8KIC8qICAgIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNyw4ICsxNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFBPU1RfSF9fCi0jZGVmaW5lIF9fVFRQT1NUX0hfXworI2lmbmRlZiBUVFBPU1RfSF8KKyNkZWZpbmUgVFRQT1NUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00MCw3ICs0MCw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRQT1NUX0hfXyAqLworI2VuZGlmIC8qIFRUUE9TVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3NmbnQvdHRzYml0LmMgYi9zcmMvc2ZudC90dHNiaXQuYwppbmRleCAwOTI2MGI4Li4wYTkwMTExIDEwMDY0NAotLS0gYS9zcmMvc2ZudC90dHNiaXQuYworKysgYi9zcmMvc2ZudC90dHNiaXQuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBhbmQgT3BlblR5cGUgZW1iZWRkZWQgYml0bWFwIHN1cHBvcnQgKGJvZHkpLiAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDUtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgQ29weXJpZ2h0IDIwMTMgYnkgR29vZ2xlLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTk3LDYgKzE5NywyNyBAQAogICAgIGlmICggIWVycm9yICkKICAgICAgIEZUX1RSQUNFMygoICJzYml0X251bV9zdHJpa2VzOiAldVxuIiwgZmFjZS0+c2JpdF9udW1fc3RyaWtlcyApKTsKIAorICAgIGZhY2UtPmViZHRfc3RhcnQgPSAwOworICAgIGZhY2UtPmViZHRfc2l6ZSAgPSAwOworCisgICAgaWYgKCBmYWNlLT5zYml0X3RhYmxlX3R5cGUgIT0gVFRfU0JJVF9UQUJMRV9UWVBFX05PTkUgKQorICAgIHsKKyAgICAgIEZUX1VMb25nICBlYmR0X3NpemU7CisKKworICAgICAgZXJyb3IgPSBmYWNlLT5nb3RvX3RhYmxlKCBmYWNlLCBUVEFHX0NCRFQsIHN0cmVhbSwgJmViZHRfc2l6ZSApOworICAgICAgaWYgKCBlcnJvciApCisgICAgICAgIGVycm9yID0gZmFjZS0+Z290b190YWJsZSggZmFjZSwgVFRBR19FQkRULCBzdHJlYW0sICZlYmR0X3NpemUgKTsKKyAgICAgIGlmICggZXJyb3IgKQorICAgICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfYmRhdCwgc3RyZWFtLCAmZWJkdF9zaXplICk7CisKKyAgICAgIGlmICggIWVycm9yICkKKyAgICAgIHsKKyAgICAgICAgZmFjZS0+ZWJkdF9zdGFydCA9IEZUX1NUUkVBTV9QT1MoKTsKKyAgICAgICAgZmFjZS0+ZWJkdF9zaXplICA9IGViZHRfc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gRlRfRXJyX09rOwogCiAgIEV4aXQ6CkBAIC0yMzksOCArMjYwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICAgICAgICAgc3RyaWtlX2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1NpemVfTWV0cmljcyogIG1ldHJpY3MgKQogICB7Ci0gICAgaWYgKCBzdHJpa2VfaW5kZXggPj0gKEZUX1VMb25nKWZhY2UtPnNiaXRfbnVtX3N0cmlrZXMgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX0FyZ3VtZW50ICk7CisgICAgLyogd2UgaGF2ZSB0byB0ZXN0IGZvciB0aGUgZXhpc3RlbmNlIG9mIGBzYml0X3N0cmlrZV9tYXAnICAgICovCisgICAgLyogYmVjYXVzZSB0aGUgZnVuY3Rpb24gZ2V0cyBhbHNvIHVzZWQgYXQgdGhlIHZlcnkgYmVnaW5uaW5nICovCisgICAgLyogdG8gY29uc3RydWN0IGBzYml0X3N0cmlrZV9tYXAnIGl0c2VsZiAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKCBmYWNlLT5zYml0X3N0cmlrZV9tYXAgKQorICAgIHsKKyAgICAgIGlmICggc3RyaWtlX2luZGV4ID49IChGVF9VTG9uZylmYWNlLT5yb290Lm51bV9maXhlZF9zaXplcyApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworCisgICAgICAvKiBtYXAgdG8gcmVhbCBpbmRleCAqLworICAgICAgc3RyaWtlX2luZGV4ID0gZmFjZS0+c2JpdF9zdHJpa2VfbWFwW3N0cmlrZV9pbmRleF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBpZiAoIHN0cmlrZV9pbmRleCA+PSAoRlRfVUxvbmcpZmFjZS0+c2JpdF9udW1fc3RyaWtlcyApCisgICAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9Bcmd1bWVudCApOworICAgIH0KIAogICAgIHN3aXRjaCAoIChGVF9VSW50KWZhY2UtPnNiaXRfdGFibGVfdHlwZSApCiAgICAgewpAQCAtMjg0LDcgKzMxOSw4IEBACiAgICAgICAgICAgICBGVF9UUkFDRTIoKCAidHRfZmFjZV9sb2FkX3N0cmlrZV9tZXRyaWNzOiIKICAgICAgICAgICAgICAgICAgICAgICAgICIgc2FuaXRpemluZyBpbnZhbGlkIGFzY2VuZGVyIGFuZCBkZXNjZW5kZXJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiB2YWx1ZXMgZm9yIHN0cmlrZSAoJWQsICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgdmFsdWVzIGZvciBzdHJpa2UgJWQgKCVkcHBlbSwgJWRwcGVtKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZV9pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpY3MtPnhfcHBlbSwgbWV0cmljcy0+eV9wcGVtICkpOwogCiAgICAgICAgICAgICAvKiBzYW5pdGl6ZSBidWdneSBhc2NlbmRlciBhbmQgZGVzY2VuZGVyIHZhbHVlcyAqLwpAQCAtMzIzLDYgKzM1OSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWtlWzE4XSArIC8qIG1heF93aWR0aCAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlRfQ2hhcilzdHJpa2VbMjNdICAgLyogbWluX2FkdmFuY2VfU0IgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAqIDY0OworCisgICAgICAgIC8qIHNldCB0aGUgc2NhbGUgdmFsdWVzIChpbiAxNi4xNiB1bml0cykgc28gYWR2YW5jZXMgKi8KKyAgICAgICAgLyogZnJvbSB0aGUgaG10eCBhbmQgdm10eCB0YWJsZSBhcmUgc2NhbGVkIGNvcnJlY3RseSAqLworICAgICAgICBtZXRyaWNzLT54X3NjYWxlID0gRlRfTXVsRGl2KCBtZXRyaWNzLT54X3BwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0ICogMHgxMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aGVhZGVyLlVuaXRzX1Blcl9FTSApOworICAgICAgICBtZXRyaWNzLT55X3NjYWxlID0gRlRfTXVsRGl2KCBtZXRyaWNzLT55X3BwZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0ICogMHgxMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjZS0+aGVhZGVyLlVuaXRzX1Blcl9FTSApOworCiAgICAgICAgIHJldHVybiBGVF9FcnJfT2s7CiAgICAgICB9CiAKQEAgLTQxNCwxNyArNDYwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgICAgICAgICAgICBzdHJpa2VfaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBUVF9TQml0X01ldHJpY3NSZWMqICBtZXRyaWNzICkKICAgewotICAgIEZUX0Vycm9yICAgZXJyb3I7CisgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FUlIoIFRhYmxlX01pc3NpbmcgKTsKICAgICBGVF9TdHJlYW0gIHN0cmVhbSA9IGZhY2UtPnJvb3Quc3RyZWFtOwotICAgIEZUX1VMb25nICAgZWJkdF9zaXplOwogCiAKLSAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfQ0JEVCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfRUJEVCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCi0gICAgICBlcnJvciA9IGZhY2UtPmdvdG9fdGFibGUoIGZhY2UsIFRUQUdfYmRhdCwgc3RyZWFtLCAmZWJkdF9zaXplICk7Ci0gICAgaWYgKCBlcnJvciApCisgICAgc3RyaWtlX2luZGV4ID0gZmFjZS0+c2JpdF9zdHJpa2VfbWFwW3N0cmlrZV9pbmRleF07CisKKyAgICBpZiAoICFmYWNlLT5lYmR0X3NpemUgKQorICAgICAgZ290byBFeGl0OworICAgIGlmICggRlRfU1RSRUFNX1NFRUsoIGZhY2UtPmViZHRfc3RhcnQgKSApCiAgICAgICBnb3RvIEV4aXQ7CiAKICAgICBkZWNvZGVyLT5mYWNlICAgID0gZmFjZTsKQEAgLTQzNSw4ICs0NzksOCBAQAogICAgIGRlY29kZXItPm1ldHJpY3NfbG9hZGVkICAgPSAwOwogICAgIGRlY29kZXItPmJpdG1hcF9hbGxvY2F0ZWQgPSAwOwogCi0gICAgZGVjb2Rlci0+ZWJkdF9zdGFydCA9IEZUX1NUUkVBTV9QT1MoKTsKLSAgICBkZWNvZGVyLT5lYmR0X3NpemUgID0gZWJkdF9zaXplOworICAgIGRlY29kZXItPmViZHRfc3RhcnQgPSBmYWNlLT5lYmR0X3N0YXJ0OworICAgIGRlY29kZXItPmViZHRfc2l6ZSAgPSBmYWNlLT5lYmR0X3NpemU7CiAKICAgICBkZWNvZGVyLT5lYmxjX2Jhc2UgID0gZmFjZS0+c2JpdF90YWJsZTsKICAgICBkZWNvZGVyLT5lYmxjX2xpbWl0ID0gZmFjZS0+c2JpdF90YWJsZSArIGZhY2UtPnNiaXRfdGFibGVfc2l6ZTsKQEAgLTg1NCw3ICs4OTgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgKnB3cml0ZSsrIHw9ICggKCBydmFsID4+IG5iaXRzICkgJiAweEZGICkgJgotICAgICAgICAgICAgICAgICAgICAgKCB+KCAweEZGIDw8IHcgKSA8PCAoIDggLSB3IC0geF9wb3MgKSApOworICAgICAgICAgICAgICAgICAgICAgKCB+KCAweEZGVSA8PCB3ICkgPDwgKCA4IC0gdyAtIHhfcG9zICkgKTsKICAgICAgICAgcnZhbCAgICAgPDw9IDg7CiAKICAgICAgICAgdyA9IGxpbmVfYml0cyAtIHc7CkBAIC0xMzgzLDYgKzE0MjcsOCBAQAogICAgIEZUX1VOVVNFRCggbWFwICk7CiAKIAorICAgIHN0cmlrZV9pbmRleCA9IGZhY2UtPnNiaXRfc3RyaWtlX21hcFtzdHJpa2VfaW5kZXhdOworCiAgICAgbWV0cmljcy0+d2lkdGggID0gMDsKICAgICBtZXRyaWNzLT5oZWlnaHQgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvc2ZudC90dHNiaXQuaCBiL3NyYy9zZm50L3R0c2JpdC5oCmluZGV4IGQ0ZTEzYWUuLmQ4YTgxNjcgMTAwNjQ0Ci0tLSBhL3NyYy9zZm50L3R0c2JpdC5oCisrKyBiL3NyYy9zZm50L3R0c2JpdC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGFuZCBPcGVuVHlwZSBlbWJlZGRlZCBiaXRtYXAgc3VwcG9ydCAoc3BlY2lmaWNhdGlvbikuICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVFNCSVRfSF9fCi0jZGVmaW5lIF9fVFRTQklUX0hfXworI2lmbmRlZiBUVFNCSVRfSF8KKyNkZWZpbmUgVFRTQklUX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01Nyw3ICs1Nyw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRTQklUX0hfXyAqLworI2VuZGlmIC8qIFRUU0JJVF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmMgYi9zcmMvc21vb3RoL2Z0Z3JheXMuYwppbmRleCA5YTQzYzA3Li4zMGZkNGUyIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuYworKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBIG5ldyBgcGVyZmVjdCcgYW50aS1hbGlhc2luZyByZW5kZXJlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTgsNyArMTgsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoaXMgZmlsZSBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCB0aGUgcmVzdCBvZiB0aGUgRnJlZVR5cGUgZW5naW5lLCBieSAqLwotICAvKiBkZWZpbmluZyB0aGUgX1NUQU5EQUxPTkVfIG1hY3JvIHdoZW4gY29tcGlsaW5nIGl0LiAgWW91IGFsc28gbmVlZCB0byAgKi8KKyAgLyogZGVmaW5pbmcgdGhlIFNUQU5EQUxPTkVfIG1hY3JvIHdoZW4gY29tcGlsaW5nIGl0LiAgWW91IGFsc28gbmVlZCB0byAgICovCiAgIC8qIHB1dCB0aGUgZmlsZXMgYGZ0Z3JheXMuaCcgYW5kIGBmdGltYWdlLmgnIGludG8gdGhlIGN1cnJlbnQgICAgICAgICAgICAqLwogICAvKiBjb21waWxhdGlvbiBkaXJlY3RvcnkuICBUeXBpY2FsbHksIHlvdSBjb3VsZCBkbyBzb21ldGhpbmcgbGlrZSAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yNyw5ICsyNyw5IEBACiAgIC8qIC0gY29weSBgaW5jbHVkZS9mcmVldHlwZS9mdGltYWdlLmgnIGFuZCBgc3JjL3Ntb290aC9mdGdyYXlzLmgnIHRvIHRoZSAqLwogICAvKiAgIHNhbWUgZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIC0gY29tcGlsZSBgZnRncmF5cycgd2l0aCB0aGUgX1NUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluICAgICAgICAqLworICAvKiAtIGNvbXBpbGUgYGZ0Z3JheXMnIHdpdGggdGhlIFNUQU5EQUxPTkVfIG1hY3JvIGRlZmluZWQsIGFzIGluICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICBjYyAtYyAtRF9TVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgY2MgLWMgLURTVEFOREFMT05FXyBmdGdyYXlzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFRoZSByZW5kZXJlciBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBgZnRfZ3JheV9yYXN0ZXIucmFzdGVyX25ldyc7IGFuIGFudGktYWxpYXNlZCBiaXRtYXAgY2FuIGJlIGdlbmVyYXRlZCAgKi8KQEAgLTkxLDcgKzkxLDcgQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV9zbW9vdGgKIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogCiAgIC8qIFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSByZW5kZXIgcG9vbCB1c2VkIGJ5IHRoZSBzY2FuLWxpbmUgY29udmVydGVyICAqLwpAQCAtMTA2LDYgKzEwNiw3IEBACiAjZGVmaW5lIEZUX0JFR0lOX1NUTU5UICBkbyB7CiAjZGVmaW5lIEZUX0VORF9TVE1OVCAgICB9IHdoaWxlICggMCApCiAKKyNkZWZpbmUgRlRfTUlOKCBhLCBiICkgICggKGEpIDwgKGIpID8gKGEpIDogKGIpICkKICNkZWZpbmUgRlRfTUFYKCBhLCBiICkgICggKGEpID4gKGIpID8gKGEpIDogKGIpICkKICNkZWZpbmUgRlRfQUJTKCBhICkgICAgICggKGEpIDwgMCA/IC0oYSkgOiAoYSkgKQogCkBAIC0yNTYsNyArMjU3LDcgQEAKICAgICAgICAgIH07CiAKIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC0yNzQsNyArMjc1LDcgQEAKICNkZWZpbmUgRXJyUmFzdGVyX01lbW9yeV9PdmVyZmxvdyAgIFNtb290aF9FcnJfT3V0X09mX01lbW9yeQogCiAKLSNlbmRpZiAvKiAhX1NUQU5EQUxPTkVfICovCisjZW5kaWYgLyogIVNUQU5EQUxPTkVfICovCiAKIAogI2lmbmRlZiBGVF9NRU1fU0VUCkBAIC0zMDIsNyArMzAzLDcgQEAKIAogI2Vsc2UgLyogRlRfU1RBVElDX1JBU1RFUiAqLwogCi0jZGVmaW5lIFJBU19BUkcgICAvKiBlbXB0eSAqLworI2RlZmluZSBSQVNfQVJHICAgdm9pZAogI2RlZmluZSBSQVNfQVJHXyAgLyogZW1wdHkgKi8KICNkZWZpbmUgUkFTX1ZBUiAgIC8qIGVtcHR5ICovCiAjZGVmaW5lIFJBU19WQVJfICAvKiBlbXB0eSAqLwpAQCAtMzE4LDE5ICszMTksMTkgQEAKICN1bmRlZiBUUlVOQwogI3VuZGVmIFNDQUxFRAogCi0jZGVmaW5lIE9ORV9QSVhFTCAgICAgICAoIDFMIDw8IFBJWEVMX0JJVFMgKQorI2RlZmluZSBPTkVfUElYRUwgICAgICAgKCAxIDw8IFBJWEVMX0JJVFMgKQogI2RlZmluZSBUUlVOQyggeCApICAgICAgKCAoVENvb3JkKSggKHgpID4+IFBJWEVMX0JJVFMgKSApCi0jZGVmaW5lIFNVQlBJWEVMUyggeCApICAoIChUUG9zKSh4KSA8PCBQSVhFTF9CSVRTICkKKyNkZWZpbmUgU1VCUElYRUxTKCB4ICkgICggKFRQb3MpKHgpICogT05FX1BJWEVMICkKICNkZWZpbmUgRkxPT1IoIHggKSAgICAgICggKHgpICYgLU9ORV9QSVhFTCApCiAjZGVmaW5lIENFSUxJTkcoIHggKSAgICAoICggKHgpICsgT05FX1BJWEVMIC0gMSApICYgLU9ORV9QSVhFTCApCiAjZGVmaW5lIFJPVU5EKCB4ICkgICAgICAoICggKHgpICsgT05FX1BJWEVMIC8gMiApICYgLU9ORV9QSVhFTCApCiAKICNpZiBQSVhFTF9CSVRTID49IDYKLSNkZWZpbmUgVVBTQ0FMRSggeCApICAgICggKHgpIDw8ICggUElYRUxfQklUUyAtIDYgKSApCisjZGVmaW5lIFVQU0NBTEUoIHggKSAgICAoICh4KSAqICggT05FX1BJWEVMID4+IDYgKSApCiAjZGVmaW5lIERPV05TQ0FMRSggeCApICAoICh4KSA+PiAoIFBJWEVMX0JJVFMgLSA2ICkgKQogI2Vsc2UKICNkZWZpbmUgVVBTQ0FMRSggeCApICAgICggKHgpID4+ICggNiAtIFBJWEVMX0JJVFMgKSApCi0jZGVmaW5lIERPV05TQ0FMRSggeCApICAoICh4KSA8PCAoIDYgLSBQSVhFTF9CSVRTICkgKQorI2RlZmluZSBET1dOU0NBTEUoIHggKSAgKCAoeCkgKiAoIDY0ID4+IFBJWEVMX0JJVFMgKSApCiAjZW5kaWYKIAogCkBAIC0zNjksNyArMzcwLDcgQEAKIAogCiAgIC8qIFRoZXNlIG1hY3JvcyBzcGVlZCB1cCByZXBldGl0aXZlIGRpdmlzaW9ucyBieSByZXBsYWNpbmcgdGhlbSAqLwotICAvKiB3aXRoIG11bHRpcGxpY2F0aW9ucyBhbmQgcmlnaHQgc2hpZnRzLiAgICAgICAgICAgICAgICAgICAgICAgKi8gCisgIC8qIHdpdGggbXVsdGlwbGljYXRpb25zIGFuZCByaWdodCBzaGlmdHMuICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBGVF9VRElWUFJFUCggYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBsb25nICBiICMjIF9yID0gKGxvbmcpKCBGVF9VTE9OR19NQVggPj4gUElYRUxfQklUUyApIC8gKCBiICkKICNkZWZpbmUgRlRfVURJViggYSwgYiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTM4Niw0NCArMzg3LDM2IEBACiAgIC8qIG5lZWQgdG8gZGVmaW5lIHRoZW0gdG8gImZsb2F0IiBvciAiZG91YmxlIiB3aGVuIGV4cGVyaW1lbnRpbmcgd2l0aCAgICovCiAgIC8qIG5ldyBhbGdvcml0aG1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgdHlwZWRlZiBsb25nICBUQ29vcmQ7ICAgLyogaW50ZWdlciBzY2FubGluZS9waXhlbCBjb29yZGluYXRlICovCiAgIHR5cGVkZWYgbG9uZyAgVFBvczsgICAgIC8qIHN1Yi1waXhlbCBjb29yZGluYXRlICAgICAgICAgICAgICAqLwotCi0gIC8qIGRldGVybWluZSB0aGUgdHlwZSB1c2VkIHRvIHN0b3JlIGNlbGwgYXJlYXMuICBUaGlzIG5vcm1hbGx5IHRha2VzIGF0ICovCi0gIC8qIGxlYXN0IFBJWEVMX0JJVFMqMiArIDEgYml0cy4gIE9uIDE2LWJpdCBzeXN0ZW1zLCB3ZSBuZWVkIHRvIHVzZSAgICAgICovCi0gIC8qIGBsb25nJyBpbnN0ZWFkIG9mIGBpbnQnLCBvdGhlcndpc2UgYmFkIHRoaW5ncyBoYXBwZW4gICAgICAgICAgICAgICAgICovCi0KLSNpZiBQSVhFTF9CSVRTIDw9IDcKLQotICB0eXBlZGVmIGludCAgVEFyZWE7Ci0KLSNlbHNlIC8qIFBJWEVMX0JJVFMgPj0gOCAqLwotCi0gIC8qIGFwcHJveGltYXRlbHkgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIGludGVnZXJzIHVzaW5nIGFuIEFOU0ktQyBoZWFkZXIgKi8KLSNpZiBGVF9VSU5UX01BWCA9PSAweEZGRkZVCi0gIHR5cGVkZWYgbG9uZyAgVEFyZWE7Ci0jZWxzZQotICB0eXBlZGVmIGludCAgIFRBcmVhOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBQSVhFTF9CSVRTID49IDggKi8KLQotCi0gIC8qIG1heGltdW0gbnVtYmVyIG9mIGdyYXkgc3BhbnMgaW4gYSBjYWxsIHRvIHRoZSBzcGFuIGNhbGxiYWNrICovCi0jZGVmaW5lIEZUX01BWF9HUkFZX1NQQU5TICAzMgorICB0eXBlZGVmIGludCAgIFRDb29yZDsgICAvKiBpbnRlZ2VyIHNjYW5saW5lL3BpeGVsIGNvb3JkaW5hdGUgKi8KKyAgdHlwZWRlZiBpbnQgICBUQXJlYTsgICAgLyogY2VsbCBhcmVhcywgY29vcmRpbmF0ZSBwcm9kdWN0cyAgICovCiAKIAogICB0eXBlZGVmIHN0cnVjdCBUQ2VsbF8qICBQQ2VsbDsKIAogICB0eXBlZGVmIHN0cnVjdCAgVENlbGxfCiAgIHsKLSAgICBUUG9zICAgIHg7ICAgICAvKiBzYW1lIHdpdGggZ3JheV9UV29ya2VyLmV4ICAgICovCisgICAgVENvb3JkICB4OyAgICAgLyogc2FtZSB3aXRoIGdyYXlfVFdvcmtlci5leCAgICAqLwogICAgIFRDb29yZCAgY292ZXI7IC8qIHNhbWUgd2l0aCBncmF5X1RXb3JrZXIuY292ZXIgKi8KICAgICBUQXJlYSAgIGFyZWE7CiAgICAgUENlbGwgICBuZXh0OwogCiAgIH0gVENlbGw7CiAKKyAgdHlwZWRlZiBzdHJ1Y3QgVFBpeG1hcF8KKyAgeworICAgIHVuc2lnbmVkIGNoYXIqICBvcmlnaW47ICAvKiBwaXhtYXAgb3JpZ2luIGF0IHRoZSBib3R0b20tbGVmdCAqLworICAgIGludCAgICAgICAgICAgICBwaXRjaDsgICAvKiBwaXRjaCB0byBnbyBkb3duIG9uZSByb3cgKi8KKworICB9IFRQaXhtYXA7CisKKyAgLyogbWF4aW11bSBudW1iZXIgb2YgZ3JheSBjZWxscyBpbiB0aGUgYnVmZmVyICovCisjaWYgRlRfUkVOREVSX1BPT0xfU0laRSA+IDIwNDgKKyNkZWZpbmUgRlRfTUFYX0dSQVlfUE9PTCAgKCBGVF9SRU5ERVJfUE9PTF9TSVpFIC8gc2l6ZW9mICggVENlbGwgKSApCisjZWxzZQorI2RlZmluZSBGVF9NQVhfR1JBWV9QT09MICAoIDIwNDggLyBzaXplb2YgKCBUQ2VsbCApICkKKyNlbmRpZgorCiAKICNpZiBkZWZpbmVkKCBfTVNDX1ZFUiApICAgICAgLyogVmlzdWFsIEMrKyAoYW5kIEludGVsIEMrKykgKi8KICAgLyogV2UgZGlzYWJsZSB0aGUgd2FybmluZyBgc3RydWN0dXJlIHdhcyBwYWRkZWQgZHVlIHRvICAgKi8KQEAgLTQzOCw5ICs0MzEsOCBAQAogICAgIGZ0X2ptcF9idWYgIGp1bXBfYnVmZmVyOwogCiAgICAgVENvb3JkICBleCwgZXk7Ci0gICAgVFBvcyAgICBtaW5fZXgsIG1heF9leDsKLSAgICBUUG9zICAgIG1pbl9leSwgbWF4X2V5OwotICAgIFRQb3MgICAgY291bnRfZXgsIGNvdW50X2V5OworICAgIFRDb29yZCAgbWluX2V4LCBtYXhfZXg7CisgICAgVENvb3JkICBtaW5fZXksIG1heF9leTsKIAogICAgIFRBcmVhICAgYXJlYTsKICAgICBUQ29vcmQgIGNvdmVyOwpAQCAtNDUyLDI4ICs0NDQsMTMgQEAKIAogICAgIFRQb3MgICAgeCwgIHk7CiAKLSAgICBGVF9WZWN0b3IgICBiZXpfc3RhY2tbMzIgKiAzICsgMV07Ci0gICAgaW50ICAgICAgICAgbGV2X3N0YWNrWzMyXTsKLQogICAgIEZUX091dGxpbmUgIG91dGxpbmU7Ci0gICAgRlRfQml0bWFwICAgdGFyZ2V0OwotICAgIEZUX0JCb3ggICAgIGNsaXBfYm94OwotCi0gICAgRlRfU3BhbiAgICAgZ3JheV9zcGFuc1tGVF9NQVhfR1JBWV9TUEFOU107Ci0gICAgaW50ICAgICAgICAgbnVtX2dyYXlfc3BhbnM7CisgICAgVFBpeG1hcCAgICAgdGFyZ2V0OwogCiAgICAgRlRfUmFzdGVyX1NwYW5fRnVuYyAgcmVuZGVyX3NwYW47CiAgICAgdm9pZCogICAgICAgICAgICAgICAgcmVuZGVyX3NwYW5fZGF0YTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICBzcGFuX3k7Ci0KLSAgICBpbnQgIGJhbmRfc2l6ZTsKLSAgICBpbnQgIGJhbmRfc2hvb3Q7Ci0KLSAgICB2b2lkKiAgICAgICBidWZmZXI7Ci0gICAgbG9uZyAgICAgICAgYnVmZmVyX3NpemU7CiAKICAgICBQQ2VsbCogICAgIHljZWxsczsKLSAgICBUUG9zICAgICAgIHljb3VudDsKIAogICB9IGdyYXlfVFdvcmtlciwgKmdyYXlfUFdvcmtlcjsKIApAQCAtNDk2LDcwICs0NzMsMzEgQEAKICAgfSBncmF5X1RSYXN0ZXIsICpncmF5X1BSYXN0ZXI7CiAKIAorI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCiAKLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBJbml0aWFsaXplIHRoZSBjZWxscyB0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHRvIGJlIGNhbGxlZCB3aGlsZSBpbiB0aGUgZGVidWdnZXIgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIHRoaXMgZnVuY3Rpb24gY2F1c2VzIGEgY29tcGlsZXIgd2FybmluZyBzaW5jZSBpdCBpcyB1bnVzZWQgb3RoZXJ3aXNlICovCiAgIHN0YXRpYyB2b2lkCi0gIGdyYXlfaW5pdF9jZWxscyggUkFTX0FSR18gdm9pZCogIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICAgYnl0ZV9zaXplICkKKyAgZ3JheV9kdW1wX2NlbGxzKCBSQVNfQVJHICkKICAgewotICAgIHJhcy5idWZmZXIgICAgICA9IGJ1ZmZlcjsKLSAgICByYXMuYnVmZmVyX3NpemUgPSBieXRlX3NpemU7CisgICAgaW50ICB5OwogCi0gICAgcmFzLnljZWxscyAgICAgID0gKFBDZWxsKikgYnVmZmVyOwotICAgIHJhcy5jZWxscyAgICAgICA9IE5VTEw7Ci0gICAgcmFzLm1heF9jZWxscyAgID0gMDsKLSAgICByYXMubnVtX2NlbGxzICAgPSAwOwotICAgIHJhcy5hcmVhICAgICAgICA9IDA7Ci0gICAgcmFzLmNvdmVyICAgICAgID0gMDsKLSAgICByYXMuaW52YWxpZCAgICAgPSAxOworCisgICAgZm9yICggeSA9IHJhcy5taW5fZXk7IHkgPCByYXMubWF4X2V5OyB5KysgKQorICAgIHsKKyAgICAgIFBDZWxsICBjZWxsID0gcmFzLnljZWxsc1t5IC0gcmFzLm1pbl9leV07CisKKworICAgICAgcHJpbnRmKCAiJTNkOiIsIHkgKTsKKworICAgICAgZm9yICggOyBjZWxsICE9IE5VTEw7IGNlbGwgPSBjZWxsLT5uZXh0ICkKKyAgICAgICAgcHJpbnRmKCAiICglM2QsIGM6JTRkLCBhOiU2ZCkiLAorICAgICAgICAgICAgICAgIGNlbGwtPngsIGNlbGwtPmNvdmVyLCBjZWxsLT5hcmVhICk7CisgICAgICBwcmludGYoICJcbiIgKTsKKyAgICB9CiAgIH0KIAotCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogQ29tcHV0ZSB0aGUgb3V0bGluZSBib3VuZGluZyBib3guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBzdGF0aWMgdm9pZAotICBncmF5X2NvbXB1dGVfY2JveCggUkFTX0FSRyApCi0gIHsKLSAgICBGVF9PdXRsaW5lKiAgb3V0bGluZSA9ICZyYXMub3V0bGluZTsKLSAgICBGVF9WZWN0b3IqICAgdmVjICAgICA9IG91dGxpbmUtPnBvaW50czsKLSAgICBGVF9WZWN0b3IqICAgbGltaXQgICA9IHZlYyArIG91dGxpbmUtPm5fcG9pbnRzOwotCi0KLSAgICBpZiAoIG91dGxpbmUtPm5fcG9pbnRzIDw9IDAgKQotICAgIHsKLSAgICAgIHJhcy5taW5fZXggPSByYXMubWF4X2V4ID0gMDsKLSAgICAgIHJhcy5taW5fZXkgPSByYXMubWF4X2V5ID0gMDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByYXMubWluX2V4ID0gcmFzLm1heF9leCA9IHZlYy0+eDsKLSAgICByYXMubWluX2V5ID0gcmFzLm1heF9leSA9IHZlYy0+eTsKLQotICAgIHZlYysrOwotCi0gICAgZm9yICggOyB2ZWMgPCBsaW1pdDsgdmVjKysgKQotICAgIHsKLSAgICAgIFRQb3MgIHggPSB2ZWMtPng7Ci0gICAgICBUUG9zICB5ID0gdmVjLT55OwotCi0KLSAgICAgIGlmICggeCA8IHJhcy5taW5fZXggKSByYXMubWluX2V4ID0geDsKLSAgICAgIGlmICggeCA+IHJhcy5tYXhfZXggKSByYXMubWF4X2V4ID0geDsKLSAgICAgIGlmICggeSA8IHJhcy5taW5fZXkgKSByYXMubWluX2V5ID0geTsKLSAgICAgIGlmICggeSA+IHJhcy5tYXhfZXkgKSByYXMubWF4X2V5ID0geTsKLSAgICB9Ci0KLSAgICAvKiB0cnVuY2F0ZSB0aGUgYm91bmRpbmcgYm94IHRvIGludGVnZXIgcGl4ZWxzICovCi0gICAgcmFzLm1pbl9leCA9IHJhcy5taW5fZXggPj4gNjsKLSAgICByYXMubWluX2V5ID0gcmFzLm1pbl9leSA+PiA2OwotICAgIHJhcy5tYXhfZXggPSAoIHJhcy5tYXhfZXggKyA2MyApID4+IDY7Ci0gICAgcmFzLm1heF9leSA9ICggcmFzLm1heF9leSArIDYzICkgPj4gNjsKLSAgfQorI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTU3MCwxMyArNTA4LDEwIEBACiAgIGdyYXlfZmluZF9jZWxsKCBSQVNfQVJHICkKICAgewogICAgIFBDZWxsICAqcGNlbGwsIGNlbGw7Ci0gICAgVFBvcyAgICB4ID0gcmFzLmV4OworICAgIFRDb29yZCAgeCA9IHJhcy5leDsKIAogCi0gICAgaWYgKCB4ID4gcmFzLmNvdW50X2V4ICkKLSAgICAgIHggPSByYXMuY291bnRfZXg7Ci0KLSAgICBwY2VsbCA9ICZyYXMueWNlbGxzW3Jhcy5leV07CisgICAgcGNlbGwgPSAmcmFzLnljZWxsc1tyYXMuZXkgLSByYXMubWluX2V5XTsKICAgICBmb3IgKDs7KQogICAgIHsKICAgICAgIGNlbGwgPSAqcGNlbGw7CkBAIC02MzksNTcgKzU3NCwyNSBAQAogCiAgICAgLyogQWxsIGNlbGxzIHRoYXQgYXJlIG9uIHRoZSBsZWZ0IG9mIHRoZSBjbGlwcGluZyByZWdpb24gZ28gdG8gdGhlICovCiAgICAgLyogbWluX2V4IC0gMSBob3Jpem9udGFsIHBvc2l0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgZXkgLT0gcmFzLm1pbl9leTsKLQotICAgIGlmICggZXggPiByYXMubWF4X2V4ICkKLSAgICAgIGV4ID0gcmFzLm1heF9leDsKLQotICAgIGV4IC09IHJhcy5taW5fZXg7Ci0gICAgaWYgKCBleCA8IDAgKQotICAgICAgZXggPSAtMTsKLQotICAgIC8qIGFyZSB3ZSBtb3ZpbmcgdG8gYSBkaWZmZXJlbnQgY2VsbCA/ICovCi0gICAgaWYgKCBleCAhPSByYXMuZXggfHwgZXkgIT0gcmFzLmV5ICkKLSAgICB7Ci0gICAgICAvKiByZWNvcmQgdGhlIGN1cnJlbnQgb25lIGlmIGl0IGlzIHZhbGlkICovCi0gICAgICBpZiAoICFyYXMuaW52YWxpZCApCi0gICAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKLQotICAgICAgcmFzLmFyZWEgID0gMDsKLSAgICAgIHJhcy5jb3ZlciA9IDA7Ci0gICAgICByYXMuZXggICAgPSBleDsKLSAgICAgIHJhcy5leSAgICA9IGV5OwotICAgIH0KLQotICAgIHJhcy5pbnZhbGlkID0gKCAodW5zaWduZWQgaW50KWV5ID49ICh1bnNpZ25lZCBpbnQpcmFzLmNvdW50X2V5IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXggPj0gcmFzLmNvdW50X2V4ICAgICAgICAgICAgICAgKTsKLSAgfQotCi0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBTdGFydCBhIG5ldyBjb250b3VyIGF0IGEgZ2l2ZW4gY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIHN0YXRpYyB2b2lkCi0gIGdyYXlfc3RhcnRfY2VsbCggUkFTX0FSR18gVENvb3JkICBleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQ29vcmQgIGV5ICkKLSAgewotICAgIGlmICggZXggPiByYXMubWF4X2V4ICkKLSAgICAgIGV4ID0gKFRDb29yZCkoIHJhcy5tYXhfZXggKTsKIAogICAgIGlmICggZXggPCByYXMubWluX2V4ICkKLSAgICAgIGV4ID0gKFRDb29yZCkoIHJhcy5taW5fZXggLSAxICk7CisgICAgICBleCA9IHJhcy5taW5fZXggLSAxOwogCi0gICAgcmFzLmFyZWEgICAgPSAwOwotICAgIHJhcy5jb3ZlciAgID0gMDsKLSAgICByYXMuZXggICAgICA9IGV4IC0gcmFzLm1pbl9leDsKLSAgICByYXMuZXkgICAgICA9IGV5IC0gcmFzLm1pbl9leTsKLSAgICByYXMuaW52YWxpZCA9IDA7CisgICAgLyogcmVjb3JkIHRoZSBjdXJyZW50IG9uZSBpZiBpdCBpcyB2YWxpZCAqLworICAgIGlmICggIXJhcy5pbnZhbGlkICkKKyAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKIAotICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIGV4LCBleSApOworICAgIHJhcy5hcmVhICA9IDA7CisgICAgcmFzLmNvdmVyID0gMDsKKyAgICByYXMuZXggICAgPSBleDsKKyAgICByYXMuZXkgICAgPSBleTsKKworICAgIHJhcy5pbnZhbGlkID0gKCBleSA+PSByYXMubWF4X2V5IHx8IGV5IDwgcmFzLm1pbl9leSB8fAorICAgICAgICAgICAgICAgICAgICBleCA+PSByYXMubWF4X2V4ICk7CiAgIH0KIAotI2lmIDAKKworI2lmbmRlZiBGVF9MT05HNjQKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MDIsMTcgKzYwNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgICB4MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRDb29yZCAgeTIgKQogICB7Ci0gICAgVENvb3JkICBleDEsIGV4MiwgZngxLCBmeDIsIGRlbHRhLCBtb2Q7Ci0gICAgbG9uZyAgICBwLCBmaXJzdCwgZHg7CisgICAgVENvb3JkICBleDEsIGV4MiwgZngxLCBmeDIsIGZpcnN0LCBkZWx0YSwgbW9kOworICAgIFRQb3MgICAgcCwgZHg7CiAgICAgaW50ICAgICBpbmNyOwogCiAKLSAgICBkeCA9IHgyIC0geDE7Ci0KICAgICBleDEgPSBUUlVOQyggeDEgKTsKICAgICBleDIgPSBUUlVOQyggeDIgKTsKLSAgICBmeDEgPSAoVENvb3JkKSggeDEgLSBTVUJQSVhFTFMoIGV4MSApICk7Ci0gICAgZngyID0gKFRDb29yZCkoIHgyIC0gU1VCUElYRUxTKCBleDIgKSApOwogCiAgICAgLyogdHJpdmlhbCBjYXNlLiAgSGFwcGVucyBvZnRlbiAqLwogICAgIGlmICggeTEgPT0geTIgKQpAQCAtNzIxLDExICs2MjAsMTQgQEAKICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBmeDEgICA9IChUQ29vcmQpKCB4MSAtIFNVQlBJWEVMUyggZXgxICkgKTsKKyAgICBmeDIgICA9IChUQ29vcmQpKCB4MiAtIFNVQlBJWEVMUyggZXgyICkgKTsKKyAgICBkZWx0YSA9IHkyIC0geTE7CisKICAgICAvKiBldmVyeXRoaW5nIGlzIGxvY2F0ZWQgaW4gYSBzaW5nbGUgY2VsbC4gIFRoYXQgaXMgZWFzeSEgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoIGV4MSA9PSBleDIgKQogICAgIHsKLSAgICAgIGRlbHRhICAgICAgPSB5MiAtIHkxOwogICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSkoKCBmeDEgKyBmeDIgKSAqIGRlbHRhKTsKICAgICAgIHJhcy5jb3ZlciArPSBkZWx0YTsKICAgICAgIHJldHVybjsKQEAgLTczNCwxMyArNjM2LDE3IEBACiAgICAgLyogb2ssIHdlJ2xsIGhhdmUgdG8gcmVuZGVyIGEgcnVuIG9mIGFkamFjZW50IGNlbGxzIG9uIHRoZSBzYW1lICovCiAgICAgLyogc2NhbmxpbmUuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgcCAgICAgPSAoIE9ORV9QSVhFTCAtIGZ4MSApICogKCB5MiAtIHkxICk7Ci0gICAgZmlyc3QgPSBPTkVfUElYRUw7Ci0gICAgaW5jciAgPSAxOworICAgIGR4ID0geDIgLSB4MTsKIAotICAgIGlmICggZHggPCAwICkKKyAgICBpZiAoIGR4ID4gMCApCiAgICAgewotICAgICAgcCAgICAgPSBmeDEgKiAoIHkyIC0geTEgKTsKKyAgICAgIHAgICAgID0gKCBPTkVfUElYRUwgLSBmeDEgKSAqIGRlbHRhOworICAgICAgZmlyc3QgPSBPTkVfUElYRUw7CisgICAgICBpbmNyICA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBwICAgICA9IGZ4MSAqIGRlbHRhOwogICAgICAgZmlyc3QgPSAwOwogICAgICAgaW5jciAgPSAtMTsKICAgICAgIGR4ICAgID0gLWR4OwpAQCAtNzk3LDI1ICs3MDMsMjIgQEAKICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX0FSR18gVFBvcyAgdG9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgdG9feSApCiAgIHsKLSAgICBUQ29vcmQgIGV5MSwgZXkyLCBmeTEsIGZ5MiwgbW9kOwotICAgIFRQb3MgICAgZHgsIGR5LCB4LCB4MjsKLSAgICBsb25nICAgIHAsIGZpcnN0OwotICAgIGludCAgICAgZGVsdGEsIHJlbSwgbGlmdCwgaW5jcjsKKyAgICBUQ29vcmQgIGV5MSwgZXkyLCBmeTEsIGZ5MiwgZmlyc3QsIGRlbHRhLCBtb2Q7CisgICAgVFBvcyAgICBwLCBkeCwgZHksIHgsIHgyOworICAgIGludCAgICAgaW5jcjsKIAogCiAgICAgZXkxID0gVFJVTkMoIHJhcy55ICk7CiAgICAgZXkyID0gVFJVTkMoIHRvX3kgKTsgICAgIC8qIGlmIChleTIgPj0gcmFzLm1heF9leSkgZXkyID0gcmFzLm1heF9leS0xOyAqLwotICAgIGZ5MSA9IChUQ29vcmQpKCByYXMueSAtIFNVQlBJWEVMUyggZXkxICkgKTsKLSAgICBmeTIgPSAoVENvb3JkKSggdG9feSAtIFNVQlBJWEVMUyggZXkyICkgKTsKLQotICAgIGR4ID0gdG9feCAtIHJhcy54OwotICAgIGR5ID0gdG9feSAtIHJhcy55OwogCiAgICAgLyogcGVyZm9ybSB2ZXJ0aWNhbCBjbGlwcGluZyAqLwogICAgIGlmICggKCBleTEgPj0gcmFzLm1heF9leSAmJiBleTIgPj0gcmFzLm1heF9leSApIHx8CiAgICAgICAgICAoIGV5MSA8ICByYXMubWluX2V5ICYmIGV5MiA8ICByYXMubWluX2V5ICkgKQogICAgICAgZ290byBFbmQ7CiAKKyAgICBmeTEgPSAoVENvb3JkKSggcmFzLnkgLSBTVUJQSVhFTFMoIGV5MSApICk7CisgICAgZnkyID0gKFRDb29yZCkoIHRvX3kgLSBTVUJQSVhFTFMoIGV5MiApICk7CisKICAgICAvKiBldmVyeXRoaW5nIGlzIG9uIGEgc2luZ2xlIHNjYW5saW5lICovCiAgICAgaWYgKCBleTEgPT0gZXkyICkKICAgICB7CkBAIC04MjMsOSArNzI2LDEwIEBACiAgICAgICBnb3RvIEVuZDsKICAgICB9CiAKLSAgICAvKiB2ZXJ0aWNhbCBsaW5lIC0gYXZvaWQgY2FsbGluZyBncmF5X3JlbmRlcl9zY2FubGluZSAqLwotICAgIGluY3IgPSAxOworICAgIGR4ID0gdG9feCAtIHJhcy54OworICAgIGR5ID0gdG9feSAtIHJhcy55OwogCisgICAgLyogdmVydGljYWwgbGluZSAtIGF2b2lkIGNhbGxpbmcgZ3JheV9yZW5kZXJfc2NhbmxpbmUgKi8KICAgICBpZiAoIGR4ID09IDAgKQogICAgIHsKICAgICAgIFRDb29yZCAgZXggICAgID0gVFJVTkMoIHJhcy54ICk7CkBAIC04MzMsMjEgKzczNywyNSBAQAogICAgICAgVEFyZWEgICBhcmVhOwogCiAKLSAgICAgIGZpcnN0ID0gT05FX1BJWEVMOwotICAgICAgaWYgKCBkeSA8IDAgKQorICAgICAgaWYgKCBkeSA+IDApCisgICAgICB7CisgICAgICAgIGZpcnN0ID0gT05FX1BJWEVMOworICAgICAgICBpbmNyICA9IDE7CisgICAgICB9CisgICAgICBlbHNlCiAgICAgICB7CiAgICAgICAgIGZpcnN0ID0gMDsKICAgICAgICAgaW5jciAgPSAtMTsKICAgICAgIH0KIAotICAgICAgZGVsdGEgICAgICA9IChpbnQpKCBmaXJzdCAtIGZ5MSApOworICAgICAgZGVsdGEgICAgICA9IGZpcnN0IC0gZnkxOwogICAgICAgcmFzLmFyZWEgICs9IChUQXJlYSl0d29fZnggKiBkZWx0YTsKICAgICAgIHJhcy5jb3ZlciArPSBkZWx0YTsKICAgICAgIGV5MSAgICAgICArPSBpbmNyOwogCiAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleCwgZXkxICk7CiAKLSAgICAgIGRlbHRhID0gKGludCkoIGZpcnN0ICsgZmlyc3QgLSBPTkVfUElYRUwgKTsKKyAgICAgIGRlbHRhID0gZmlyc3QgKyBmaXJzdCAtIE9ORV9QSVhFTDsKICAgICAgIGFyZWEgID0gKFRBcmVhKXR3b19meCAqIGRlbHRhOwogICAgICAgd2hpbGUgKCBleTEgIT0gZXkyICkKICAgICAgIHsKQEAgLTg1OCw3ICs3NjYsNyBAQAogICAgICAgICBncmF5X3NldF9jZWxsKCBSQVNfVkFSXyBleCwgZXkxICk7CiAgICAgICB9CiAKLSAgICAgIGRlbHRhICAgICAgPSAoaW50KSggZnkyIC0gT05FX1BJWEVMICsgZmlyc3QgKTsKKyAgICAgIGRlbHRhICAgICAgPSBmeTIgLSBPTkVfUElYRUwgKyBmaXJzdDsKICAgICAgIHJhcy5hcmVhICArPSAoVEFyZWEpdHdvX2Z4ICogZGVsdGE7CiAgICAgICByYXMuY292ZXIgKz0gZGVsdGE7CiAKQEAgLTg2NiwxMSArNzc0LDEzIEBACiAgICAgfQogCiAgICAgLyogb2ssIHdlIGhhdmUgdG8gcmVuZGVyIHNldmVyYWwgc2NhbmxpbmVzICovCi0gICAgcCAgICAgPSAoIE9ORV9QSVhFTCAtIGZ5MSApICogZHg7Ci0gICAgZmlyc3QgPSBPTkVfUElYRUw7Ci0gICAgaW5jciAgPSAxOwotCi0gICAgaWYgKCBkeSA8IDAgKQorICAgIGlmICggZHkgPiAwKQorICAgIHsKKyAgICAgIHAgICAgID0gKCBPTkVfUElYRUwgLSBmeTEgKSAqIGR4OworICAgICAgZmlyc3QgPSBPTkVfUElYRUw7CisgICAgICBpbmNyICA9IDE7CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICBwICAgICA9IGZ5MSAqIGR4OwogICAgICAgZmlyc3QgPSAwOwpAQCAtODc4LDE5ICs3ODgsMjIgQEAKICAgICAgIGR5ICAgID0gLWR5OwogICAgIH0KIAotICAgIEZUX0RJVl9NT0QoIGludCwgcCwgZHksIGRlbHRhLCBtb2QgKTsKKyAgICBGVF9ESVZfTU9EKCBUQ29vcmQsIHAsIGR5LCBkZWx0YSwgbW9kICk7CiAKICAgICB4ID0gcmFzLnggKyBkZWx0YTsKLSAgICBncmF5X3JlbmRlcl9zY2FubGluZSggUkFTX1ZBUl8gZXkxLCByYXMueCwgZnkxLCB4LCAoVENvb3JkKWZpcnN0ICk7CisgICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgcmFzLngsIGZ5MSwgeCwgZmlyc3QgKTsKIAogICAgIGV5MSArPSBpbmNyOwogICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIFRSVU5DKCB4ICksIGV5MSApOwogCiAgICAgaWYgKCBleTEgIT0gZXkyICkKICAgICB7Ci0gICAgICBwICAgICA9IE9ORV9QSVhFTCAqIGR4OwotICAgICAgRlRfRElWX01PRCggaW50LCBwLCBkeSwgbGlmdCwgcmVtICk7Ci0gICAgICBtb2QgLT0gKGludClkeTsKKyAgICAgIFRDb29yZCAgbGlmdCwgcmVtOworCisKKyAgICAgIHAgICAgPSBPTkVfUElYRUwgKiBkeDsKKyAgICAgIEZUX0RJVl9NT0QoIFRDb29yZCwgcCwgZHksIGxpZnQsIHJlbSApOworICAgICAgbW9kIC09IChUQ29vcmQpZHk7CiAKICAgICAgIGRvCiAgICAgICB7CkBAIC04OTgsMTQgKzgxMSwxNCBAQAogICAgICAgICBtb2QgICs9IHJlbTsKICAgICAgICAgaWYgKCBtb2QgPj0gMCApCiAgICAgICAgIHsKLSAgICAgICAgICBtb2QgLT0gKGludClkeTsKKyAgICAgICAgICBtb2QgLT0gKFRDb29yZClkeTsKICAgICAgICAgICBkZWx0YSsrOwogICAgICAgICB9CiAKICAgICAgICAgeDIgPSB4ICsgZGVsdGE7Ci0gICAgICAgIGdyYXlfcmVuZGVyX3NjYW5saW5lKCBSQVNfVkFSXyBleTEsIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVENvb3JkKSggT05FX1BJWEVMIC0gZmlyc3QgKSwgeDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVENvb3JkKWZpcnN0ICk7CisgICAgICAgIGdyYXlfcmVuZGVyX3NjYW5saW5lKCBSQVNfVkFSXyBleTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBPTkVfUElYRUwgLSBmaXJzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCBmaXJzdCApOwogICAgICAgICB4ID0geDI7CiAKICAgICAgICAgZXkxICs9IGluY3I7CkBAIC05MTMsOSArODI2LDkgQEAKICAgICAgIH0gd2hpbGUgKCBleTEgIT0gZXkyICk7CiAgICAgfQogCi0gICAgZ3JheV9yZW5kZXJfc2NhbmxpbmUoIFJBU19WQVJfIGV5MSwgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRDb29yZCkoIE9ORV9QSVhFTCAtIGZpcnN0ICksIHRvX3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ5MiApOworICAgIGdyYXlfcmVuZGVyX3NjYW5saW5lKCBSQVNfVkFSXyBleTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE9ORV9QSVhFTCAtIGZpcnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b194LCBmeTIgKTsKIAogICBFbmQ6CiAgICAgcmFzLnggICAgICAgPSB0b194OwpAQCAtOTM2LDggKzg0OSw2IEBACiAgICAgVENvb3JkICBleDEsIGV4MiwgZXkxLCBleTI7CiAKIAotICAgIGV4MSA9IFRSVU5DKCByYXMueCApOwotICAgIGV4MiA9IFRSVU5DKCB0b194ICk7CiAgICAgZXkxID0gVFJVTkMoIHJhcy55ICk7CiAgICAgZXkyID0gVFJVTkMoIHRvX3kgKTsKIApAQCAtOTQ2LDEyICs4NTcsMTUgQEAKICAgICAgICAgICggZXkxIDwgIHJhcy5taW5fZXkgJiYgZXkyIDwgIHJhcy5taW5fZXkgKSApCiAgICAgICBnb3RvIEVuZDsKIAotICAgIGR4ID0gdG9feCAtIHJhcy54OwotICAgIGR5ID0gdG9feSAtIHJhcy55OworICAgIGV4MSA9IFRSVU5DKCByYXMueCApOworICAgIGV4MiA9IFRSVU5DKCB0b194ICk7CiAKICAgICBmeDEgPSByYXMueCAtIFNVQlBJWEVMUyggZXgxICk7CiAgICAgZnkxID0gcmFzLnkgLSBTVUJQSVhFTFMoIGV5MSApOwogCisgICAgZHggPSB0b194IC0gcmFzLng7CisgICAgZHkgPSB0b195IC0gcmFzLnk7CisKICAgICBpZiAoIGV4MSA9PSBleDIgJiYgZXkxID09IGV5MiApICAgICAgIC8qIGluc2lkZSBvbmUgY2VsbCAqLwogICAgICAgOwogICAgIGVsc2UgaWYgKCBkeSA9PSAwICkgLyogZXgxICE9IGV4MiAqLyAgLyogYW55IGhvcml6b250YWwgbGluZSAqLwpAQCAtOTg0LDcgKzg5OCw3IEBACiAgICAgfQogICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYW55IG90aGVyIGxpbmUgKi8KICAgICB7Ci0gICAgICBUQXJlYSAgcHJvZCA9IGR4ICogZnkxIC0gZHkgKiBmeDE7CisgICAgICBUUG9zICBwcm9kID0gZHggKiBmeTEgLSBkeSAqIGZ4MTsKICAgICAgIEZUX1VESVZQUkVQKCBkeCApOwogICAgICAgRlRfVURJVlBSRVAoIGR5ICk7CiAKQEAgLTEwODQsNzMgKzk5OCw2NCBAQAogICBncmF5X3JlbmRlcl9jb25pYyggUkFTX0FSR18gY29uc3QgRlRfVmVjdG9yKiAgY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1ZlY3RvciogIHRvICkKICAgeworICAgIEZUX1ZlY3RvciAgIGJlel9zdGFja1sxNiAqIDIgKyAxXTsgIC8qIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBiaXNlY3Rpb25zICovCisgICAgRlRfVmVjdG9yKiAgYXJjID0gYmV6X3N0YWNrOwogICAgIFRQb3MgICAgICAgIGR4LCBkeTsKLSAgICBUUG9zICAgICAgICBtaW4sIG1heCwgeTsKLSAgICBpbnQgICAgICAgICB0b3AsIGxldmVsOwotICAgIGludCogICAgICAgIGxldmVsczsKLSAgICBGVF9WZWN0b3IqICBhcmM7CisgICAgaW50ICAgICAgICAgZHJhdywgc3BsaXQ7CiAKIAotICAgIGxldmVscyA9IHJhcy5sZXZfc3RhY2s7Ci0KLSAgICBhcmMgICAgICA9IHJhcy5iZXpfc3RhY2s7CiAgICAgYXJjWzBdLnggPSBVUFNDQUxFKCB0by0+eCApOwogICAgIGFyY1swXS55ID0gVVBTQ0FMRSggdG8tPnkgKTsKICAgICBhcmNbMV0ueCA9IFVQU0NBTEUoIGNvbnRyb2wtPnggKTsKICAgICBhcmNbMV0ueSA9IFVQU0NBTEUoIGNvbnRyb2wtPnkgKTsKICAgICBhcmNbMl0ueCA9IHJhcy54OwogICAgIGFyY1syXS55ID0gcmFzLnk7Ci0gICAgdG9wICAgICAgPSAwOworCisgICAgLyogc2hvcnQtY3V0IHRoZSBhcmMgdGhhdCBjcm9zc2VzIHRoZSBjdXJyZW50IGJhbmQgKi8KKyAgICBpZiAoICggVFJVTkMoIGFyY1swXS55ICkgPj0gcmFzLm1heF9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzFdLnkgKSA+PSByYXMubWF4X2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMl0ueSApID49IHJhcy5tYXhfZXkgKSB8fAorICAgICAgICAgKCBUUlVOQyggYXJjWzBdLnkgKSA8ICByYXMubWluX2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMV0ueSApIDwgIHJhcy5taW5fZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1syXS55ICkgPCAgcmFzLm1pbl9leSApICkKKyAgICB7CisgICAgICByYXMueCA9IGFyY1swXS54OworICAgICAgcmFzLnkgPSBhcmNbMF0ueTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBkeCA9IEZUX0FCUyggYXJjWzJdLnggKyBhcmNbMF0ueCAtIDIgKiBhcmNbMV0ueCApOwogICAgIGR5ID0gRlRfQUJTKCBhcmNbMl0ueSArIGFyY1swXS55IC0gMiAqIGFyY1sxXS55ICk7CiAgICAgaWYgKCBkeCA8IGR5ICkKICAgICAgIGR4ID0gZHk7CiAKLSAgICBpZiAoIGR4IDwgT05FX1BJWEVMIC8gNCApCi0gICAgICBnb3RvIERyYXc7CisgICAgLyogV2UgY2FuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIG5lY2Vzc2FyeSBiaXNlY3Rpb25zIGJlY2F1c2UgICovCisgICAgLyogZWFjaCBiaXNlY3Rpb24gcHJlZGljdGFibHkgcmVkdWNlcyBkZXZpYXRpb24gZXhhY3RseSA0LWZvbGQuICovCisgICAgLyogRXZlbiAzMi1iaXQgZGV2aWF0aW9uIHdvdWxkIHZhbmlzaCBhZnRlciAxNiBiaXNlY3Rpb25zLiAgICAgICovCisgICAgZHJhdyA9IDE7CisgICAgd2hpbGUgKCBkeCA+IE9ORV9QSVhFTCAvIDQgKQorICAgIHsKKyAgICAgIGR4ICAgPj49IDI7CisgICAgICBkcmF3IDw8PSAxOworICAgIH0KIAotICAgIC8qIHNob3J0LWN1dCB0aGUgYXJjIHRoYXQgY3Jvc3NlcyB0aGUgY3VycmVudCBiYW5kICovCi0gICAgbWluID0gbWF4ID0gYXJjWzBdLnk7Ci0KLSAgICB5ID0gYXJjWzFdLnk7Ci0gICAgaWYgKCB5IDwgbWluICkgbWluID0geTsKLSAgICBpZiAoIHkgPiBtYXggKSBtYXggPSB5OwotCi0gICAgeSA9IGFyY1syXS55OwotICAgIGlmICggeSA8IG1pbiApIG1pbiA9IHk7Ci0gICAgaWYgKCB5ID4gbWF4ICkgbWF4ID0geTsKLQotICAgIGlmICggVFJVTkMoIG1pbiApID49IHJhcy5tYXhfZXkgfHwgVFJVTkMoIG1heCApIDwgcmFzLm1pbl9leSApCi0gICAgICBnb3RvIERyYXc7Ci0KLSAgICBsZXZlbCA9IDA7CisgICAgLyogV2UgdXNlIGRlY3JlbWVudCBjb3VudGVyIHRvIGNvdW50IHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VnbWVudHMgKi8KKyAgICAvKiB0byBkcmF3IHN0YXJ0aW5nIGZyb20gMl5sZXZlbC4gQmVmb3JlIGVhY2ggZHJhdyB3ZSBzcGxpdCBhcyAgICAqLworICAgIC8qIG1hbnkgdGltZXMgYXMgdGhlcmUgYXJlIHRyYWlsaW5nIHplcm9zIGluIHRoZSBjb3VudGVyLiAgICAgICAgICovCiAgICAgZG8KICAgICB7Ci0gICAgICBkeCA+Pj0gMjsKLSAgICAgIGxldmVsKys7Ci0gICAgfSB3aGlsZSAoIGR4ID4gT05FX1BJWEVMIC8gNCApOwotCi0gICAgbGV2ZWxzWzBdID0gbGV2ZWw7Ci0KLSAgICBkbwotICAgIHsKLSAgICAgIGxldmVsID0gbGV2ZWxzW3RvcF07Ci0gICAgICBpZiAoIGxldmVsID4gMCApCisgICAgICBzcGxpdCA9IDE7CisgICAgICB3aGlsZSAoICggZHJhdyAmIHNwbGl0ICkgPT0gMCApCiAgICAgICB7CiAgICAgICAgIGdyYXlfc3BsaXRfY29uaWMoIGFyYyApOwogICAgICAgICBhcmMgKz0gMjsKLSAgICAgICAgdG9wKys7Ci0gICAgICAgIGxldmVsc1t0b3BdID0gbGV2ZWxzW3RvcCAtIDFdID0gbGV2ZWwgLSAxOwotICAgICAgICBjb250aW51ZTsKKyAgICAgICAgc3BsaXQgPDw9IDE7CiAgICAgICB9CiAKLSAgICBEcmF3OgogICAgICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX1ZBUl8gYXJjWzBdLngsIGFyY1swXS55ICk7Ci0gICAgICB0b3AtLTsKICAgICAgIGFyYyAtPSAyOwogCi0gICAgfSB3aGlsZSAoIHRvcCA+PSAwICk7CisgICAgfSB3aGlsZSAoIC0tZHJhdyApOwogICB9CiAKIApAQCAtMTE4NywxMSArMTA5MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfVmVjdG9yKiAgY29udHJvbDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9WZWN0b3IqICB0byApCiAgIHsKLSAgICBGVF9WZWN0b3IqICBhcmM7Ci0gICAgVFBvcyAgICAgICAgbWluLCBtYXgsIHk7CisgICAgRlRfVmVjdG9yICAgYmV6X3N0YWNrWzE2ICogMyArIDFdOyAgLyogZW5vdWdoIHRvIGFjY29tbW9kYXRlIGJpc2VjdGlvbnMgKi8KKyAgICBGVF9WZWN0b3IqICBhcmMgPSBiZXpfc3RhY2s7CisgICAgVFBvcyAgICAgICAgZHgsIGR5LCBkeF8sIGR5XzsKKyAgICBUUG9zICAgICAgICBkeDEsIGR5MSwgZHgyLCBkeTI7CisgICAgVFBvcyAgICAgICAgTCwgcywgc19saW1pdDsKIAogCi0gICAgYXJjICAgICAgPSByYXMuYmV6X3N0YWNrOwogICAgIGFyY1swXS54ID0gVVBTQ0FMRSggdG8tPnggKTsKICAgICBhcmNbMF0ueSA9IFVQU0NBTEUoIHRvLT55ICk7CiAgICAgYXJjWzFdLnggPSBVUFNDQUxFKCBjb250cm9sMi0+eCApOwpAQCAtMTIwMSwyOSArMTEwOCwyMCBAQAogICAgIGFyY1szXS54ID0gcmFzLng7CiAgICAgYXJjWzNdLnkgPSByYXMueTsKIAotICAgIC8qIFNob3J0LWN1dCB0aGUgYXJjIHRoYXQgY3Jvc3NlcyB0aGUgY3VycmVudCBiYW5kLiAqLwotICAgIG1pbiA9IG1heCA9IGFyY1swXS55OwotCi0gICAgeSA9IGFyY1sxXS55OwotICAgIGlmICggeSA8IG1pbiApCi0gICAgICBtaW4gPSB5OwotICAgIGlmICggeSA+IG1heCApCi0gICAgICBtYXggPSB5OwotCi0gICAgeSA9IGFyY1syXS55OwotICAgIGlmICggeSA8IG1pbiApCi0gICAgICBtaW4gPSB5OwotICAgIGlmICggeSA+IG1heCApCi0gICAgICBtYXggPSB5OwotCi0gICAgeSA9IGFyY1szXS55OwotICAgIGlmICggeSA8IG1pbiApCi0gICAgICBtaW4gPSB5OwotICAgIGlmICggeSA+IG1heCApCi0gICAgICBtYXggPSB5OwotCi0gICAgaWYgKCBUUlVOQyggbWluICkgPj0gcmFzLm1heF9leSB8fCBUUlVOQyggbWF4ICkgPCByYXMubWluX2V5ICkKLSAgICAgIGdvdG8gRHJhdzsKKyAgICAvKiBzaG9ydC1jdXQgdGhlIGFyYyB0aGF0IGNyb3NzZXMgdGhlIGN1cnJlbnQgYmFuZCAqLworICAgIGlmICggKCBUUlVOQyggYXJjWzBdLnkgKSA+PSByYXMubWF4X2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMV0ueSApID49IHJhcy5tYXhfZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1syXS55ICkgPj0gcmFzLm1heF9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzNdLnkgKSA+PSByYXMubWF4X2V5ICkgfHwKKyAgICAgICAgICggVFJVTkMoIGFyY1swXS55ICkgPCAgcmFzLm1pbl9leSAmJgorICAgICAgICAgICBUUlVOQyggYXJjWzFdLnkgKSA8ICByYXMubWluX2V5ICYmCisgICAgICAgICAgIFRSVU5DKCBhcmNbMl0ueSApIDwgIHJhcy5taW5fZXkgJiYKKyAgICAgICAgICAgVFJVTkMoIGFyY1szXS55ICkgPCAgcmFzLm1pbl9leSApICkKKyAgICB7CisgICAgICByYXMueCA9IGFyY1swXS54OworICAgICAgcmFzLnkgPSBhcmNbMF0ueTsKKyAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBmb3IgKDs7KQogICAgIHsKQEAgLTEyMzIsNjQgKzExMzAsNTMgQEAKICAgICAgIC8qIEYuIEhhaW4sIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgIC8qIGh0dHA6Ly93d3cuY2lzLnNvdXRoYWxhYmFtYS5lZHUvfmhhaW4vZ2VuZXJhbC9QdWJsaWNhdGlvbnMvQmV6aWVyL0NhbWVyYS1yZWFkeSUyMENJU1NUMDIlMjAyLnBkZiAqLwogCi0gICAgICB7Ci0gICAgICAgIFRQb3MgIGR4LCBkeSwgZHhfLCBkeV87Ci0gICAgICAgIFRQb3MgIGR4MSwgZHkxLCBkeDIsIGR5MjsKLSAgICAgICAgVFBvcyAgTCwgcywgc19saW1pdDsKKyAgICAgIC8qIGR4IGFuZCBkeSBhcmUgeCBhbmQgeSBjb21wb25lbnRzIG9mIHRoZSBQMC1QMyBjaG9yZCB2ZWN0b3IuICovCisgICAgICBkeCA9IGR4XyA9IGFyY1szXS54IC0gYXJjWzBdLng7CisgICAgICBkeSA9IGR5XyA9IGFyY1szXS55IC0gYXJjWzBdLnk7CiAKKyAgICAgIEwgPSBGVF9IWVBPVCggZHhfLCBkeV8gKTsKIAotICAgICAgICAvKiBkeCBhbmQgZHkgYXJlIHggYW5kIHkgY29tcG9uZW50cyBvZiB0aGUgUDAtUDMgY2hvcmQgdmVjdG9yLiAqLwotICAgICAgICBkeCA9IGR4XyA9IGFyY1szXS54IC0gYXJjWzBdLng7Ci0gICAgICAgIGR5ID0gZHlfID0gYXJjWzNdLnkgLSBhcmNbMF0ueTsKKyAgICAgIC8qIEF2b2lkIHBvc3NpYmxlIGFyaXRobWV0aWMgb3ZlcmZsb3cgYmVsb3cgYnkgc3BsaXR0aW5nLiAqLworICAgICAgaWYgKCBMID4gMzI3NjcgKQorICAgICAgICBnb3RvIFNwbGl0OwogCi0gICAgICAgIEwgPSBGVF9IWVBPVCggZHhfLCBkeV8gKTsKKyAgICAgIC8qIE1heCBkZXZpYXRpb24gbWF5IGJlIGFzIG11Y2ggYXMgKHMvTCkgKiAzLzQgKGlmIEhhaW4ncyB2ID0gMSkuICovCisgICAgICBzX2xpbWl0ID0gTCAqIChUUG9zKSggT05FX1BJWEVMIC8gNiApOwogCi0gICAgICAgIC8qIEF2b2lkIHBvc3NpYmxlIGFyaXRobWV0aWMgb3ZlcmZsb3cgYmVsb3cgYnkgc3BsaXR0aW5nLiAqLwotICAgICAgICBpZiAoIEwgPiAzMjc2NyApCi0gICAgICAgICAgZ290byBTcGxpdDsKKyAgICAgIC8qIHMgaXMgTCAqIHRoZSBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIGZyb20gUDEgdG8gdGhlIGxpbmUgUDAtUDMuICovCisgICAgICBkeDEgPSBhcmNbMV0ueCAtIGFyY1swXS54OworICAgICAgZHkxID0gYXJjWzFdLnkgLSBhcmNbMF0ueTsKKyAgICAgIHMgPSBGVF9BQlMoIGR5ICogZHgxIC0gZHggKiBkeTEgKTsKIAotICAgICAgICAvKiBNYXggZGV2aWF0aW9uIG1heSBiZSBhcyBtdWNoIGFzIChzL0wpICogMy80IChpZiBIYWluJ3MgdiA9IDEpLiAqLwotICAgICAgICBzX2xpbWl0ID0gTCAqIChUUG9zKSggT05FX1BJWEVMIC8gNiApOworICAgICAgaWYgKCBzID4gc19saW1pdCApCisgICAgICAgIGdvdG8gU3BsaXQ7CiAKLSAgICAgICAgLyogcyBpcyBMICogdGhlIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSBQMSB0byB0aGUgbGluZSBQMC1QMy4gKi8KLSAgICAgICAgZHgxID0gYXJjWzFdLnggLSBhcmNbMF0ueDsKLSAgICAgICAgZHkxID0gYXJjWzFdLnkgLSBhcmNbMF0ueTsKLSAgICAgICAgcyA9IEZUX0FCUyggZHkgKiBkeDEgLSBkeCAqIGR5MSApOworICAgICAgLyogcyBpcyBMICogdGhlIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSBQMiB0byB0aGUgbGluZSBQMC1QMy4gKi8KKyAgICAgIGR4MiA9IGFyY1syXS54IC0gYXJjWzBdLng7CisgICAgICBkeTIgPSBhcmNbMl0ueSAtIGFyY1swXS55OworICAgICAgcyA9IEZUX0FCUyggZHkgKiBkeDIgLSBkeCAqIGR5MiApOwogCi0gICAgICAgIGlmICggcyA+IHNfbGltaXQgKQotICAgICAgICAgIGdvdG8gU3BsaXQ7CisgICAgICBpZiAoIHMgPiBzX2xpbWl0ICkKKyAgICAgICAgZ290byBTcGxpdDsKIAotICAgICAgICAvKiBzIGlzIEwgKiB0aGUgcGVycGVuZGljdWxhciBkaXN0YW5jZSBmcm9tIFAyIHRvIHRoZSBsaW5lIFAwLVAzLiAqLwotICAgICAgICBkeDIgPSBhcmNbMl0ueCAtIGFyY1swXS54OwotICAgICAgICBkeTIgPSBhcmNbMl0ueSAtIGFyY1swXS55OwotICAgICAgICBzID0gRlRfQUJTKCBkeSAqIGR4MiAtIGR4ICogZHkyICk7CisgICAgICAvKiBTcGxpdCBzdXBlciBjdXJ2eSBzZWdtZW50cyB3aGVyZSB0aGUgb2ZmIHBvaW50cyBhcmUgc28gZmFyCisgICAgICAgICBmcm9tIHRoZSBjaG9yZCB0aGF0IHRoZSBhbmdsZXMgUDAtUDEtUDMgb3IgUDAtUDItUDMgYmVjb21lCisgICAgICAgICBhY3V0ZSBhcyBkZXRlY3RlZCBieSBhcHByb3ByaWF0ZSBkb3QgcHJvZHVjdHMuICovCisgICAgICBpZiAoIGR4MSAqICggZHgxIC0gZHggKSArIGR5MSAqICggZHkxIC0gZHkgKSA+IDAgfHwKKyAgICAgICAgICAgZHgyICogKCBkeDIgLSBkeCApICsgZHkyICogKCBkeTIgLSBkeSApID4gMCApCisgICAgICAgIGdvdG8gU3BsaXQ7CiAKLSAgICAgICAgaWYgKCBzID4gc19saW1pdCApCi0gICAgICAgICAgZ290byBTcGxpdDsKKyAgICAgIGdyYXlfcmVuZGVyX2xpbmUoIFJBU19WQVJfIGFyY1swXS54LCBhcmNbMF0ueSApOwogCi0gICAgICAgIC8qIFNwbGl0IHN1cGVyIGN1cnZ5IHNlZ21lbnRzIHdoZXJlIHRoZSBvZmYgcG9pbnRzIGFyZSBzbyBmYXIKLSAgICAgICAgICAgZnJvbSB0aGUgY2hvcmQgdGhhdCB0aGUgYW5nbGVzIFAwLVAxLVAzIG9yIFAwLVAyLVAzIGJlY29tZQotICAgICAgICAgICBhY3V0ZSBhcyBkZXRlY3RlZCBieSBhcHByb3ByaWF0ZSBkb3QgcHJvZHVjdHMuICovCi0gICAgICAgIGlmICggZHgxICogKCBkeDEgLSBkeCApICsgZHkxICogKCBkeTEgLSBkeSApID4gMCB8fAotICAgICAgICAgICAgIGR4MiAqICggZHgyIC0gZHggKSArIGR5MiAqICggZHkyIC0gZHkgKSA+IDAgKQotICAgICAgICAgIGdvdG8gU3BsaXQ7CisgICAgICBpZiAoIGFyYyA9PSBiZXpfc3RhY2sgKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLyogTm8gcmVhc29uIHRvIHNwbGl0LiAqLwotICAgICAgICBnb3RvIERyYXc7Ci0gICAgICB9CisgICAgICBhcmMgLT0gMzsKKyAgICAgIGNvbnRpbnVlOwogCiAgICAgU3BsaXQ6CiAgICAgICBncmF5X3NwbGl0X2N1YmljKCBhcmMgKTsKICAgICAgIGFyYyArPSAzOwotICAgICAgY29udGludWU7Ci0KLSAgICBEcmF3OgotICAgICAgZ3JheV9yZW5kZXJfbGluZSggUkFTX1ZBUl8gYXJjWzBdLngsIGFyY1swXS55ICk7Ci0KLSAgICAgIGlmICggYXJjID09IHJhcy5iZXpfc3RhY2sgKQotICAgICAgICByZXR1cm47Ci0KLSAgICAgIGFyYyAtPSAzOwogICAgIH0KICAgfQogCkBAIC0xMzAxLDE4ICsxMTg4LDE0IEBACiAgICAgVFBvcyAgeCwgeTsKIAogCi0gICAgLyogcmVjb3JkIGN1cnJlbnQgY2VsbCwgaWYgYW55ICovCi0gICAgaWYgKCAhcmFzLmludmFsaWQgKQotICAgICAgZ3JheV9yZWNvcmRfY2VsbCggUkFTX1ZBUiApOwotCiAgICAgLyogc3RhcnQgdG8gYSBuZXcgcG9zaXRpb24gKi8KICAgICB4ID0gVVBTQ0FMRSggdG8tPnggKTsKICAgICB5ID0gVVBTQ0FMRSggdG8tPnkgKTsKIAotICAgIGdyYXlfc3RhcnRfY2VsbCggUkFTX1ZBUl8gVFJVTkMoIHggKSwgVFJVTkMoIHkgKSApOworICAgIGdyYXlfc2V0X2NlbGwoIFJBU19WQVJfIFRSVU5DKCB4ICksIFRSVU5DKCB5ICkgKTsKIAotICAgIHdvcmtlci0+eCA9IHg7Ci0gICAgd29ya2VyLT55ID0geTsKKyAgICByYXMueCA9IHg7CisgICAgcmFzLnkgPSB5OwogICAgIHJldHVybiAwOwogICB9CiAKQEAgLTEzNDgsNjMgKzEyMzEsMTMgQEAKIAogCiAgIHN0YXRpYyB2b2lkCi0gIGdyYXlfcmVuZGVyX3NwYW4oIGludCAgICAgICAgICAgICB5LAotICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX1NwYW4qICBzcGFucywKLSAgICAgICAgICAgICAgICAgICAgZ3JheV9QV29ya2VyICAgIHdvcmtlciApCi0gIHsKLSAgICB1bnNpZ25lZCBjaGFyKiAgcDsKLSAgICBGVF9CaXRtYXAqICAgICAgbWFwID0gJndvcmtlci0+dGFyZ2V0OwotCi0KLSAgICAvKiBmaXJzdCBvZiBhbGwsIGNvbXB1dGUgdGhlIHNjYW5saW5lIG9mZnNldCAqLwotICAgIHAgPSAodW5zaWduZWQgY2hhciopbWFwLT5idWZmZXIgLSB5ICogbWFwLT5waXRjaDsKLSAgICBpZiAoIG1hcC0+cGl0Y2ggPj0gMCApCi0gICAgICBwICs9ICggbWFwLT5yb3dzIC0gMSApICogKHVuc2lnbmVkIGludCltYXAtPnBpdGNoOwotCi0gICAgZm9yICggOyBjb3VudCA+IDA7IGNvdW50LS0sIHNwYW5zKysgKQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGNoYXIgIGNvdmVyYWdlID0gc3BhbnMtPmNvdmVyYWdlOwotCi0KLSAgICAgIGlmICggY292ZXJhZ2UgKQotICAgICAgewotICAgICAgICAvKiBGb3Igc21hbGwtc3BhbnMgaXQgaXMgZmFzdGVyIHRvIGRvIGl0IGJ5IG91cnNlbHZlcyB0aGFuCi0gICAgICAgICAqIGNhbGxpbmcgYG1lbXNldCcuICBUaGlzIGlzIG1haW5seSBkdWUgdG8gdGhlIGNvc3Qgb2YgdGhlCi0gICAgICAgICAqIGZ1bmN0aW9uIGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHNwYW5zLT5sZW4gPj0gOCApCi0gICAgICAgICAgRlRfTUVNX1NFVCggcCArIHNwYW5zLT54LCAodW5zaWduZWQgY2hhciljb3ZlcmFnZSwgc3BhbnMtPmxlbiApOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyKiAgcSA9IHAgKyBzcGFucy0+eDsKLQotCi0gICAgICAgICAgc3dpdGNoICggc3BhbnMtPmxlbiApCi0gICAgICAgICAgewotICAgICAgICAgIGNhc2UgNzogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgNjogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgNTogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgNDogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgMzogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgMjogKnErKyA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGNhc2UgMTogKnEgICA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLQotICBzdGF0aWMgdm9pZAogICBncmF5X2hsaW5lKCBSQVNfQVJHXyBUQ29vcmQgIHgsCiAgICAgICAgICAgICAgICAgICAgICAgIFRDb29yZCAgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgVFBvcyAgICBhcmVhLAorICAgICAgICAgICAgICAgICAgICAgICBUQXJlYSAgIGFyZWEsCiAgICAgICAgICAgICAgICAgICAgICAgIFRDb29yZCAgYWNvdW50ICkKICAgewotICAgIGludCAgY292ZXJhZ2U7CisgICAgaW50ICAgICAgY292ZXJhZ2U7CisgICAgRlRfU3BhbiAgc3BhbjsKIAogCiAgICAgLyogY29tcHV0ZSB0aGUgY292ZXJhZ2UgbGluZSdzIGNvdmVyYWdlLCBkZXBlbmRpbmcgb24gdGhlICAgICovCkBAIC0xNDMzLDE3OSArMTI2Niw5MSBAQAogICAgICAgICBjb3ZlcmFnZSA9IDI1NTsKICAgICB9CiAKLSAgICB5ICs9IChUQ29vcmQpcmFzLm1pbl9leTsKLSAgICB4ICs9IChUQ29vcmQpcmFzLm1pbl9leDsKLQotICAgIC8qIEZUX1NwYW4ueCBpcyBhIDE2LWJpdCBzaG9ydCwgc28gbGltaXQgb3VyIGNvb3JkaW5hdGVzIGFwcHJvcHJpYXRlbHkgKi8KLSAgICBpZiAoIHggPj0gMzI3NjcgKQotICAgICAgeCA9IDMyNzY3OwotCi0gICAgLyogRlRfU3Bhbi55IGlzIGFuIGludGVnZXIsIHNvIGxpbWl0IG91ciBjb29yZGluYXRlcyBhcHByb3ByaWF0ZWx5ICovCi0gICAgaWYgKCB5ID49IEZUX0lOVF9NQVggKQotICAgICAgeSA9IEZUX0lOVF9NQVg7Ci0KLSAgICBpZiAoIGNvdmVyYWdlICkKKyAgICBpZiAoIHJhcy5yZW5kZXJfc3BhbiApICAvKiBmb3IgRlRfUkFTVEVSX0ZMQUdfRElSRUNUIG9ubHkgKi8KICAgICB7Ci0gICAgICBGVF9TcGFuKiAgc3BhbjsKLSAgICAgIGludCAgICAgICBjb3VudDsKKyAgICAgIHNwYW4ueCAgICAgICAgPSAoc2hvcnQpeDsKKyAgICAgIHNwYW4ubGVuICAgICAgPSAodW5zaWduZWQgc2hvcnQpYWNvdW50OworICAgICAgc3Bhbi5jb3ZlcmFnZSA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOworCisgICAgICByYXMucmVuZGVyX3NwYW4oIHksIDEsICZzcGFuLCByYXMucmVuZGVyX3NwYW5fZGF0YSApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgY2hhciogIHEgPSByYXMudGFyZ2V0Lm9yaWdpbiAtIHJhcy50YXJnZXQucGl0Y2ggKiB5ICsgeDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgICBjID0gKHVuc2lnbmVkIGNoYXIpY292ZXJhZ2U7CiAKIAotICAgICAgLyogc2VlIHdoZXRoZXIgd2UgY2FuIGFkZCB0aGlzIHNwYW4gdG8gdGhlIGN1cnJlbnQgbGlzdCAqLwotICAgICAgY291bnQgPSByYXMubnVtX2dyYXlfc3BhbnM7Ci0gICAgICBzcGFuICA9IHJhcy5ncmF5X3NwYW5zICsgY291bnQgLSAxOwotICAgICAgaWYgKCBjb3VudCA+IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAgIHJhcy5zcGFuX3kgPT0geSAgICAgICAgICAgICAgICAgICAgJiYKLSAgICAgICAgICAgKGludClzcGFuLT54ICsgc3Bhbi0+bGVuID09IChpbnQpeCAmJgotICAgICAgICAgICBzcGFuLT5jb3ZlcmFnZSA9PSBjb3ZlcmFnZSAgICAgICAgICkKKyAgICAgIC8qIEZvciBzbWFsbC1zcGFucyBpdCBpcyBmYXN0ZXIgdG8gZG8gaXQgYnkgb3Vyc2VsdmVzIHRoYW4KKyAgICAgICAqIGNhbGxpbmcgYG1lbXNldCcuICBUaGlzIGlzIG1haW5seSBkdWUgdG8gdGhlIGNvc3Qgb2YgdGhlCisgICAgICAgKiBmdW5jdGlvbiBjYWxsLgorICAgICAgICovCisgICAgICBzd2l0Y2ggKCBhY291bnQgKQogICAgICAgewotICAgICAgICBzcGFuLT5sZW4gPSAodW5zaWduZWQgc2hvcnQpKCBzcGFuLT5sZW4gKyBhY291bnQgKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgY2FzZSA3OiAqcSsrID0gYzsKKyAgICAgIGNhc2UgNjogKnErKyA9IGM7CisgICAgICBjYXNlIDU6ICpxKysgPSBjOworICAgICAgY2FzZSA0OiAqcSsrID0gYzsKKyAgICAgIGNhc2UgMzogKnErKyA9IGM7CisgICAgICBjYXNlIDI6ICpxKysgPSBjOworICAgICAgY2FzZSAxOiAqcSAgID0gYzsKKyAgICAgIGNhc2UgMDogYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBGVF9NRU1fU0VUKCBxLCBjLCBhY291bnQgKTsKICAgICAgIH0KLQotICAgICAgaWYgKCByYXMuc3Bhbl95ICE9IHkgfHwgY291bnQgPj0gRlRfTUFYX0dSQVlfU1BBTlMgKQotICAgICAgewotICAgICAgICBpZiAoIHJhcy5yZW5kZXJfc3BhbiAmJiBjb3VudCA+IDAgKQotICAgICAgICAgIHJhcy5yZW5kZXJfc3BhbiggcmFzLnNwYW5feSwgY291bnQsIHJhcy5ncmF5X3NwYW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgKTsKLQotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0KLSAgICAgICAgaWYgKCBjb3VudCA+IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgaW50ICBuOwotCi0KLSAgICAgICAgICBGVF9UUkFDRTcoKCAieSA9ICUzZCAiLCByYXMuc3Bhbl95ICkpOwotICAgICAgICAgIHNwYW4gPSByYXMuZ3JheV9zcGFuczsKLSAgICAgICAgICBmb3IgKCBuID0gMDsgbiA8IGNvdW50OyBuKyssIHNwYW4rKyApCi0gICAgICAgICAgICBGVF9UUkFDRTcoKCAiWyVkLi4lZF06JTAyeCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi0+eCwgc3Bhbi0+eCArIHNwYW4tPmxlbiAtIDEsIHNwYW4tPmNvdmVyYWdlICkpOwotICAgICAgICAgIEZUX1RSQUNFNygoICJcbiIgKSk7Ci0gICAgICAgIH0KLQotI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCi0KLSAgICAgICAgcmFzLm51bV9ncmF5X3NwYW5zID0gMDsKLSAgICAgICAgcmFzLnNwYW5feSAgICAgICAgID0gKGludCl5OwotCi0gICAgICAgIHNwYW4gID0gcmFzLmdyYXlfc3BhbnM7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHNwYW4rKzsKLQotICAgICAgLyogYWRkIGEgZ3JheSBzcGFuIHRvIHRoZSBjdXJyZW50IGxpc3QgKi8KLSAgICAgIHNwYW4tPnggICAgICAgID0gKHNob3J0KXg7Ci0gICAgICBzcGFuLT5sZW4gICAgICA9ICh1bnNpZ25lZCBzaG9ydClhY291bnQ7Ci0gICAgICBzcGFuLT5jb3ZlcmFnZSA9ICh1bnNpZ25lZCBjaGFyKWNvdmVyYWdlOwotCi0gICAgICByYXMubnVtX2dyYXlfc3BhbnMrKzsKICAgICB9CiAgIH0KIAogCi0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLQotICAvKiB0byBiZSBjYWxsZWQgd2hpbGUgaW4gdGhlIGRlYnVnZ2VyIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiB0aGlzIGZ1bmN0aW9uIGNhdXNlcyBhIGNvbXBpbGVyIHdhcm5pbmcgc2luY2UgaXQgaXMgdW51c2VkIG90aGVyd2lzZSAqLwogICBzdGF0aWMgdm9pZAotICBncmF5X2R1bXBfY2VsbHMoIFJBU19BUkcgKQorICBncmF5X3N3ZWVwKCBSQVNfQVJHICkKICAgewotICAgIGludCAgeWluZGV4OwotCi0KLSAgICBmb3IgKCB5aW5kZXggPSAwOyB5aW5kZXggPCByYXMueWNvdW50OyB5aW5kZXgrKyApCi0gICAgewotICAgICAgUENlbGwgIGNlbGw7Ci0KLQotICAgICAgcHJpbnRmKCAiJTNkOiIsIHlpbmRleCApOwotCi0gICAgICBmb3IgKCBjZWxsID0gcmFzLnljZWxsc1t5aW5kZXhdOyBjZWxsICE9IE5VTEw7IGNlbGwgPSBjZWxsLT5uZXh0ICkKLSAgICAgICAgcHJpbnRmKCAiICglM2xkLCBjOiU0bGQsIGE6JTZkKSIsIGNlbGwtPngsIGNlbGwtPmNvdmVyLCBjZWxsLT5hcmVhICk7Ci0gICAgICBwcmludGYoICJcbiIgKTsKLSAgICB9Ci0gIH0KLQotI2VuZGlmIC8qIEZUX0RFQlVHX0xFVkVMX1RSQUNFICovCi0KLQotICBzdGF0aWMgdm9pZAotICBncmF5X3N3ZWVwKCBSQVNfQVJHXyBjb25zdCBGVF9CaXRtYXAqICB0YXJnZXQgKQotICB7Ci0gICAgaW50ICB5aW5kZXg7Ci0KLSAgICBGVF9VTlVTRUQoIHRhcmdldCApOworICAgIGludCAgeTsKIAogCiAgICAgaWYgKCByYXMubnVtX2NlbGxzID09IDAgKQogICAgICAgcmV0dXJuOwogCi0gICAgcmFzLm51bV9ncmF5X3NwYW5zID0gMDsKLQogICAgIEZUX1RSQUNFNygoICJncmF5X3N3ZWVwOiBzdGFydFxuIiApKTsKIAotICAgIGZvciAoIHlpbmRleCA9IDA7IHlpbmRleCA8IHJhcy55Y291bnQ7IHlpbmRleCsrICkKKyAgICBmb3IgKCB5ID0gcmFzLm1pbl9leTsgeSA8IHJhcy5tYXhfZXk7IHkrKyApCiAgICAgewotICAgICAgUENlbGwgICBjZWxsICA9IHJhcy55Y2VsbHNbeWluZGV4XTsKKyAgICAgIFBDZWxsICAgY2VsbCAgPSByYXMueWNlbGxzW3kgLSByYXMubWluX2V5XTsKICAgICAgIFRDb29yZCAgY292ZXIgPSAwOwotICAgICAgVENvb3JkICB4ICAgICA9IDA7CisgICAgICBUQ29vcmQgIHggICAgID0gcmFzLm1pbl9leDsKIAogCiAgICAgICBmb3IgKCA7IGNlbGwgIT0gTlVMTDsgY2VsbCA9IGNlbGwtPm5leHQgKQogICAgICAgewotICAgICAgICBUUG9zICBhcmVhOworICAgICAgICBUQXJlYSAgYXJlYTsKIAogCi0gICAgICAgIGlmICggY2VsbC0+eCA+IHggJiYgY292ZXIgIT0gMCApCi0gICAgICAgICAgZ3JheV9obGluZSggUkFTX1ZBUl8geCwgeWluZGV4LCBjb3ZlciAqICggT05FX1BJWEVMICogMiApLAorICAgICAgICBpZiAoIGNvdmVyICE9IDAgJiYgY2VsbC0+eCA+IHggKQorICAgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIHgsIHksIChUQXJlYSljb3ZlciAqICggT05FX1BJWEVMICogMiApLAogICAgICAgICAgICAgICAgICAgICAgIGNlbGwtPnggLSB4ICk7CiAKICAgICAgICAgY292ZXIgKz0gY2VsbC0+Y292ZXI7Ci0gICAgICAgIGFyZWEgICA9IGNvdmVyICogKCBPTkVfUElYRUwgKiAyICkgLSBjZWxsLT5hcmVhOworICAgICAgICBhcmVhICAgPSAoVEFyZWEpY292ZXIgKiAoIE9ORV9QSVhFTCAqIDIgKSAtIGNlbGwtPmFyZWE7CiAKLSAgICAgICAgaWYgKCBhcmVhICE9IDAgJiYgY2VsbC0+eCA+PSAwICkKLSAgICAgICAgICBncmF5X2hsaW5lKCBSQVNfVkFSXyBjZWxsLT54LCB5aW5kZXgsIGFyZWEsIDEgKTsKKyAgICAgICAgaWYgKCBhcmVhICE9IDAgJiYgY2VsbC0+eCA+PSByYXMubWluX2V4ICkKKyAgICAgICAgICBncmF5X2hsaW5lKCBSQVNfVkFSXyBjZWxsLT54LCB5LCBhcmVhLCAxICk7CiAKICAgICAgICAgeCA9IGNlbGwtPnggKyAxOwogICAgICAgfQogCiAgICAgICBpZiAoIGNvdmVyICE9IDAgKQotICAgICAgICBncmF5X2hsaW5lKCBSQVNfVkFSXyB4LCB5aW5kZXgsIGNvdmVyICogKCBPTkVfUElYRUwgKiAyICksCi0gICAgICAgICAgICAgICAgICAgIHJhcy5jb3VudF9leCAtIHggKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJhcy5yZW5kZXJfc3BhbiAmJiByYXMubnVtX2dyYXlfc3BhbnMgPiAwICkKLSAgICAgIHJhcy5yZW5kZXJfc3BhbiggcmFzLnNwYW5feSwgcmFzLm51bV9ncmF5X3NwYW5zLAotICAgICAgICAgICAgICAgICAgICAgICByYXMuZ3JheV9zcGFucywgcmFzLnJlbmRlcl9zcGFuX2RhdGEgKTsKLQotI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0KLSAgICBpZiAoIHJhcy5udW1fZ3JheV9zcGFucyA+IDAgKQotICAgIHsKLSAgICAgIEZUX1NwYW4qICBzcGFuOwotICAgICAgaW50ICAgICAgIG47Ci0KLQotICAgICAgRlRfVFJBQ0U3KCggInkgPSAlM2QgIiwgcmFzLnNwYW5feSApKTsKLSAgICAgIHNwYW4gPSByYXMuZ3JheV9zcGFuczsKLSAgICAgIGZvciAoIG4gPSAwOyBuIDwgcmFzLm51bV9ncmF5X3NwYW5zOyBuKyssIHNwYW4rKyApCi0gICAgICAgIEZUX1RSQUNFNygoICJbJWQuLiVkXTolMDJ4ICIsCi0gICAgICAgICAgICAgICAgICAgIHNwYW4tPngsIHNwYW4tPnggKyBzcGFuLT5sZW4gLSAxLCBzcGFuLT5jb3ZlcmFnZSApKTsKLSAgICAgIEZUX1RSQUNFNygoICJcbiIgKSk7CisgICAgICAgIGdyYXlfaGxpbmUoIFJBU19WQVJfIHgsIHksIChUQXJlYSljb3ZlciAqICggT05FX1BJWEVMICogMiApLAorICAgICAgICAgICAgICAgICAgICByYXMubWF4X2V4IC0geCApOwogICAgIH0KIAogICAgIEZUX1RSQUNFNygoICJncmF5X3N3ZWVwOiBlbmRcbiIgKSk7Ci0KLSNlbmRpZiAvKiBGVF9ERUJVR19MRVZFTF9UUkFDRSAqLwotCiAgIH0KIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGNvbXBpbGUgaW4gc3RhbmQtYWxvbmUgbW9kZSwgICAgICAqLworICAvKiAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgY29tcGlsZSBpbiBzdGFuZC1hbG9uZSBtb2RlLCAgICAgKi8KICAgLyogIGkuZS4sIHdoZW4gYnVpbGRpbmcgdGhpcyBjb21wb25lbnQgd2l0aG91dCB0aGUgcmVzdCBvZiBGcmVlVHlwZS4gICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE4ODMsMTQgKzE2MjgsODIgQEAKICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOwogICB9CiAKLSNlbmRpZiAvKiBfU1RBTkRBTE9ORV8gKi8KIAorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PdXRsaW5lX0dldF9DQm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gYW4gb3V0bGluZSdzIGBjb250cm9sIGJveCcuICBUaGUgY29udHJvbCBib3ggZW5jbG9zZXMgYWxsICAgKi8KKyAgLyogICAgdGhlIG91dGxpbmUncyBwb2ludHMsIGluY2x1ZGluZyBCw6l6aWVyIGNvbnRyb2wgcG9pbnRzLiAgVGhvdWdoIGl0ICAqLworICAvKiAgICBjb2luY2lkZXMgd2l0aCB0aGUgZXhhY3QgYm91bmRpbmcgYm94IGZvciBtb3N0IGdseXBocywgaXQgY2FuIGJlICAgKi8KKyAgLyogICAgc2xpZ2h0bHkgbGFyZ2VyIGluIHNvbWUgc2l0dWF0aW9ucyAobGlrZSB3aGVuIHJvdGF0aW5nIGFuIG91dGxpbmUgICovCisgIC8qICAgIHRoYXQgY29udGFpbnMgQsOpemllciBvdXRzaWRlIGFyY3MpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbXB1dGluZyB0aGUgY29udHJvbCBib3ggaXMgdmVyeSBmYXN0LCB3aGlsZSBnZXR0aW5nIHRoZSBib3VuZGluZyAqLworICAvKiAgICBib3ggY2FuIHRha2UgbXVjaCBtb3JlIHRpbWUgYXMgaXQgbmVlZHMgdG8gd2FsayBvdmVyIGFsbCBzZWdtZW50cyAgKi8KKyAgLyogICAgYW5kIGFyY3MgaW4gdGhlIG91dGxpbmUuICBUbyBnZXQgdGhlIGxhdHRlciwgeW91IGNhbiB1c2UgdGhlICAgICAgICovCisgIC8qICAgIGBmdGJib3gnIGNvbXBvbmVudCwgd2hpY2ggaXMgZGVkaWNhdGVkIHRvIHRoaXMgc2luZ2xlIHRhc2suICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG91dGxpbmUgOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ugb3V0bGluZSBkZXNjcmlwdG9yLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFjYm94ICAgOjogVGhlIG91dGxpbmUncyBjb250cm9sIGJveC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfR2x5cGhfR2V0X0NCb3ggZm9yIGEgZGlzY3Vzc2lvbiBvZiB0cmlja3kgZm9udHMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICB0eXBlZGVmIHN0cnVjdCAgZ3JheV9UQmFuZF8KKyAgc3RhdGljIHZvaWQKKyAgRlRfT3V0bGluZV9HZXRfQ0JveCggY29uc3QgRlRfT3V0bGluZSogIG91dGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX0JCb3ggICAgICAgICAgICphY2JveCApCiAgIHsKLSAgICBUUG9zICBtaW4sIG1heDsKKyAgICBUUG9zICB4TWluLCB5TWluLCB4TWF4LCB5TWF4OwogCi0gIH0gZ3JheV9UQmFuZDsKKworICAgIGlmICggb3V0bGluZSAmJiBhY2JveCApCisgICAgeworICAgICAgaWYgKCBvdXRsaW5lLT5uX3BvaW50cyA9PSAwICkKKyAgICAgIHsKKyAgICAgICAgeE1pbiA9IDA7CisgICAgICAgIHlNaW4gPSAwOworICAgICAgICB4TWF4ID0gMDsKKyAgICAgICAgeU1heCA9IDA7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIEZUX1ZlY3RvciogIHZlYyAgID0gb3V0bGluZS0+cG9pbnRzOworICAgICAgICBGVF9WZWN0b3IqICBsaW1pdCA9IHZlYyArIG91dGxpbmUtPm5fcG9pbnRzOworCisKKyAgICAgICAgeE1pbiA9IHhNYXggPSB2ZWMtPng7CisgICAgICAgIHlNaW4gPSB5TWF4ID0gdmVjLT55OworICAgICAgICB2ZWMrKzsKKworICAgICAgICBmb3IgKCA7IHZlYyA8IGxpbWl0OyB2ZWMrKyApCisgICAgICAgIHsKKyAgICAgICAgICBUUG9zICB4LCB5OworCisKKyAgICAgICAgICB4ID0gdmVjLT54OworICAgICAgICAgIGlmICggeCA8IHhNaW4gKSB4TWluID0geDsKKyAgICAgICAgICBpZiAoIHggPiB4TWF4ICkgeE1heCA9IHg7CisKKyAgICAgICAgICB5ID0gdmVjLT55OworICAgICAgICAgIGlmICggeSA8IHlNaW4gKSB5TWluID0geTsKKyAgICAgICAgICBpZiAoIHkgPiB5TWF4ICkgeU1heCA9IHk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGFjYm94LT54TWluID0geE1pbjsKKyAgICAgIGFjYm94LT54TWF4ID0geE1heDsKKyAgICAgIGFjYm94LT55TWluID0geU1pbjsKKyAgICAgIGFjYm94LT55TWF4ID0geU1heDsKKyAgICB9CisgIH0KKworI2VuZGlmIC8qIFNUQU5EQUxPTkVfICovCiAKIAogICBGVF9ERUZJTkVfT1VUTElORV9GVU5DUygKQEAgLTE5MjAsMTAgKzE3MzMsMTggQEAKICAgICAgIGVycm9yID0gRlRfT3V0bGluZV9EZWNvbXBvc2UoICZyYXMub3V0bGluZSwgJmZ1bmNfaW50ZXJmYWNlLCAmcmFzICk7CiAgICAgICBpZiAoICFyYXMuaW52YWxpZCApCiAgICAgICAgIGdyYXlfcmVjb3JkX2NlbGwoIFJBU19WQVIgKTsKKworICAgICAgRlRfVFJBQ0U3KCggImJhbmQgWyVkLi4lZF06ICVkIGNlbGxzXG4iLAorICAgICAgICAgICAgICAgICAgcmFzLm1pbl9leSwgcmFzLm1heF9leSwgcmFzLm51bV9jZWxscyApKTsKICAgICB9CiAgICAgZWxzZQorICAgIHsKICAgICAgIGVycm9yID0gRlRfVEhST1coIE1lbW9yeV9PdmVyZmxvdyApOwogCisgICAgICBGVF9UUkFDRTcoKCAiYmFuZCBbJWQuLiVkXTogdG8gYmUgYmlzZWN0ZWRcbiIsCisgICAgICAgICAgICAgICAgICByYXMubWluX2V5LCByYXMubWF4X2V5ICkpOworICAgIH0KKwogICAgIHJldHVybiBlcnJvcjsKICAgfQogCkBAIC0xOTMxLDEwMCArMTc1Miw3MiBAQAogICBzdGF0aWMgaW50CiAgIGdyYXlfY29udmVydF9nbHlwaCggUkFTX0FSRyApCiAgIHsKLSAgICBncmF5X1RCYW5kICAgICAgICAgICAgYmFuZHNbNDBdOwotICAgIGdyYXlfVEJhbmQqIHZvbGF0aWxlICBiYW5kOwotICAgIGludCB2b2xhdGlsZSAgICAgICAgICBuLCBudW1fYmFuZHM7Ci0gICAgVFBvcyB2b2xhdGlsZSAgICAgICAgIG1pbiwgbWF4LCBtYXhfeTsKLSAgICBGVF9CQm94KiAgICAgICAgICAgICAgY2xpcDsKKyAgICBUQ2VsbCAgICBidWZmZXJbRlRfTUFYX0dSQVlfUE9PTF07CisgICAgVENvb3JkICAgYmFuZF9zaXplID0gRlRfTUFYX0dSQVlfUE9PTCAvIDg7CisgICAgVENvb3JkICAgY291bnQgPSByYXMubWF4X2V5IC0gcmFzLm1pbl9leTsKKyAgICBpbnQgICAgICBudW1fYmFuZHM7CisgICAgVENvb3JkICAgbWluLCBtYXgsIG1heF95OworICAgIFRDb29yZCAgIGJhbmRzWzMyXTsgIC8qIGVub3VnaCB0byBhY2NvbW1vZGF0ZSBiaXNlY3Rpb25zICovCisgICAgVENvb3JkKiAgYmFuZDsKIAogCi0gICAgLyogU2V0IHVwIHN0YXRlIGluIHRoZSByYXN0ZXIgb2JqZWN0ICovCi0gICAgZ3JheV9jb21wdXRlX2Nib3goIFJBU19WQVIgKTsKLQotICAgIC8qIGNsaXAgdG8gdGFyZ2V0IGJpdG1hcCwgZXhpdCBpZiBub3RoaW5nIHRvIGRvICovCi0gICAgY2xpcCA9ICZyYXMuY2xpcF9ib3g7Ci0KLSAgICBpZiAoIHJhcy5tYXhfZXggPD0gY2xpcC0+eE1pbiB8fCByYXMubWluX2V4ID49IGNsaXAtPnhNYXggfHwKLSAgICAgICAgIHJhcy5tYXhfZXkgPD0gY2xpcC0+eU1pbiB8fCByYXMubWluX2V5ID49IGNsaXAtPnlNYXggKQotICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIHJhcy5taW5fZXggPCBjbGlwLT54TWluICkgcmFzLm1pbl9leCA9IGNsaXAtPnhNaW47Ci0gICAgaWYgKCByYXMubWluX2V5IDwgY2xpcC0+eU1pbiApIHJhcy5taW5fZXkgPSBjbGlwLT55TWluOwotCi0gICAgaWYgKCByYXMubWF4X2V4ID4gY2xpcC0+eE1heCApIHJhcy5tYXhfZXggPSBjbGlwLT54TWF4OwotICAgIGlmICggcmFzLm1heF9leSA+IGNsaXAtPnlNYXggKSByYXMubWF4X2V5ID0gY2xpcC0+eU1heDsKLQotICAgIHJhcy5jb3VudF9leCA9IHJhcy5tYXhfZXggLSByYXMubWluX2V4OwotICAgIHJhcy5jb3VudF9leSA9IHJhcy5tYXhfZXkgLSByYXMubWluX2V5OwotCiAgICAgLyogc2V0IHVwIHZlcnRpY2FsIGJhbmRzICovCi0gICAgbnVtX2JhbmRzID0gKGludCkoICggcmFzLm1heF9leSAtIHJhcy5taW5fZXkgKSAvIHJhcy5iYW5kX3NpemUgKTsKLSAgICBpZiAoIG51bV9iYW5kcyA9PSAwICkKLSAgICAgIG51bV9iYW5kcyA9IDE7Ci0gICAgaWYgKCBudW1fYmFuZHMgPj0gMzkgKQotICAgICAgbnVtX2JhbmRzID0gMzk7Ci0KLSAgICByYXMuYmFuZF9zaG9vdCA9IDA7CisgICAgaWYgKCBjb3VudCA+IGJhbmRfc2l6ZSApCisgICAgeworICAgICAgLyogdHdvIGRpdmlzaW9ucyByb3VuZGVkIHVwICovCisgICAgICBudW1fYmFuZHMgPSAoaW50KSggKCBjb3VudCArIGJhbmRfc2l6ZSAtIDEpIC8gYmFuZF9zaXplICk7CisgICAgICBiYW5kX3NpemUgPSAoIGNvdW50ICsgbnVtX2JhbmRzIC0gMSApIC8gbnVtX2JhbmRzOworICAgIH0KIAogICAgIG1pbiAgID0gcmFzLm1pbl9leTsKICAgICBtYXhfeSA9IHJhcy5tYXhfZXk7CiAKLSAgICBmb3IgKCBuID0gMDsgbiA8IG51bV9iYW5kczsgbisrLCBtaW4gPSBtYXggKQorICAgIGZvciAoIDsgbWluIDwgbWF4X3k7IG1pbiA9IG1heCApCiAgICAgewotICAgICAgbWF4ID0gbWluICsgcmFzLmJhbmRfc2l6ZTsKLSAgICAgIGlmICggbiA9PSBudW1fYmFuZHMgLSAxIHx8IG1heCA+IG1heF95ICkKKyAgICAgIG1heCA9IG1pbiArIGJhbmRfc2l6ZTsKKyAgICAgIGlmICggbWF4ID4gbWF4X3kgKQogICAgICAgICBtYXggPSBtYXhfeTsKIAotICAgICAgYmFuZHNbMF0ubWluID0gbWluOwotICAgICAgYmFuZHNbMF0ubWF4ID0gbWF4OwotICAgICAgYmFuZCAgICAgICAgID0gYmFuZHM7CisgICAgICBiYW5kICAgID0gYmFuZHM7CisgICAgICBiYW5kWzFdID0gbWluOworICAgICAgYmFuZFswXSA9IG1heDsKIAogICAgICAgZG8KICAgICAgIHsKLSAgICAgICAgVFBvcyAgYm90dG9tLCB0b3AsIG1pZGRsZTsKLSAgICAgICAgaW50ICAgZXJyb3I7CisgICAgICAgIFRDb29yZCAgd2lkdGggPSBiYW5kWzBdIC0gYmFuZFsxXTsKKyAgICAgICAgaW50ICAgICBlcnJvcjsKIAorCisgICAgICAgIC8qIG1lbW9yeSBtYW5hZ2VtZW50ICovCiAgICAgICAgIHsKLSAgICAgICAgICBQQ2VsbCAgY2VsbHNfbWF4OwotICAgICAgICAgIGludCAgICB5aW5kZXg7Ci0gICAgICAgICAgbG9uZyAgIGNlbGxfc3RhcnQsIGNlbGxfZW5kLCBjZWxsX21vZDsKKyAgICAgICAgICBzaXplX3QgIHljb3VudCA9IChzaXplX3Qpd2lkdGg7CisgICAgICAgICAgc2l6ZV90ICBjZWxsX3N0YXJ0OwogCiAKLSAgICAgICAgICByYXMueWNlbGxzID0gKFBDZWxsKilyYXMuYnVmZmVyOwotICAgICAgICAgIHJhcy55Y291bnQgPSBiYW5kLT5tYXggLSBiYW5kLT5taW47CisgICAgICAgICAgY2VsbF9zdGFydCA9ICggeWNvdW50ICogc2l6ZW9mICggUENlbGwgKSArIHNpemVvZiAoIFRDZWxsICkgLSAxICkgLworICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKCBUQ2VsbCApOwogCi0gICAgICAgICAgY2VsbF9zdGFydCA9IChsb25nKXNpemVvZiAoIFBDZWxsICkgKiByYXMueWNvdW50OwotICAgICAgICAgIGNlbGxfbW9kICAgPSBjZWxsX3N0YXJ0ICUgKGxvbmcpc2l6ZW9mICggVENlbGwgKTsKLSAgICAgICAgICBpZiAoIGNlbGxfbW9kID4gMCApCi0gICAgICAgICAgICBjZWxsX3N0YXJ0ICs9IChsb25nKXNpemVvZiAoIFRDZWxsICkgLSBjZWxsX21vZDsKLQotICAgICAgICAgIGNlbGxfZW5kICA9IHJhcy5idWZmZXJfc2l6ZTsKLSAgICAgICAgICBjZWxsX2VuZCAtPSBjZWxsX2VuZCAlIChsb25nKXNpemVvZiAoIFRDZWxsICk7Ci0KLSAgICAgICAgICBjZWxsc19tYXggPSAoUENlbGwpKCAoY2hhciopcmFzLmJ1ZmZlciArIGNlbGxfZW5kICk7Ci0gICAgICAgICAgcmFzLmNlbGxzID0gKFBDZWxsKSggKGNoYXIqKXJhcy5idWZmZXIgKyBjZWxsX3N0YXJ0ICk7Ci0gICAgICAgICAgaWYgKCByYXMuY2VsbHMgPj0gY2VsbHNfbWF4ICkKKyAgICAgICAgICBpZiAoIEZUX01BWF9HUkFZX1BPT0wgLSBjZWxsX3N0YXJ0IDwgMiApCiAgICAgICAgICAgICBnb3RvIFJlZHVjZUJhbmRzOwogCi0gICAgICAgICAgcmFzLm1heF9jZWxscyA9IGNlbGxzX21heCAtIHJhcy5jZWxsczsKLSAgICAgICAgICBpZiAoIHJhcy5tYXhfY2VsbHMgPCAyICkKLSAgICAgICAgICAgIGdvdG8gUmVkdWNlQmFuZHM7CisgICAgICAgICAgcmFzLmNlbGxzICAgICA9IGJ1ZmZlciArIGNlbGxfc3RhcnQ7CisgICAgICAgICAgcmFzLm1heF9jZWxscyA9IChGVF9QdHJEaXN0KSggRlRfTUFYX0dSQVlfUE9PTCAtIGNlbGxfc3RhcnQgKTsKIAotICAgICAgICAgIGZvciAoIHlpbmRleCA9IDA7IHlpbmRleCA8IHJhcy55Y291bnQ7IHlpbmRleCsrICkKLSAgICAgICAgICAgIHJhcy55Y2VsbHNbeWluZGV4XSA9IE5VTEw7CisgICAgICAgICAgcmFzLnljZWxscyA9IChQQ2VsbCopYnVmZmVyOworICAgICAgICAgIHdoaWxlICggeWNvdW50ICkKKyAgICAgICAgICAgIHJhcy55Y2VsbHNbLS15Y291bnRdID0gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIHJhcy5udW1fY2VsbHMgPSAwOwogICAgICAgICByYXMuaW52YWxpZCAgID0gMTsKLSAgICAgICAgcmFzLm1pbl9leSAgICA9IGJhbmQtPm1pbjsKLSAgICAgICAgcmFzLm1heF9leSAgICA9IGJhbmQtPm1heDsKLSAgICAgICAgcmFzLmNvdW50X2V5ICA9IGJhbmQtPm1heCAtIGJhbmQtPm1pbjsKKyAgICAgICAgcmFzLm1pbl9leSAgICA9IGJhbmRbMV07CisgICAgICAgIHJhcy5tYXhfZXkgICAgPSBiYW5kWzBdOwogCiAgICAgICAgIGVycm9yID0gZ3JheV9jb252ZXJ0X2dseXBoX2lubmVyKCBSQVNfVkFSICk7CiAKICAgICAgICAgaWYgKCAhZXJyb3IgKQogICAgICAgICB7Ci0gICAgICAgICAgZ3JheV9zd2VlcCggUkFTX1ZBUl8gJnJhcy50YXJnZXQgKTsKKyAgICAgICAgICBncmF5X3N3ZWVwKCBSQVNfVkFSICk7CiAgICAgICAgICAgYmFuZC0tOwogICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0yMDMzLDU2ICsxODI2LDQ2IEBACiAKICAgICAgIFJlZHVjZUJhbmRzOgogICAgICAgICAvKiByZW5kZXIgcG9vbCBvdmVyZmxvdzsgd2Ugd2lsbCByZWR1Y2UgdGhlIHJlbmRlciBiYW5kIGJ5IGhhbGYgKi8KLSAgICAgICAgYm90dG9tID0gYmFuZC0+bWluOwotICAgICAgICB0b3AgICAgPSBiYW5kLT5tYXg7Ci0gICAgICAgIG1pZGRsZSA9IGJvdHRvbSArICggKCB0b3AgLSBib3R0b20gKSA+PiAxICk7CisgICAgICAgIHdpZHRoID4+PSAxOwogCiAgICAgICAgIC8qIFRoaXMgaXMgdG9vIGNvbXBsZXggZm9yIGEgc2luZ2xlIHNjYW5saW5lOyB0aGVyZSBtdXN0ICovCiAgICAgICAgIC8qIGJlIHNvbWUgcHJvYmxlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgIGlmICggbWlkZGxlID09IGJvdHRvbSApCisgICAgICAgIGlmICggd2lkdGggPT0gMCApCiAgICAgICAgIHsKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgICAgICAgIEZUX1RSQUNFNygoICJncmF5X2NvbnZlcnRfZ2x5cGg6IHJvdHRlbiBnbHlwaFxuIiApKTsKLSNlbmRpZgogICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBib3R0b20tdG9wID49IHJhcy5iYW5kX3NpemUgKQotICAgICAgICAgIHJhcy5iYW5kX3Nob290Kys7Ci0KLSAgICAgICAgYmFuZFsxXS5taW4gPSBib3R0b207Ci0gICAgICAgIGJhbmRbMV0ubWF4ID0gbWlkZGxlOwotICAgICAgICBiYW5kWzBdLm1pbiA9IG1pZGRsZTsKLSAgICAgICAgYmFuZFswXS5tYXggPSB0b3A7CiAgICAgICAgIGJhbmQrKzsKKyAgICAgICAgYmFuZFsxXSAgPSBiYW5kWzBdOworICAgICAgICBiYW5kWzBdICs9IHdpZHRoOwogICAgICAgfSB3aGlsZSAoIGJhbmQgPj0gYmFuZHMgKTsKICAgICB9CiAKLSAgICBpZiAoIHJhcy5iYW5kX3Nob290ID4gOCAmJiByYXMuYmFuZF9zaXplID4gMTYgKQotICAgICAgcmFzLmJhbmRfc2l6ZSA9IHJhcy5iYW5kX3NpemUgLyAyOwotCiAgICAgcmV0dXJuIDA7CiAgIH0KIAogCiAgIHN0YXRpYyBpbnQKLSAgZ3JheV9yYXN0ZXJfcmVuZGVyKCBncmF5X1BSYXN0ZXIgICAgICAgICAgICAgcmFzdGVyLAorICBncmF5X3Jhc3Rlcl9yZW5kZXIoIEZUX1Jhc3RlciAgICAgICAgICAgICAgICByYXN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlRfUmFzdGVyX1BhcmFtcyogIHBhcmFtcyApCiAgIHsKICAgICBjb25zdCBGVF9PdXRsaW5lKiAgb3V0bGluZSAgICAgPSAoY29uc3QgRlRfT3V0bGluZSopcGFyYW1zLT5zb3VyY2U7CiAgICAgY29uc3QgRlRfQml0bWFwKiAgIHRhcmdldF9tYXAgID0gcGFyYW1zLT50YXJnZXQ7CisgICAgRlRfQkJveCAgICAgICAgICAgIGNib3gsIGNsaXA7CiAKKyNpZm5kZWYgRlRfU1RBVElDX1JBU1RFUgogICAgIGdyYXlfVFdvcmtlciAgd29ya2VyWzFdOwotCi0gICAgVENlbGwgIGJ1ZmZlcltGVF9NQVgoIEZUX1JFTkRFUl9QT09MX1NJWkUsIDIwNDggKSAvIHNpemVvZiAoIFRDZWxsICldOwotICAgIGxvbmcgICBidWZmZXJfc2l6ZSA9IHNpemVvZiAoIGJ1ZmZlciApOwotICAgIGludCAgICBiYW5kX3NpemUgICA9IChpbnQpKCBidWZmZXJfc2l6ZSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSggc2l6ZW9mICggVENlbGwgKSAqIDggKSApOworI2VuZGlmCiAKIAogICAgIGlmICggIXJhc3RlciApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIAorICAgIC8qIHRoaXMgdmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IG1vbm9jaHJvbWUgcmVuZGVyaW5nICovCisgICAgaWYgKCAhKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQUEgKSApCisgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfTW9kZSApOworCiAgICAgaWYgKCAhb3V0bGluZSApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOwogCkBAIC0yMDk3LDkgKzE4ODAsMTkgQEAKICAgICAgICAgICAgb3V0bGluZS0+Y29udG91cnNbb3V0bGluZS0+bl9jb250b3VycyAtIDFdICsgMSApCiAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfT3V0bGluZSApOwogCi0gICAgLyogaWYgZGlyZWN0IG1vZGUgaXMgbm90IHNldCwgd2UgbXVzdCBoYXZlIGEgdGFyZ2V0IGJpdG1hcCAqLwotICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKKyAgICByYXMub3V0bGluZSA9ICpvdXRsaW5lOworCisgICAgaWYgKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfRElSRUNUICkKICAgICB7CisgICAgICBpZiAoICFwYXJhbXMtPmdyYXlfc3BhbnMgKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgcmFzLnJlbmRlcl9zcGFuICAgICAgPSAoRlRfUmFzdGVyX1NwYW5fRnVuYylwYXJhbXMtPmdyYXlfc3BhbnM7CisgICAgICByYXMucmVuZGVyX3NwYW5fZGF0YSA9IHBhcmFtcy0+dXNlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIGlmIGRpcmVjdCBtb2RlIGlzIG5vdCBzZXQsIHdlIG11c3QgaGF2ZSBhIHRhcmdldCBiaXRtYXAgKi8KICAgICAgIGlmICggIXRhcmdldF9tYXAgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKIApAQCAtMjEwOSw1MSArMTkwMiw1OSBAQAogCiAgICAgICBpZiAoICF0YXJnZXRfbWFwLT5idWZmZXIgKQogICAgICAgICByZXR1cm4gRlRfVEhST1coIEludmFsaWRfQXJndW1lbnQgKTsKKworICAgICAgaWYgKCB0YXJnZXRfbWFwLT5waXRjaCA8IDAgKQorICAgICAgICByYXMudGFyZ2V0Lm9yaWdpbiA9IHRhcmdldF9tYXAtPmJ1ZmZlcjsKKyAgICAgIGVsc2UKKyAgICAgICAgcmFzLnRhcmdldC5vcmlnaW4gPSB0YXJnZXRfbWFwLT5idWZmZXIKKyAgICAgICAgICAgICAgKyAoIHRhcmdldF9tYXAtPnJvd3MgLSAxICkgKiAodW5zaWduZWQgaW50KXRhcmdldF9tYXAtPnBpdGNoOworCisgICAgICByYXMudGFyZ2V0LnBpdGNoID0gdGFyZ2V0X21hcC0+cGl0Y2g7CisKKyAgICAgIHJhcy5yZW5kZXJfc3BhbiAgICAgID0gKEZUX1Jhc3Rlcl9TcGFuX0Z1bmMpTlVMTDsKKyAgICAgIHJhcy5yZW5kZXJfc3Bhbl9kYXRhID0gTlVMTDsKICAgICB9CiAKLSAgICAvKiB0aGlzIHZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBtb25vY2hyb21lIHJlbmRlcmluZyAqLwotICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0FBICkgKQotICAgICAgcmV0dXJuIEZUX1RIUk9XKCBJbnZhbGlkX01vZGUgKTsKKyAgICBGVF9PdXRsaW5lX0dldF9DQm94KCBvdXRsaW5lLCAmY2JveCApOworCisgICAgLyogcmVqZWN0IHRvbyBsYXJnZSBvdXRsaW5lIGNvb3JkaW5hdGVzICovCisgICAgaWYgKCBjYm94LnhNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnhNYXggPiAweDEwMDAwMDBMIHx8CisgICAgICAgICBjYm94LnlNaW4gPCAtMHgxMDAwMDAwTCB8fCBjYm94LnlNYXggPiAweDEwMDAwMDBMICkKKyAgICAgIHJldHVybiBGVF9USFJPVyggSW52YWxpZF9PdXRsaW5lICk7CisKKyAgICAvKiB0cnVuY2F0ZSB0aGUgYm91bmRpbmcgYm94IHRvIGludGVnZXIgcGl4ZWxzICovCisgICAgY2JveC54TWluID0gY2JveC54TWluID4+IDY7CisgICAgY2JveC55TWluID0gY2JveC55TWluID4+IDY7CisgICAgY2JveC54TWF4ID0gKCBjYm94LnhNYXggKyA2MyApID4+IDY7CisgICAgY2JveC55TWF4ID0gKCBjYm94LnlNYXggKyA2MyApID4+IDY7CiAKICAgICAvKiBjb21wdXRlIGNsaXBwaW5nIGJveCAqLwogICAgIGlmICggISggcGFyYW1zLT5mbGFncyAmIEZUX1JBU1RFUl9GTEFHX0RJUkVDVCApICkKICAgICB7CiAgICAgICAvKiBjb21wdXRlIGNsaXAgYm94IGZyb20gdGFyZ2V0IHBpeG1hcCAqLwotICAgICAgcmFzLmNsaXBfYm94LnhNaW4gPSAwOwotICAgICAgcmFzLmNsaXBfYm94LnlNaW4gPSAwOwotICAgICAgcmFzLmNsaXBfYm94LnhNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPndpZHRoOwotICAgICAgcmFzLmNsaXBfYm94LnlNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPnJvd3M7CisgICAgICBjbGlwLnhNaW4gPSAwOworICAgICAgY2xpcC55TWluID0gMDsKKyAgICAgIGNsaXAueE1heCA9IChGVF9Qb3MpdGFyZ2V0X21hcC0+d2lkdGg7CisgICAgICBjbGlwLnlNYXggPSAoRlRfUG9zKXRhcmdldF9tYXAtPnJvd3M7CiAgICAgfQogICAgIGVsc2UgaWYgKCBwYXJhbXMtPmZsYWdzICYgRlRfUkFTVEVSX0ZMQUdfQ0xJUCApCi0gICAgICByYXMuY2xpcF9ib3ggPSBwYXJhbXMtPmNsaXBfYm94OworICAgICAgY2xpcCA9IHBhcmFtcy0+Y2xpcF9ib3g7CiAgICAgZWxzZQogICAgIHsKLSAgICAgIHJhcy5jbGlwX2JveC54TWluID0gLTMyNzY4TDsKLSAgICAgIHJhcy5jbGlwX2JveC55TWluID0gLTMyNzY4TDsKLSAgICAgIHJhcy5jbGlwX2JveC54TWF4ID0gIDMyNzY3TDsKLSAgICAgIHJhcy5jbGlwX2JveC55TWF4ID0gIDMyNzY3TDsKKyAgICAgIGNsaXAueE1pbiA9IC0zMjc2OEw7CisgICAgICBjbGlwLnlNaW4gPSAtMzI3NjhMOworICAgICAgY2xpcC54TWF4ID0gIDMyNzY3TDsKKyAgICAgIGNsaXAueU1heCA9ICAzMjc2N0w7CiAgICAgfQogCi0gICAgZ3JheV9pbml0X2NlbGxzKCBSQVNfVkFSXyBidWZmZXIsIGJ1ZmZlcl9zaXplICk7CisgICAgLyogY2xpcCB0byB0YXJnZXQgYml0bWFwLCBleGl0IGlmIG5vdGhpbmcgdG8gZG8gKi8KKyAgICByYXMubWluX2V4ID0gRlRfTUFYKCBjYm94LnhNaW4sIGNsaXAueE1pbiApOworICAgIHJhcy5taW5fZXkgPSBGVF9NQVgoIGNib3gueU1pbiwgY2xpcC55TWluICk7CisgICAgcmFzLm1heF9leCA9IEZUX01JTiggY2JveC54TWF4LCBjbGlwLnhNYXggKTsKKyAgICByYXMubWF4X2V5ID0gRlRfTUlOKCBjYm94LnlNYXgsIGNsaXAueU1heCApOwogCi0gICAgcmFzLm91dGxpbmUgICAgICAgID0gKm91dGxpbmU7Ci0gICAgcmFzLm51bV9jZWxscyAgICAgID0gMDsKLSAgICByYXMuaW52YWxpZCAgICAgICAgPSAxOwotICAgIHJhcy5iYW5kX3NpemUgICAgICA9IGJhbmRfc2l6ZTsKLSAgICByYXMubnVtX2dyYXlfc3BhbnMgPSAwOwotICAgIHJhcy5zcGFuX3kgICAgICAgICA9IDA7Ci0KLSAgICBpZiAoIHBhcmFtcy0+ZmxhZ3MgJiBGVF9SQVNURVJfRkxBR19ESVJFQ1QgKQotICAgIHsKLSAgICAgIHJhcy5yZW5kZXJfc3BhbiAgICAgID0gKEZUX1Jhc3Rlcl9TcGFuX0Z1bmMpcGFyYW1zLT5ncmF5X3NwYW5zOwotICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSBwYXJhbXMtPnVzZXI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICByYXMudGFyZ2V0ICAgICAgICAgICA9ICp0YXJnZXRfbWFwOwotICAgICAgcmFzLnJlbmRlcl9zcGFuICAgICAgPSAoRlRfUmFzdGVyX1NwYW5fRnVuYylncmF5X3JlbmRlcl9zcGFuOwotICAgICAgcmFzLnJlbmRlcl9zcGFuX2RhdGEgPSAmcmFzOwotICAgIH0KKyAgICBpZiAoIHJhcy5tYXhfZXggPD0gcmFzLm1pbl9leCB8fCByYXMubWF4X2V5IDw9IHJhcy5taW5fZXkgKQorICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gZ3JheV9jb252ZXJ0X2dseXBoKCBSQVNfVkFSICk7CiAgIH0KQEAgLTIxNjIsNyArMTk2Myw3IEBACiAgIC8qKioqIFJBU1RFUiBPQkpFQ1QgQ1JFQVRJT046IEluIHN0YW5kLWFsb25lIG1vZGUsIHdlIHNpbXBseSB1c2UgKioqKiovCiAgIC8qKioqICAgICAgICAgICAgICAgICAgICAgICAgIGEgc3RhdGljIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKioqKiovCiAKLSNpZmRlZiBfU1RBTkRBTE9ORV8KKyNpZmRlZiBTVEFOREFMT05FXwogCiAgIHN0YXRpYyBpbnQKICAgZ3JheV9yYXN0ZXJfbmV3KCB2b2lkKiAgICAgICBtZW1vcnksCkBAIC0yMTg3LDcgKzE5ODgsNyBAQAogICAgIEZUX1VOVVNFRCggcmFzdGVyICk7CiAgIH0KIAotI2Vsc2UgLyogIV9TVEFOREFMT05FXyAqLworI2Vsc2UgLyogIVNUQU5EQUxPTkVfICovCiAKICAgc3RhdGljIGludAogICBncmF5X3Jhc3Rlcl9uZXcoIEZUX01lbW9yeSAgIG1lbW9yeSwKQEAgLTIyMTcsMTMgKzIwMTgsMTMgQEAKICAgICBGVF9GUkVFKCByYXN0ZXIgKTsKICAgfQogCi0jZW5kaWYgLyogIV9TVEFOREFMT05FXyAqLworI2VuZGlmIC8qICFTVEFOREFMT05FXyAqLwogCiAKICAgc3RhdGljIHZvaWQKLSAgZ3JheV9yYXN0ZXJfcmVzZXQoIEZUX1Jhc3RlciAgcmFzdGVyLAotICAgICAgICAgICAgICAgICAgICAgY2hhciogICAgICBwb29sX2Jhc2UsCi0gICAgICAgICAgICAgICAgICAgICBsb25nICAgICAgIHBvb2xfc2l6ZSApCisgIGdyYXlfcmFzdGVyX3Jlc2V0KCBGVF9SYXN0ZXIgICAgICAgcmFzdGVyLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogIHBvb2xfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgICBwb29sX3NpemUgKQogICB7CiAgICAgRlRfVU5VU0VEKCByYXN0ZXIgKTsKICAgICBGVF9VTlVTRUQoIHBvb2xfYmFzZSApOwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdGdyYXlzLmggYi9zcmMvc21vb3RoL2Z0Z3JheXMuaAppbmRleCAxYjU3NjAzLi4yMWMyYmFkIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0Z3JheXMuaAorKysgYi9zcmMvc21vb3RoL2Z0Z3JheXMuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBGcmVlVHlwZSBzbW9vdGggcmVuZGVyZXIgZGVjbGFyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsMTUgKzE2LDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVEdSQVlTX0hfXwotI2RlZmluZSBfX0ZUR1JBWVNfSF9fCisjaWZuZGVmIEZUR1JBWVNfSF8KKyNkZWZpbmUgRlRHUkFZU19IXwogCiAjaWZkZWYgX19jcGx1c3BsdXMKICAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogCi0jaWZkZWYgX1NUQU5EQUxPTkVfCisjaWZkZWYgU1RBTkRBTE9ORV8KICNpbmNsdWRlICJmdGltYWdlLmgiCiAjZWxzZQogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC01Miw3ICs1Miw3IEBACiAgIH0KICNlbmRpZgogCi0jZW5kaWYgLyogX19GVEdSQVlTX0hfXyAqLworI2VuZGlmIC8qIEZUR1JBWVNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbWVycnMuaCBiL3NyYy9zbW9vdGgvZnRzbWVycnMuaAppbmRleCBjYzM4YWExLi5hNzU5YjkxIDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21lcnJzLmgKKysrIGIvc3JjL3Ntb290aC9mdHNtZXJycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIHNtb290aCByZW5kZXJlciBlcnJvciBjb2RlcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4gICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fRlRTTUVSUlNfSF9fCi0jZGVmaW5lIF9fRlRTTUVSUlNfSF9fCisjaWZuZGVmIEZUU01FUlJTX0hfCisjZGVmaW5lIEZUU01FUlJTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgU21vb3RoX0Vycl8KQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgRlRfRVJST1JTX0gKIAotI2VuZGlmIC8qIF9fRlRTTUVSUlNfSF9fICovCisjZW5kaWYgLyogRlRTTUVSUlNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzbW9vdGguYyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguYwppbmRleCAzNjIwNTUwLi43OTI3Njc2IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL2Z0c21vb3RoLmMKKysrIGIvc3JjL3Ntb290aC9mdHNtb290aC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIEFudGktYWxpYXNpbmcgcmVuZGVyZXIgaW50ZXJmYWNlIChib2R5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL2Z0c21vb3RoLmggYi9zcmMvc21vb3RoL2Z0c21vb3RoLmgKaW5kZXggNzY1MDE4Yy4uYzdjMjhjMiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNtb290aC5oCisrKyBiL3NyYy9zbW9vdGgvZnRzbW9vdGguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBBbnRpLWFsaWFzaW5nIHJlbmRlcmVyIGludGVyZmFjZSAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fRlRTTU9PVEhfSF9fCi0jZGVmaW5lIF9fRlRTTU9PVEhfSF9fCisjaWZuZGVmIEZUU01PT1RIX0hfCisjZGVmaW5lIEZUU01PT1RIX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC00Myw3ICs0Myw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fRlRTTU9PVEhfSF9fICovCisjZW5kaWYgLyogRlRTTU9PVEhfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy9zbW9vdGgvZnRzcGljLmMgYi9zcmMvc21vb3RoL2Z0c3BpYy5jCmluZGV4IDhlNmVkNTcuLjZjMmIyMzIgMTAwNjQ0Ci0tLSBhL3NyYy9zbW9vdGgvZnRzcGljLmMKKysrIGIvc3JjL3Ntb290aC9mdHNwaWMuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUaGUgRnJlZVR5cGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBzZXJ2aWNlcyBmb3Igc21vb3RoIG1vZHVsZS4gICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwOS0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDktMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIE9yYW4gQWdyYSBhbmQgTWlja2V5IEdhYmVsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Ntb290aC9mdHNwaWMuaCBiL3NyYy9zbW9vdGgvZnRzcGljLmgKaW5kZXggMDcxYWZjZi4uZmU3NjE1MiAxMDA2NDQKLS0tIGEvc3JjL3Ntb290aC9mdHNwaWMuaAorKysgYi9zcmMvc21vb3RoL2Z0c3BpYy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRoZSBGcmVlVHlwZSBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIHNlcnZpY2VzIGZvciBzbW9vdGggbW9kdWxlLiAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA5LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwOS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgT3JhbiBBZ3JhIGFuZCBNaWNrZXkgR2FiZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19GVFNQSUNfSF9fCi0jZGVmaW5lIF9fRlRTUElDX0hfXworI2lmbmRlZiBGVFNQSUNfSF8KKyNkZWZpbmUgRlRTUElDX0hfCiAKIAogI2luY2x1ZGUgRlRfSU5URVJOQUxfUElDX0gKQEAgLTY5LDcgKzY5LDcgQEAKIAogRlRfRU5EX0hFQURFUgogCi0jZW5kaWYgLyogX19GVFNQSUNfSF9fICovCisjZW5kaWYgLyogRlRTUElDX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvc21vb3RoL3Ntb290aC5jIGIvc3JjL3Ntb290aC9zbW9vdGguYwppbmRleCA0Y2E0MzQ0Li45N2NhM2U1IDEwMDY0NAotLS0gYS9zcmMvc21vb3RoL3Ntb290aC5jCisrKyBiL3NyYy9zbW9vdGgvc21vb3RoLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgYW50aS1hbGlhc2luZyByYXN0ZXJlciBtb2R1bGUgY29tcG9uZW50IChib2R5IG9ubHkpLiAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90cnVldHlwZS5jIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKaW5kZXggZjkyOTQzNy4uMjNlMmVhMCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKKysrIGIvc3JjL3RydWV0eXBlL3RydWV0eXBlLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgRnJlZVR5cGUgVHJ1ZVR5cGUgZHJpdmVyIGNvbXBvbmVudCAoYm9keSBvbmx5KS4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGRyaXZlci5jIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKaW5kZXggMWJhNzFmMC4uYjk2YTIyNyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUgZm9udCBkcml2ZXIgaW1wbGVtZW50YXRpb24gKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTYxLDIzICs2MSw1MCBAQAogICBzdGF0aWMgRlRfRXJyb3IKICAgdHRfcHJvcGVydHlfc2V0KCBGVF9Nb2R1bGUgICAgbW9kdWxlLCAgICAgICAgIC8qIFRUX0RyaXZlciAqLwogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBwcm9wZXJ0eV9uYW1lLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICB2YWx1ZSApCisgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogIHZhbHVlLAorICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wgICAgICB2YWx1ZV9pc19zdHJpbmcgKQogICB7CiAgICAgRlRfRXJyb3IgICBlcnJvciAgPSBGVF9FcnJfT2s7CiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKW1vZHVsZTsKIAorI2lmbmRlZiBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5UX1BST1BFUlRJRVMKKyAgICBGVF9VTlVTRUQoIHZhbHVlX2lzX3N0cmluZyApOworI2VuZGlmCisKIAogICAgIGlmICggIWZ0X3N0cmNtcCggcHJvcGVydHlfbmFtZSwgImludGVycHJldGVyLXZlcnNpb24iICkgKQogICAgIHsKLSAgICAgIEZUX1VJbnQqICBpbnRlcnByZXRlcl92ZXJzaW9uID0gKEZUX1VJbnQqKXZhbHVlOworICAgICAgRlRfVUludCAgaW50ZXJwcmV0ZXJfdmVyc2lvbjsKIAogCi0jaWZuZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCAqaW50ZXJwcmV0ZXJfdmVyc2lvbiAhPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICkKLSAgICAgICAgZXJyb3IgPSBGVF9FUlIoIFVuaW1wbGVtZW50ZWRfRmVhdHVyZSApOworI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fRU5WSVJPTk1FTlRfUFJPUEVSVElFUworICAgICAgaWYgKCB2YWx1ZV9pc19zdHJpbmcgKQorICAgICAgeworICAgICAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKil2YWx1ZTsKKworCisgICAgICAgIGludGVycHJldGVyX3ZlcnNpb24gPSAoRlRfVUludClmdF9zdHJ0b2woIHMsIE5VTEwsIDEwICk7CisgICAgICB9CiAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID0gKmludGVycHJldGVyX3ZlcnNpb247CisgICAgICB7CisgICAgICAgIEZUX1VJbnQqICBpdiA9IChGVF9VSW50Kil2YWx1ZTsKKworCisgICAgICAgIGludGVycHJldGVyX3ZlcnNpb24gPSAqaXY7CisgICAgICB9CisKKyAgICAgIGlmICggaW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgICAgICAgfHwgaW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4CisjZW5kaWYKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgICAgICB8fCBpbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAKKyNlbmRpZgorICAgICAgICAgKQorICAgICAgICBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPSBpbnRlcnByZXRlcl92ZXJzaW9uOworICAgICAgZWxzZQorICAgICAgICBlcnJvciA9IEZUX0VSUiggVW5pbXBsZW1lbnRlZF9GZWF0dXJlICk7CiAKICAgICAgIHJldHVybiBlcnJvcjsKICAgICB9CkBAIC0xOTQsNyArMjIxLDcgQEAKICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgKmFkdmFuY2VzICkKICAgewogICAgIEZUX1VJbnQgIG5uOwotICAgIFRUX0ZhY2UgIGZhY2UgID0gKFRUX0ZhY2UpIHR0ZmFjZTsKKyAgICBUVF9GYWNlICBmYWNlID0gKFRUX0ZhY2UpIHR0ZmFjZTsKIAogCiAgICAgLyogWFhYOiBUT0RPOiBjaGVjayBmb3Igc2JpdHMgKi8KQEAgLTIyOCw2ICsyNTUsNyBAQAogICAgIHJldHVybiBGVF9FcnJfT2s7CiAgIH0KIAorCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNjMsNyArMjkxLDcgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgIFNGTlRfU2VydmljZSAgICAgIHNmbnQgICAgPSAoU0ZOVF9TZXJ2aWNlKSB0dGZhY2UtPnNmbnQ7CisgICAgICBTRk5UX1NlcnZpY2UgICAgICBzZm50ICAgID0gKFNGTlRfU2VydmljZSl0dGZhY2UtPnNmbnQ7CiAgICAgICBGVF9TaXplX01ldHJpY3MqICBtZXRyaWNzID0gJnNpemUtPm1ldHJpY3M7CiAKIApAQCAtMjkxLDcgKzMxOSw3IEBACiAgICAgaWYgKCBGVF9IQVNfRklYRURfU0laRVMoIHNpemUtPmZhY2UgKSApCiAgICAgewogICAgICAgVFRfRmFjZSAgICAgICB0dGZhY2UgPSAoVFRfRmFjZSlzaXplLT5mYWNlOwotICAgICAgU0ZOVF9TZXJ2aWNlICBzZm50ICAgPSAoU0ZOVF9TZXJ2aWNlKSB0dGZhY2UtPnNmbnQ7CisgICAgICBTRk5UX1NlcnZpY2UgIHNmbnQgICA9IChTRk5UX1NlcnZpY2UpdHRmYWNlLT5zZm50OwogICAgICAgRlRfVUxvbmcgICAgICBzdHJpa2VfaW5kZXg7CiAKIApAQCAtMzExLDYgKzMzOSwyNSBAQAogICAgIHsKICAgICAgIGVycm9yID0gdHRfc2l6ZV9yZXNldCggdHRzaXplICk7CiAgICAgICB0dHNpemUtPnJvb3QubWV0cmljcyA9IHR0c2l6ZS0+bWV0cmljczsKKworI2lmZGVmIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUgorICAgICAgLyogZm9yIHRoZSBgTVBTJyBieXRlY29kZSBpbnN0cnVjdGlvbiB3ZSBuZWVkIHRoZSBwb2ludCBzaXplICovCisgICAgICB7CisgICAgICAgIEZUX1VJbnQgIHJlc29sdXRpb24gPSB0dHNpemUtPm1ldHJpY3MueF9wcGVtID4gdHRzaXplLT5tZXRyaWNzLnlfcHBlbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJlcS0+aG9yaVJlc29sdXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXEtPnZlcnRSZXNvbHV0aW9uOworCisKKyAgICAgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIHJlc29sdXRpb24gdmFsdWUsIGFzc3VtZSA3MmRwaSAqLworICAgICAgICBpZiAoIHJlcS0+dHlwZSA9PSBGVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVMgfHwKKyAgICAgICAgICAgICAhcmVzb2x1dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICByZXNvbHV0aW9uID0gNzI7CisKKyAgICAgICAgdHRzaXplLT5wb2ludF9zaXplID0gRlRfTXVsRGl2KCB0dHNpemUtPnR0bWV0cmljcy5wcGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0ICogNzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbiApOworICAgICAgfQorI2VuZGlmCiAgICAgfQogCiAgICAgcmV0dXJuIGVycm9yOwpAQCAtNDI5LDExICs0NzYsNyBAQAogICB7CiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX1RSVUVUWVBFX0VOR0lORV9UWVBFX1VOUEFURU5URUQKLSNlbHNlCiAgICAgRlRfVFJVRVRZUEVfRU5HSU5FX1RZUEVfUEFURU5URUQKLSNlbmRpZgogCiAjZWxzZSAvKiAhVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSICovCiAKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGRyaXZlci5oIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKaW5kZXggNmNhY2Q2MC4uNzQzOTJiYiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0ZHJpdmVyLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgSGlnaC1sZXZlbCBUcnVlVHlwZSBkcml2ZXIgaW50ZXJmYWNlIChzcGVjaWZpY2F0aW9uKS4gICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RURFJJVkVSX0hfXwotI2RlZmluZSBfX1RURFJJVkVSX0hfXworI2lmbmRlZiBUVERSSVZFUl9IXworI2RlZmluZSBUVERSSVZFUl9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtMzIsNyArMzIsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RURFJJVkVSX0hfXyAqLworI2VuZGlmIC8qIFRURFJJVkVSX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRlcnJvcnMuaCBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCmluZGV4IGJhMzJjZjcuLjg5NTk4OWYgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGVycm9ycy5oCisrKyBiL3NyYy90cnVldHlwZS90dGVycm9ycy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIGVycm9yIGNvZGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDAxLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwMS0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yMywxMiArMjMsMTIgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaWZuZGVmIF9fVFRFUlJPUlNfSF9fCi0jZGVmaW5lIF9fVFRFUlJPUlNfSF9fCisjaWZuZGVmIFRURVJST1JTX0hfCisjZGVmaW5lIFRURVJST1JTX0hfCiAKICNpbmNsdWRlIEZUX01PRFVMRV9FUlJPUlNfSAogCi0jdW5kZWYgX19GVEVSUk9SU19IX18KKyN1bmRlZiBGVEVSUk9SU19IXwogCiAjdW5kZWYgIEZUX0VSUl9QUkVGSVgKICNkZWZpbmUgRlRfRVJSX1BSRUZJWCAgVFRfRXJyXwpAQCAtMzYsNiArMzYsNyBAQAogCiAjaW5jbHVkZSBGVF9FUlJPUlNfSAogCi0jZW5kaWYgLyogX19UVEVSUk9SU19IX18gKi8KKyNlbmRpZiAvKiBUVEVSUk9SU19IXyAqLworCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYyBiL3NyYy90cnVldHlwZS90dGdsb2FkLmMKaW5kZXggZDk0ZmM5Mi4uMmQwYjI5ZiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgZ2x5cGhfaW5kZXggKQogICB7CiAgICAgVFRfRmFjZSAgICBmYWNlICAgPSBsb2FkZXItPmZhY2U7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGZhY2UgKTsKICNlbmRpZgogCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICBsb2FkZXItPnRvcF9iZWFyaW5nICA9IHRvcF9iZWFyaW5nOwogICAgIGxvYWRlci0+dmFkdmFuY2UgICAgID0gYWR2YW5jZV9oZWlnaHQ7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggJiYKICAgICAgICAgIGxvYWRlci0+ZXhlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICB7CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgIC8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUgb24gYW5kIG9mZi4gICAgICAgICAgICAgICAgICAgKi8KICAgICAgIHNwaF9zZXRfdHdlYWtzKCBsb2FkZXIsIGdseXBoX2luZGV4ICk7CiAgICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBpZiAoICFsb2FkZXItPmxpbmVhcl9kZWYgKQogICAgIHsKQEAgLTQyNyw3ICs0MjcsOCBAQAogICAgICAgbG9hZC0+Z2x5cGgtPmNvbnRyb2xfbGVuICA9IG5faW5zOwogICAgICAgbG9hZC0+Z2x5cGgtPmNvbnRyb2xfZGF0YSA9IGxvYWQtPmV4ZWMtPmdseXBoSW5zOwogCi0gICAgICBGVF9NRU1fQ09QWSggbG9hZC0+ZXhlYy0+Z2x5cGhJbnMsIHAsIChGVF9Mb25nKW5faW5zICk7CisgICAgICBpZiAoIG5faW5zICkKKyAgICAgICAgRlRfTUVNX0NPUFkoIGxvYWQtPmV4ZWMtPmdseXBoSW5zLCBwLCAoRlRfTG9uZyluX2lucyApOwogICAgIH0KIAogI2VuZGlmIC8qIFRUX1VTRV9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLwpAQCAtNzMyLDcgKzczMyw4IEBACiAgIFRUX0hpbnRfR2x5cGgoIFRUX0xvYWRlciAgbG9hZGVyLAogICAgICAgICAgICAgICAgICBGVF9Cb29sICAgIGlzX2NvbXBvc2l0ZSApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZiBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZIHx8IFwKKyAgICBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgVFRfRmFjZSAgICBmYWNlICAgPSBsb2FkZXItPmZhY2U7CiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAjZW5kaWYKQEAgLTgxNSwxMyArODE3LDIzIEBACiAKICNlbmRpZgogCi0gICAgLyogc2F2ZSBnbHlwaCBwaGFudG9tIHBvaW50cyAqLwotICAgIGxvYWRlci0+cHAxID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF07Ci0gICAgbG9hZGVyLT5wcDIgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAzXTsKLSAgICBsb2FkZXItPnBwMyA9IHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDJdOwotICAgIGxvYWRlci0+cHA0ID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV07CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAvKiBTYXZlIHBvc3NpYmx5IG1vZGlmaWVkIGdseXBoIHBoYW50b20gcG9pbnRzIHVubGVzcyBpbiB2NDAgYmFja3dhcmRzICovCisgICAgLyogY29tcGF0aWJpbGl0eSBtb2RlLCB3aGVyZSBubyBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIG1lYW5zIG5vIHJlYXNvbiAqLworICAgIC8qIHRvIGNoYW5nZSBiZWFyaW5ncyBvciBhZHZhbmNlIHdpZHRocy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoICEoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICYmCisgICAgICAgICAgICAhbG9hZGVyLT5leGVjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApICkKKyAgICB7CisjZW5kaWYKKyAgICAgIGxvYWRlci0+cHAxID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gNF07CisgICAgICBsb2FkZXItPnBwMiA9IHpvbmUtPmN1clt6b25lLT5uX3BvaW50cyAtIDNdOworICAgICAgbG9hZGVyLT5wcDMgPSB6b25lLT5jdXJbem9uZS0+bl9wb2ludHMgLSAyXTsKKyAgICAgIGxvYWRlci0+cHA0ID0gem9uZS0+Y3VyW3pvbmUtPm5fcG9pbnRzIC0gMV07CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICB9CisjZW5kaWYKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgewogICAgICAgaWYgKCBsb2FkZXItPmV4ZWMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19ERUVNQk9MREVOICkKQEAgLTgzMCw3ICs4NDIsNyBAQAogICAgICAgZWxzZSBpZiAoIGxvYWRlci0+ZXhlYy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0VNQk9MREVOICkKICAgICAgICAgRlRfT3V0bGluZV9FbWJvbGRlblhZKCAmbG9hZGVyLT5nbG9hZGVyLT5jdXJyZW50Lm91dGxpbmUsIDI0LCAwICk7CiAgICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICByZXR1cm4gRlRfRXJyX09rOwogICB9CkBAIC04OTYsNyArOTA4LDcgQEAKICAgICB9CiAKICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIFRUX0ZhY2UgICAgZmFjZSAgID0gbG9hZGVyLT5mYWNlOwogICAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAKQEAgLTkxNSw3ICs5MjcsNyBAQAogICAgICAgRlRfQm9vbCAgZG9fc2NhbGUgPSBGQUxTRTsKIAogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAogICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgICB7CkBAIC05NDYsNyArOTU4LDcgQEAKICAgICAgIH0KICAgICAgIGVsc2UKIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAgIHsKICAgICAgICAgLyogc2NhbGUgdGhlIGdseXBoICovCkBAIC0xMDc3LDcgKzEwODksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC1zdWJnbHlwaC0+dHJhbnNmb3JtLnl4OwogICAgICAgICBpbnQgIGMgPSBzdWJnbHlwaC0+dHJhbnNmb3JtLnh5ID4gMCA/ICBzdWJnbHlwaC0+dHJhbnNmb3JtLnh5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLXN1YmdseXBoLT50cmFuc2Zvcm0ueHk7Ci0gICAgICAgIGludCAgZCA9IHN1YmdseXBoLT50cmFuc2Zvcm0ueXkgPiAwID8gc3ViZ2x5cGgtPnRyYW5zZm9ybS55eQorICAgICAgICBpbnQgIGQgPSBzdWJnbHlwaC0+dHJhbnNmb3JtLnl5ID4gMCA/ICBzdWJnbHlwaC0+dHJhbnNmb3JtLnl5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLXN1YmdseXBoLT50cmFuc2Zvcm0ueXk7CiAgICAgICAgIGludCAgbSA9IGEgPiBiID8gYSA6IGI7CiAgICAgICAgIGludCAgbiA9IGMgPiBkID8gYyA6IGQ7CkBAIC0xMzIzLDQ5ICsxMzM1LDcxIEBACiAgICAqICgzKSBmb3IgZXZlcnl0aGluZyBlbHNlLgogICAgKgogICAgKi8KKyAgc3RhdGljIHZvaWQKKyAgdHRfbG9hZGVyX3NldF9wcCggVFRfTG9hZGVyICBsb2FkZXIgKQorICB7CisgICAgRlRfQm9vbCAgc3VicGl4ZWxfaGludGluZyA9IDA7CisgICAgRlRfQm9vbCAgZ3JheXNjYWxlICAgICAgICA9IDA7CisgICAgRlRfQm9vbCAgdXNlX2F3XzIgICAgICAgICA9IDA7CisKICNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyAgICBUVF9Ecml2ZXIgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggbG9hZGVyLT5mYWNlICk7CisjZW5kaWYKIAotI2RlZmluZSBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgc3VicGl4ZWxfaGludGluZ18gPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+c3VicGl4ZWxfaGludGluZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgZ3JheXNjYWxlXyAgICAgICAgPSBsb2FkZXItPmV4ZWMgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRlRfQm9vbCAgdXNlX2F3XzJfICAgICAgICAgPSAoRlRfQm9vbCkoIHN1YnBpeGVsX2hpbnRpbmdfICYmICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmF5c2NhbGVfICAgICAgICApOyAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueCA9IChsb2FkZXIpLT5iYm94LnhNaW4gLSAobG9hZGVyKS0+bGVmdF9iZWFyaW5nOyBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAxLnkgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMi54ID0gKGxvYWRlciktPnBwMS54ICsgKGxvYWRlciktPmFkdmFuY2U7ICAgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDIueSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMy54ID0gdXNlX2F3XzJfID8gKGxvYWRlciktPmFkdmFuY2UgLyAyIDogMDsgICAgICAgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDMueSA9IChsb2FkZXIpLT5iYm94LnlNYXggKyAobG9hZGVyKS0+dG9wX2JlYXJpbmc7ICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHA0LnggPSB1c2VfYXdfMl8gPyAobG9hZGVyKS0+YWR2YW5jZSAvIDIgOiAwOyAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwNC55ID0gKGxvYWRlciktPnBwMy55IC0gKGxvYWRlciktPnZhZHZhbmNlOyAgICAgICAgIFwKLSAgICAgICAgICB9IHdoaWxlICggMCApCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKKyAgICB7CisgICAgICBzdWJwaXhlbF9oaW50aW5nID0gbG9hZGVyLT5leGVjID8gbG9hZGVyLT5leGVjLT5zdWJwaXhlbF9oaW50aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDsKKyAgICAgIGdyYXlzY2FsZSAgICAgICAgPSBsb2FkZXItPmV4ZWMgPyBsb2FkZXItPmV4ZWMtPmdyYXlzY2FsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgfQorI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKKyAgICB7CisgICAgICBzdWJwaXhlbF9oaW50aW5nID0gbG9hZGVyLT5leGVjID8gbG9hZGVyLT5leGVjLT5zdWJwaXhlbF9oaW50aW5nX2xlYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAwOworICAgICAgZ3JheXNjYWxlICAgICAgICA9IGxvYWRlci0+ZXhlYyA/IGxvYWRlci0+ZXhlYy0+Z3JheXNjYWxlX2NsZWFydHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDA7CisgICAgfQorI2VuZGlmCiAKLSNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyAgICB1c2VfYXdfMiA9IChGVF9Cb29sKSggc3VicGl4ZWxfaGludGluZyAmJiBncmF5c2NhbGUgKTsKIAotI2RlZmluZSBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMS54ID0gKGxvYWRlciktPmJib3gueE1pbiAtIChsb2FkZXIpLT5sZWZ0X2JlYXJpbmc7IFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDEueSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAyLnggPSAobG9hZGVyKS0+cHAxLnggKyAobG9hZGVyKS0+YWR2YW5jZTsgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMi55ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHAzLnggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgKGxvYWRlciktPnBwMy55ID0gKGxvYWRlciktPmJib3gueU1heCArIChsb2FkZXIpLT50b3BfYmVhcmluZzsgIFwKLSAgICAgICAgICAgIChsb2FkZXIpLT5wcDQueCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAobG9hZGVyKS0+cHA0LnkgPSAobG9hZGVyKS0+cHAzLnkgLSAobG9hZGVyKS0+dmFkdmFuY2U7ICAgICAgICAgXAotICAgICAgICAgIH0gd2hpbGUgKCAwICkKKyAgICBsb2FkZXItPnBwMS54ID0gbG9hZGVyLT5iYm94LnhNaW4gLSBsb2FkZXItPmxlZnRfYmVhcmluZzsKKyAgICBsb2FkZXItPnBwMS55ID0gMDsKKyAgICBsb2FkZXItPnBwMi54ID0gbG9hZGVyLT5wcDEueCArIGxvYWRlci0+YWR2YW5jZTsKKyAgICBsb2FkZXItPnBwMi55ID0gMDsKIAotI2VuZGlmIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyAgICBsb2FkZXItPnBwMy54ID0gdXNlX2F3XzIgPyBsb2FkZXItPmFkdmFuY2UgLyAyIDogMDsKKyAgICBsb2FkZXItPnBwMy55ID0gbG9hZGVyLT5iYm94LnlNYXggKyBsb2FkZXItPnRvcF9iZWFyaW5nOworICAgIGxvYWRlci0+cHA0LnggPSB1c2VfYXdfMiA/IGxvYWRlci0+YWR2YW5jZSAvIDIgOiAwOworICAgIGxvYWRlci0+cHA0LnkgPSBsb2FkZXItPnBwMy55IC0gbG9hZGVyLT52YWR2YW5jZTsKKyAgfQorCisKKyAgLyogYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIHJldHJpZXZlIGktdGggbm9kZSBmcm9tIGdpdmVuIEZUX0xpc3QgKi8KKyAgc3RhdGljIEZUX0xpc3ROb2RlCisgIGZ0X2xpc3RfZ2V0X25vZGVfYXQoIEZUX0xpc3QgIGxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIGluZGV4ICkKKyAgeworICAgIEZUX0xpc3ROb2RlICBjdXI7CisKKworICAgIGlmICggIWxpc3QgKQorICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKCBjdXIgPSBsaXN0LT5oZWFkOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCApCisgICAgeworICAgICAgaWYgKCAhaW5kZXggKQorICAgICAgICByZXR1cm4gY3VyOworCisgICAgICBpbmRleC0tOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworICB9CiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0MDIsMTMgKzE0MzYsMTIgQEAKICAgICAgIEZUX1RSQUNFNSgoICIgIG5lc3RpbmcgbGV2ZWw6ICVkXG4iLCByZWN1cnNlX2NvdW50ICkpOwogI2VuZGlmCiAKLSAgICAvKiBzb21lIGZvbnRzIGhhdmUgYW4gaW5jb3JyZWN0IHZhbHVlIG9mIGBtYXhDb21wb25lbnREZXB0aCcsICovCi0gICAgLyogdGh1cyB3ZSBhbGxvdyBkZXB0aCAxIHRvIGNhdGNoIHRoZSBtYWpvcml0eSBvZiB0aGVtICAgICAgICAqLwotICAgIGlmICggcmVjdXJzZV9jb3VudCA+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICByZWN1cnNlX2NvdW50ID4gZmFjZS0+bWF4X3Byb2ZpbGUubWF4Q29tcG9uZW50RGVwdGggKQorICAgIC8qIHNvbWUgZm9udHMgaGF2ZSBhbiBpbmNvcnJlY3QgdmFsdWUgb2YgYG1heENvbXBvbmVudERlcHRoJyAqLworICAgIGlmICggcmVjdXJzZV9jb3VudCA+IGZhY2UtPm1heF9wcm9maWxlLm1heENvbXBvbmVudERlcHRoICkKICAgICB7Ci0gICAgICBlcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX0NvbXBvc2l0ZSApOwotICAgICAgZ290byBFeGl0OworICAgICAgRlRfVFJBQ0UxKCggImxvYWRfdHJ1ZXR5cGVfZ2x5cGg6IG1heENvbXBvbmVudERlcHRoIHNldCB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgIHJlY3Vyc2VfY291bnQgKSk7CisgICAgICBmYWNlLT5tYXhfcHJvZmlsZS5tYXhDb21wb25lbnREZXB0aCA9IChGVF9VU2hvcnQpcmVjdXJzZV9jb3VudDsKICAgICB9CiAKICNpZm5kZWYgRlRfQ09ORklHX09QVElPTl9JTkNSRU1FTlRBTApAQCAtMTUyMyw3ICsxNTU2LDcgQEAKIAogICAgICAgLyogbXVzdCBpbml0aWFsaXplIHBvaW50cyBiZWZvcmUgKHBvc3NpYmx5KSBvdmVycmlkaW5nICovCiAgICAgICAvKiBnbHlwaCBtZXRyaWNzIGZyb20gdGhlIGluY3JlbWVudGFsIGludGVyZmFjZSAgICAgICAgKi8KLSAgICAgIFRUX0xPQURFUl9TRVRfUFAoIGxvYWRlciApOworICAgICAgdHRfbG9hZGVyX3NldF9wcCggbG9hZGVyICk7CiAKICNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX0lOQ1JFTUVOVEFMCiAgICAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwpAQCAtMTU5OCw3ICsxNjMxLDcgQEAKIAogICAgIC8qIG11c3QgaW5pdGlhbGl6ZSBwaGFudG9tIHBvaW50cyBiZWZvcmUgKHBvc3NpYmx5KSBvdmVycmlkaW5nICovCiAgICAgLyogZ2x5cGggbWV0cmljcyBmcm9tIHRoZSBpbmNyZW1lbnRhbCBpbnRlcmZhY2UgICAgICAgICAgICAgICAgKi8KLSAgICBUVF9MT0FERVJfU0VUX1BQKCBsb2FkZXIgKTsKKyAgICB0dF9sb2FkZXJfc2V0X3BwKCBsb2FkZXIgKTsKIAogI2lmZGVmIEZUX0NPTkZJR19PUFRJT05fSU5DUkVNRU5UQUwKICAgICB0dF9nZXRfbWV0cmljc19pbmNyX292ZXJyaWRlcyggbG9hZGVyLCBnbHlwaF9pbmRleCApOwpAQCAtMTY0MCw2ICsxNjczLDggQEAKICAgICAgIEZUX1VJbnQgICBzdGFydF9jb250b3VyOwogICAgICAgRlRfVUxvbmcgIGluc19wb3M7ICAvKiBwb3NpdGlvbiBvZiBjb21wb3NpdGUgaW5zdHJ1Y3Rpb25zLCBpZiBhbnkgKi8KIAorICAgICAgRlRfTGlzdE5vZGUgIG5vZGUsIG5vZGUyOworCiAKICAgICAgIC8qCiAgICAgICAgKiBXZSBzdG9yZSB0aGUgZ2x5cGggaW5kZXggZGlyZWN0bHkgaW4gdGhlIGBub2RlLT5kYXRhJyBwb2ludGVyLApAQCAtMTY0OCw2ICsxNjgzLDEyIEBACiAgICAgICAgKiBwb2ludGVycyB3aXRoIGEgd2lkdGggb2YgYXQgbGVhc3QgMzIgYml0cy4KICAgICAgICAqLwogCisKKyAgICAgIC8qIGNsZWFyIHRoZSBub2RlcyBmaWxsZWQgYnkgc2libGluZyBjaGFpbnMgKi8KKyAgICAgIG5vZGUgPSBmdF9saXN0X2dldF9ub2RlX2F0KCAmbG9hZGVyLT5jb21wb3NpdGVzLCByZWN1cnNlX2NvdW50ICk7CisgICAgICBmb3IgKCBub2RlMiA9IG5vZGU7IG5vZGUyOyBub2RlMiA9IG5vZGUyLT5uZXh0ICkKKyAgICAgICAgbm9kZTItPmRhdGEgPSAodm9pZCopVUxPTkdfTUFYOworCiAgICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGFscmVhZHkgaGF2ZSBhIGNvbXBvc2l0ZSBnbHlwaCB3aXRoIHRoaXMgaW5kZXggKi8KICAgICAgIGlmICggRlRfTGlzdF9GaW5kKCAmbG9hZGVyLT5jb21wb3NpdGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKikodW5zaWduZWQgbG9uZylnbHlwaF9pbmRleCApICkKQEAgLTE2NTcsMTEgKzE2OTgsMTIgQEAKICAgICAgICAgZXJyb3IgPSBGVF9USFJPVyggSW52YWxpZF9Db21wb3NpdGUgKTsKICAgICAgICAgZ290byBFeGl0OwogICAgICAgfQorCisgICAgICBlbHNlIGlmICggbm9kZSApCisgICAgICAgIG5vZGUtPmRhdGEgPSAodm9pZCopKHVuc2lnbmVkIGxvbmcpZ2x5cGhfaW5kZXg7CisKICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgRlRfTGlzdE5vZGUgIG5vZGUgPSBOVUxMOwotCi0KICAgICAgICAgaWYgKCBGVF9ORVcoIG5vZGUgKSApCiAgICAgICAgICAgZ290byBFeGl0OwogICAgICAgICBub2RlLT5kYXRhID0gKHZvaWQqKSh1bnNpZ25lZCBsb25nKWdseXBoX2luZGV4OwpAQCAtMTcwMyw2ICsxNzQ1LDEwIEBACiAgICAgICAgIG91dGxpbmUubl9wb2ludHMgICA9IChzaG9ydCkoIGdsb2FkZXItPmN1cnJlbnQubnVtX3N1YmdseXBocyArIDQgKTsKICAgICAgICAgb3V0bGluZS5uX2NvbnRvdXJzID0gb3V0bGluZS5uX3BvaW50czsKIAorICAgICAgICBvdXRsaW5lLnBvaW50cyAgID0gTlVMTDsKKyAgICAgICAgb3V0bGluZS50YWdzICAgICA9IE5VTEw7CisgICAgICAgIG91dGxpbmUuY29udG91cnMgPSBOVUxMOworCiAgICAgICAgIGlmICggRlRfTkVXX0FSUkFZKCBwb2ludHMsIG91dGxpbmUubl9wb2ludHMgKSAgIHx8CiAgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCB0YWdzLCBvdXRsaW5lLm5fcG9pbnRzICkgICAgIHx8CiAgICAgICAgICAgICAgRlRfTkVXX0FSUkFZKCBjb250b3Vycywgb3V0bGluZS5uX3BvaW50cyApICkKQEAgLTE3NjEsMTEgKzE4MDcsMTEgQEAKIAogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGxpbWl0OyBpKyssIHN1YmdseXBoKysgKQogICAgICAgICB7Ci0gICAgICAgICAgLyogWFhYOiBvdmVyZmxvdyBjaGVjayBmb3Igc3ViZ2x5cGgtPnthcmcxLGFyZzJ9LiAgICAgICAgICovCi0gICAgICAgICAgLyogICAgICBEZWx0YXMgbXVzdCBiZSB3aXRoaW4gc2lnbmVkIDE2LWJpdCwgICAgICAgICAgICAgICovCi0gICAgICAgICAgLyogICAgICBidXQgdGhlIHJlc3RyaWN0aW9uIG9mIHN1bW1lZCBkZWx0YXMgaXMgbm90IGNsZWFyICovCi0gICAgICAgICAgc3ViZ2x5cGgtPmFyZzEgPSAoRlRfSW50MTYpcG9pbnRzW2ldLng7Ci0gICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50MTYpcG9pbnRzW2ldLnk7CisgICAgICAgICAgaWYgKCBzdWJnbHlwaC0+ZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN1YmdseXBoLT5hcmcxID0gKEZUX0ludDE2KXBvaW50c1tpXS54OworICAgICAgICAgICAgc3ViZ2x5cGgtPmFyZzIgPSAoRlRfSW50MTYpcG9pbnRzW2ldLnk7CisgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgbG9hZGVyLT5wcDEueCA9IHBvaW50c1tpICsgMF0ueDsKQEAgLTE5NDIsNyArMTk4OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICBnbHlwaF9pbmRleCApCiAgIHsKICAgICBUVF9GYWNlICAgIGZhY2UgICA9IGxvYWRlci0+ZmFjZTsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZiBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZIHx8IFwKKyAgICBkZWZpbmVkIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCiAgICAgVFRfRHJpdmVyICBkcml2ZXIgPSAoVFRfRHJpdmVyKUZUX0ZBQ0VfRFJJVkVSKCBmYWNlICk7CiAjZW5kaWYKIApAQCAtMTk2OSwxMSArMjAxNiwxOCBAQAogICAgIGdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSA9IGJib3gueU1heDsKICAgICBnbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZSAgPSBsb2FkZXItPnBwMi54IC0gbG9hZGVyLT5wcDEueDsKIAotICAgIC8qIGFkanVzdCBhZHZhbmNlIHdpZHRoIHRvIHRoZSB2YWx1ZSBjb250YWluZWQgaW4gdGhlIGhkbXggdGFibGUgKi8KLSAgICAvKiB1bmxlc3MgRlRfTE9BRF9DT01QVVRFX01FVFJJQ1MgaXMgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgaWYgKCAhZmFjZS0+cG9zdHNjcmlwdC5pc0ZpeGVkUGl0Y2ggICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICBJU19ISU5URUQoIGxvYWRlci0+bG9hZF9mbGFncyApICAgICAgICAgICAgICAgICAgICYmCi0gICAgICAgICAhKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyApICkKKyAgICAvKiBBZGp1c3QgYWR2YW5jZSB3aWR0aCB0byB0aGUgdmFsdWUgY29udGFpbmVkIGluIHRoZSBoZG14IHRhYmxlICAgICovCisgICAgLyogdW5sZXNzIEZUX0xPQURfQ09NUFVURV9NRVRSSUNTIGlzIHNldCBvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworICAgIC8qIG1vZGUgb2YgdGhlIHY0MCBpbnRlcnByZXRlciBpcyBhY3RpdmUuICBTZWUgYHR0aW50ZXJwLmgnIGZvciAgICAgKi8KKyAgICAvKiBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYgKAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICAgICAhKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MCAmJgorICAgICAgICAgICAgKCBsb2FkZXItPmV4ZWMgJiYgbG9hZGVyLT5leGVjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAgKSApICYmCisjZW5kaWYKKyAgICAgICAgICFmYWNlLT5wb3N0c2NyaXB0LmlzRml4ZWRQaXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgICAgICAgSVNfSElOVEVEKCBsb2FkZXItPmxvYWRfZmxhZ3MgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICAhKCBsb2FkZXItPmxvYWRfZmxhZ3MgJiBGVF9MT0FEX0NPTVBVVEVfTUVUUklDUyApICAgICAgICAgICAgICAgKQogICAgIHsKICAgICAgIEZUX0J5dGUqICB3aWR0aHA7CiAKQEAgLTE5ODIsNyArMjAzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0+cm9vdC5tZXRyaWNzLnhfcHBlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCApOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAogICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgICB7CkBAIC0yMDAwLDcgKzIwNTQsNyBAQAogICAgICAgfQogICAgICAgZWxzZQogCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgICAgewogICAgICAgICBpZiAoIHdpZHRocCApCkBAIC0yMTg5LDYgKzIyNDMsMTAgQEAKICNpZmRlZiBUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIKICAgICBGVF9Cb29sICAgIHBlZGFudGljID0gRlRfQk9PTCggbG9hZF9mbGFncyAmIEZUX0xPQURfUEVEQU5USUMgKTsKICNlbmRpZgorI2lmIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgfHwgXAorICAgIGRlZmluZWQgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBUVF9Ecml2ZXIgIGRyaXZlciA9IChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIChUVF9GYWNlKWdseXBoLT5mYWNlICk7CisjZW5kaWYKIAogCiAgICAgZmFjZSAgID0gKFRUX0ZhY2UpZ2x5cGgtPmZhY2U7CkBAIC0yMjAyLDExICsyMjYwLDEzIEBACiAgICAgaWYgKCBJU19ISU5URUQoIGxvYWRfZmxhZ3MgKSAmJiAhZ2x5Zl90YWJsZV9vbmx5ICkKICAgICB7CiAgICAgICBUVF9FeGVjQ29udGV4dCAgZXhlYzsKLSAgICAgIEZUX0Jvb2wgICAgICAgICBncmF5c2NhbGU7CisgICAgICBGVF9Cb29sICAgICAgICAgZ3JheXNjYWxlID0gVFJVRTsKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgRlRfQm9vbCAgICAgICAgIHN1YnBpeGVsX2hpbnRpbmdfbGVhbjsKKyAgICAgIEZUX0Jvb2wgICAgICAgICBncmF5c2NhbGVfY2xlYXJ0eXBlOworI2VuZGlmCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZmFjZSApOwotCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIEZUX0Jvb2wgIHN1YnBpeGVsX2hpbnRpbmcgPSBGQUxTRTsKIAogI2lmIDAKQEAgLTIyMTgsNyArMjI3OCw3IEBACiAgICAgICBGVF9Cb29sICBzdWJwaXhlbF9wb3NpdGlvbmVkOwogICAgICAgRlRfQm9vbCAgZ3JheV9jbGVhcnR5cGU7CiAjZW5kaWYKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICBGVF9Cb29sICByZWV4ZWN1dGUgPSBGQUxTRTsKIApAQCAtMjIzOSw3ICsyMjk5LDI2IEBACiAgICAgICBpZiAoICFleGVjICkKICAgICAgICAgcmV0dXJuIEZUX1RIUk9XKCBDb3VsZF9Ob3RfRmluZF9Db250ZXh0ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl80MCApCisgICAgICB7CisgICAgICAgIHN1YnBpeGVsX2hpbnRpbmdfbGVhbiAgID0gVFJVRTsKKyAgICAgICAgZ3JheXNjYWxlX2NsZWFydHlwZSAgICAgPSAhRlRfQk9PTCggbG9hZF9mbGFncyAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xPQURfVEFSR0VUX0xDRF9WICAgKTsKKyAgICAgICAgZXhlYy0+dmVydGljYWxfbGNkX2xlYW4gPSBGVF9CT09MKCBsb2FkX2ZsYWdzICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgKTsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgc3VicGl4ZWxfaGludGluZ19sZWFuICAgPSBGQUxTRTsKKyAgICAgICAgZ3JheXNjYWxlX2NsZWFydHlwZSAgICAgPSBGQUxTRTsKKyAgICAgICAgZXhlYy0+dmVydGljYWxfbGNkX2xlYW4gPSBGQUxTRTsKKyAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAogICAgICAgaWYgKCBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPT0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zOCApCiAgICAgICB7CkBAIC0yMjk2LDE4ICsyMzc1LDIzIEBACiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCi0gICAgICB7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fNDAgKQorICAgICAgICBncmF5c2NhbGUgPSBGVF9CT09MKCAhc3VicGl4ZWxfaGludGluZ19sZWFuICAgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfTE9BRF9UQVJHRVRfTU9ERSggbG9hZF9mbGFncyApICE9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICAgICApOworICAgICAgZWxzZQorI2VuZGlmCiAgICAgICAgIGdyYXlzY2FsZSA9IEZUX0JPT0woIEZUX0xPQURfVEFSR0VUX01PREUoIGxvYWRfZmxhZ3MgKSAhPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9SRU5ERVJfTU9ERV9NT05PICk7Ci0gICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICApOwogCiAgICAgICBlcnJvciA9IFRUX0xvYWRfQ29udGV4dCggZXhlYywgZmFjZSwgc2l6ZSApOwogICAgICAgaWYgKCBlcnJvciApCiAgICAgICAgIHJldHVybiBlcnJvcjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgICAgIGlmICggZHJpdmVyLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzggKQogICAgICAgewpAQCAtMjMzNSw5ICsyNDE5LDM3IEBACiAgICAgICB9CiAgICAgICBlbHNlCiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICB7CisKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKKyAgICAgICAgeworICAgICAgICAgIC8qIGEgY2hhbmdlIGZyb20gbW9ubyB0byBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLworICAgICAgICAgIC8qIHJlcXVpcmVzIGEgcmUtZXhlY3V0aW9uIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgICAgICAgICAgICAqLworICAgICAgICAgIGlmICggc3VicGl4ZWxfaGludGluZ19sZWFuICE9IGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBzdWJwaXhlbCBoaW50aW5nIGNoYW5nZSwiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHJlLWV4ZWN1dGluZyBgcHJlcCcgdGFibGVcbiIgKSk7CisKKyAgICAgICAgICAgIGV4ZWMtPnN1YnBpeGVsX2hpbnRpbmdfbGVhbiA9IHN1YnBpeGVsX2hpbnRpbmdfbGVhbjsKKyAgICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICAgICAgICAgICAgICA9IFRSVUU7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBjb2xvcmVkIHRvIGdyYXlzY2FsZSBzdWJwaXhlbCByZW5kZXJpbmcgKGFuZCAqLworICAgICAgICAgIC8qIHZpY2UgdmVyc2EpIHJlcXVpcmVzIGEgcmUtZXhlY3V0aW9uIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgKi8KKyAgICAgICAgICBpZiAoIGdyYXlzY2FsZV9jbGVhcnR5cGUgIT0gZXhlYy0+Z3JheXNjYWxlX2NsZWFydHlwZSApCisgICAgICAgICAgeworICAgICAgICAgICAgRlRfVFJBQ0U0KCggInR0X2xvYWRlcl9pbml0OiBncmF5c2NhbGUgc3VicGl4ZWwgaGludGluZyBjaGFuZ2UsIgorICAgICAgICAgICAgICAgICAgICAgICAgIiByZS1leGVjdXRpbmcgYHByZXAnIHRhYmxlXG4iICkpOworCisgICAgICAgICAgICBleGVjLT5ncmF5c2NhbGVfY2xlYXJ0eXBlID0gZ3JheXNjYWxlX2NsZWFydHlwZTsKKyAgICAgICAgICAgIHJlZXhlY3V0ZSAgICAgICAgICAgICAgICAgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgLyogYSBjaGFuZ2UgZnJvbSBtb25vIHRvIGdyYXlzY2FsZSByZW5kZXJpbmcgKGFuZCB2aWNlIHZlcnNhKSAqLwogICAgICAgICAvKiByZXF1aXJlcyBhIHJlLWV4ZWN1dGlvbiBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICovCiAgICAgICAgIGlmICggZ3JheXNjYWxlICE9IGV4ZWMtPmdyYXlzY2FsZSApCkBAIC0yMzcwLDEwICsyNDgyLDExIEBACiAgICAgICBpZiAoIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiAyICkKICAgICAgICAgZXhlYy0+R1MgPSB0dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSBhIGZvbnQgaGludGVkIGZvciBDbGVhclR5cGUgLS0gICAgICAgICAgICovCiAgICAgICAvKiBub3RlIHRoYXQgdGhpcyBmbGFnIGNhbiBhbHNvIGJlIG1vZGlmaWVkIGluIGEgZ2x5cGgncyBieXRlY29kZSAqLwotICAgICAgaWYgKCBleGVjLT5HUy5pbnN0cnVjdF9jb250cm9sICYgNCApCisgICAgICBpZiAoIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICYmCisgICAgICAgICAgIGV4ZWMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgZXhlYy0+aWdub3JlX3hfbW9kZSA9IDA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaCBiL3NyYy90cnVldHlwZS90dGdsb2FkLmgKaW5kZXggOGUzMjU1ZS4uYmZhMjllNCAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z2xvYWQuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRnbG9hZC5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdseXBoIExvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVEdMT0FEX0hfXwotI2RlZmluZSBfX1RUR0xPQURfSF9fCisjaWZuZGVmIFRUR0xPQURfSF8KKyNkZWZpbmUgVFRHTE9BRF9IXwogCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgpAQCAtNTYsNyArNTYsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUR0xPQURfSF9fICovCisjZW5kaWYgLyogVFRHTE9BRF9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYyBiL3NyYy90cnVldHlwZS90dGd4dmFyLmMKaW5kZXggNWQ0Mzg0ZS4uYzBkMDEzYyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0Z3h2YXIuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIEdYIEZvbnQgVmFyaWF0aW9uIGxvYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDA0LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAwNC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgV2VybmVyIExlbWJlcmcsIGFuZCBHZW9yZ2UgV2lsbGlhbXMuICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNTgsNDggKzE1OCw0OSBAQAogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCBGVF9ORVdfQVJSQVkoIHBvaW50cywgbiApICkKKyAgICAvKiBpbiB0aGUgbmVzdGVkIGxvb3BzIGJlbG93IHdlIGluY3JlYXNlIGBpJyB0d2ljZTsgKi8KKyAgICAvKiBpdCBpcyBmYXN0ZXIgdG8gc2ltcGx5IGFsbG9jYXRlIG9uZSBtb3JlIHNsb3QgICAgKi8KKyAgICAvKiB0aGFuIHRvIGFkZCBhbm90aGVyIHRlc3Qgd2l0aGluIHRoZSBsb29wICAgICAgICAgKi8KKyAgICBpZiAoIEZUX05FV19BUlJBWSggcG9pbnRzLCBuICsgMSApICkKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgKnBvaW50X2NudCA9IG47CiAKLSAgICBpID0gMDsKKyAgICBmaXJzdCA9IDA7CisgICAgaSAgICAgPSAwOwogICAgIHdoaWxlICggaSA8IG4gKQogICAgIHsKICAgICAgIHJ1bmNudCA9IEZUX0dFVF9CWVRFKCk7CiAgICAgICBpZiAoIHJ1bmNudCAmIEdYX1BUX1BPSU5UU19BUkVfV09SRFMgKQogICAgICAgewogICAgICAgICBydW5jbnQgICAgICY9IEdYX1BUX1BPSU5UX1JVTl9DT1VOVF9NQVNLOwotICAgICAgICBmaXJzdCAgICAgICA9IEZUX0dFVF9VU0hPUlQoKTsKKyAgICAgICAgZmlyc3QgICAgICArPSBGVF9HRVRfVVNIT1JUKCk7CiAgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CiAKLSAgICAgICAgaWYgKCBydW5jbnQgPCAxIHx8IGkgKyBydW5jbnQgPiBuICkKLSAgICAgICAgICBnb3RvIEV4aXQ7Ci0KICAgICAgICAgLyogZmlyc3QgcG9pbnQgbm90IGluY2x1ZGVkIGluIHJ1biBjb3VudCAqLwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHJ1bmNudDsgaisrICkKICAgICAgICAgewogICAgICAgICAgIGZpcnN0ICAgICAgKz0gRlRfR0VUX1VTSE9SVCgpOwogICAgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CisgICAgICAgICAgaWYgKCBpID49IG4gKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGVsc2UKICAgICAgIHsKLSAgICAgICAgZmlyc3QgICAgICAgPSBGVF9HRVRfQllURSgpOworICAgICAgICBmaXJzdCAgICAgICs9IEZUX0dFVF9CWVRFKCk7CiAgICAgICAgIHBvaW50c1tpKytdID0gZmlyc3Q7CiAKLSAgICAgICAgaWYgKCBydW5jbnQgPCAxIHx8IGkgKyBydW5jbnQgPiBuICkKLSAgICAgICAgICBnb3RvIEV4aXQ7Ci0KICAgICAgICAgZm9yICggaiA9IDA7IGogPCBydW5jbnQ7IGorKyApCiAgICAgICAgIHsKICAgICAgICAgICBmaXJzdCAgICAgICs9IEZUX0dFVF9CWVRFKCk7CiAgICAgICAgICAgcG9pbnRzW2krK10gPSBmaXJzdDsKKyAgICAgICAgICBpZiAoIGkgPj0gbiApCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgfQogICAgIH0KIAotICBFeGl0OgogICAgIHJldHVybiBwb2ludHM7CiAgIH0KIApAQCAtNTUxLDcgKzU1Miw3IEBACiAgICAgICBmb3IgKCBpID0gMDsgaSA8IGJsZW5kLT50dXBsZWNvdW50OyBpKysgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTUoKCAiICBbICIgKSk7Ci0gICAgICAgIGZvciAoIGogPSAwIDsgaiA8IChGVF9VSW50KWd2YXJfaGVhZC5heGlzQ291bnQ7IGorKyApCisgICAgICAgIGZvciAoIGogPSAwOyBqIDwgKEZUX1VJbnQpZ3Zhcl9oZWFkLmF4aXNDb3VudDsgaisrICkKICAgICAgICAgewogICAgICAgICAgIGJsZW5kLT50dXBsZWNvb3Jkc1tpICogZ3Zhcl9oZWFkLmF4aXNDb3VudCArIGpdID0KICAgICAgICAgICAgIEZUX0dFVF9TSE9SVCgpICogNDsgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gRlRfRml4ZWQgKi8KQEAgLTYxMyw2ICs2MTQsMTEgQEAKICAgICB7CiAgICAgICBGVF9UUkFDRTYoKCAiICAgIGF4aXMgY29vcmRpbmF0ZSAlZCAoJS40Zik6XG4iLAogICAgICAgICAgICAgICAgICAgaSwgYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgaWYgKCAhKCB0dXBsZUluZGV4ICYgR1hfVElfSU5URVJNRURJQVRFX1RVUExFICkgKQorICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgaW50ZXJtZWRpYXRlIGNvb3JkaW5hdGVzICVkICglLjRmLCAlLjRmKTpcbiIsCisgICAgICAgICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgICAgIGltX3N0YXJ0X2Nvb3Jkc1tpXSAvIDY1NTM2LjAsCisgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwogCiAgICAgICAvKiBJdCdzIG5vdCBjbGVhciB3aHkgKGZvciBpbnRlcm1lZGlhdGUgdHVwbGVzKSB3ZSBkb24ndCBuZWVkICAgICAqLwogICAgICAgLyogdG8gY2hlY2sgYWdhaW5zdCBzdGFydC9lbmQgLS0gdGhlIGRvY3VtZW50YXRpb24gc2F5cyB3ZSBkb24ndC4gKi8KQEAgLTYyNSw2MiArNjMxLDc0IEBACiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCi0gICAgICBlbHNlIGlmICggYmxlbmQtPm5vcm1hbGl6ZWRjb29yZHNbaV0gPT0gMCApCisgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID09IDAgKQogICAgICAgewogICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgYXhpcyBjb29yZGluYXRlIGlzIHplcm8sIHN0b3BcbiIgKSk7CiAgICAgICAgIGFwcGx5ID0gMDsKICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAKLSAgICAgIGVsc2UgaWYgKCAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgMCAmJiB0dXBsZV9jb29yZHNbaV0gPiAwICkgfHwKLSAgICAgICAgICAgICAgICAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMCAmJiB0dXBsZV9jb29yZHNbaV0gPCAwICkgKQorICAgICAgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA9PSB0dXBsZV9jb29yZHNbaV0gKQogICAgICAgewotICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGlzIGV4Y2VlZGVkLCBzdG9wXG4iLAorICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGZpdHMgcGVyZmVjdGx5XG4iLAogICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwotICAgICAgICBhcHBseSA9IDA7Ci0gICAgICAgIGJyZWFrOworICAgICAgICAvKiBgYXBwbHknIGRvZXMgbm90IGNoYW5nZSAqLworICAgICAgICBjb250aW51ZTsKICAgICAgIH0KIAotICAgICAgZWxzZSBpZiAoICEoIHR1cGxlSW5kZXggJiBHWF9USV9JTlRFUk1FRElBVEVfVFVQTEUgKSApCisgICAgICBpZiAoICEoIHR1cGxlSW5kZXggJiBHWF9USV9JTlRFUk1FRElBVEVfVFVQTEUgKSApCiAgICAgICB7CisgICAgICAgIC8qIG5vdCBhbiBpbnRlcm1lZGlhdGUgdHVwbGUgKi8KKworICAgICAgICBpZiAoIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIDwgRlRfTUlOKCAwLCB0dXBsZV9jb29yZHNbaV0gKSB8fAorICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gRlRfTUFYKCAwLCB0dXBsZV9jb29yZHNbaV0gKSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgdHVwbGUgY29vcmRpbmF0ZSB2YWx1ZSAlLjRmIGlzIGV4Y2VlZGVkLCBzdG9wXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CisgICAgICAgICAgYXBwbHkgPSAwOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIHR1cGxlIGNvb3JkaW5hdGUgdmFsdWUgJS40ZiBmaXRzXG4iLAogICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLyA2NTUzNi4wICkpOwotICAgICAgICAvKiBub3QgYW4gaW50ZXJtZWRpYXRlIHR1cGxlICovCi0gICAgICAgIGFwcGx5ID0gRlRfTXVsRml4KCBhcHBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLWJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldICk7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IGltX3N0YXJ0X2Nvb3Jkc1tpXSB8fAotICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gaW1fZW5kX2Nvb3Jkc1tpXSAgICkKLSAgICAgIHsKLSAgICAgICAgRlRfVFJBQ0U2KCggIiAgICAgIGludGVybWVkaWF0ZSB0dXBsZSByYW5nZSBbJS40ZjslLjRmXSBpcyBleGNlZWRlZCwiCi0gICAgICAgICAgICAgICAgICAgICIgc3RvcFxuIiwKLSAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKLSAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIGFwcGx5ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IHR1cGxlX2Nvb3Jkc1tpXSApCi0gICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gZml0c1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKLSAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7CiAgICAgICAgIGFwcGx5ID0gRlRfTXVsRGl2KCBhcHBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIC0gaW1fc3RhcnRfY29vcmRzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGVfY29vcmRzW2ldIC0gaW1fc3RhcnRfY29vcmRzW2ldICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlX2Nvb3Jkc1tpXSApOwogICAgICAgfQotCiAgICAgICBlbHNlCiAgICAgICB7Ci0gICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gZml0c1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKLSAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAvIDY1NTM2LjAgKSk7Ci0gICAgICAgIGFwcGx5ID0gRlRfTXVsRGl2KCBhcHBseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLSBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLSB0dXBsZV9jb29yZHNbaV0gKTsKKyAgICAgICAgLyogaW50ZXJtZWRpYXRlIHR1cGxlICovCisKKyAgICAgICAgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IGltX3N0YXJ0X2Nvb3Jkc1tpXSB8fAorICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldID4gaW1fZW5kX2Nvb3Jkc1tpXSAgICkKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gaXMgZXhjZWVkZWQsIgorICAgICAgICAgICAgICAgICAgICAgICIgc3RvcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgICAgIGFwcGx5ID0gMDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKCBibGVuZC0+bm9ybWFsaXplZGNvb3Jkc1tpXSA8IHR1cGxlX2Nvb3Jkc1tpXSApCisgICAgICAgIHsKKyAgICAgICAgICBGVF9UUkFDRTYoKCAiICAgICAgaW50ZXJtZWRpYXRlIHR1cGxlIHJhbmdlIFslLjRmOyUuNGZdIGZpdHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaW1fc3RhcnRfY29vcmRzW2ldIC8gNjU1MzYuMCwKKyAgICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC8gNjU1MzYuMCApKTsKKyAgICAgICAgICBhcHBseSA9IEZUX011bERpdiggYXBwbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldIC0gaW1fc3RhcnRfY29vcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZV9jb29yZHNbaV0gLSBpbV9zdGFydF9jb29yZHNbaV0gKTsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIEZUX1RSQUNFNigoICIgICAgICBpbnRlcm1lZGlhdGUgdHVwbGUgcmFuZ2UgWyUuNGY7JS40Zl0gZml0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBpbV9zdGFydF9jb29yZHNbaV0gLyA2NTUzNi4wLAorICAgICAgICAgICAgICAgICAgICAgIGltX2VuZF9jb29yZHNbaV0gLyA2NTUzNi4wICkpOworICAgICAgICAgIGFwcGx5ID0gRlRfTXVsRGl2KCBhcHBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1fZW5kX2Nvb3Jkc1tpXSAtIGJsZW5kLT5ub3JtYWxpemVkY29vcmRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbV9lbmRfY29vcmRzW2ldIC0gdHVwbGVfY29vcmRzW2ldICk7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9CiAKQEAgLTE2OTksMTIgKzE3MTcsMTEgQEAKICAgLyogbW9kZWxlZCBhZnRlciBgSW5zX0lVUCAqLwogCiAgIHN0YXRpYyB2b2lkCi0gIHR0X2hhbmRsZV9kZWx0YXMoIEZUX091dGxpbmUqICBvdXRsaW5lLAotICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgaW5fcG9pbnRzLAotICAgICAgICAgICAgICAgICAgICBGVF9Cb29sKiAgICAgaGFzX2RlbHRhICkKKyAgdHRfaW50ZXJwb2xhdGVfZGVsdGFzKCBGVF9PdXRsaW5lKiAgb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgb3V0X3BvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICAgaW5fcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0Jvb2wqICAgICBoYXNfZGVsdGEgKQogICB7Ci0gICAgRlRfVmVjdG9yKiAgb3V0X3BvaW50czsKLQogICAgIEZUX0ludCAgZmlyc3RfcG9pbnQ7CiAgICAgRlRfSW50ICBlbmRfcG9pbnQ7CiAKQEAgLTE3MTksOCArMTczNiw2IEBACiAgICAgaWYgKCAhb3V0bGluZS0+bl9jb250b3VycyApCiAgICAgICByZXR1cm47CiAKLSAgICBvdXRfcG9pbnRzID0gb3V0bGluZS0+cG9pbnRzOwotCiAgICAgY29udG91ciA9IDA7CiAgICAgcG9pbnQgICA9IDA7CiAKQEAgLTE4MjQsNiArMTgzOSw3IEBACiAgICAgR1hfQmxlbmQgICAgYmxlbmQgID0gZmFjZS0+YmxlbmQ7CiAKICAgICBGVF9WZWN0b3IqICBwb2ludHNfb3JnID0gTlVMTDsKKyAgICBGVF9WZWN0b3IqICBwb2ludHNfb3V0ID0gTlVMTDsKICAgICBGVF9Cb29sKiAgICBoYXNfZGVsdGEgID0gTlVMTDsKIAogICAgIEZUX0Vycm9yICAgIGVycm9yOwpAQCAtMTg1NSw2ICsxODcxLDcgQEAKICAgICB9CiAKICAgICBpZiAoIEZUX05FV19BUlJBWSggcG9pbnRzX29yZywgbl9wb2ludHMgKSB8fAorICAgICAgICAgRlRfTkVXX0FSUkFZKCBwb2ludHNfb3V0LCBuX3BvaW50cyApIHx8CiAgICAgICAgICBGVF9ORVdfQVJSQVkoIGhhc19kZWx0YSwgbl9wb2ludHMgKSAgKQogICAgICAgZ290byBGYWlsMTsKIApAQCAtMTg3Nyw3ICsxODk0LDggQEAKICAgICBvZmZzZXRUb0RhdGEgPSBGVF9HRVRfVVNIT1JUKCk7CiAKICAgICAvKiByb3VnaCBzYW5pdHkgdGVzdCAqLwotICAgIGlmICggb2Zmc2V0VG9EYXRhICsgdHVwbGVDb3VudCAqIDQgPiBibGVuZC0+Z3Zhcl9zaXplICkKKyAgICBpZiAoIG9mZnNldFRvRGF0YSArICggdHVwbGVDb3VudCAmIEdYX1RDX1RVUExFX0NPVU5UX01BU0sgKSAqIDQgPgorICAgICAgICAgICBibGVuZC0+Z3Zhcl9zaXplICkKICAgICB7CiAgICAgICBGVF9UUkFDRTIoKCAiVFRfVmFyeV9BcHBseV9HbHlwaF9EZWx0YXM6IgogICAgICAgICAgICAgICAgICAgIiBpbnZhbGlkIGdseXBoIHZhcmlhdGlvbiBhcnJheSBoZWFkZXJcbiIgKSk7CkBAIC0xOTA1LDYgKzE5MjMsOSBAQAogICAgIEZUX1RSQUNFNSgoICJndmFyOiB0aGVyZSBhcmUgJWQgdHVwbGVzOlxuIiwKICAgICAgICAgICAgICAgICB0dXBsZUNvdW50ICYgR1hfVENfVFVQTEVfQ09VTlRfTUFTSyApKTsKIAorICAgIGZvciAoIGogPSAwOyBqIDwgbl9wb2ludHM7IGorKyApCisgICAgICBwb2ludHNfb3JnW2pdID0gb3V0bGluZS0+cG9pbnRzW2pdOworCiAgICAgZm9yICggaSA9IDA7IGkgPCAoIHR1cGxlQ291bnQgJiBHWF9UQ19UVVBMRV9DT1VOVF9NQVNLICk7IGkrKyApCiAgICAgewogICAgICAgRlRfVUludCAgIHR1cGxlRGF0YVNpemU7CkBAIC0xOTU5LDEwICsxOTgwLDEwIEBACiAKICAgICAgIGhlcmUgPSBGVF9TdHJlYW1fRlRlbGwoIHN0cmVhbSApOwogCisgICAgICBGVF9TdHJlYW1fU2Vla1NldCggc3RyZWFtLCBvZmZzZXRUb0RhdGEgKTsKKwogICAgICAgaWYgKCB0dXBsZUluZGV4ICYgR1hfVElfUFJJVkFURV9QT0lOVF9OVU1CRVJTICkKICAgICAgIHsKLSAgICAgICAgRlRfU3RyZWFtX1NlZWtTZXQoIHN0cmVhbSwgb2Zmc2V0VG9EYXRhICk7Ci0KICAgICAgICAgbG9jYWxwb2ludHMgPSBmdF92YXJfcmVhZHBhY2tlZHBvaW50cyggc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZC0+Z3Zhcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnRfY291bnQgKTsKQEAgLTE5OTgsMjIgKzIwMTksMjAgQEAKICAgICAgICAgLyogdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBkZWx0YXMgZm9yIGV2ZXJ5IHBvaW50IGluIHRoZSBnbHlwaCAqLwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQogICAgICAgICB7Ci0jaWZkZWYgRlRfREVCVUdfTEVWRUxfVFJBQ0UKLSAgICAgICAgICBGVF9WZWN0b3IgIHBvaW50X29yZyA9IG91dGxpbmUtPnBvaW50c1tqXTsKLSNlbmRpZgorICAgICAgICAgIEZUX1BvcyAgZGVsdGFfeCA9IEZUX011bEZpeCggZGVsdGFzX3hbal0sIGFwcGx5ICk7CisgICAgICAgICAgRlRfUG9zICBkZWx0YV95ID0gRlRfTXVsRml4KCBkZWx0YXNfeVtqXSwgYXBwbHkgKTsKIAogCi0gICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnggKz0gRlRfTXVsRml4KCBkZWx0YXNfeFtqXSwgYXBwbHkgKTsKLSAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueSArPSBGVF9NdWxGaXgoIGRlbHRhc195W2pdLCBhcHBseSApOworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54ICs9IGRlbHRhX3g7CisgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKz0gZGVsdGFfeTsKIAogI2lmZGVmIEZUX0RFQlVHX0xFVkVMX1RSQUNFCi0gICAgICAgICAgaWYgKCAoIHBvaW50X29yZy54ICE9IG91dGxpbmUtPnBvaW50c1tqXS54ICkgfHwKLSAgICAgICAgICAgICAgICggcG9pbnRfb3JnLnkgIT0gb3V0bGluZS0+cG9pbnRzW2pdLnkgKSApCisgICAgICAgICAgaWYgKCBkZWx0YV94IHx8IGRlbHRhX3kgKQogICAgICAgICAgIHsKICAgICAgICAgICAgIEZUX1RSQUNFNygoICIgICAgICAlZDogKCVkLCAlZCkgLT4gKCVkLCAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBqLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRfb3JnLngsCi0gICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9vcmcueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54IC0gZGVsdGFfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55IC0gZGVsdGFfeSwKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54LAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKSk7CiAgICAgICAgICAgICBjb3VudCsrOwpAQCAtMjAyNyw5ICsyMDQ2LDYgQEAKICNlbmRpZgogICAgICAgfQogCi0gICAgICBlbHNlIGlmICggbG9jYWxwb2ludHMgPT0gTlVMTCApCi0gICAgICAgIDsgLyogZmFpbHVyZSwgaWdub3JlIGl0ICovCi0KICAgICAgIGVsc2UKICAgICAgIHsKICNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQpAQCAtMjA0MSwxMyArMjA1NywxMyBAQAogICAgICAgICAvKiBJVVAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQogICAgICAgICB7Ci0gICAgICAgICAgcG9pbnRzX29yZ1tqXSA9IG91dGxpbmUtPnBvaW50c1tqXTsKICAgICAgICAgICBoYXNfZGVsdGFbal0gID0gRkFMU0U7CisgICAgICAgICAgcG9pbnRzX291dFtqXSA9IHBvaW50c19vcmdbal07CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHBvaW50X2NvdW50OyBqKysgKQogICAgICAgICB7Ci0gICAgICAgICAgRlRfVVNob3J0ICBpZHggPSBsb2NhbHBvaW50c1tqXTsKKyAgICAgICAgICBGVF9VU2hvcnQgIGlkeCA9IHBvaW50c1tqXTsKIAogCiAgICAgICAgICAgaWYgKCBpZHggPj0gbl9wb2ludHMgKQpAQCAtMjA1NSwzNCArMjA3MSw0MyBAQAogCiAgICAgICAgICAgaGFzX2RlbHRhW2lkeF0gPSBUUlVFOwogCi0gICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2lkeF0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOwotICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tpZHhdLnkgKz0gRlRfTXVsRml4KCBkZWx0YXNfeVtqXSwgYXBwbHkgKTsKKyAgICAgICAgICBwb2ludHNfb3V0W2lkeF0ueCArPSBGVF9NdWxGaXgoIGRlbHRhc194W2pdLCBhcHBseSApOworICAgICAgICAgIHBvaW50c19vdXRbaWR4XS55ICs9IEZUX011bEZpeCggZGVsdGFzX3lbal0sIGFwcGx5ICk7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBubyBuZWVkIHRvIGhhbmRsZSBwaGFudG9tIHBvaW50cyBoZXJlLCAgICAgICovCiAgICAgICAgIC8qIHNpbmNlIHNvbGl0YXJ5IHBvaW50cyBjYW4ndCBiZSBpbnRlcnBvbGF0ZWQgKi8KLSAgICAgICAgdHRfaGFuZGxlX2RlbHRhcyggb3V0bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzX29yZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2RlbHRhICk7CisgICAgICAgIHR0X2ludGVycG9sYXRlX2RlbHRhcyggb3V0bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNfb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c19vcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2RlbHRhICk7CiAKLSNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgICAgICBGVF9UUkFDRTcoKCAiICAgIHBvaW50IGRlbHRhczpcbiIgKSk7CiAKLSAgICAgICAgZm9yICggaiA9IDA7IGogPCBuX3BvaW50czsgaisrKQorICAgICAgICBmb3IgKCBqID0gMDsgaiA8IG5fcG9pbnRzOyBqKysgKQogICAgICAgICB7Ci0gICAgICAgICAgaWYgKCAoIHBvaW50c19vcmdbal0ueCAhPSBvdXRsaW5lLT5wb2ludHNbal0ueCApIHx8Ci0gICAgICAgICAgICAgICAoIHBvaW50c19vcmdbal0ueSAhPSBvdXRsaW5lLT5wb2ludHNbal0ueSApICkKKyAgICAgICAgICBGVF9Qb3MgIGRlbHRhX3ggPSBwb2ludHNfb3V0W2pdLnggLSBwb2ludHNfb3JnW2pdLng7CisgICAgICAgICAgRlRfUG9zICBkZWx0YV95ID0gcG9pbnRzX291dFtqXS55IC0gcG9pbnRzX29yZ1tqXS55OworCisKKyAgICAgICAgICBvdXRsaW5lLT5wb2ludHNbal0ueCArPSBkZWx0YV94OworICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55ICs9IGRlbHRhX3k7CisKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQorICAgICAgICAgIGlmICggZGVsdGFfeCB8fCBkZWx0YV95ICkKICAgICAgICAgICB7CiAgICAgICAgICAgICBGVF9UUkFDRTcoKCAiICAgICAgJWQ6ICglZCwgJWQpIC0+ICglZCwgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c19vcmdbal0ueCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c19vcmdbal0ueSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54IC0gZGVsdGFfeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS55IC0gZGVsdGFfeSwKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmUtPnBvaW50c1tqXS54LAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZS0+cG9pbnRzW2pdLnkgKSk7CiAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9CiAKKyNpZmRlZiBGVF9ERUJVR19MRVZFTF9UUkFDRQogICAgICAgICBpZiAoICFjb3VudCApCiAgICAgICAgICAgRlRfVFJBQ0U3KCggIiAgICAgIG5vbmVcbiIgKSk7CiAjZW5kaWYKQEAgLTIxMTEsNiArMjEzNiw3IEBACiAKICAgRmFpbDE6CiAgICAgRlRfRlJFRSggcG9pbnRzX29yZyApOworICAgIEZUX0ZSRUUoIHBvaW50c19vdXQgKTsKICAgICBGVF9GUkVFKCBoYXNfZGVsdGEgKTsKIAogICAgIHJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dGd4dmFyLmggYi9zcmMvdHJ1ZXR5cGUvdHRneHZhci5oCmluZGV4IGRkMTQxMWYuLmFhOGY2ZWEgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dGd4dmFyLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0Z3h2YXIuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBHWCBGb250IFZhcmlhdGlvbiBsb2FkZXIgKHNwZWNpZmljYXRpb24pICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAwNC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMDQtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIFdlcm5lciBMZW1iZXJnIGFuZCBHZW9yZ2UgV2lsbGlhbXMuICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRHWFZBUl9IX18KLSNkZWZpbmUgX19UVEdYVkFSX0hfXworI2lmbmRlZiBUVEdYVkFSX0hfCisjZGVmaW5lIFRUR1hWQVJfSF8KIAogCiAjaW5jbHVkZSA8ZnQyYnVpbGQuaD4KQEAgLTE3OCw3ICsxNzgsNyBAQAogRlRfRU5EX0hFQURFUgogCiAKLSNlbmRpZiAvKiBfX1RUR1hWQVJfSF9fICovCisjZW5kaWYgLyogVFRHWFZBUl9IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmMgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwppbmRleCAxYzFkN2RlLi4yZDE1ZWE3IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuYwpAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMjYsMTAgKzI2LDE0IEBACiAjaW5jbHVkZSBGVF9UUklHT05PTUVUUllfSAogI2luY2x1ZGUgRlRfU1lTVEVNX0gKICNpbmNsdWRlIEZUX1RSVUVUWVBFX0RSSVZFUl9ICisjaW5jbHVkZSBGVF9NVUxUSVBMRV9NQVNURVJTX0gKIAogI2luY2x1ZGUgInR0aW50ZXJwLmgiCiAjaW5jbHVkZSAidHRlcnJvcnMuaCIKICNpbmNsdWRlICJ0dHN1YnBpeC5oIgorI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQKKyNpbmNsdWRlICJ0dGd4dmFyLmgiCisjZW5kaWYKIAogCiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCkBAIC00NSwxMCArNDksMjEgQEAKICNkZWZpbmUgRlRfQ09NUE9ORU5UICB0cmFjZV90dGludGVycAogCiAKLSNkZWZpbmUgU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBOT19TVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgKCAoKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZXhjLT5mYWNlICkpLT5pbnRlcnByZXRlcl92ZXJzaW9uID09IFwKKyAgICAgICAgICAgIFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzUgKQorCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyNkZWZpbmUgU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICggKChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGV4Yy0+ZmFjZSApKS0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBcCiAgICAgICAgICAgICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4ICkKKyNlbmRpZgogCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyNkZWZpbmUgU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICggKChUVF9Ecml2ZXIpRlRfRkFDRV9EUklWRVIoIGV4Yy0+ZmFjZSApKS0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9PSBcCisgICAgICAgICAgICBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwICkKKyNlbmRpZgogCiAjZGVmaW5lIFBST0pFQ1QoIHYxLCB2MiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgIGV4Yy0+ZnVuY19wcm9qZWN0KCBleGMsICh2MSktPnggLSAodjIpLT54LCAodjEpLT55IC0gKHYyKS0+eSApCkBAIC02NSwxNCArODAsNiBAQAogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogSW5zdHJ1Y3Rpb24gZGlzcGF0Y2ggZnVuY3Rpb24sIGFzIHVzZWQgYnkgdGhlIGludGVycHJldGVyLiAgICAgICAgICAgICovCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICB0eXBlZGVmIHZvaWQgICgqVEluc3RydWN0aW9uX0Z1bmN0aW9uKSggVFRfRXhlY0NvbnRleHQgIGV4YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICk7Ci0KLQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFR3byBzaW1wbGUgYm91bmRzLWNoZWNraW5nIG1hY3Jvcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgQk9VTkRTKCB4LCBuICkgICAoIChGVF9VSW50KSh4KSAgPj0gKEZUX1VJbnQpKG4pICApCkBAIC04NSwyMCArOTIsNiBAQAogI3VuZGVmICBGQUlMVVJFCiAjZGVmaW5lIEZBSUxVUkUgIDEKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jZGVmaW5lIEdVRVNTX1ZFQ1RPUiggViApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIGV4Yy0+R1MuVi54ID0gKEZUX0YyRG90MTQpKCBleGMtPkdTLmJvdGhfeF9heGlzID8gMHg0MDAwIDogMCApOyBcCi0gICAgICBleGMtPkdTLlYueSA9IChGVF9GMkRvdDE0KSggZXhjLT5HUy5ib3RoX3hfYXhpcyA/IDAgOiAweDQwMDAgKTsgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEdVRVNTX1ZFQ1RPUiggViApICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogCiAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTMwMCw4ICsyOTMsOCBAQAogICAgIGV4ZWMtPnN0YWNrU2l6ZSA9IDA7CiAgICAgZXhlYy0+Z2x5cGhTaXplID0gMDsKIAotICAgIGV4ZWMtPnN0YWNrICAgICA9IE5VTEw7Ci0gICAgZXhlYy0+Z2x5cGhJbnMgID0gTlVMTDsKKyAgICBleGVjLT5zdGFjayAgICA9IE5VTEw7CisgICAgZXhlYy0+Z2x5cGhJbnMgPSBOVUxMOwogCiAgICAgZXhlYy0+ZmFjZSA9IE5VTEw7CiAgICAgZXhlYy0+c2l6ZSA9IE5VTEw7CkBAIC00MDcsNiArNDAwLDcgQEAKICAgICAgIGV4ZWMtPm1heElEZWZzICAgPSBzaXplLT5tYXhfaW5zdHJ1Y3Rpb25fZGVmczsKICAgICAgIGV4ZWMtPkZEZWZzICAgICAgPSBzaXplLT5mdW5jdGlvbl9kZWZzOwogICAgICAgZXhlYy0+SURlZnMgICAgICA9IHNpemUtPmluc3RydWN0aW9uX2RlZnM7CisgICAgICBleGVjLT5wb2ludFNpemUgID0gc2l6ZS0+cG9pbnRfc2l6ZTsKICAgICAgIGV4ZWMtPnR0X21ldHJpY3MgPSBzaXplLT50dG1ldHJpY3M7CiAgICAgICBleGVjLT5tZXRyaWNzICAgID0gc2l6ZS0+bWV0cmljczsKIApAQCAtNTQ3LDEwICs1NDEsNiBAQAogICAgIGV4ZWMtPkdTLmZyZWVWZWN0b3IgPSBleGVjLT5HUy5wcm9qVmVjdG9yOwogICAgIGV4ZWMtPkdTLmR1YWxWZWN0b3IgPSBleGVjLT5HUy5wcm9qVmVjdG9yOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBleGVjLT5HUy5ib3RoX3hfYXhpcyA9IFRSVUU7Ci0jZW5kaWYKLQogICAgIGV4ZWMtPkdTLnJvdW5kX3N0YXRlID0gMTsKICAgICBleGVjLT5HUy5sb29wICAgICAgICA9IDE7CiAKQEAgLTU3NywxMCArNTY3LDYgQEAKICAgICB7IDB4NDAwMCwgMCB9LAogICAgIHsgMHg0MDAwLCAwIH0sCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIFRSVUUsCi0jZW5kaWYKLQogICAgIDEsIDY0LCAxLAogICAgIFRSVUUsIDY4LCAwLCAwLCA5LCAzLAogICAgIDAsIEZBTFNFLCAwLCAxLCAxLCAxCkBAIC03MDAsMTcgKzY4NiwxNyBAQAogCiAgICAgLyogIElVUFswXSAgICAqLyAgUEFDSyggMCwgMCApLAogICAgIC8qICBJVVBbMV0gICAgKi8gIFBBQ0soIDAsIDAgKSwKLSAgICAvKiAgU0hQWzBdICAgICovICBQQUNLKCAwLCAwICksCi0gICAgLyogIFNIUFsxXSAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBTSFBbMF0gICAgKi8gIFBBQ0soIDAsIDAgKSwgLyogbG9vcHMgKi8KKyAgICAvKiAgU0hQWzFdICAgICovICBQQUNLKCAwLCAwICksIC8qIGxvb3BzICovCiAgICAgLyogIFNIQ1swXSAgICAqLyAgUEFDSyggMSwgMCApLAogICAgIC8qICBTSENbMV0gICAgKi8gIFBBQ0soIDEsIDAgKSwKICAgICAvKiAgU0haWzBdICAgICovICBQQUNLKCAxLCAwICksCiAgICAgLyogIFNIWlsxXSAgICAqLyAgUEFDSyggMSwgMCApLAotICAgIC8qICBTSFBJWCAgICAgKi8gIFBBQ0soIDEsIDAgKSwKLSAgICAvKiAgSVAgICAgICAgICovICBQQUNLKCAwLCAwICksCisgICAgLyogIFNIUElYICAgICAqLyAgUEFDSyggMSwgMCApLCAvKiBsb29wcyAqLworICAgIC8qICBJUCAgICAgICAgKi8gIFBBQ0soIDAsIDAgKSwgLyogbG9vcHMgKi8KICAgICAvKiAgTVNJUlBbMF0gICovICBQQUNLKCAyLCAwICksCiAgICAgLyogIE1TSVJQWzFdICAqLyAgUEFDSyggMiwgMCApLAotICAgIC8qICBBbGlnblJQICAgKi8gIFBBQ0soIDAsIDAgKSwKKyAgICAvKiAgQWxpZ25SUCAgICovICBQQUNLKCAwLCAwICksIC8qIGxvb3BzICovCiAgICAgLyogIFJUREcgICAgICAqLyAgUEFDSyggMCwgMCApLAogICAgIC8qICBNSUFQWzBdICAgKi8gIFBBQ0soIDIsIDAgKSwKICAgICAvKiAgTUlBUFsxXSAgICovICBQQUNLKCAyLCAwICksCkBAIC03ODMsNyArNzY5LDcgQEAKICAgICAvKiAgU0FOR1cgICAgICovICBQQUNLKCAxLCAwICksCiAgICAgLyogIEFBICAgICAgICAqLyAgUEFDSyggMSwgMCApLAogCi0gICAgLyogIEZsaXBQVCAgICAqLyAgUEFDSyggMCwgMCApLAorICAgIC8qICBGbGlwUFQgICAgKi8gIFBBQ0soIDAsIDAgKSwgLyogbG9vcHMgKi8KICAgICAvKiAgRmxpcFJnT04gICovICBQQUNLKCAyLCAwICksCiAgICAgLyogIEZsaXBSZ09GRiAqLyAgUEFDSyggMiwgMCApLAogICAgIC8qICBJTlNfJDgzICAgKi8gIFBBQ0soIDAsIDAgKSwKQEAgLTgwMSw4ICs3ODcsOCBAQAogICAgIC8qICBJTlNfJDhGICAgKi8gIFBBQ0soIDAsIDAgKSwKIAogICAgIC8qICBJTlNfJDkwICAqLyAgIFBBQ0soIDAsIDAgKSwKLSAgICAvKiAgSU5TXyQ5MSAgKi8gICBQQUNLKCAwLCAwICksCi0gICAgLyogIElOU18kOTIgICovICAgUEFDSyggMCwgMCApLAorICAgIC8qICBHRVRWQVIgICAqLyAgIFBBQ0soIDAsIDAgKSwgLyogd2lsbCBiZSBoYW5kbGVkIHNwZWNpYWxseSAqLworICAgIC8qICBHRVREQVRBICAqLyAgIFBBQ0soIDAsIDEgKSwKICAgICAvKiAgSU5TXyQ5MyAgKi8gICBQQUNLKCAwLCAwICksCiAgICAgLyogIElOU18kOTQgICovICAgUEFDSyggMCwgMCApLAogICAgIC8qICBJTlNfJDk1ICAqLyAgIFBBQ0soIDAsIDAgKSwKQEAgLTEwODQsOCArMTA3MCwxMyBAQAogICAgICI3IElOU18kOEYiLAogCiAgICAgIjcgSU5TXyQ5MCIsCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorICAgICI2IEdFVFZBUiIsCisgICAgIjcgR0VUREFUQSIsCisjZWxzZQogICAgICI3IElOU18kOTEiLAogICAgICI3IElOU18kOTIiLAorI2VuZGlmCiAgICAgIjcgSU5TXyQ5MyIsCiAgICAgIjcgSU5TXyQ5NCIsCiAgICAgIjcgSU5TXyQ5NSIsCkBAIC0xNDcwLDM0ICsxNDYxLDIyIEBACiAgIHsKICAgICBpZiAoICFleGMtPnR0X21ldHJpY3MucmF0aW8gKQogICAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgICB7Ci0gICAgICAgIGlmICggZXhjLT5HUy5ib3RoX3hfYXhpcyApCi0gICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnhfcmF0aW87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueV9yYXRpbzsKLSAgICAgIH0KKyAgICAgIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnkgPT0gMCApCisgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IGV4Yy0+dHRfbWV0cmljcy54X3JhdGlvOworCisgICAgICBlbHNlIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnggPT0gMCApCisgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IGV4Yy0+dHRfbWV0cmljcy55X3JhdGlvOworCiAgICAgICBlbHNlCi0jZW5kaWYKICAgICAgIHsKLSAgICAgICAgaWYgKCBleGMtPkdTLnByb2pWZWN0b3IueSA9PSAwICkKLSAgICAgICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSBleGMtPnR0X21ldHJpY3MueF9yYXRpbzsKLQotICAgICAgICBlbHNlIGlmICggZXhjLT5HUy5wcm9qVmVjdG9yLnggPT0gMCApCi0gICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gZXhjLT50dF9tZXRyaWNzLnlfcmF0aW87Ci0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgRlRfRjI2RG90NiAgeCwgeTsKKyAgICAgICAgRlRfRjI2RG90NiAgeCwgeTsKIAogCi0gICAgICAgICAgeCA9IFRUX011bEZpeDE0KCBleGMtPnR0X21ldHJpY3MueF9yYXRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ICk7Ci0gICAgICAgICAgeSA9IFRUX011bEZpeDE0KCBleGMtPnR0X21ldHJpY3MueV9yYXRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ICk7Ci0gICAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gRlRfSHlwb3QoIHgsIHkgKTsKLSAgICAgICAgfQorICAgICAgICB4ID0gVFRfTXVsRml4MTQoIGV4Yy0+dHRfbWV0cmljcy54X3JhdGlvLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci54ICk7CisgICAgICAgIHkgPSBUVF9NdWxGaXgxNCggZXhjLT50dF9tZXRyaWNzLnlfcmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnkgKTsKKyAgICAgICAgZXhjLT50dF9tZXRyaWNzLnJhdGlvID0gRlRfSHlwb3QoIHgsIHkgKTsKICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGV4Yy0+dHRfbWV0cmljcy5yYXRpbzsKQEAgLTE1OTUsNyArMTU3NCw3IEBACiAgIHN0YXRpYyBGVF9TaG9ydAogICBHZXRTaG9ydElucyggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKLSAgICAvKiBSZWFkaW5nIGEgYnl0ZSBzdHJlYW0gc28gdGhlcmUgaXMgbm8gZW5kaWFuZXNzIChEYXZlUCkgKi8KKyAgICAvKiBSZWFkaW5nIGEgYnl0ZSBzdHJlYW0gc28gdGhlcmUgaXMgbm8gZW5kaWFubmVzcyAoRGF2ZVApICovCiAgICAgZXhjLT5JUCArPSAyOwogICAgIHJldHVybiAoRlRfU2hvcnQpKCAoIGV4Yy0+Y29kZVtleGMtPklQIC0gMl0gPDwgOCApICsKICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPmNvZGVbZXhjLT5JUCAtIDFdICAgICAgKTsKQEAgLTE2NzYsNiArMTY1NSwxMCBAQAogICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgem9uZSAgICAgOjogVGhlIGFmZmVjdGVkIGdseXBoIHpvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAgICAgICovCisgIC8qICAgIGBUb3VjaGVzJyB0aGUgcG9pbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKICAgRGlyZWN0X01vdmUoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICBUVF9HbHlwaFpvbmUgICAgem9uZSwKQEAgLTE2ODUsMTkgKzE2NjgsMjggQEAKICAgICBGVF9GMjZEb3Q2ICB2OwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIEZUX0FTU0VSVCggIWV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICk7Ci0jZW5kaWYKLQogICAgIHYgPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKIAogICAgIGlmICggdiAhPSAwICkKICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICAgICAgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19BTExPV19YX0RNT1ZFICkgKSApCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisgICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLworCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIC8qIEV4Y2VwdGlvbiB0byB0aGUgcG9zdC1JVVAgY3VyZmV3OiBBbGxvdyB0aGUgeCBjb21wb25lbnQgb2YgKi8KKyAgICAgIC8qIGRpYWdvbmFsIG1vdmVzLCBidXQgb25seSBwb3N0LUlVUC4gIERlamFWdSB0cmllcyB0byBhZGp1c3QgKi8KKyAgICAgIC8qIGRpYWdvbmFsIHN0ZW1zIGxpa2Ugb24gYFonIGFuZCBgeicgcG9zdC1JVVAuICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICYmICFleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IEZUX011bERpdiggZGlzdGFuY2UsIHYsIGV4Yy0+Rl9kb3RfUCApOworICAgICAgZWxzZQorI2VuZGlmCisKKyAgICAgIGlmICggTk9fU1VCUElYRUxfSElOVElORyApCiAgICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBGVF9NdWxEaXYoIGRpc3RhbmNlLCB2LCBleGMtPkZfZG90X1AgKTsKIAogICAgICAgem9uZS0+dGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1g7CkBAIC0xNzA3LDcgKzE2OTksMTMgQEAKIAogICAgIGlmICggdiAhPSAwICkKICAgICB7Ci0gICAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICYmCisgICAgICAgICAgICAgIGV4Yy0+aXVweF9jYWxsZWQgICAgICAgICAgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApICkKKyNlbmRpZgorICAgICAgICB6b25lLT5jdXJbcG9pbnRdLnkgKz0gRlRfTXVsRGl2KCBkaXN0YW5jZSwgdiwgZXhjLT5GX2RvdF9QICk7CiAKICAgICAgIHpvbmUtPnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwogICAgIH0KQEAgLTE3NDAsMTAgKzE3MzgsNiBAQAogICAgIEZUX0YyNkRvdDYgIHY7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgRlRfQVNTRVJUKCAhZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKLSNlbmRpZgotCiAgICAgdiA9IGV4Yy0+R1MuZnJlZVZlY3Rvci54OwogCiAgICAgaWYgKCB2ICE9IDAgKQpAQCAtMTc2Miw2ICsxNzU2LDcgQEAKICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgVGhlIGZvbGxvd2luZyB2ZXJzaW9ucyBhcmUgdXNlZCB3aGVuZXZlciBib3RoIHZlY3RvcnMgYXJlIGJvdGggICAgICAqLwogICAvKiAgIGFsb25nIG9uZSBvZiB0aGUgY29vcmRpbmF0ZSB1bml0IHZlY3RvcnMsIGkuZS4gaW4gOTAlIG9mIHRoZSBjYXNlcy4gKi8KKyAgLyogICBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTc3MiwxMiArMTc2NywxOSBAQAogICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCiAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSApCiAgIHsKLSAgICBGVF9VTlVTRUQoIGV4YyApOworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYgIWV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICB6b25lLT5jdXJbcG9pbnRdLnggKz0gZGlzdGFuY2U7CisgICAgZWxzZQorI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoICFTVUJQSVhFTF9ISU5USU5HICAgfHwKLSAgICAgICAgICFleGMtPmlnbm9yZV94X21vZGUgKQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgJiYgIWV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgKQorICAgICAgem9uZS0+Y3VyW3BvaW50XS54ICs9IGRpc3RhbmNlOworICAgIGVsc2UKKyNlbmRpZgorCisgICAgaWYgKCBOT19TVUJQSVhFTF9ISU5USU5HICkKICAgICAgIHpvbmUtPmN1cltwb2ludF0ueCArPSBkaXN0YW5jZTsKIAogICAgIHpvbmUtPnRhZ3NbcG9pbnRdICB8PSBGVF9DVVJWRV9UQUdfVE9VQ0hfWDsKQEAgLTE3OTIsOCArMTc5NCwxNCBAQAogICB7CiAgICAgRlRfVU5VU0VEKCBleGMgKTsKIAotICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBkaXN0YW5jZTsKLSAgICB6b25lLT50YWdzW3BvaW50XSAgfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBpZiAoICEoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgICAgICAgICAmJgorICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAgICAgICAgICYmCisgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICYmIGV4Yy0+aXVweV9jYWxsZWQgKSApCisjZW5kaWYKKyAgICAgIHpvbmUtPmN1cltwb2ludF0ueSArPSBkaXN0YW5jZTsKKworICAgIHpvbmUtPnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwogICB9CiAKIApAQCAtMjA3Miw3ICsyMDgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgICAgICBjb21wZW5zYXRpb24gKQogICB7Ci0gICAgRlRfRjI2RG90NiB2YWw7CisgICAgRlRfRjI2RG90NiAgdmFsOwogCiAgICAgRlRfVU5VU0VEKCBleGMgKTsKIApAQCAtMjExMSw3ICsyMTE5LDcgQEAKICAgLyogICAgUm91bmRlZCBkaXN0YW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogICAgVGhlIFRydWVUeXBlIHNwZWNpZmljYXRpb24gc2F5cyB2ZXJ5IGZldyBhYm91dCB0aGUgcmVsYXRpb25zaGlwICAgICovCisgIC8qICAgIFRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIHNheXMgdmVyeSBsaXR0bGUgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCAqLwogICAvKiAgICBiZXR3ZWVuIHJvdW5kaW5nIGFuZCBlbmdpbmUgY29tcGVuc2F0aW9uLiAgSG93ZXZlciwgaXQgc2VlbXMgZnJvbSAgKi8KICAgLyogICAgdGhlIGRlc2NyaXB0aW9uIG9mIHN1cGVyIHJvdW5kIHRoYXQgd2Ugc2hvdWxkIGFkZCB0aGUgY29tcGVuc2F0aW9uICovCiAgIC8qICAgIGJlZm9yZSByb3VuZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjMzNiwxMCArMjM0NCw2IEBACiAgICAgICAgICAgIEZUX1BvcyAgICAgICAgICBkeCwKICAgICAgICAgICAgRlRfUG9zICAgICAgICAgIGR5ICkKICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgRlRfQVNTRVJUKCAhZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKTsKLSNlbmRpZgotCiAgICAgcmV0dXJuIFRUX0RvdEZpeDE0KCBkeCwgZHksCiAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLnByb2pWZWN0b3IueCwKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MucHJvalZlY3Rvci55ICk7CkBAIC0yNDQxLDUxICsyNDQ1LDYgQEAKICAgc3RhdGljIHZvaWQKICAgQ29tcHV0ZV9GdW5jcyggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQotICAgIHsKLSAgICAgIC8qIElmIGJvdGggdmVjdG9ycyBwb2ludCByaWdodHdhcmRzIGFsb25nIHRoZSB4IGF4aXMsIHNldCAgICAgICAgICAqLwotICAgICAgLyogYGJvdGgteC1heGlzJyB0cnVlLCBvdGhlcndpc2Ugc2V0IGl0IGZhbHNlLiAgVGhlIHggdmFsdWVzIG9ubHkgICovCi0gICAgICAvKiBuZWVkIGJlIHRlc3RlZCBiZWNhdXNlIHRoZSB2ZWN0b3IgaGFzIGJlZW4gbm9ybWFsaXNlZCB0byBhIHVuaXQgKi8KLSAgICAgIC8qIHZlY3RvciBvZiBsZW5ndGggMHg0MDAwID0gdW5pdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgZXhjLT5HUy5ib3RoX3hfYXhpcyA9IChGVF9Cb29sKSggZXhjLT5HUy5wcm9qVmVjdG9yLnggPT0gMHg0MDAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCA9PSAweDQwMDAgKTsKLQotICAgICAgLyogVGhyb3cgYXdheSBwcm9qZWN0aW9uIGFuZCBmcmVlZG9tIHZlY3RvciBpbmZvcm1hdGlvbiAqLwotICAgICAgLyogYmVjYXVzZSB0aGUgcGF0ZW50cyBkb24ndCBhbGxvdyB0aGVtIHRvIGJlIHN0b3JlZC4gICAqLwotICAgICAgLyogVGhlIHJlbGV2YW50IFVTIFBhdGVudHMgYXJlIDUxNTU4MDUgYW5kIDUzMjU0NzkuICAgICAqLwotICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnggPSAwOwotICAgICAgZXhjLT5HUy5wcm9qVmVjdG9yLnkgPSAwOwotICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggPSAwOwotICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPSAwOwotCi0gICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgewotICAgICAgICBleGMtPmZ1bmNfcHJvamVjdCAgID0gUHJvamVjdF94OwotICAgICAgICBleGMtPmZ1bmNfbW92ZSAgICAgID0gRGlyZWN0X01vdmVfWDsKLSAgICAgICAgZXhjLT5mdW5jX21vdmVfb3JpZyA9IERpcmVjdF9Nb3ZlX09yaWdfWDsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgZXhjLT5mdW5jX3Byb2plY3QgICA9IFByb2plY3RfeTsKLSAgICAgICAgZXhjLT5mdW5jX21vdmUgICAgICA9IERpcmVjdF9Nb3ZlX1k7Ci0gICAgICAgIGV4Yy0+ZnVuY19tb3ZlX29yaWcgPSBEaXJlY3RfTW92ZV9PcmlnX1k7Ci0gICAgICB9Ci0KLSAgICAgIGlmICggZXhjLT5HUy5kdWFsVmVjdG9yLnggPT0gMHg0MDAwICkKLSAgICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qID0gUHJvamVjdF94OwotICAgICAgZWxzZSBpZiAoIGV4Yy0+R1MuZHVhbFZlY3Rvci55ID09IDB4NDAwMCApCi0gICAgICAgIGV4Yy0+ZnVuY19kdWFscHJvaiA9IFByb2plY3RfeTsKLSAgICAgIGVsc2UKLSAgICAgICAgZXhjLT5mdW5jX2R1YWxwcm9qID0gRHVhbF9Qcm9qZWN0OwotCi0gICAgICAvKiBGb3JjZSByZWNhbGN1bGF0aW9uIG9mIGNhY2hlZCBhc3BlY3QgcmF0aW8gKi8KLSAgICAgIGV4Yy0+dHRfbWV0cmljcy5yYXRpbyA9IDA7Ci0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgKi8KLQogICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnggPT0gMHg0MDAwICkKICAgICAgIGV4Yy0+Rl9kb3RfUCA9IGV4Yy0+R1MucHJvalZlY3Rvci54OwogICAgIGVsc2UgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueSA9PSAweDQwMDAgKQpAQCAtMjYyNSwxMyArMjU4NCwyMCBAQAogICBJbnNfTVBTKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICAvKiBOb3RlOiBUaGUgcG9pbnQgc2l6ZSBzaG91bGQgYmUgaXJyZWxldmFudCBpbiBhIGdpdmVuIGZvbnQgcHJvZ3JhbTsgKi8KLSAgICAvKiAgICAgICB3ZSB0aHVzIGRlY2lkZSB0byByZXR1cm4gb25seSB0aGUgUFBFTSB2YWx1ZS4gICAgICAgICAgICAgICAgKi8KLSNpZiAwCi0gICAgYXJnc1swXSA9IGV4Yy0+bWV0cmljcy5wb2ludFNpemU7Ci0jZWxzZQotICAgIGFyZ3NbMF0gPSBleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOwotI2VuZGlmCisgICAgaWYgKCBOT19TVUJQSVhFTF9ISU5USU5HICkKKyAgICB7CisgICAgICAvKiBNaWNyb3NvZnQncyBHREkgYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgYWx3YXlzIHJldHVybnMgdmFsdWUgMTI7ICovCisgICAgICAvKiB3ZSByZXR1cm4gdGhlIGN1cnJlbnQgUFBFTSB2YWx1ZSBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBhcmdzWzBdID0gZXhjLT5mdW5jX2N1cl9wcGVtKCBleGMgKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIC8qIEEgcG9zc2libGUgcHJhY3RpY2FsIGFwcGxpY2F0aW9uIG9mIHRoZSBNUFMgaW5zdHJ1Y3Rpb24gaXMgdG8gICAqLworICAgICAgLyogaW1wbGVtZW50IG9wdGljYWwgc2NhbGluZyBhbmQgc2ltaWxhciBmZWF0dXJlcywgd2hpY2ggc2hvdWxkIGJlICovCisgICAgICAvKiBiYXNlZCBvbiBwZXJjZXB0dWFsIGF0dHJpYnV0ZXMsIHRodXMgaW5kZXBlbmRlbnQgb2YgdGhlICAgICAgICAgKi8KKyAgICAgIC8qIHJlc29sdXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgYXJnc1swXSA9IGV4Yy0+cG9pbnRTaXplOworICAgIH0KICAgfQogCiAKQEAgLTI5MjQsNyArMjg5MCw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBORUdbXTogICAgICAgIE5FR2F0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogT3Bjb2RlIHJhbmdlOiAweDY1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiBmMjYuNiAtLT4gZjI2LjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIGYyNi42IC0tPiBmMjYuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19ORUcoIEZUX0xvbmcqICBhcmdzICkKQEAgLTI5NjksOCArMjkzNSw2IEBACiAgIEluc19SUyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLQogICAgIEZUX1VMb25nICBJID0gKEZUX1VMb25nKWFyZ3NbMF07CiAKIApAQCAtMjk4Myw5ICsyOTQ3LDEwIEBACiAgICAgfQogICAgIGVsc2UKICAgICB7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBhdm9pZCBUeXBlbWFuIERzdHJva2UgYW5kICovCiAgICAgICAvKiBJU3Ryb2tlIGFuZCBWYWN1Zm9ybSByb3VuZHMgICAgICAgICAgICAgICAgICAqLwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAoICggSSA9PSAyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAgICggZXhjLT5mYWNlLT5zcGhfZm91bmRfZnVuY19mbGFncyAmCkBAIC0zMDAwLDI1ICsyOTY1LDkgQEAKICAgICAgICAgICAgICAgIGV4Yy0+aXVwX2NhbGxlZCAgICAgICAgICAgICAgICAgICAgICkgKSApCiAgICAgICAgIGFyZ3NbMF0gPSAwOwogICAgICAgZWxzZQorI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAgICAgICAgIGFyZ3NbMF0gPSBleGMtPnN0b3JhZ2VbSV07CiAgICAgfQotCi0jZWxzZSAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCi0KLSAgICBGVF9VTG9uZyAgSSA9IChGVF9VTG9uZylhcmdzWzBdOwotCi0KLSAgICBpZiAoIEJPVU5EU0woIEksIGV4Yy0+c3RvcmVTaXplICkgKQotICAgIHsKLSAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgQVJSQVlfQk9VTkRfRVJST1I7Ci0gICAgICBlbHNlCi0gICAgICAgIGFyZ3NbMF0gPSAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgICBhcmdzWzBdID0gZXhjLT5zdG9yYWdlW0ldOwotCi0jZW5kaWYgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwogICB9CiAKIApAQCAtMzE4MSw3ICszMTMwLDcgQEAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBNQVhbXTogICAgICAgIE1BWGltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgLyogT3Bjb2RlIHJhbmdlOiAweDY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg4QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBTdGFjazogICAgICAgIGludDMyPyBpbnQzMj8gLS0+IGludDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCkBAIC0zMTk1LDcgKzMxNDQsNyBAQAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIE1JTltdOiAgICAgICAgTUlOaW11bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAvKiBPcGNvZGUgcmFuZ2U6IDB4NjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogT3Bjb2RlIHJhbmdlOiAweDhDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIC8qIFN0YWNrOiAgICAgICAgaW50MzI/IGludDMyPyAtLT4gaW50MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgc3RhdGljIHZvaWQKQEAgLTM1MDAsNyArMzQ0OSw3IEBACiAgICAgVFRfRGVmUmVjb3JkKiAgcmVjOwogICAgIFRUX0RlZlJlY29yZCogIGxpbWl0OwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAvKiBhcmd1bWVudHMgdG8gb3Bjb2RlcyBhcmUgc2tpcHBlZCBieSBgU0tJUF9Db2RlJyAqLwogICAgIEZUX0J5dGUgICAgb3Bjb2RlX3BhdHRlcm5bOV1bMTJdID0gewogICAgICAgICAgICAgICAgICAvKiAjMCBpbmxpbmUgZGVsdGEgZnVuY3Rpb24gMSAqLwpAQCAtMzU5OCw3ICszNTQ3LDcgQEAKICAgICBGVF9VU2hvcnQgIG9wY29kZV9wb2ludGVyWzldID0geyAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OwogICAgIEZUX1VTaG9ydCAgb3Bjb2RlX3NpemVbOV0gICAgPSB7IDEyLCA4LCA4LCA2LCA3LCA0LCA1LCA0LCAyIH07CiAgICAgRlRfVVNob3J0ICBpOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAogICAgIC8qIHNvbWUgZm9udCBwcm9ncmFtcyBhcmUgYnJva2VuIGVub3VnaCB0byByZWRlZmluZSBmdW5jdGlvbnMhICovCkBAIC0zNjQzLDcgKzM1OTIsNyBAQAogICAgIGlmICggbiA+IGV4Yy0+bWF4RnVuYyApCiAgICAgICBleGMtPm1heEZ1bmMgPSAoRlRfVUludDE2KW47CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIFdlIGRvbid0IGtub3cgZm9yIHN1cmUgdGhlc2UgYXJlIHR5cGVtYW4gZnVuY3Rpb25zLCAqLwogICAgIC8qIGhvd2V2ZXIgdGhleSBhcmUgb25seSBhY3RpdmUgd2hlbiBSUyAyMiBpcyBjYWxsZWQgICAqLwogICAgIGlmICggbiA+PSA2NCAmJiBuIDw9IDY2ICkKQEAgLTM2NTYsOSArMzYwNSw5IEBACiAgICAgd2hpbGUgKCBTa2lwQ29kZSggZXhjICkgPT0gU1VDQ0VTUyApCiAgICAgewogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICAgIHsKICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBvcGNvZGVfcGF0dGVybnM7IGkrKyApCiAgICAgICAgIHsKQEAgLTM3NjUsNyArMzcxNCw3IEBACiAgICAgICAgICAgICAoIGV4Yy0+ZmFjZS0+c3BoX2ZvdW5kX2Z1bmNfZmxhZ3MgJiBTUEhfRkRFRl9JTkxJTkVfREVMVEFfMiApICk7CiAgICAgICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICBzd2l0Y2ggKCBleGMtPm9wY29kZSApCiAgICAgICB7CkBAIC0zNzk0LDkgKzM3NDMsOSBAQAogICAgIFRUX0NhbGxSZWMqICBwUmVjOwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIGV4Yy0+c3BoX2luX2Z1bmNfZmxhZ3MgPSAweDAwMDA7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGlmICggZXhjLT5jYWxsVG9wIDw9IDAgKSAgICAgLyogV2UgZW5jb3VudGVyZWQgYW4gRU5ERiB3aXRob3V0IGEgY2FsbCAqLwogICAgIHsKQEAgLTM4ODIsOCArMzgzMSw4IEBACiAgICAgaWYgKCAhZGVmLT5hY3RpdmUgKQogICAgICAgZ290byBGYWlsOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggKCBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX05PX0NBTExfQUZURVJfSVVQICkgKSB8fApAQCAtMzg5MSw3ICszODQwLDcgQEAKICAgICAgIGdvdG8gRmFpbDsKICAgICBlbHNlCiAgICAgICBleGMtPnNwaF9pbl9mdW5jX2ZsYWdzID0gZGVmLT5zcGhfZmRlZl9mbGFnczsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgLyogY2hlY2sgdGhlIGNhbGwgc3RhY2sgKi8KICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKQEAgLTM5NzAsMTQgKzM5MTksMTQgQEAKICAgICBpZiAoICFkZWYtPmFjdGl2ZSApCiAgICAgICBnb3RvIEZhaWw7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgKCBkZWYtPnNwaF9mZGVmX2ZsYWdzICYgU1BIX0ZERUZfVkFDVUZPUk1fUk9VTkRfMSApICkKICAgICAgIGdvdG8gRmFpbDsKICAgICBlbHNlCiAgICAgICBleGMtPnNwaF9pbl9mdW5jX2ZsYWdzID0gZGVmLT5zcGhfZmRlZl9mbGFnczsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgLyogY2hlY2sgc3RhY2sgKi8KICAgICBpZiAoIGV4Yy0+Y2FsbFRvcCA+PSBleGMtPmNhbGxTaXplICkKQEAgLTQwNzAsNiArNDAxOSw3IEBACiAgICAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggTmVzdGVkX0RFRlMgKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgY2FzZSAweDJEOiAgIC8qIEVOREYgKi8KKyAgICAgICAgZGVmLT5lbmQgPSBleGMtPklQOwogICAgICAgICByZXR1cm47CiAgICAgICB9CiAgICAgfQpAQCAtNDI4OSwxNiArNDIzOSwxMiBAQAogICAgICAgZXhjLT5HUy5kdWFsVmVjdG9yLnggPSBBQTsKICAgICAgIGV4Yy0+R1MuZHVhbFZlY3Rvci55ID0gQkI7CiAgICAgfQotICAgIGVsc2UKLSAgICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOwogCiAgICAgaWYgKCAoIG9wY29kZSAmIDIgKSA9PSAwICkKICAgICB7CiAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCA9IEFBOwogICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnkgPSBCQjsKICAgICB9Ci0gICAgZWxzZQotICAgICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CiAKICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKICAgfQpAQCAtNDMyMCw3ICs0MjY2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgJmV4Yy0+R1MucHJvalZlY3RvciApID09IFNVQ0NFU1MgKQogICAgIHsKICAgICAgIGV4Yy0+R1MuZHVhbFZlY3RvciA9IGV4Yy0+R1MucHJvalZlY3RvcjsKLSAgICAgIEdVRVNTX1ZFQ1RPUiggZnJlZVZlY3RvciApOwogICAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CiAgICAgfQogICB9CkBAIC00MzQxLDcgKzQyODYsNiBAQAogICAgICAgICAgICAgICAgICAgICAoRlRfVVNob3J0KWFyZ3NbMF0sCiAgICAgICAgICAgICAgICAgICAgICZleGMtPkdTLmZyZWVWZWN0b3IgKSA9PSBTVUNDRVNTICkKICAgICB7Ci0gICAgICBHVUVTU19WRUNUT1IoIHByb2pWZWN0b3IgKTsKICAgICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOwogICAgIH0KICAgfQpAQCAtNDM1Niw3ICs0MzAwLDYgQEAKICAgc3RhdGljIHZvaWQKICAgSW5zX1NGVlRQViggVFRfRXhlY0NvbnRleHQgIGV4YyApCiAgIHsKLSAgICBHVUVTU19WRUNUT1IoIHByb2pWZWN0b3IgKTsKICAgICBleGMtPkdTLmZyZWVWZWN0b3IgPSBleGMtPkdTLnByb2pWZWN0b3I7CiAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CiAgIH0KQEAgLTQzODUsNyArNDMyOCw2IEBACiAgICAgTm9ybWFsaXplKCBYLCBZLCAmZXhjLT5HUy5wcm9qVmVjdG9yICk7CiAKICAgICBleGMtPkdTLmR1YWxWZWN0b3IgPSBleGMtPkdTLnByb2pWZWN0b3I7Ci0gICAgR1VFU1NfVkVDVE9SKCBmcmVlVmVjdG9yICk7CiAgICAgQ29tcHV0ZV9GdW5jcyggZXhjICk7CiAgIH0KIApAQCAtNDQxMSw3ICs0MzUzLDYgQEAKICAgICBYID0gUzsKIAogICAgIE5vcm1hbGl6ZSggWCwgWSwgJmV4Yy0+R1MuZnJlZVZlY3RvciApOwotICAgIEdVRVNTX1ZFQ1RPUiggcHJvalZlY3RvciApOwogICAgIENvbXB1dGVfRnVuY3MoIGV4YyApOwogICB9CiAKQEAgLTQ0MjYsMjEgKzQzNjcsOCBAQAogICBJbnNfR1BWKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQotICAgIHsKLSAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMHg0MDAwIDogMDsKLSAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLnByb2pWZWN0b3IueDsKLSAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLnByb2pWZWN0b3IueTsKLSAgICB9Ci0jZWxzZQogICAgIGFyZ3NbMF0gPSBleGMtPkdTLnByb2pWZWN0b3IueDsKICAgICBhcmdzWzFdID0gZXhjLT5HUy5wcm9qVmVjdG9yLnk7Ci0jZW5kaWYKICAgfQogCiAKQEAgLTQ0NTQsMjEgKzQzODIsOCBAQAogICBJbnNfR0ZWKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1VOUEFURU5URURfSElOVElORwotICAgIGlmICggZXhjLT5mYWNlLT51bnBhdGVudGVkX2hpbnRpbmcgKQotICAgIHsKLSAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMHg0MDAwIDogMDsKLSAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLmJvdGhfeF9heGlzID8gMCA6IDB4NDAwMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGFyZ3NbMF0gPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKLSAgICAgIGFyZ3NbMV0gPSBleGMtPkdTLmZyZWVWZWN0b3IueTsKLSAgICB9Ci0jZWxzZQogICAgIGFyZ3NbMF0gPSBleGMtPkdTLmZyZWVWZWN0b3IueDsKICAgICBhcmdzWzFdID0gZXhjLT5HUy5mcmVlVmVjdG9yLnk7Ci0jZW5kaWYKICAgfQogCiAKQEAgLTQ1ODgsNyArNDUwMyw3IEBACiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAvKiBGTElQT0ZGW106ICAgIFNldCBhdXRvLUZMSVAgdG8gT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogT3Bjb2RlIHJhbmdlOiAweDRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIC8qIFN0YWNrOiAtLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgIHN0YXRpYyB2b2lkCiAgIEluc19GTElQT0ZGKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKQEAgLTQ5MDcsMTMgKzQ4MjIsMTMgQEAKICAgICAgIH0KICAgICB9CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIERpc2FibGUgVHlwZSAyIFZhY3Vmb3JtIFJvdW5kcyAtIGUuZy4gQXJpYWwgTmFycm93ICovCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgJiYKLSAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAmJgotICAgICAgICAgRlRfQUJTKCBEICkgPT0gNjQgICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICBGVF9BQlMoIEQgKSA9PSA2NCAgICAgICAgICAgKQogICAgICAgRCArPSAxOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBhcmdzWzBdID0gRDsKICAgfQpAQCAtNDk5OCw3ICs0OTEzLDYgQEAKICAgICB9CiAKICAgICBOb3JtYWxpemUoIEEsIEIsICZleGMtPkdTLnByb2pWZWN0b3IgKTsKLSAgICBHVUVTU19WRUNUT1IoIGZyZWVWZWN0b3IgKTsKICAgICBDb21wdXRlX0Z1bmNzKCBleGMgKTsKICAgfQogCkBAIC01MTcwLDEyICs1MDg0LDIzIEBACiAgICAgZXhjLT5HUy5pbnN0cnVjdF9jb250cm9sICY9IH4oRlRfQnl0ZSlLZjsKICAgICBleGMtPkdTLmluc3RydWN0X2NvbnRyb2wgfD0gKEZUX0J5dGUpTDsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIC8qIElOU1RDVFJMIG1vZGlmeWluZyBmbGFnIDMgYWxzbyBoYXMgYW4gZWZmZWN0ICovCi0gICAgLyogb3V0c2lkZSBvZiB0aGUgQ1ZUIHByb2dyYW0gICAgICAgICAgICAgICAgICAgKi8KICAgICBpZiAoIEsgPT0gMyApCi0gICAgICBleGMtPmlnbm9yZV94X21vZGUgPSBGVF9CT09MKCBMID09IDQgKTsKKyAgICB7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIC8qIElOU1RDVFJMIG1vZGlmeWluZyBmbGFnIDMgYWxzbyBoYXMgYW4gZWZmZWN0ICovCisgICAgICAvKiBvdXRzaWRlIG9mIHRoZSBDVlQgcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAqLworICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQorICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgPSBGVF9CT09MKCBMID09IDQgKTsKICNlbmRpZgorCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIC8qIE5hdGl2ZSBDbGVhclR5cGUgZm9udHMgc2lnbiBhIHdhaXZlciB0aGF0IHR1cm5zIG9mZiBhbGwgYmFja3dhcmRzICovCisgICAgICAvKiBjb21wYXRpYmlsaXR5IGhhY2tzIGFuZCBsZXRzIHRoZW0gcHJvZ3JhbSBwb2ludHMgdG8gdGhlIGdyaWQgbGlrZSAqLworICAgICAgLyogaXQncyAxOTk2LiAgVGhleSBtaWdodCBzaWduIGEgd2FpdmVyIGZvciBqdXN0IG9uZSBnbHlwaCwgdGhvdWdoLiAgKi8KKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICkKKyAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSA9ICFGVF9CT09MKCBMID09IDQgKTsKKyNlbmRpZgorICAgIH0KICAgfQogCiAKQEAgLTUyNjAsNiArNTE4NSwxNSBAQAogICAgIEZUX1VTaG9ydCAgcG9pbnQ7CiAKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApCisgICAgICBnb3RvIEZhaWw7CisjZW5kaWYKKwogICAgIGlmICggZXhjLT50b3AgPCBleGMtPkdTLmxvb3AgKQogICAgIHsKICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKQEAgLTUzMDYsNiArNTI0MCwxNSBAQAogICAgIEZUX1VTaG9ydCAgSSwgSywgTDsKIAogCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUuICovCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX01JTklNQUwgICAgICYmCisgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICYmCisgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCisgICAgICAgICBleGMtPml1cHlfY2FsbGVkICAgICAgICAgICAgICkKKyAgICAgIHJldHVybjsKKyNlbmRpZgorCiAgICAgSyA9IChGVF9VU2hvcnQpYXJnc1sxXTsKICAgICBMID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCkBAIC01MzM1LDYgKzUyNzgsMTUgQEAKICAgICBGVF9VU2hvcnQgIEksIEssIEw7CiAKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyogU2VlIGB0dGludGVycC5oJyBmb3IgZGV0YWlscyBvbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBtb2RlLiAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCAgICAgICAgICAgICAmJgorICAgICAgICAgZXhjLT5pdXB5X2NhbGxlZCAgICAgICAgICAgICApCisgICAgICByZXR1cm47CisjZW5kaWYKKwogICAgIEsgPSAoRlRfVVNob3J0KWFyZ3NbMV07CiAgICAgTCA9IChGVF9VU2hvcnQpYXJnc1swXTsKIApAQCAtNTM4NywzMSArNTMzOSwxNCBAQAogCiAgICAgZCA9IFBST0pFQ1QoIHpwLmN1ciArIHAsIHpwLm9yZyArIHAgKTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgaWYgKCBleGMtPkdTLmJvdGhfeF9heGlzICkKLSAgICAgIHsKLSAgICAgICAgKnggPSBkOwotICAgICAgICAqeSA9IDA7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgICp4ID0gMDsKLSAgICAgICAgKnkgPSBkOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICAqeCA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpZXhjLT5HUy5mcmVlVmVjdG9yLngsIGV4Yy0+Rl9kb3RfUCApOwotICAgICAgKnkgPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci55LCBleGMtPkZfZG90X1AgKTsKLSAgICB9CisgICAgKnggPSBGVF9NdWxEaXYoIGQsIChGVF9Mb25nKWV4Yy0+R1MuZnJlZVZlY3Rvci54LCBleGMtPkZfZG90X1AgKTsKKyAgICAqeSA9IEZUX011bERpdiggZCwgKEZUX0xvbmcpZXhjLT5HUy5mcmVlVmVjdG9yLnksIGV4Yy0+Rl9kb3RfUCApOwogCiAgICAgcmV0dXJuIFNVQ0NFU1M7CiAgIH0KIAogCisgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KICAgc3RhdGljIHZvaWQKICAgTW92ZV9acDJfUG9pbnQoIFRUX0V4ZWNDb250ZXh0ICBleGMsCiAgICAgICAgICAgICAgICAgICBGVF9VU2hvcnQgICAgICAgcG9pbnQsCkBAIC01NDE5LDM1ICs1MzU0LDI4IEBACiAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICAgICAgZHksCiAgICAgICAgICAgICAgICAgICBGVF9Cb29sICAgICAgICAgdG91Y2ggKQogICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgewotICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7Ci0gICAgICAgIGlmICggdG91Y2ggKQotICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnkgKz0gZHk7Ci0gICAgICAgIGlmICggdG91Y2ggKQotICAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9ZOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCiAgICAgaWYgKCBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKICAgICB7Ci0gICAgICBleGMtPnpwMi5jdXJbcG9pbnRdLnggKz0gZHg7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggISggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkgKQorI2VuZGlmCisgICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCArPSBkeDsKKwogICAgICAgaWYgKCB0b3VjaCApCiAgICAgICAgIGV4Yy0+enAyLnRhZ3NbcG9pbnRdIHw9IEZUX0NVUlZFX1RBR19UT1VDSF9YOwogICAgIH0KIAogICAgIGlmICggZXhjLT5HUy5mcmVlVmVjdG9yLnkgIT0gMCApCiAgICAgewotICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICBpZiAoICEoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKKyAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSAmJgorICAgICAgICAgICAgICBleGMtPml1cHhfY2FsbGVkICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgICAgICAgICAgICAgKSApCisjZW5kaWYKKyAgICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS55ICs9IGR5OworCiAgICAgICBpZiAoIHRvdWNoICkKICAgICAgICAgZXhjLT56cDIudGFnc1twb2ludF0gfD0gRlRfQ1VSVkVfVEFHX1RPVUNIX1k7CiAgICAgfQpAQCAtNTQ5NCwxMyArNTQyMiwxMiBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGRvZXNuJ3QgZm9sbG93IENsZWFydHlwZSBzcGVjIGJ1dCBwcm9kdWNlcyBiZXR0ZXIgcmVzdWx0ICovCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgKQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYgZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIDAsIGR5LCBUUlVFICk7CiAgICAgICBlbHNlCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogCiAgICAgICBleGMtPkdTLmxvb3AtLTsKQEAgLTU2MjgsOSArNTU1NSwxNSBAQAogICB7CiAgICAgRlRfRjI2RG90NiAgZHgsIGR5OwogICAgIEZUX1VTaG9ydCAgIHBvaW50OwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgRlRfSW50ICAgICAgQjEsIEIyOwogI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBGVF9Cb29sICAgICBpbl90d2lsaWdodCA9IGV4Yy0+R1MuZ2VwMCA9PSAwIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZ2VwMSA9PSAwIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+R1MuZ2VwMiA9PSAwOworI2VuZGlmCisKIAogCiAgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCArIDEgKQpAQCAtNTY0MCwyNiArNTU3Myw4IEBACiAgICAgICBnb3RvIEZhaWw7CiAgICAgfQogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICBpZiAoIGV4Yy0+ZmFjZS0+dW5wYXRlbnRlZF9oaW50aW5nICkKLSAgICB7Ci0gICAgICBpZiAoIGV4Yy0+R1MuYm90aF94X2F4aXMgKQotICAgICAgewotICAgICAgICBkeCA9IChGVF9VSW50MzIpYXJnc1swXTsKLSAgICAgICAgZHkgPSAwOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgewotICAgICAgICBkeCA9IDA7Ci0gICAgICAgIGR5ID0gKEZUX1VJbnQzMilhcmdzWzBdOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7Ci0gICAgICBkeCA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueCApOwotICAgICAgZHkgPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnkgKTsKLSAgICB9CisgICAgZHggPSBUVF9NdWxGaXgxNCggYXJnc1swXSwgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKKyAgICBkeSA9IFRUX011bEZpeDE0KCBhcmdzWzBdLCBleGMtPkdTLmZyZWVWZWN0b3IueSApOwogCiAgICAgd2hpbGUgKCBleGMtPkdTLmxvb3AgPiAwICkKICAgICB7CkBAIC01Njc2LDcgKzU1OTEsOCBAQAogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICAgIHsKICAgICAgICAgLyogIElmIG5vdCB1c2luZyBpZ25vcmVfeF9tb2RlIHJlbmRlcmluZywgYWxsb3cgWlAyIG1vdmUuICAgICAgICAqLwogICAgICAgICAvKiAgSWYgaW5saW5lIGRlbHRhcyBhcmVuJ3QgYWxsb3dlZCwgc2tpcCBaUDIgbW92ZS4gICAgICAgICAgICAgICovCkBAIC01Njg2LDggKzU2MDIsNyBAQAogICAgICAgICAvKiAgIC0gdGhlIGdseXBoIGlzIHNwZWNpZmljYWxseSBzZXQgdG8gYWxsb3cgU0hQSVggbW92ZXMgICAgICAgICovCiAgICAgICAgIC8qICAgLSB0aGUgbW92ZSBpcyBvbiBhIHByZXZpb3VzbHkgWS10b3VjaGVkIHBvaW50ICAgICAgICAgICAgICAgKi8KIAotICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAmJgotICAgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSApCisgICAgICAgIGlmICggZXhjLT5pZ25vcmVfeF9tb2RlICkKICAgICAgICAgewogICAgICAgICAgIC8qIHNhdmUgcG9pbnQgZm9yIGxhdGVyIGNvbXBhcmlzb24gKi8KICAgICAgICAgICBpZiAoIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKQpAQCAtNTc1MSwxNSArNTY2NiwzMCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgTW92ZV9acDJfUG9pbnQoIGV4YywgcG9pbnQsIGR4LCBkeSwgVFJVRSApOwogICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgICBleGMtPmJhY2t3YXJkc19jb21wYXRpYmlsaXR5ICkKKyAgICAgIHsKKyAgICAgICAgLyogU3BlY2lhbCBjYXNlOiBhbGxvdyBTSFBJWCB0byBtb3ZlIHBvaW50cyBpbiB0aGUgdHdpbGlnaHQgem9uZS4gICovCisgICAgICAgIC8qIE90aGVyd2lzZSwgdHJlYXQgU0hQSVggdGhlIHNhbWUgYXMgREVMVEFQLiAgVW5icmVha3MgdmFyaW91cyAgICAqLworICAgICAgICAvKiBmb250cyBzdWNoIGFzIG9sZGVyIHZlcnNpb25zIG9mIFJva2tpdHQgYW5kIERUTCBBcmdvIFQgTGlnaHQgICAgKi8KKyAgICAgICAgLyogdGhhdCB3b3VsZCBnbGl0Y2ggc2V2ZXJseSBhZnRlciBjYWxsaW5nIEFMSUdOUlAgYWZ0ZXIgYSBibG9ja2VkICovCisgICAgICAgIC8qIFNIUElYLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICBpZiAoIGluX3R3aWxpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwKKyAgICAgICAgICAgICAoICEoIGV4Yy0+aXVweF9jYWxsZWQgJiYgZXhjLT5pdXB5X2NhbGxlZCApICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgICAgKCAoIGV4Yy0+aXNfY29tcG9zaXRlICYmIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKSB8fAorICAgICAgICAgICAgICAgICAoIGV4Yy0+enAyLnRhZ3NbcG9pbnRdICYgRlRfQ1VSVkVfVEFHX1RPVUNIX1kgKSAgICApICkgKQorICAgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCAwLCBkeSwgVFJVRSApOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIE1vdmVfWnAyX1BvaW50KCBleGMsIHBvaW50LCBkeCwgZHksIFRSVUUgKTsKIAorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgU2tpcDoKLQotI2Vsc2UgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLwotCi0gICAgICBNb3ZlX1pwMl9Qb2ludCggZXhjLCBwb2ludCwgZHgsIGR5LCBUUlVFICk7Ci0KLSNlbmRpZiAvKiAhVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCi0KKyNlbmRpZgogICAgICAgZXhjLT5HUy5sb29wLS07CiAgICAgfQogCkBAIC01Nzc5LDE0ICs1NzA5LDEzIEBACiAgIEluc19NU0lSUCggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCiAgIHsKLSAgICBGVF9VU2hvcnQgICBwb2ludDsKKyAgICBGVF9VU2hvcnQgICBwb2ludCA9IDA7CiAgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7Ci0KLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsgLyogcGFjaWZ5IGNvbXBpbGVyICovCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBGVF9GMjZEb3Q2ICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKIAogCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAgICAgewogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IGV4Yy0+R1MuY29udHJvbF92YWx1ZV9jdXRpbjsKIApAQCAtNTc5NSw4ICs1NzI0LDcgQEAKICAgICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgICBjb250cm9sX3ZhbHVlX2N1dGluID0gMDsKICAgICB9Ci0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgcG9pbnQgPSAoRlRfVVNob3J0KWFyZ3NbMF07CiAKQEAgLTU4MTksMTQgKzU3NDcsMTQgQEAKIAogICAgIGRpc3RhbmNlID0gUFJPSkVDVCggZXhjLT56cDEuY3VyICsgcG9pbnQsIGV4Yy0+enAwLmN1ciArIGV4Yy0+R1MucnAwICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIC8qIHN1YnBpeGVsIGhpbnRpbmcgLSBtYWtlIE1TSVJQIHJlc3BlY3QgQ1ZUIGN1dC1pbjsgKi8KLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgRlRfQUJTKCBkaXN0YW5jZSAtIGFyZ3NbMV0gKSA+PSBjb250cm9sX3ZhbHVlX2N1dGluICkKICAgICAgIGRpc3RhbmNlID0gYXJnc1sxXTsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAxLCBwb2ludCwgYXJnc1sxXSAtIGRpc3RhbmNlICk7CiAKQEAgLTU4NjUsMTAgKzU3OTMsMTAgQEAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiAxICkgIT0gMCApCiAgICAgewogICAgICAgY3VyX2Rpc3QgPSBGQVNUX1BST0pFQ1QoICZleGMtPnpwMC5jdXJbcG9pbnRdICk7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICApCiAgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSgKICAgICAgICAgICAgICAgICAgICAgIGV4YywKICAgICAgICAgICAgICAgICAgICAgIGN1cl9kaXN0LApAQCAtNTkxMSwxNCArNTgzOSwxNCBAQAogICAgIGN2dEVudHJ5ICAgICAgICAgICAgPSAoRlRfVUxvbmcpYXJnc1sxXTsKICAgICBwb2ludCAgICAgICAgICAgICAgID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSA9PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IDA7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGlmICggQk9VTkRTKCBwb2ludCwgICAgIGV4Yy0+enAwLm5fcG9pbnRzICkgfHwKICAgICAgICAgIEJPVU5EU0woIGN2dEVudHJ5LCBleGMtPmN2dFNpemUgKSAgICAgICkKQEAgLTU5NTIsMjcgKzU4ODAsMjcgQEAKIAogICAgIGlmICggZXhjLT5HUy5nZXAwID09IDAgKSAgIC8qIElmIGluIHR3aWxpZ2h0IHpvbmUgKi8KICAgICB7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIE9ubHkgYWRqdXN0IGlmIG5vdCBpbiBzcGhfY29tcGF0aWJpbGl0eV9tb2RlIG9yIGlnbm9yZV94X21vZGUuICovCiAgICAgICAvKiBEZXRlcm1pbmVkIHZpYSBleHBlcmltZW50YXRpb24gYW5kIG1heSBiZSBpbmNvcnJlY3QuLi4gICAgICAgICAqLwotICAgICAgaWYgKCAhU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICB8fAotICAgICAgICAgICAoICFleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgfHwKLSAgICAgICAgICAgICAhZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICkgKQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworICAgICAgaWYgKCAhKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICYmCisgICAgICAgICAgICAgICggZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgZXhjLT5mYWNlLT5zcGhfY29tcGF0aWJpbGl0eV9tb2RlICkgKSApCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KICAgICAgICAgZXhjLT56cDAub3JnW3BvaW50XS54ID0gVFRfTXVsRml4MTQoIGRpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggKTsKICAgICAgIGV4Yy0+enAwLm9yZ1twb2ludF0ueSA9IFRUX011bEZpeDE0KCBkaXN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSApLAogICAgICAgZXhjLT56cDAuY3VyW3BvaW50XSAgID0gZXhjLT56cDAub3JnW3BvaW50XTsKICAgICB9Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTUlBUF9IQUNLICkgJiYKICAgICAgICAgIGRpc3RhbmNlID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgZGlzdGFuY2UgPSAwOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBvcmdfZGlzdCA9IEZBU1RfUFJPSkVDVCggJmV4Yy0+enAwLmN1cltwb2ludF0gKTsKIApAQCAtNTk4MSwxMCArNTkwOSwxMCBAQAogICAgICAgaWYgKCBGVF9BQlMoIGRpc3RhbmNlIC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICBkaXN0YW5jZSA9IG9yZ19kaXN0OwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAmJgotICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICYmCisgICAgICAgICAgIGV4Yy0+R1MuZnJlZVZlY3Rvci54ICE9IDAgICApCiAgICAgICAgIGRpc3RhbmNlID0gUm91bmRfTm9uZSggZXhjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Yy0+dHRfbWV0cmljcy5jb21wZW5zYXRpb25zWzBdICk7CkBAIC02MDEzLDE5ICs1OTQxLDE5IEBACiAgIEluc19NRFJQKCBUVF9FeGVjQ29udGV4dCAgZXhjLAogICAgICAgICAgICAgRlRfTG9uZyogICAgICAgIGFyZ3MgKQogICB7Ci0gICAgRlRfVVNob3J0ICAgcG9pbnQ7CisgICAgRlRfVVNob3J0ICAgcG9pbnQgPSAwOwogICAgIEZUX0YyNkRvdDYgIG9yZ19kaXN0LCBkaXN0YW5jZSwgbWluaW11bV9kaXN0YW5jZTsKIAogCiAgICAgbWluaW11bV9kaXN0YW5jZSA9IGV4Yy0+R1MubWluaW11bV9kaXN0YW5jZTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgbWluaW11bV9kaXN0YW5jZSA9IDA7Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIHBvaW50ID0gKEZUX1VTaG9ydClhcmdzWzBdOwogCkBAIC02MDg5LDEwICs2MDE3LDEwIEBACiAKICAgICBpZiAoICggZXhjLT5vcGNvZGUgJiA0ICkgIT0gMCApCiAgICAgewotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICYmCi0gICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgJiYKLSAgICAgICAgICAgZXhjLT5HUy5mcmVlVmVjdG9yLnggIT0gMCApCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICYmCisgICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAmJgorICAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgKQogICAgICAgICBkaXN0YW5jZSA9IFJvdW5kX05vbmUoCiAgICAgICAgICAgICAgICAgICAgICBleGMsCiAgICAgICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKQEAgLTYxNjAsMTEgKzYwODgsMTEgQEAKICAgICAgICAgICAgICAgICBvcmdfZGlzdCwKICAgICAgICAgICAgICAgICBjb250cm9sX3ZhbHVlX2N1dGluLAogICAgICAgICAgICAgICAgIG1pbmltdW1fZGlzdGFuY2U7Ci0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBGVF9JbnQgICAgICBCMSAgICAgICAgICAgPSAwOyAvKiBwYWNpZnkgY29tcGlsZXIgKi8KICAgICBGVF9JbnQgICAgICBCMiAgICAgICAgICAgPSAwOwogICAgIEZUX0Jvb2wgICAgIHJldmVyc2VfbW92ZSA9IEZBTFNFOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAogICAgIG1pbmltdW1fZGlzdGFuY2UgICAgPSBleGMtPkdTLm1pbmltdW1fZGlzdGFuY2U7CkBAIC02MTcyLDEzICs2MTAwLDEzIEBACiAgICAgcG9pbnQgICAgICAgICAgICAgICA9IChGVF9VU2hvcnQpYXJnc1swXTsKICAgICBjdnRFbnRyeSAgICAgICAgICAgID0gKEZUX1VMb25nKSggYXJnc1sxXSArIDEgKTsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueCAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgISggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9STUFMX1JPVU5EICkgKQogICAgICAgY29udHJvbF92YWx1ZV9jdXRpbiA9IG1pbmltdW1fZGlzdGFuY2UgPSAwOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgY3Z0Wy0xXSA9IDAgYWx3YXlzICovCiAKQEAgLTYyMzEsOCArNjE1OSw4IEBACiAgICAgICAgIGN2dF9kaXN0ID0gLWN2dF9kaXN0OwogICAgIH0KIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPkdTLmZyZWVWZWN0b3IueSAhPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfVElNRVNfTkVXX1JPTUFOX0hBQ0sgKSApCkBAIC02MjQyLDcgKzYxNzAsNyBAQAogICAgICAgZWxzZSBpZiAoIGN1cl9kaXN0ID4gNjQgJiYgY3VyX2Rpc3QgPCA4NCApCiAgICAgICAgIGN2dF9kaXN0ICs9IDMyOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgLyogY29udHJvbCB2YWx1ZSBjdXQtaW4gYW5kIHJvdW5kICovCiAKQEAgLTYyNzcsMTYgKzYyMDUsMTYgQEAKICAgICBlbHNlCiAgICAgewogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAgIC8qIGRvIGN2dCBjdXQtaW4gYWx3YXlzIGluIE1JUlAgZm9yIHNwaCAqLwotICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgICAgICAgICAgICYmCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgJiYKICAgICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAmJgogICAgICAgICAgICBleGMtPkdTLmdlcDAgPT0gZXhjLT5HUy5nZXAxICkKICAgICAgIHsKICAgICAgICAgaWYgKCBGVF9BQlMoIGN2dF9kaXN0IC0gb3JnX2Rpc3QgKSA+IGNvbnRyb2xfdmFsdWVfY3V0aW4gKQogICAgICAgICAgIGN2dF9kaXN0ID0gb3JnX2Rpc3Q7CiAgICAgICB9Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgICAgZGlzdGFuY2UgPSBSb3VuZF9Ob25lKAogICAgICAgICAgICAgICAgICAgIGV4YywKQEAgLTYzMTAsOCArNjIzOCw4IEBACiAgICAgICB9CiAgICAgfQogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorICAgIGlmICggU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICkKICAgICB7CiAgICAgICBCMSA9IGV4Yy0+enAxLmN1cltwb2ludF0ueTsKIApAQCAtNjMyOCwxMiArNjI1NiwxMiBAQAogICAgICAgICAgICAoIGV4Yy0+c3BoX3R3ZWFrX2ZsYWdzICYgU1BIX1RXRUFLX0NPVVJJRVJfTkVXXzJfSEFDSyApICkKICAgICAgICAgZGlzdGFuY2UgKz0gNjQ7CiAgICAgfQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCBkaXN0YW5jZSAtIGN1cl9kaXN0ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgKQorI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKQogICAgIHsKICAgICAgIEIyID0gZXhjLT56cDEuY3VyW3BvaW50XS55OwogCkBAIC02MzU3LDcgKzYyODUsNyBAQAogICAgICAgICBleGMtPmZ1bmNfbW92ZSggZXhjLCAmZXhjLT56cDEsIHBvaW50LCAtKCBkaXN0YW5jZSAtIGN1cl9kaXN0ICkgKTsKICAgICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgIEZhaWw6CiAgICAgZXhjLT5HUy5ycDEgPSBleGMtPkdTLnJwMDsKQEAgLTYzODIsOCArNjMxMCw4IEBACiAgICAgRlRfRjI2RG90NiAgZGlzdGFuY2U7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPml1cF9jYWxsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fQUxJR05SUF9BRlRFUl9JVVAgKSApCkBAIC02MzkxLDcgKzYzMTksNyBAQAogICAgICAgZXhjLT5lcnJvciA9IEZUX1RIUk9XKCBJbnZhbGlkX1JlZmVyZW5jZSApOwogICAgICAgZ290byBGYWlsOwogICAgIH0KLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgaWYgKCBleGMtPnRvcCA8IGV4Yy0+R1MubG9vcCAgICAgICAgICAgICAgICAgIHx8CiAgICAgICAgICBCT1VORFMoIGV4Yy0+R1MucnAwLCBleGMtPnpwMC5uX3BvaW50cyApICkKQEAgLTY1MDYsNiArNjQzNCw3IEBACiAgICAgICBSLnggPSBGVF9NdWxEaXYoIHZhbCwgZGF4LCBkaXNjcmltaW5hbnQgKTsKICAgICAgIFIueSA9IEZUX011bERpdiggdmFsLCBkYXksIGRpc2NyaW1pbmFudCApOwogCisgICAgICAvKiBYWFg6IEJsb2NrIGluIGJhY2t3YXJkc19jb21wYXRpYmlsaXR5IGFuZC9vciBwb3N0LUlVUD8gKi8KICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueCA9IGV4Yy0+enAxLmN1clthMF0ueCArIFIueDsKICAgICAgIGV4Yy0+enAyLmN1cltwb2ludF0ueSA9IGV4Yy0+enAxLmN1clthMF0ueSArIFIueTsKICAgICB9CkBAIC02NTEzLDYgKzY0NDIsNyBAQAogICAgIHsKICAgICAgIC8qIGVsc2UsIHRha2UgdGhlIG1pZGRsZSBvZiB0aGUgbWlkZGxlcyBvZiBBIGFuZCBCICovCiAKKyAgICAgIC8qIFhYWDogQmxvY2sgaW4gYmFja3dhcmRzX2NvbXBhdGliaWxpdHkgYW5kL29yIHBvc3QtSVVQPyAqLwogICAgICAgZXhjLT56cDIuY3VyW3BvaW50XS54ID0gKCBleGMtPnpwMS5jdXJbYTBdLnggKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMS5jdXJbYTFdLnggKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMtPnpwMC5jdXJbYjBdLnggKwpAQCAtNjkwMSw2ICs2ODMxLDIzIEBACiAgICAgRlRfU2hvcnQgIGNvbnRvdXI7ICAgICAgIC8qIGN1cnJlbnQgY29udG91ciAqLwogCiAKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgIC8qIFNlZSBgdHRpbnRlcnAuaCcgZm9yIGRldGFpbHMgb24gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgbW9kZS4gKi8KKyAgICAvKiBBbGxvdyBJVVAgdW50aWwgaXQgaGFzIGJlZW4gY2FsbGVkIG9uIGJvdGggYXhlcy4gIEltbWVkaWF0ZWx5ICovCisgICAgLyogcmV0dXJuIG9uIHN1YnNlcXVlbnQgb25lcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGlmICggU1VCUElYRUxfSElOVElOR19NSU5JTUFMICAgICAmJgorICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApCisgICAgeworICAgICAgaWYgKCBleGMtPml1cHhfY2FsbGVkICYmIGV4Yy0+aXVweV9jYWxsZWQgKQorICAgICAgICByZXR1cm47CisKKyAgICAgIGlmICggZXhjLT5vcGNvZGUgJiAxICkKKyAgICAgICAgZXhjLT5pdXB4X2NhbGxlZCA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICAgIGV4Yy0+aXVweV9jYWxsZWQgPSBUUlVFOworICAgIH0KKyNlbmRpZgorCiAgICAgLyogaWdub3JlIGVtcHR5IG91dGxpbmVzICovCiAgICAgaWYgKCBleGMtPnB0cy5uX2NvbnRvdXJzID09IDAgKQogICAgICAgcmV0dXJuOwpAQCAtNjkyNCwxNSArNjg3MSwxNSBAQAogICAgIGNvbnRvdXIgPSAwOwogICAgIHBvaW50ICAgPSAwOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCi0gICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICAgJiYKLSAgICAgICAgIGV4Yy0+aWdub3JlX3hfbW9kZSApCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAmJgorICAgICAgICAgZXhjLT5pZ25vcmVfeF9tb2RlICAgICAgICAgICkKICAgICB7CiAgICAgICBleGMtPml1cF9jYWxsZWQgPSBUUlVFOwogICAgICAgaWYgKCBleGMtPnNwaF90d2Vha19mbGFncyAmIFNQSF9UV0VBS19TS0lQX0lVUCApCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HICovCisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgKi8KIAogICAgIGRvCiAgICAgewpAQCAtNzAwNCwzNyArNjk1MSwxNiBAQAogICAgIEZUX1VTaG9ydCAgQTsKICAgICBGVF9VTG9uZyAgIEMsIFA7CiAgICAgRlRfTG9uZyAgICBCOwotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgRlRfVVNob3J0ICBCMSwgQjI7CiAKIAotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPmlnbm9yZV94X21vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgZXhjLT5pdXBfY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKICAgICAgICAgICggZXhjLT5zcGhfdHdlYWtfZmxhZ3MgJiBTUEhfVFdFQUtfTk9fREVMVEFQX0FGVEVSX0lVUCApICkKICAgICAgIGdvdG8gRmFpbDsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KLQotCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICAvKiBEZWx0YSBoaW50aW5nIGlzIGNvdmVyZWQgYnkgVVMgUGF0ZW50IDUxNTk2NjguICovCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgRlRfTG9uZyAgbiA9IGFyZ3NbMF0gKiAyOwotCi0KLSAgICAgIGlmICggZXhjLT5hcmdzIDwgbiApCi0gICAgICB7Ci0gICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7Ci0gICAgICAgIG4gPSBleGMtPmFyZ3M7Ci0gICAgICB9Ci0KLSAgICAgIGV4Yy0+YXJncyAtPSBuOwotICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOwotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgICBQICAgID0gKEZUX1VMb25nKWV4Yy0+ZnVuY19jdXJfcHBlbSggZXhjICk7CiAgICAgbnVtcCA9IChGVF9VTG9uZylhcmdzWzBdOyAgIC8qIHNvbWUgcG9pbnRzIHRoZW9yZXRpY2FsbHkgbWF5IG9jY3VyIG1vcmUKQEAgLTcwODgsOSArNzAxNCw5IEBACiAgICAgICAgICAgICBCKys7CiAgICAgICAgICAgQiAqPSAxTCA8PCAoIDYgLSBleGMtPkdTLmRlbHRhX3NoaWZ0ICk7CiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogCi0gICAgICAgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HICkKKyAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAgICAgICAgICAgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqICBBbGxvdyBkZWx0YSBtb3ZlIGlmCkBAIC03MTQ3LDkgKzcwNzMsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKLSAgICAgICAgICAgIGV4Yy0+ZnVuY19tb3ZlKCBleGMsICZleGMtPnpwMCwgQSwgQiApOworICAgICAgICAgIHsKKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgICAgICAgICAvKiBTZWUgYHR0aW50ZXJwLmgnIGZvciBkZXRhaWxzIG9uIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgICAgICAgICAvKiBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgJiYKKyAgICAgICAgICAgICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICggISggZXhjLT5pdXB4X2NhbGxlZCAmJiBleGMtPml1cHlfY2FsbGVkICkgICAgICAgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKCAoIGV4Yy0+aXNfY29tcG9zaXRlICYmIGV4Yy0+R1MuZnJlZVZlY3Rvci55ICE9IDAgKSB8fAorICAgICAgICAgICAgICAgICAgICAgKCBleGMtPnpwMC50YWdzW0FdICYgRlRfQ1VSVkVfVEFHX1RPVUNIX1kgKSAgICAgICAgKSApCisgICAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCBCICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgZXhjLT5mdW5jX21vdmUoIGV4YywgJmV4Yy0+enAwLCBBLCBCICk7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9CiAgICAgICBlbHNlCkBAIC03MTc3LDI2ICs3MTE5LDYgQEAKICAgICBGVF9Mb25nICAgQjsKIAogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcKLSAgICAvKiBEZWx0YSBoaW50aW5nIGlzIGNvdmVyZWQgYnkgVVMgUGF0ZW50IDUxNTk2NjguICovCi0gICAgaWYgKCBleGMtPmZhY2UtPnVucGF0ZW50ZWRfaGludGluZyApCi0gICAgewotICAgICAgRlRfTG9uZyAgbiA9IGFyZ3NbMF0gKiAyOwotCi0KLSAgICAgIGlmICggZXhjLT5hcmdzIDwgbiApCi0gICAgICB7Ci0gICAgICAgIGlmICggZXhjLT5wZWRhbnRpY19oaW50aW5nICkKLSAgICAgICAgICBleGMtPmVycm9yID0gRlRfVEhST1coIFRvb19GZXdfQXJndW1lbnRzICk7Ci0gICAgICAgIG4gPSBleGMtPmFyZ3M7Ci0gICAgICB9Ci0KLSAgICAgIGV4Yy0+YXJncyAtPSBuOwotICAgICAgZXhjLT5uZXdfdG9wID0gZXhjLT5hcmdzOwotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCiAgICAgUCAgICA9IChGVF9VTG9uZylleGMtPmZ1bmNfY3VyX3BwZW0oIGV4YyApOwogICAgIG51bXAgPSAoRlRfVUxvbmcpYXJnc1swXTsKIApAQCAtNzI4NSwyMCArNzIwNywyMSBAQAogICBJbnNfR0VUSU5GTyggVFRfRXhlY0NvbnRleHQgIGV4YywKICAgICAgICAgICAgICAgIEZUX0xvbmcqICAgICAgICBhcmdzICkKICAgewotICAgIEZUX0xvbmcgIEs7CisgICAgRlRfTG9uZyAgICBLOworICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcilGVF9GQUNFX0RSSVZFUiggZXhjLT5mYWNlICk7CiAKIAogICAgIEsgPSAwOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogUkFTVEVSSVpFUiBWRVJTSU9OICAgICAgICAgICAqLwogICAgIC8qIFNlbGVjdG9yIEJpdDogIDAgICAgICAgICAgICAgKi8KICAgICAvKiBSZXR1cm4gQml0KHMpOiAwLTcgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlmICggU1VCUElYRUxfSElOVElORyAgICAgICYmCi0gICAgICAgICAoIGFyZ3NbMF0gJiAxICkgIT0gMCAgJiYKLSAgICAgICAgIGV4Yy0+c3VicGl4ZWxfaGludGluZyApCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgJiYKKyAgICAgICAgICggYXJnc1swXSAmIDEgKSAhPSAwICAgICAgICAmJgorICAgICAgICAgZXhjLT5zdWJwaXhlbF9oaW50aW5nICAgICAgICkKICAgICB7CiAgICAgICBpZiAoIGV4Yy0+aWdub3JlX3hfbW9kZSApCiAgICAgICB7CkBAIC03MzEyLDkgKzcyMzUsOSBAQAogICAgICAgICBLID0gVFRfSU5URVJQUkVURVJfVkVSU0lPTl8zODsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAgICAgICBpZiAoICggYXJnc1swXSAmIDEgKSAhPSAwICkKLSAgICAgICAgSyA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU7CisgICAgICAgIEsgPSBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb247CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogR0xZUEggUk9UQVRFRCAgICAgICAgICAgICAgICAqLwpAQCAtNzMyMiw3ICs3MjQ1LDcgQEAKICAgICAvKiBSZXR1cm4gQml0KHMpOiA4ICAgICAgICAgICAgICovCiAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIGlmICggKCBhcmdzWzBdICYgMiApICE9IDAgJiYgZXhjLT50dF9tZXRyaWNzLnJvdGF0ZWQgKQotICAgICAgSyB8PSAweDgwOworICAgICAgSyB8PSAxIDw8IDg7CiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgICAgLyogR0xZUEggU1RSRVRDSEVEICAgICAgICAgICAgICAqLwpAQCAtNzMzMCwxOSArNzI1Myw4MyBAQAogICAgIC8qIFJldHVybiBCaXQocyk6IDkgICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCAoIGFyZ3NbMF0gJiA0ICkgIT0gMCAmJiBleGMtPnR0X21ldHJpY3Muc3RyZXRjaGVkICkKLSAgICAgIEsgfD0gMSA8PCA4OworICAgICAgSyB8PSAxIDw8IDk7CisKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIFZBUklBVElPTiBHTFlQSCAgICAgICAgICAgICAgKi8KKyAgICAvKiBTZWxlY3RvciBCaXQ6ICAzICAgICAgICAgICAgICovCisgICAgLyogUmV0dXJuIEJpdChzKTogMTAgICAgICAgICAgICAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBYWFg6IFVORE9DVU1FTlRFRCEgICAgICAgICAgICovCisgICAgaWYgKCAoYXJnc1swXSAmIDggKSAhPSAwICYmIGV4Yy0+ZmFjZS0+YmxlbmQgKQorICAgICAgSyB8PSAxIDw8IDEwOworI2VuZGlmCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogSElOVElORyBGT1IgR1JBWVNDQUxFICAgICAgICAqLworICAgIC8qIEJJLUxFVkVMIEhJTlRJTkcgQU5EICAgICAgICAgKi8KKyAgICAvKiBHUkFZU0NBTEUgUkVOREVSSU5HICAgICAgICAgICovCiAgICAgLyogU2VsZWN0b3IgQml0OiAgNSAgICAgICAgICAgICAqLwogICAgIC8qIFJldHVybiBCaXQocyk6IDEyICAgICAgICAgICAgKi8KICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgaWYgKCAoIGFyZ3NbMF0gJiAzMiApICE9IDAgJiYgZXhjLT5ncmF5c2NhbGUgKQogICAgICAgSyB8PSAxIDw8IDEyOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCApCisgICAgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyogSElOVElORyBGT1IgU1VCUElYRUwgICAgICAgICAqLworICAgICAgLyogU2VsZWN0b3IgQml0OiAgNiAgICAgICAgICAgICAqLworICAgICAgLyogUmV0dXJuIEJpdChzKTogMTMgICAgICAgICAgICAqLworICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogdjQwIGRvZXMgc3VicGl4ZWwgaGludGluZyBieSBkZWZhdWx0LiAqLworICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA2NCApICE9IDAgKQorICAgICAgICBLIHw9IDEgPDwgMTM7CiAKLSAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIFZFUlRJQ0FMIExDRCBTVUJQSVhFTFM/ICAgICAgKi8KKyAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDggICAgICAgICAgICAgKi8KKyAgICAgIC8qIFJldHVybiBCaXQocyk6IDE1ICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGlmICggKCBhcmdzWzBdICYgMjU2ICkgIT0gMCAmJiBleGMtPnZlcnRpY2FsX2xjZF9sZWFuICkKKyAgICAgICAgSyB8PSAxIDw8IDE1OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiBTVUJQSVhFTCBQT1NJVElPTkVEPyAgICAgICAgICovCisgICAgICAvKiBTZWxlY3RvciBCaXQ6ICAxMCAgICAgICAgICAgICovCisgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxNyAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBYWFg6IEZyZWVUeXBlIHN1cHBvcnRzIGl0LCBkZXBlbmRlbnQgb24gd2hhdCBjbGllbnQgZG9lcz8gKi8KKyAgICAgIGlmICggKCBhcmdzWzBdICYgMTAyNCApICE9IDAgKQorICAgICAgICBLIHw9IDEgPDwgMTc7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qIFNZTU1FVFJJQ0FMIFNNT09USElORyAgICAgICAgKi8KKyAgICAgIC8qIFNlbGVjdG9yIEJpdDogIDExICAgICAgICAgICAgKi8KKyAgICAgIC8qIFJldHVybiBCaXQocyk6IDE4ICAgICAgICAgICAgKi8KKyAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIC8qIFRoZSBvbmx5IHNtb290aGluZyBtZXRob2QgRnJlZVR5cGUgc3VwcG9ydHMgdW5sZXNzIHNvbWVvbmUgc2V0cyAqLworICAgICAgLyogRlRfTE9BRF9UQVJHRVRfTU9OTy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBpZiAoICggYXJnc1swXSAmIDIwNDggKSAhPSAwICkKKyAgICAgICAgSyB8PSAxIDw8IDE4OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiBDTEVBUlRZUEUgSElOVElORyBBTkQgICAgICAgICovCisgICAgICAvKiBHUkFZU0NBTEUgUkVOREVSSU5HICAgICAgICAgICovCisgICAgICAvKiBTZWxlY3RvciBCaXQ6ICAxMiAgICAgICAgICAgICovCisgICAgICAvKiBSZXR1cm4gQml0KHMpOiAxOSAgICAgICAgICAgICovCisgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAvKiBHcmF5c2NhbGUgcmVuZGVyaW5nIGlzIHdoYXQgRnJlZVR5cGUgZG9lcyBhbnl3YXkgdW5sZXNzIHNvbWVvbmUgKi8KKyAgICAgIC8qIHNldHMgRlRfTE9BRF9UQVJHRVRfTU9OTyBvciBGVF9MT0FEX1RBUkdFVF9MQ0QoX1YpICAgICAgICAgICAgICAqLworICAgICAgaWYgKCAoIGFyZ3NbMF0gJiA0MDk2ICkgIT0gMCAmJiBleGMtPmdyYXlzY2FsZV9jbGVhcnR5cGUgKQorICAgICAgICBLIHw9IDEgPDwgMTk7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQorCisgICAgaWYgKCBTVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgICYmCiAgICAgICAgICBleGMtPnJhc3Rlcml6ZXJfdmVyc2lvbiA+PSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM1ICkKICAgICB7CiAKQEAgLTc0MTUsMTIgKzc0MDIsNjMgQEAKICAgICAgIH0KICAgICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgYXJnc1swXSA9IEs7CiAgIH0KIAogCisjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR0VUVkFSSUFUSU9OW106IGdldCBub3JtYWxpemVkIHZhcmlhdGlvbiAoYmxlbmQpIGNvb3JkaW5hdGVzICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg5MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiBmMi4xNC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFhYWDogVU5ET0NVTUVOVEVEISAgVGhlcmUgaXMgbm8gb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBmcm9tIEFwcGxlIGZvciAqLworICAvKiAgICAgIHRoaXMgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uICBBY3RpdmUgb25seSBpZiBhIGZvbnQgaGFzIEdYICAgICAgICAgKi8KKyAgLyogICAgICB2YXJpYXRpb24gYXhlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBzdGF0aWMgdm9pZAorICBJbnNfR0VUVkFSSUFUSU9OKCBUVF9FeGVjQ29udGV4dCAgZXhjLAorICAgICAgICAgICAgICAgICAgICBGVF9Mb25nKiAgICAgICAgYXJncyApCisgIHsKKyAgICBGVF9VSW50ICAgIG51bV9heGVzID0gZXhjLT5mYWNlLT5ibGVuZC0+bnVtX2F4aXM7CisgICAgRlRfRml4ZWQqICBjb29yZHMgICA9IGV4Yy0+ZmFjZS0+YmxlbmQtPm5vcm1hbGl6ZWRjb29yZHM7CisKKyAgICBGVF9VSW50ICBpOworCisKKyAgICBpZiAoIEJPVU5EUyggbnVtX2F4ZXMsIGV4Yy0+c3RhY2tTaXplICsgMSAtIGV4Yy0+dG9wICkgKQorICAgIHsKKyAgICAgIGV4Yy0+ZXJyb3IgPSBGVF9USFJPVyggU3RhY2tfT3ZlcmZsb3cgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9heGVzOyBpKysgKQorICAgICAgYXJnc1tpXSA9IGNvb3Jkc1tpXSA+PiAyOyAvKiBjb252ZXJ0IDE2LjE2IHRvIDIuMTQgZm9ybWF0ICovCisgIH0KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogR0VUREFUQVtdOiAgICBubyBpZGVhIHdoYXQgdGhpcyBpcyBnb29kIGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIE9wY29kZSByYW5nZTogMHg5MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBTdGFjazogICAgICAgIC0tPiAxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFhYWDogVU5ET0NVTUVOVEVEISAgVGhlcmUgaXMgbm8gZG9jdW1lbnRhdGlvbiBmcm9tIEFwcGxlIGZvciB0aGlzICAgICAqLworICAvKiAgICAgIHZlcnkgd2VpcmQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHN0YXRpYyB2b2lkCisgIEluc19HRVREQVRBKCBGVF9Mb25nKiAgYXJncyApCisgIHsKKyAgICBhcmdzWzBdID0gMTc7CisgIH0KKworI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KKworCiAgIHN0YXRpYyB2b2lkCiAgIEluc19VTktOT1dOKCBUVF9FeGVjQ29udGV4dCAgZXhjICkKICAgewpAQCAtNzQ5Nyw3ICs3NTM1LDcgQEAKICAgICBGVF9Mb25nICAgIGluc19jb3VudGVyID0gMDsgIC8qIGV4ZWN1dGVkIGluc3RydWN0aW9ucyBjb3VudGVyICovCiAgICAgRlRfVVNob3J0ICBpOwogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKICAgICBGVF9CeXRlICAgIG9wY29kZV9wYXR0ZXJuWzFdWzJdID0gewogICAgICAgICAgICAgICAgICAgLyogIzggVHlwZU1hbiBUYWxrIEFsaWduICovCiAgICAgICAgICAgICAgICAgICB7CkBAIC03NTA4LDEyICs3NTQ2LDI3IEBACiAgICAgRlRfVVNob3J0ICBvcGNvZGVfcGF0dGVybnMgICA9IDE7CiAgICAgRlRfVVNob3J0ICBvcGNvZGVfcG9pbnRlclsxXSA9IHsgMCB9OwogICAgIEZUX1VTaG9ydCAgb3Bjb2RlX3NpemVbMV0gICAgPSB7IDEgfTsKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAKLSNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWQogICAgIGV4Yy0+aXVwX2NhbGxlZCA9IEZBTFNFOwotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCisKKyNpZmRlZiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAorICAgIC8qIFRvZ2dsZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhY2NvcmRpbmcgdG8gd2hhdCBmb250IHNheXMsIGV4Y2VwdCAgKi8KKyAgICAvKiB3aGVuIGl0J3MgYSBgdHJpY2t5JyBmb250IHRoYXQgaGVhdmlseSByZWxpZXMgb24gdGhlIGludGVycHJldGVyIHRvICovCisgICAgLyogcmVuZGVyIGdseXBocyBjb3JyZWN0bHksIGUuZy4gREZLYWktU0IuICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAgICAqLworICAgIC8qIGhhY2tzIG1heSBicmVhayBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTCAgICAgICAgICAmJgorICAgICAgICAgIUZUX0lTX1RSSUNLWSggJmV4Yy0+ZmFjZS0+cm9vdCApICkKKyAgICAgIGV4Yy0+YmFja3dhcmRzX2NvbXBhdGliaWxpdHkgPSAhKCBleGMtPkdTLmluc3RydWN0X2NvbnRyb2wgJiA0ICk7CisgICAgZWxzZQorICAgICAgZXhjLT5iYWNrd2FyZHNfY29tcGF0aWJpbGl0eSA9IEZBTFNFOworCisgICAgZXhjLT5pdXB4X2NhbGxlZCA9IEZBTFNFOworICAgIGV4Yy0+aXVweV9jYWxsZWQgPSBGQUxTRTsKKyNlbmRpZgogCiAgICAgLyogc2V0IFBQRU0gYW5kIENWVCBmdW5jdGlvbnMgKi8KICAgICBleGMtPnR0X21ldHJpY3MucmF0aW8gPSAwOwpAQCAtNzU5Miw3ICs3NjQ1LDIxIEBACiAgICAgICAgIGV4Yy0+YXJncyA9IDA7CiAgICAgICB9CiAKLSAgICAgIGV4Yy0+bmV3X3RvcCA9IGV4Yy0+YXJncyArICggUG9wX1B1c2hfQ291bnRbZXhjLT5vcGNvZGVdICYgMTUgKTsKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgICAgICBpZiAoIGV4Yy0+b3Bjb2RlID09IDB4OTEgKQorICAgICAgeworICAgICAgICAvKiB0aGlzIGlzIHZlcnkgc3BlY2lhbDogR0VUVkFSSUFUSU9OIHJldHVybnMgKi8KKyAgICAgICAgLyogYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzICAgICAgICAgICAgICovCisKKyAgICAgICAgLyogaXQgaXMgdGhlIGpvYiBvZiB0aGUgYXBwbGljYXRpb24gdG8gYGFjdGl2YXRlJyBHWCBoYW5kbGluZywgKi8KKyAgICAgICAgLyogdGhpcyBpcywgY2FsbGluZyBhbnkgb2YgdGhlIEdYIEFQSSBmdW5jdGlvbnMgb24gdGhlIGN1cnJlbnQgKi8KKyAgICAgICAgLyogZm9udCB0byBzZWxlY3QgYSB2YXJpYXRpb24gaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBleGMtPmZhY2UtPmJsZW5kICkKKyAgICAgICAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3MgKyBleGMtPmZhY2UtPmJsZW5kLT5udW1fYXhpczsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBleGMtPm5ld190b3AgPSBleGMtPmFyZ3MgKyAoIFBvcF9QdXNoX0NvdW50W2V4Yy0+b3Bjb2RlXSAmIDE1ICk7CiAKICAgICAgIC8qIGBuZXdfdG9wJyBpcyB0aGUgbmV3IHRvcCBvZiB0aGUgc3RhY2ssIGFmdGVyIHRoZSBpbnN0cnVjdGlvbidzICovCiAgICAgICAvKiBleGVjdXRpb24uICBgdG9wJyB3aWxsIGJlIHNldCB0byBgbmV3X3RvcCcgYWZ0ZXIgdGhlIGBzd2l0Y2gnICAqLwpAQCAtNzYwNiw5ICs3NjczLDkgQEAKICAgICAgIGV4Yy0+c3RlcF9pbnMgPSBUUlVFOwogICAgICAgZXhjLT5lcnJvciAgICA9IEZUX0Vycl9PazsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKLSAgICAgIGlmICggU1VCUElYRUxfSElOVElORyApCisgICAgICBpZiAoIFNVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSApCiAgICAgICB7CiAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgb3Bjb2RlX3BhdHRlcm5zOyBpKysgKQogICAgICAgICB7CkBAIC03NjM3LDcgKzc3MDQsNyBAQAogICAgICAgICB9CiAgICAgICB9CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgICAgICB7CiAgICAgICAgIEZUX0xvbmcqICBhcmdzICAgPSBleGMtPnN0YWNrICsgZXhjLT5hcmdzOwpAQCAtNzc4NSw3ICs3ODUyLDcgQEAKICAgICAgICAgICBJbnNfQUxJR05QVFMoIGV4YywgYXJncyApOwogICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgMHgyODogIC8qID8/Pz8gKi8KKyAgICAgICAgY2FzZSAweDI4OiAgLyogUkFXICovCiAgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOwogICAgICAgICAgIGJyZWFrOwogCkBAIC04MTM3LDEwICs4MjA0LDMzIEBACiAgICAgICAgICAgSW5zX0lOU1RDVFJMKCBleGMsIGFyZ3MgKTsKICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIDB4OEY6CisgICAgICAgIGNhc2UgMHg4RjogIC8qIEFESlVTVCAqLworICAgICAgICBjYXNlIDB4OTA6ICAvKiBBREpVU1QgKi8KICAgICAgICAgICBJbnNfVU5LTk9XTiggZXhjICk7CiAgICAgICAgICAgYnJlYWs7CiAKKyNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUCisgICAgICAgIGNhc2UgMHg5MToKKyAgICAgICAgICAvKiBpdCBpcyB0aGUgam9iIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBgYWN0aXZhdGUnIEdYIGhhbmRsaW5nLCAqLworICAgICAgICAgIC8qIHRoaXMgaXMsIGNhbGxpbmcgYW55IG9mIHRoZSBHWCBBUEkgZnVuY3Rpb25zIG9uIHRoZSBjdXJyZW50ICovCisgICAgICAgICAgLyogZm9udCB0byBzZWxlY3QgYSB2YXJpYXRpb24gaW5zdGFuY2UgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGV4Yy0+ZmFjZS0+YmxlbmQgKQorICAgICAgICAgICAgSW5zX0dFVFZBUklBVElPTiggZXhjLCBhcmdzICk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgSW5zX1VOS05PV04oIGV4YyApOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMHg5MjoKKyAgICAgICAgICAvKiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgTVMgZm9udCAoTGFvVUkudHRmIHZlcnNpb24gNS4wMSkgdGhhdCAqLworICAgICAgICAgIC8qIHVzZXMgSURFRnMgZm9yIDB4OTEgYW5kIDB4OTI7IGZvciB0aGlzIHJlYXNvbiB3ZSBhY3RpdmF0ZSAgICovCisgICAgICAgICAgLyogR0VUREFUQSBmb3IgR1ggZm9udHMgb25seSwgc2ltaWxhciB0byBHRVRWQVJJQVRJT04gICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoIGV4Yy0+ZmFjZS0+YmxlbmQgKQorICAgICAgICAgICAgSW5zX0dFVERBVEEoIGFyZ3MgKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBJbnNfVU5LTk9XTiggZXhjICk7CisgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGlmICggb3Bjb2RlID49IDB4RTAgKQogICAgICAgICAgICAgSW5zX01JUlAoIGV4YywgYXJncyApOwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0aW50ZXJwLmggYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAppbmRleCAzMjcwNmQwLi41M2YwOTQ0IDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRpbnRlcnAuaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMTk5Ni0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDE5OTYtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRJTlRFUlBfSF9fCi0jZGVmaW5lIF9fVFRJTlRFUlBfSF9fCisjaWZuZGVmIFRUSU5URVJQX0hfCisjZGVmaW5lIFRUSU5URVJQX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0b2Jqcy5oIgpAQCAtOTksNyArOTksNyBAQAogICB9IFRUX0NhbGxSZWMsICpUVF9DYWxsU3RhY2s7CiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTM4LDcgKzEzOCw3IEBACiAKICAgfSBTUEhfRm9udF9DbGFzczsKIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE3MCw2ICsxNzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBwdHMsCiAgICAgICAgICAgICAgICAgICAgICAgIHR3aWxpZ2h0OwogCisgICAgRlRfTG9uZyAgICAgICAgICAgIHBvaW50U2l6ZTsgIC8qIGluIDI2LjYgZm9ybWF0ICovCiAgICAgRlRfU2l6ZV9NZXRyaWNzICAgIG1ldHJpY3M7CiAgICAgVFRfU2l6ZV9NZXRyaWNzICAgIHR0X21ldHJpY3M7IC8qIHNpemUgbWV0cmljcyAqLwogCkBAIC0yNDcsOSArMjQ4LDEzNSBAQAogICAgIFRUX1NldF9DVlRfRnVuYyAgICBmdW5jX3dyaXRlX2N2dDsgLyogd3JpdGUgYSBjdnQgZW50cnkgKGluIHBpeGVscykgKi8KICAgICBUVF9TZXRfQ1ZUX0Z1bmMgICAgZnVuY19tb3ZlX2N2dDsgIC8qIGluY3IgYSBjdnQgZW50cnkgKGluIHBpeGVscykgICovCiAKLSAgICBGVF9Cb29sICAgICAgICAgICAgZ3JheXNjYWxlOyAgICAgIC8qIGFyZSB3ZSBoaW50aW5nIGZvciBncmF5c2NhbGU/ICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGdyYXlzY2FsZTsgICAgICAvKiBiaS1sZXZlbCBoaW50aW5nIGFuZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZyAgKi8KIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19NSU5JTUFMCisgICAgLyoKKyAgICAgKiBNb2Rlcm4gVHJ1ZVR5cGUgZm9udHMgYXJlIHVzdWFsbHkgcmVuZGVyZWQgdGhyb3VnaCBNaWNyb3NvZnQncworICAgICAqIGNvbGxlY3Rpb24gb2YgcmVuZGVyaW5nIHRlY2huaXF1ZXMgY2FsbGVkIENsZWFyVHlwZSAoZS5nLiwgc3VicGl4ZWwKKyAgICAgKiByZW5kZXJpbmcgYW5kIHN1YnBpeGVsIGhpbnRpbmcpLiAgV2hlbiBDbGVhclR5cGUgd2FzIGludHJvZHVjZWQsIG1vc3QKKyAgICAgKiBmb250cyB3ZXJlIG5vdCByZWFkeS4gIE1pY3Jvc29mdCBkZWNpZGVkIHRvIGltcGxlbWVudCBhIGJhY2t3YXJkcworICAgICAqIGNvbXBhdGliaWxpdHkgbW9kZSB0aGF0IGVtcGxveWVkIHNldmVyYWwgc2ltcGxlIHRvIGNvbXBsaWNhdGVkCisgICAgICogYXNzdW1wdGlvbnMgYW5kIHRyaWNrcyB0aGF0IG1vZGlmaWVkIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUKKyAgICAgKiBieXRlY29kZSBjb250YWluZWQgaW4gdGhlc2UgZm9udHMgdG8gbWFrZSB0aGVtIGxvb2sgQ2xlYXJUeXBlLXkKKyAgICAgKiBzb21laG93LiAgTW9zdCAod2ViKWZvbnRzIHRoYXQgd2VyZSByZWxlYXNlZCBzaW5jZSB0aGVuIGhhdmUgY29tZSB0bworICAgICAqIHJlbHkgb24gdGhlc2UgaGFja3MgdG8gcmVuZGVyIGNvcnJlY3RseSwgZXZlbiBzb21lIG9mIE1pY3Jvc29mdCdzCisgICAgICogZmxhZ3NoaXAgQ2xlYXJUeXBlIGZvbnRzIChDYWxpYnJpLCBDYW1icmlhLCBTZWdvZSBVSSkuCisgICAgICoKKyAgICAgKiBUaGUgbWluaW1hbCBzdWJwaXhlbCBoaW50aW5nIGNvZGUgKGludGVycHJldGVyIHZlcnNpb24gNDApIGVtcGxveXMgYQorICAgICAqIHNtYWxsIGxpc3Qgb2YgZm9udC1hZ25vc3RpYyBoYWNrcyB0byBibHVkZ2VvbiBub24tbmF0aXZlLUNsZWFyVHlwZQorICAgICAqIGZvbnRzIChleGNlcHQgdHJpY2t5IG9uZXNbMV0pIGludG8gc3VibWlzc2lvbi4gIEl0IHdpbGwgbm90IHRyeSB0bworICAgICAqIHRvZ2dsZSBoYWNrcyBmb3Igc3BlY2lmaWMgZm9udHMgZm9yIHBlcmZvcm1hbmNlIGFuZCBjb21wbGV4aXR5CisgICAgICogcmVhc29ucy4gIFRoZSBmb2N1cyBpcyBvbiBtb2Rlcm4gKHdlYilmb250cyByYXRoZXIgdGhhbiBsZWdhY3kgZm9udHMKKyAgICAgKiB0aGF0IHdlcmUgbWFkZSBmb3IgYmxhY2stYW5kLXdoaXRlIHJlbmRlcmluZy4KKyAgICAgKgorICAgICAqIE1ham9yIGhhY2tzCisgICAgICoKKyAgICAgKiAtIEFueSBwb2ludCBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIGlzIGlnbm9yZWQgKGNmLiBgRGlyZWN0X01vdmUnIGFuZAorICAgICAqICAgYERpcmVjdF9Nb3ZlX1gnKS4gIFRoaXMgaGFzIHRoZSBzbWFsbGVzdCBjb2RlIGZvb3RwcmludCBhbmQgc2luZ2xlCisgICAgICogICBiaWdnZXN0IGVmZmVjdC4gIFRoZSBDbGVhclR5cGUgd2F5IHRvIGluY3JlYXNlIHJlc29sdXRpb24gaXMKKyAgICAgKiAgIHN1cGVyc2FtcGxpbmcgdGhlIHggYXhpcywgdGhlIEZyZWVUeXBlIHdheSBpcyBpZ25vcmluZyBpbnN0cnVjdGlvbnMKKyAgICAgKiAgIG9uIHRoZSB4IGF4aXMsIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCBpbiB0aGUgbWFqb3JpdHkgb2YKKyAgICAgKiAgIGNhc2VzLgorICAgICAqCisgICAgICogLSBQb2ludHMgYXJlIG5vdCBtb3ZlZCBwb3N0LUlVUCAobmVpdGhlciBvbiB0aGUgeCBub3Igb24gdGhlIHkgYXhpcyksCisgICAgICogICBleGNlcHQgdGhlIHggY29tcG9uZW50IG9mIGRpYWdvbmFsIG1vdmVzIHBvc3QtSVVQIChjZi4KKyAgICAgKiAgIGBEaXJlY3RfTW92ZScsIGBEaXJlY3RfTW92ZV9ZJywgYE1vdmVfWnAyX1BvaW50JykuICBQb3N0LUlVUAorICAgICAqICAgY2hhbmdlcyBhcmUgY29tbW9ubHkgdXNlZCB0byBgZml4JyBwaXhlbCBwYXR0ZXJucyB3aGljaCBoYXMgbGl0dGxlCisgICAgICogICB1c2Ugb3V0c2lkZSBtb25vY2hyb21lIHJlbmRlcmluZy4KKyAgICAgKgorICAgICAqIC0gU0hQSVggYW5kIERFTFRBUCBkb24ndCBleGVjdXRlIHVubGVzcyBtb3ZpbmcgYSBjb21wb3NpdGUgb24gdGhlCisgICAgICogICB5IGF4aXMgb3IgbW92aW5nIGEgcHJldmlvdXNseSB5IHRvdWNoZWQgcG9pbnQuICBTSFBJWCBhZGRpdGlvbmFsbHkKKyAgICAgKiAgIGRlbmllcyBtb3ZlbWVudCBvbiB0aGUgeCBheGlzIChjZi4gYEluc19TSFBJWCcgYW5kIGBJbnNfREVMVEFQJykuCisgICAgICogICBCb3RoIGluc3RydWN0aW9ucyBhcmUgY29tbW9ubHkgdXNlZCB0byBgZml4JyBwaXhlbCBwYXR0ZXJucyBmb3IKKyAgICAgKiAgIG1vbm9jaHJvbWUgb3IgV2luZG93cydzIEdESSByZW5kZXJpbmcgYnV0IG1ha2UgbGl0dGxlIHNlbnNlIGZvcgorICAgICAqICAgRnJlZVR5cGUgcmVuZGVyaW5nLiAgQm90aCBjYW4gZGlzdG9ydCB0aGUgb3V0bGluZS4gIFNlZSBbMl0gZm9yCisgICAgICogICBkZXRhaWxzLgorICAgICAqCisgICAgICogLSBUaGUgaGRteCB0YWJsZSBhbmQgbW9kaWZpY2F0aW9ucyB0byBwaGFudG9tIHBvaW50cyBhcmUgaWdub3JlZC4KKyAgICAgKiAgIEJlYXJpbmdzIGFuZCBhZHZhbmNlIHdpZHRocyByZW1haW4gdW5jaGFuZ2VkIChleGNlcHQgcm91bmRpbmcgdGhlbQorICAgICAqICAgb3V0c2lkZSB0aGUgaW50ZXJwcmV0ZXIhKSwgY2YuIGBjb21wdXRlX2dseXBoX21ldHJpY3MnIGFuZAorICAgICAqICAgYFRUX0hpbnRfR2x5cGgnLiAgTGV0dGluZyBub24tbmF0aXZlLUNsZWFyVHlwZSBmb250cyBtb2RpZnkgc3BhY2luZworICAgICAqICAgbWlnaHQgbWVzcyB1cCBzcGFjaW5nLgorICAgICAqCisgICAgICogTWlub3IgaGFja3MKKyAgICAgKgorICAgICAqIC0gRkxJUFJHT04sIEZMSVBSR09GRiwgYW5kIEZMSVBQVCBkb24ndCBleGVjdXRlIHBvc3QtSVVQLiAgVGhpcworICAgICAqICAgcHJldmVudHMgZGVudHMgaW4gZS5nLiBBcmlhbC1SZWd1bGFyJ3MgYEQnIGFuZCBgRycgZ2x5cGhzIGF0CisgICAgICogICB2YXJpb3VzIHNpemVzLgorICAgICAqCisgICAgICogKFBvc3QtSVVQIGlzIHRoZSBzdGF0ZSBhZnRlciBib3RoIElVUFt4XSBhbmQgSVVQW3ldIGhhdmUgYmVlbgorICAgICAqIGV4ZWN1dGVkLikKKyAgICAgKgorICAgICAqIFRoZSBiZXN0IHJlc3VsdHMgYXJlIGFjaGlldmVkIGZvciBmb250cyB0aGF0IHdlcmUgZnJvbSB0aGUgb3V0c2V0CisgICAgICogZGVzaWduZWQgd2l0aCBDbGVhclR5cGUgaW4gbWluZCwgbWVhbmluZyB0aGV5IGxlYXZlIHRoZSB4IGF4aXMgbW9zdGx5CisgICAgICogYWxvbmUgYW5kIGRvbid0IG1lc3Mgd2l0aCB0aGUgYGZpbmFsJyBvdXRsaW5lIHRvIHByb2R1Y2UgbW9yZQorICAgICAqIHBsZWFzaW5nIHBpeGVsIHBhdHRlcm5zLiAgVGhlIGhhcmRlciB0aGUgZGVzaWduZXIgdHJpZWQgdG8gcHJvZHVjZQorICAgICAqIHZlcnkgc3BlY2lmaWMgcGF0dGVybnMgKGBzdXBlcmhpbnRpbmcnKSBmb3IgcHJlLUNsZWFyVHlwZS1kaXNwbGF5cywKKyAgICAgKiB0aGUgd29yc2UgdGhlIHJlc3VsdHMuCisgICAgICoKKyAgICAgKiBNaWNyb3NvZnQgZGVmaW5lcyBhIHdheSB0byB0dXJuIG9mZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQKKyAgICAgKiBpbnRlcnByZXQgaW5zdHJ1Y3Rpb25zIGFzIGJlZm9yZSAoY2FsbGVkIGBuYXRpdmUgQ2xlYXJUeXBlJylbMl1bM10uCisgICAgICogVGhlIGZvbnQgZGVzaWduZXIgdGhlbiByZWdhaW5zIGZ1bGwgY29udHJvbCBhbmQgaXMgcmVzcG9uc2libGUgZm9yCisgICAgICogbWFraW5nIHRoZSBmb250IHdvcmsgY29ycmVjdGx5IHdpdGggQ2xlYXJUeXBlIHdpdGhvdXQgYW55CisgICAgICogaGFuZC1ob2xkaW5nIGJ5IHRoZSBpbnRlcnByZXRlciBvciByYXN0ZXJpemVyWzRdLiAgVGhlIHY0MAorICAgICAqIGludGVycHJldGVyIGFzc3VtZXMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYnkgZGVmYXVsdCwgd2hpY2ggY2FuIGJlCisgICAgICogdHVybmVkIG9mZiB0aGUgc2FtZSB3YXkgYnkgZXhlY3V0aW5nIHRoZSBmb2xsb3dpbmcgaW4gdGhlIGNvbnRyb2wKKyAgICAgKiBwcm9ncmFtIChjZi4gYEluc19JTlNUQ1RSTCcpLgorICAgICAqCisgICAgICogICAjUFVTSCA0LDMKKyAgICAgKiAgIElOU1RDVFJMW10KKyAgICAgKgorICAgICAqIFsxXSBUcmlja3kgZm9udHMgYXMgRnJlZVR5cGUgZGVmaW5lcyB0aGVtIHJlbHkgb24gdGhlIGJ5dGVjb2RlCisgICAgICogICAgIGludGVycHJldGVyIHRvIGRpc3BsYXkgY29ycmVjdGx5LiAgSGFja3MgY2FuIGludGVyZmVyZSB3aXRoIHRoZW0sCisgICAgICogICAgIHNvIHRoZXkgZ2V0IHRyZWF0ZWQgbGlrZSBuYXRpdmUgQ2xlYXJUeXBlIGZvbnRzICh2NDAgd2l0aAorICAgICAqICAgICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0dXJuZWQgb2ZmKS4gIENmLiBgVFRfUnVuSW5zJy4KKyAgICAgKgorICAgICAqIFsyXSBQcm9wb3NlZCBieSBNaWNyb3NvZnQncyBHcmVnIEhpdGNoY29jayBpbgorICAgICAqICAgICBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkvY2xlYXJ0eXBlL3RydWV0eXBlY2xlYXJ0eXBlLmFzcHgKKyAgICAgKgorICAgICAqIFszXSBCZWF0IFN0YW1tIGRlc2NyaWJlcyBpdCBpbiBtb3JlIGRldGFpbDoKKyAgICAgKiAgICAgaHR0cDovL3d3dy5iZWF0c3RhbW0uY29tL3R5cG9ncmFwaHkvUlRSQ2g0Lmh0bSNTZWMxMgorICAgICAqCisgICAgICogWzRdIFRoZSBsaXN0IG9mIGBuYXRpdmUgQ2xlYXJUeXBlJyBmb250cyBpcyBzbWFsbCBhdCB0aGUgdGltZSBvZiB0aGlzCisgICAgICogICAgIHdyaXRpbmc7IEkgZm91bmQgdGhlIGZvbGxvd2luZyBvbiBhIFdpbmRvd3MgMTAgVXBkYXRlIDE1MTEKKyAgICAgKiAgICAgaW5zdGFsbGF0aW9uOiBDb25zdGFudGlhLCBDb3JiZWwsIFNpdGthLCBNYWxndW4gR290aGljLCBNaWNyb3NvZnQKKyAgICAgKiAgICAgSmhlbmdIZWkgKEJvbGQgYW5kIFVJIEJvbGQpLCBNaWNyb3NvZnQgWWFIZWkgKEJvbGQgYW5kIFVJIEJvbGQpLAorICAgICAqICAgICBTaW1TdW4sIE5TaW1TdW4sIGFuZCBZdSBHb3RoaWMuCisgICAgICoKKyAgICAgKi8KKworICAgIC8qIFVzaW5nIHY0MCBpbXBsaWVzIHN1YnBpeGVsIGhpbnRpbmcuICBVc2VkIHRvIGRldGVjdCBpbnRlcnByZXRlciAqLworICAgIC8qIHZlcnNpb24gc3dpdGNoZXMuICBgX2xlYW4nIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgSW5maW5hbGl0eSAqLworICAgIC8qIGBzdWJwaXhlbF9oaW50aW5nJywgd2hpY2ggaXMgbWFuYWdlZCBkaWZmZXJlbnRseS4gICAgICAgICAgICAgICAqLworICAgIEZUX0Jvb2wgICAgICAgICAgICBzdWJwaXhlbF9oaW50aW5nX2xlYW47CisKKyAgICAvKiBMb25nIHNpZGUgb2YgYSBMQ0Qgc3VicGl4ZWwgaXMgdmVydGljYWwgKGUuZy4sIHNjcmVlbiBpcyByb3RhdGVkKS4gKi8KKyAgICAvKiBgX2xlYW4nIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUgSW5maW5hbGl0eSBgdmVydGljYWxfbGNkJywgd2hpY2ggKi8KKyAgICAvKiBpcyBtYW5hZ2VkIGRpZmZlcmVudGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgdmVydGljYWxfbGNkX2xlYW47CisKKyAgICAvKiBEZWZhdWx0IHRvIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1vZGUgaW4gdjQwIGludGVycHJldGVyLiAgSWYgICovCisgICAgLyogdGhpcyBpcyBmYWxzZSwgaXQgaW1wbGllcyB0aGUgaW50ZXJwcmV0ZXIgaXMgaW4gdjM1IG9yIGluIG5hdGl2ZSAqLworICAgIC8qIENsZWFyVHlwZSBtb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgYmFja3dhcmRzX2NvbXBhdGliaWxpdHk7CisKKyAgICAvKiBVc2VmdWwgZm9yIGRldGVjdGluZyBhbmQgZGVueWluZyBwb3N0LUlVUCB0cmlja2VyeSB0aGF0IGlzIHVzdWFsbHkgKi8KKyAgICAvKiB1c2VkIHRvIGZpeCBwaXhlbCBwYXR0ZXJucyAoYHN1cGVyaGludGluZycpLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9Cb29sICAgICAgICAgICAgaXVweF9jYWxsZWQ7CisgICAgRlRfQm9vbCAgICAgICAgICAgIGl1cHlfY2FsbGVkOworCisgICAgLyogQ2xlYXJUeXBlIGhpbnRpbmcgYW5kIGdyYXlzY2FsZSByZW5kZXJpbmcsIGFzIHVzZWQgYnkgVW5pdmVyc2FsICovCisgICAgLyogV2luZG93cyBQbGF0Zm9ybSBhcHBzIChXaW5kb3dzIDggYW5kIGFib3ZlKS4gIExpa2UgdGhlIHN0YW5kYXJkICovCisgICAgLyogY29sb3JmdWwgQ2xlYXJUeXBlIG1vZGUsIGl0IHV0aWxpemVzIGEgdmFzdGx5IGluY3JlYXNlZCB2aXJ0dWFsICovCisgICAgLyogcmVzb2x1dGlvbiBvbiB0aGUgeCBheGlzLiAgRGlmZmVyZW50IGZyb20gYmktbGV2ZWwgaGludGluZyBhbmQgICovCisgICAgLyogZ3JheXNjYWxlIHJlbmRlcmluZywgdGhlIG9sZCBtb2RlIGZyb20gV2luOXggZGF5cyB0aGF0IHJvdWdobHkgICovCisgICAgLyogYWRoZXJlcyB0byB0aGUgcGh5c2ljYWwgcGl4ZWwgZ3JpZCBvbiBib3RoIGF4ZXMuICAgICAgICAgICAgICAgICovCisgICAgRlRfQm9vbCAgICAgICAgICAgIGdyYXlzY2FsZV9jbGVhcnR5cGU7CisjZW5kaWYgLyogVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwgKi8KKworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAgICAgVFRfUm91bmRfRnVuYyAgICAgIGZ1bmNfcm91bmRfc3BobjsgICAvKiBzdWJwaXhlbCByb3VuZGluZyBmdW5jdGlvbiAqLwogCiAgICAgRlRfQm9vbCAgICAgICAgICAgIHN1YnBpeGVsX2hpbnRpbmc7ICAvKiBVc2luZyBzdWJwaXhlbCBoaW50aW5nPyAgICAgICAqLwpAQCAtMjc5LDcgKzQwNiw3IEBACiAgICAgRlRfVUxvbmcgICAgICAgICAgIHNwaF9pbl9mdW5jX2ZsYWdzOyAgICAgLyogZmxhZ3MgdG8gaW5kaWNhdGUgaWYgaW4gICAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNwZWNpYWwgZnVuY3Rpb25zICAgICAgICAgKi8KIAotI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZICovCiAKICAgfSBUVF9FeGVjQ29udGV4dFJlYzsKIApAQCAtMzgyLDcgKzUwOSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRJTlRFUlBfSF9fICovCisjZW5kaWYgLyogVFRJTlRFUlBfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dG9ianMuYyBiL3NyYy90cnVldHlwZS90dG9ianMuYwppbmRleCBiMGQ5ZjI4Li5lZDNiZTJkIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9iamVjdHMgbWFuYWdlciAoYm9keSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0zMiwxMCArMzIsNiBAQAogI2luY2x1ZGUgInR0aW50ZXJwLmgiCiAjZW5kaWYKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0jaW5jbHVkZSBGVF9UUlVFVFlQRV9VTlBBVEVOVEVEX0gKLSNlbmRpZgotCiAjaWZkZWYgVFRfQ09ORklHX09QVElPTl9HWF9WQVJfU1VQUE9SVAogI2luY2x1ZGUgInR0Z3h2YXIuaCIKICNlbmRpZgpAQCAtMjQ2LDcgKzI0Miw3IEBACiAgIHR0X2NoZWNrX3RyaWNreW5lc3Nfc2ZudF9pZHMoIFRUX0ZhY2UgIGZhY2UgKQogICB7CiAjZGVmaW5lIFRSSUNLX1NGTlRfSURTX1BFUl9GQUNFICAgMwotI2RlZmluZSBUUklDS19TRk5UX0lEU19OVU1fRkFDRVMgIDE3CisjZGVmaW5lIFRSSUNLX1NGTlRfSURTX05VTV9GQUNFUyAgMTgKIAogICAgIHN0YXRpYyBjb25zdCB0dF9zZm50X2lkX3JlYyBzZm50X2lkW1RSSUNLX1NGTlRfSURTX05VTV9GQUNFU10KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtUUklDS19TRk5UX0lEU19QRVJfRkFDRV0gPSB7CkBAIC0yNzAsNiArMjY2LDExIEBACiAgICAgICAgIHsgMHg1QTMwQ0EzQlVMLCAweDAwMDA5MDYzVUwgfSwgLyogZnBnbSAqLwogICAgICAgICB7IDB4MTNBNDI2MDJVTCwgMHgwMDAwMDA3RVVMIH0gIC8qIHByZXAgKi8KICAgICAgIH0sCisgICAgICB7IC8qIERGS2FpU2h1MiAqLworICAgICAgICB7IDB4MTFFNUVBRDRVTCwgMHgwMDAwMDM1MFVMIH0sIC8qIGN2dCAgKi8KKyAgICAgICAgeyAweEE2RTc4QzAxVUwsIDB4MDAwMDg5OThVTCB9LCAvKiBmcGdtICovCisgICAgICAgIHsgMHgxM0E0MjYwMlVMLCAweDAwMDAwMDdFVUwgfSAgLyogcHJlcCAqLworICAgICAgfSwKICAgICAgIHsgLyogSHVhVGlhbkthaVRpICovCiAgICAgICAgIHsgMHhGRkZCRkZGQ1VMLCAweDAwMDAwMDA4VUwgfSwgLyogY3Z0ICAqLwogICAgICAgICB7IDB4OUM5RTQ4QjhVTCwgMHgwMDAwQkVBMlVMIH0sIC8qIGZwZ20gKi8KQEAgLTM5NywxMSArMzk4LDExIEBACiAgICAgZm9yICggaiA9IDA7IGogPCBUUklDS19TRk5UX0lEU19OVU1fRkFDRVM7IGorKyApCiAgICAgewogICAgICAgaWYgKCAhaGFzX2N2dCAgJiYgIXNmbnRfaWRbal1bVFJJQ0tfU0ZOVF9JRF9jdnRdLkxlbmd0aCApCi0gICAgICAgIG51bV9tYXRjaGVkX2lkc1tqXSArKzsKKyAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdKys7CiAgICAgICBpZiAoICFoYXNfZnBnbSAmJiAhc2ZudF9pZFtqXVtUUklDS19TRk5UX0lEX2ZwZ21dLkxlbmd0aCApCi0gICAgICAgIG51bV9tYXRjaGVkX2lkc1tqXSArKzsKKyAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdKys7CiAgICAgICBpZiAoICFoYXNfcHJlcCAmJiAhc2ZudF9pZFtqXVtUUklDS19TRk5UX0lEX3ByZXBdLkxlbmd0aCApCi0gICAgICAgIG51bV9tYXRjaGVkX2lkc1tqXSArKzsKKyAgICAgICAgbnVtX21hdGNoZWRfaWRzW2pdKys7CiAgICAgICBpZiAoIG51bV9tYXRjaGVkX2lkc1tqXSA9PSBUUklDS19TRk5UX0lEU19QRVJfRkFDRSApCiAgICAgICAgIHJldHVybiBUUlVFOwogICAgIH0KQEAgLTY3NiwyOSArNjc3LDYgQEAKIAogI2VuZGlmIC8qIFRUX0NPTkZJR19PUFRJT05fR1hfVkFSX1NVUFBPUlQgKi8KIAotI2lmIGRlZmluZWQoIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HICAgICkgJiYgXAotICAgICFkZWZpbmVkKCBUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSICkKLQotICAgIHsKLSAgICAgIEZUX0Jvb2wgIHVucGF0ZW50ZWRfaGludGluZzsKLSAgICAgIGludCAgICAgIGk7Ci0KLQotICAgICAgLyogRGV0ZXJtaW5lIHdoZXRoZXIgdW5wYXRlbnRlZCBoaW50aW5nIGlzIHRvIGJlIHVzZWQgZm9yIHRoaXMgZmFjZS4gKi8KLSAgICAgIHVucGF0ZW50ZWRfaGludGluZyA9IEZUX0JPT0wKLSAgICAgICAgKCBsaWJyYXJ5LT5kZWJ1Z19ob29rc1tGVF9ERUJVR19IT09LX1VOUEFURU5URURfSElOVElOR10gIT0gTlVMTCApOwotCi0gICAgICBmb3IgKCBpID0gMDsgaSA8IG51bV9wYXJhbXMgJiYgIWZhY2UtPnVucGF0ZW50ZWRfaGludGluZzsgaSsrICkKLSAgICAgICAgaWYgKCBwYXJhbXNbaV0udGFnID09IEZUX1BBUkFNX1RBR19VTlBBVEVOVEVEX0hJTlRJTkcgKQotICAgICAgICAgIHVucGF0ZW50ZWRfaGludGluZyA9IFRSVUU7Ci0KLSAgICAgIGlmICggIXVucGF0ZW50ZWRfaGludGluZyApCi0gICAgICAgIHR0ZmFjZS0+aW50ZXJuYWwtPmlnbm9yZV91bnBhdGVudGVkX2hpbnRlciA9IFRSVUU7Ci0gICAgfQotCi0jZW5kaWYgLyogVFRfQ09ORklHX09QVElPTl9VTlBBVEVOVEVEX0hJTlRJTkcgJiYKLSAgICAgICAgICAhVFRfQ09ORklHX09QVElPTl9CWVRFQ09ERV9JTlRFUlBSRVRFUiAqLwotCiAgICAgLyogaW5pdGlhbGl6ZSBzdGFuZGFyZCBnbHlwaCBsb2FkaW5nIHJvdXRpbmVzICovCiAgICAgVFRfSW5pdF9HbHlwaF9Mb2FkaW5nKCBmYWNlICk7CiAKQEAgLTEzMDksMTAgKzEyODcsMTIgQEAKIAogICAgIFRUX0RyaXZlciAgZHJpdmVyID0gKFRUX0RyaXZlcil0dGRyaXZlcjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORwotICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzg7Ci0jZWxzZQogICAgIGRyaXZlci0+aW50ZXJwcmV0ZXJfdmVyc2lvbiA9IFRUX0lOVEVSUFJFVEVSX1ZFUlNJT05fMzU7CisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKKyAgICBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzM4OworI2VuZGlmCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX01JTklNQUwKKyAgICBkcml2ZXItPmludGVycHJldGVyX3ZlcnNpb24gPSBUVF9JTlRFUlBSRVRFUl9WRVJTSU9OXzQwOwogI2VuZGlmCiAKICNlbHNlIC8qICFUVF9VU0VfQllURUNPREVfSU5URVJQUkVURVIgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dG9ianMuaCBiL3NyYy90cnVldHlwZS90dG9ianMuaAppbmRleCA5Mzk2MDg5Li45OGFkMzgzIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRvYmpzLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0b2Jqcy5oCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIE9iamVjdHMgbWFuYWdlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0xNiw4ICsxNiw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgX19UVE9CSlNfSF9fCi0jZGVmaW5lIF9fVFRPQkpTX0hfXworI2lmbmRlZiBUVE9CSlNfSF8KKyNkZWZpbmUgVFRPQkpTX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC03MiwxMCArNzIsNiBAQAogICAgIEZUX1VuaXRWZWN0b3IgIHByb2pWZWN0b3I7CiAgICAgRlRfVW5pdFZlY3RvciAgZnJlZVZlY3RvcjsKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fVU5QQVRFTlRFRF9ISU5USU5HCi0gICAgRlRfQm9vbCAgICAgICAgYm90aF94X2F4aXM7Ci0jZW5kaWYKLQogICAgIEZUX0xvbmcgICAgICAgIGxvb3A7CiAgICAgRlRfRjI2RG90NiAgICAgbWluaW11bV9kaXN0YW5jZTsKICAgICBGVF9JbnQgICAgICAgICByb3VuZF9zdGF0ZTsKQEAgLTI5MCw2ICsyODYsOCBAQAogCiAjaWZkZWYgVFRfVVNFX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiAKKyAgICBGVF9Mb25nICAgICAgICAgICAgcG9pbnRfc2l6ZTsgICAgLyogZm9yIHRoZSBgTVBTJyBieXRlY29kZSBpbnN0cnVjdGlvbiAqLworCiAgICAgRlRfVUludCAgICAgICAgICAgIG51bV9mdW5jdGlvbl9kZWZzOyAvKiBudW1iZXIgb2YgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKi8KICAgICBGVF9VSW50ICAgICAgICAgICAgbWF4X2Z1bmN0aW9uX2RlZnM7CiAgICAgVFRfRGVmQXJyYXkgICAgICAgIGZ1bmN0aW9uX2RlZnM7ICAgICAvKiB0YWJsZSBvZiBmdW5jdGlvbiBkZWZpbml0aW9ucyAgKi8KQEAgLTQxOSw3ICs0MTcsNyBAQAogCiBGVF9FTkRfSEVBREVSCiAKLSNlbmRpZiAvKiBfX1RUT0JKU19IX18gKi8KKyNlbmRpZiAvKiBUVE9CSlNfSF8gKi8KIAogCiAvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHBpYy5jIGIvc3JjL3RydWV0eXBlL3R0cGljLmMKaW5kZXggMjQyYTZiNy4uNTRhNWI4YiAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGljLmMKKysrIGIvc3JjL3RydWV0eXBlL3R0cGljLmMKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHRydWV0eXBlIG1vZHVsZS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KZGlmZiAtLWdpdCBhL3NyYy90cnVldHlwZS90dHBpYy5oIGIvc3JjL3RydWV0eXBlL3R0cGljLmgKaW5kZXggMDc2YWU1Ni4uZjcyNTg2NSAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGljLmgKKysrIGIvc3JjL3RydWV0eXBlL3R0cGljLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVGhlIEZyZWVUeXBlIHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgc2VydmljZXMgZm9yIHRydWV0eXBlIG1vZHVsZS4gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDIwMDktMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAyMDA5LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBPcmFuIEFncmEgYW5kIE1pY2tleSBHYWJlbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUUElDX0hfXwotI2RlZmluZSBfX1RUUElDX0hfXworI2lmbmRlZiBUVFBJQ19IXworI2RlZmluZSBUVFBJQ19IXwogCiAKICNpbmNsdWRlIEZUX0lOVEVSTkFMX1BJQ19ICkBAIC03Nyw3ICs3Nyw3IEBACiAKICAvKiAqLwogCi0jZW5kaWYgLyogX19UVFBJQ19IX18gKi8KKyNlbmRpZiAvKiBUVFBJQ19IXyAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuYyBiL3NyYy90cnVldHlwZS90dHBsb2FkLmMKaW5kZXggOWJmNjdmOS4uY2ExNThhYyAxMDA2NDQKLS0tIGEvc3JjL3RydWV0eXBlL3R0cGxvYWQuYworKysgYi9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlLXNwZWNpZmljIHRhYmxlcyBsb2FkZXIgKGJvZHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAxOTk2LTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oIGIvc3JjL3RydWV0eXBlL3R0cGxvYWQuaAppbmRleCBiYzkyMzY5Li5hYTJlMzhlIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRwbG9hZC5oCisrKyBiL3NyYy90cnVldHlwZS90dHBsb2FkLmgKQEAgLTQsNyArNCw3IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgVHJ1ZVR5cGUtc3BlY2lmaWMgdGFibGVzIGxvYWRlciAoc3BlY2lmaWNhdGlvbikuICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxNSBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIENvcHlyaWdodCAxOTk2LTIwMTYgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgICAgICAgKi8KQEAgLTE2LDggKzE2LDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAotI2lmbmRlZiBfX1RUUExPQURfSF9fCi0jZGVmaW5lIF9fVFRQTE9BRF9IX18KKyNpZm5kZWYgVFRQTE9BRF9IXworI2RlZmluZSBUVFBMT0FEX0hfCiAKIAogI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CkBAIC02OSw3ICs2OSw3IEBACiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRQTE9BRF9IX18gKi8KKyNlbmRpZiAvKiBUVFBMT0FEX0hfICovCiAKIAogLyogRU5EICovCmRpZmYgLS1naXQgYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguYyBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCmluZGV4IDBkMzkxZTkuLjAzOTUwOTYgMTAwNjQ0Ci0tLSBhL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCisrKyBiL3NyYy90cnVldHlwZS90dHN1YnBpeC5jCkBAIC00LDcgKzQsNyBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgIFRydWVUeXBlIFN1YnBpeGVsIEhpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogIENvcHlyaWdodCAyMDEwLTIwMTUgYnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMjAxMC0yMDE2IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAidHRzdWJwaXguaCIKIAogCi0jaWZkZWYgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCisjaWZkZWYgVFRfU1VQUE9SVF9TVUJQSVhFTF9ISU5USU5HX0lORklOQUxJVFkKIAogICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDAwLDEyICsxMDAwLDEyIEBACiAgICAgfQogICB9CiAKLSNlbHNlIC8qICFUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbHNlIC8qICFUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAgIC8qIEFOU0kgQyBkb2Vzbid0IGxpa2UgZW1wdHkgc291cmNlIGZpbGVzICovCiAgIHR5cGVkZWYgaW50ICBfdHRfc3VicGl4X2R1bW15OwogCi0jZW5kaWYgLyogIVRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORyAqLworI2VuZGlmIC8qICFUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAKIC8qIEVORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3RydWV0eXBlL3R0c3VicGl4LmggYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaAppbmRleCA5MTUxYWEzLi44Njg0NGRhIDEwMDY0NAotLS0gYS9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaAorKysgYi9zcmMvdHJ1ZXR5cGUvdHRzdWJwaXguaApAQCAtNCw3ICs0LDcgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICBUcnVlVHlwZSBTdWJwaXhlbCBIaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICBDb3B5cmlnaHQgMjAxMC0yMDE1IGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQ29weXJpZ2h0IDIwMTAtMjAxNiBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZy4gICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLwpAQCAtMTYsOCArMTYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jaWZuZGVmIF9fVFRTVUJQSVhfSF9fCi0jZGVmaW5lIF9fVFRTVUJQSVhfSF9fCisjaWZuZGVmIFRUU1VCUElYX0hfCisjZGVmaW5lIFRUU1VCUElYX0hfCiAKICNpbmNsdWRlIDxmdDJidWlsZC5oPgogI2luY2x1ZGUgInR0b2Jqcy5oIgpAQCAtMjcsNyArMjcsNyBAQAogRlRfQkVHSU5fSEVBREVSCiAKIAotI2lmZGVmIFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfSElOVElORworI2lmZGVmIFRUX1NVUFBPUlRfU1VCUElYRUxfSElOVElOR19JTkZJTkFMSVRZCiAKICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTAwLDExICsxMDAsMTIgQEAKICNkZWZpbmUgU1BIX09QVElPTl9TRVRfQ09NUEFUSUJMRV9XSURUSFMgICBGQUxTRQogI2RlZmluZSBTUEhfT1BUSU9OX1NFVF9SQVNURVJJWkVSX1ZFUlNJT04gIDM4CiAKLSNlbmRpZiAvKiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJTlRJTkcgKi8KKyNlbmRpZiAvKiBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfSU5GSU5BTElUWSAqLwogCiAKIEZUX0VORF9IRUFERVIKIAotI2VuZGlmIC8qIF9fVFRTVUJQSVhfSF9fICovCisjZW5kaWYgLyogVFRTVUJQSVhfSF8gKi8KKwogCiAvKiBFTkQgKi8K