ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IGNmZDUxMTMuLjRjMjg2NzAgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMSwzMSArMSwzMSBAQAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotYWFjZGVjX3NvdXJjZXMgOj0gJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYkFBQ2RlYy9zcmMvKi5jcHApCithYWNkZWNfc291cmNlcyA6PSAkKHNvcnQgJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYkFBQ2RlYy9zcmMvKi5jcHApKQogYWFjZGVjX3NvdXJjZXMgOj0gJChhYWNkZWNfc291cmNlczokKExPQ0FMX1BBVEgpL2xpYkFBQ2RlYy9zcmMvJT0lKQogCi1hYWNlbmNfc291cmNlcyA6PSAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliQUFDZW5jL3NyYy8qLmNwcCkKK2FhY2VuY19zb3VyY2VzIDo9ICQoc29ydCAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliQUFDZW5jL3NyYy8qLmNwcCkpCiBhYWNlbmNfc291cmNlcyA6PSAkKGFhY2VuY19zb3VyY2VzOiQoTE9DQUxfUEFUSCkvbGliQUFDZW5jL3NyYy8lPSUpCiAKLXBjbXV0aWxzX3NvdXJjZXMgOj0gJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYlBDTXV0aWxzL3NyYy8qLmNwcCkKK3BjbXV0aWxzX3NvdXJjZXMgOj0gJChzb3J0ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9saWJQQ011dGlscy9zcmMvKi5jcHApKQogcGNtdXRpbHNfc291cmNlcyA6PSAkKHBjbXV0aWxzX3NvdXJjZXM6JChMT0NBTF9QQVRIKS9saWJQQ011dGlscy9zcmMvJT0lKQogCi1mZGtfc291cmNlcyA6PSAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliRkRLL3NyYy8qLmNwcCkKK2Zka19zb3VyY2VzIDo9ICQoc29ydCAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliRkRLL3NyYy8qLmNwcCkpCiBmZGtfc291cmNlcyA6PSAkKGZka19zb3VyY2VzOiQoTE9DQUxfUEFUSCkvbGliRkRLL3NyYy8lPSUpCiAKLXN5c19zb3VyY2VzIDo9ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9saWJTWVMvc3JjLyouY3BwKQorc3lzX3NvdXJjZXMgOj0gJChzb3J0ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9saWJTWVMvc3JjLyouY3BwKSkKIHN5c19zb3VyY2VzIDo9ICQoc3lzX3NvdXJjZXM6JChMT0NBTF9QQVRIKS9saWJTWVMvc3JjLyU9JSkKIAotbXBlZ3RwZGVjX3NvdXJjZXMgOj0gJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYk1wZWdUUERlYy9zcmMvKi5jcHApCittcGVndHBkZWNfc291cmNlcyA6PSAkKHNvcnQgJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYk1wZWdUUERlYy9zcmMvKi5jcHApKQogbXBlZ3RwZGVjX3NvdXJjZXMgOj0gJChtcGVndHBkZWNfc291cmNlczokKExPQ0FMX1BBVEgpL2xpYk1wZWdUUERlYy9zcmMvJT0lKQogCi1tcGVndHBlbmNfc291cmNlcyA6PSAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliTXBlZ1RQRW5jL3NyYy8qLmNwcCkKK21wZWd0cGVuY19zb3VyY2VzIDo9ICQoc29ydCAkKHdpbGRjYXJkICQoTE9DQUxfUEFUSCkvbGliTXBlZ1RQRW5jL3NyYy8qLmNwcCkpCiBtcGVndHBlbmNfc291cmNlcyA6PSAkKG1wZWd0cGVuY19zb3VyY2VzOiQoTE9DQUxfUEFUSCkvbGliTXBlZ1RQRW5jL3NyYy8lPSUpCiAKLXNicmRlY19zb3VyY2VzIDo9ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9saWJTQlJkZWMvc3JjLyouY3BwKQorc2JyZGVjX3NvdXJjZXMgOj0gJChzb3J0ICQod2lsZGNhcmQgJChMT0NBTF9QQVRIKS9saWJTQlJkZWMvc3JjLyouY3BwKSkKIHNicmRlY19zb3VyY2VzIDo9ICQoc2JyZGVjX3NvdXJjZXM6JChMT0NBTF9QQVRIKS9saWJTQlJkZWMvc3JjLyU9JSkKIAotc2JyZW5jX3NvdXJjZXMgOj0gJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYlNCUmVuYy9zcmMvKi5jcHApCitzYnJlbmNfc291cmNlcyA6PSAkKHNvcnQgJCh3aWxkY2FyZCAkKExPQ0FMX1BBVEgpL2xpYlNCUmVuYy9zcmMvKi5jcHApKQogc2JyZW5jX3NvdXJjZXMgOj0gJChzYnJlbmNfc291cmNlczokKExPQ0FMX1BBVEgpL2xpYlNCUmVuYy9zcmMvJT0lKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXApkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9hYWNEZWNvZGVyLnBkZiBiL2RvY3VtZW50YXRpb24vYWFjRGVjb2Rlci5wZGYKaW5kZXggZDM4ODU3Ni4uNDU4ZmRhMSAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi9hYWNEZWNvZGVyLnBkZgorKysgYi9kb2N1bWVudGF0aW9uL2FhY0RlY29kZXIucGRmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3VtZW50YXRpb24vYWFjRW5jb2Rlci5wZGYgYi9kb2N1bWVudGF0aW9uL2FhY0VuY29kZXIucGRmCmluZGV4IGU4NDIwYjEuLmVmYjE4NTggMTAwNjQ0Ci0tLSBhL2RvY3VtZW50YXRpb24vYWFjRW5jb2Rlci5wZGYKKysrIGIvZG9jdW1lbnRhdGlvbi9hYWNFbmNvZGVyLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJBQUNkZWMvaW5jbHVkZS9hYWNkZWNvZGVyX2xpYi5oIGIvbGliQUFDZGVjL2luY2x1ZGUvYWFjZGVjb2Rlcl9saWIuaAppbmRleCBhMGMwODU0Li43YWI2MGYxIDEwMDY0NAotLS0gYS9saWJBQUNkZWMvaW5jbHVkZS9hYWNkZWNvZGVyX2xpYi5oCisrKyBiL2xpYkFBQ2RlYy9pbmNsdWRlL2FhY2RlY29kZXJfbGliLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTM3OCw2ICszNzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGV4aXN0LiAqLwogICBBQUNfREVDX05FRURfVE9fUkVTVEFSVCAgICAgICAgICAgICAgICA9IDB4MjAwQiwgIC8qITwgVGhlIGRlY29kZXIgbmVlZHMgdG8gYmUgcmVzdGFydGVkLCBzaW5jZSB0aGUgcmVxdWllcmVkIGNvbmZpZ3VyYXRpb24gY2hhbmdlIGNhbm5vdCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWVkLiAqLworICBBQUNfREVDX09VVFBVVF9CVUZGRVJfVE9PX1NNQUxMICAgICAgICA9IDB4MjAwQywgIC8qITwgVGhlIHByb3ZpZGVkIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsLiAqLwogICBhYWNfZGVjX2luaXRfZXJyb3JfZW5kICAgICAgICAgICAgICAgICA9IDB4MkZGRiwKIAogICAvKiBEZWNvZGUgZXJyb3JzLiBPdXRwdXQgYnVmZmVyIGlzIHZhbGlkIGJ1dCBjb25jZWFsZWQuICovCmRpZmYgLS1naXQgYS9saWJBQUNkZWMvc3JjL2FhY19yb20uY3BwIGIvbGliQUFDZGVjL3NyYy9hYWNfcm9tLmNwcAppbmRleCA2MDdjYjNiLi5mM2M5YjVhIDEwMDY0NAotLS0gYS9saWJBQUNkZWMvc3JjL2FhY19yb20uY3BwCisrKyBiL2xpYkFBQ2RlYy9zcmMvYWFjX3JvbS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTE2Nyw2ICsxNjcsMzYgQEAKIH0gOwogCiAKKy8qIDQxIHNjZmJhbmRzICovCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzk2XzEwMjRbNDJdID0KK3sKKyAgICAgMCwgICAgNCwgICAgOCwgICAxMiwgICAxNiwgICAyMCwgICAyNCwgICAyOCwgICAzMiwgICAzNiwgICA0MCwgICA0NCwKKyAgICA0OCwgICA1MiwgICA1NiwgICA2NCwgICA3MiwgICA4MCwgICA4OCwgICA5NiwgIDEwOCwgIDEyMCwgIDEzMiwgIDE0NCwKKyAgIDE1NiwgIDE3MiwgIDE4OCwgIDIxMiwgIDI0MCwgIDI3NiwgIDMyMCwgIDM4NCwgIDQ0OCwgIDUxMiwgIDU3NiwgIDY0MCwKKyAgIDcwNCwgIDc2OCwgIDgzMiwgIDg5NiwgIDk2MCwgMTAyNAorfTsKKy8qIDEyIHNjZmJhbmRzICovCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzk2XzEyOFsxM10gPQoreworICAgICAwLCAgICA0LCAgICA4LCAgIDEyLCAgIDE2LCAgIDIwLCAgIDI0LCAgIDMyLCAgIDQwLCAgIDQ4LCAgICA2NCwgIDkyLAorICAgMTI4Cit9OworCisvKiA0NyBzY2ZiYW5kcyovCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzY0XzEwMjRbNDhdID0KK3sKKyAgICAgMCwgICA0LCAgIDgsICAxMiwgIDE2LCAgMjAsICAyNCwgICAyOCwgIDMyLCAgMzYsICA0MCwgIDQ0LCAgNDgsICA1MiwKKyAgICA1NiwgIDY0LCAgNzIsICA4MCwgIDg4LCAxMDAsIDExMiwgIDEyNCwgMTQwLCAxNTYsIDE3MiwgMTkyLCAyMTYsIDI0MCwKKyAgIDI2OCwgMzA0LCAzNDQsIDM4NCwgNDI0LCA0NjQsIDUwNCwgIDU0NCwgNTg0LCA2MjQsIDY2NCwgNzA0LCA3NDQsIDc4NCwKKyAgIDgyNCwgODY0LCA5MDQsIDk0NCwgOTg0LDEwMjQKK307CisKKy8qIDEyIHNjZmJhbmRzICovCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzY0XzEyOFsxM10gPQoreworICAgICAwLCAgIDQsICAgOCwgIDEyLCAgMTYsICAyMCwgIDI0LAorICAgIDMyLCAgNDAsICA0OCwgIDY0LCAgOTIsIDEyOAorfTsKIAogLyogNDkgc2NmYmFuZHMgKi8KIHN0YXRpYyBjb25zdCBTSE9SVCBzZmJfNDhfMTAyNFs1MF0gPSB7CkBAIC0yMzksNiArMjY5LDM1IEBACiB9OwogCiAKK3N0YXRpYyBjb25zdCBTSE9SVCBzZmJfOTZfOTYwWzQyXSA9Cit7CisgIDAsICAgICAgNCwgICAgICA4LCAgICAgIDEyLCAgICAgMTYsICAgICAyMCwgICAgIDI0LCAgICAgMjgsICAgICAzMiwgICAgIDM2LAorICA0MCwgICAgIDQ0LCAgICAgNDgsICAgICA1MiwgICAgIDU2LCAgICAgNjQsICAgICA3MiwgICAgIDgwLCAgICAgODgsICAgICA5NiwKKyAgMTA4LCAgICAxMjAsICAgIDEzMiwgICAgMTQ0LCAgICAxNTYsICAgIDE3MiwgICAgMTg4LCAgICAyMTIsICAgIDI0MCwgICAgMjc2LAorICAzMjAsICAgIDM4NCwgICAgNDQ4LCAgICA1MTIsICAgIDU3NiwgICAgNjQwLCAgICA3MDQsICAgIDc2OCwgICAgODMyLCAgICA4OTYsCisgIDk2MAorfTsgICAvKiA0MCBzY2ZiYW5kcyAqLworCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzk2XzEyMFsxM10gPQoreworICAwLCAgICAgIDQsICAgICAgOCwgICAgICAxMiwgICAgIDE2LCAgICAgMjAsICAgICAyNCwgICAgIDMyLCAgICAgNDAsICAgICA0OCwKKyAgNjQsICAgICA5MiwgICAgIDEyMAorfTsgICAvKiAxMiBzY2ZiYW5kcyAqLworCitzdGF0aWMgY29uc3QgU0hPUlQgc2ZiXzY0Xzk2MFs0N10gPQoreworICAwLCAgICAgIDQsICAgICAgOCwgICAgICAxMiwgICAgIDE2LCAgICAgMjAsICAgICAyNCwgICAgIDI4LCAgICAgMzIsICAgICAzNiwKKyAgNDAsICAgICA0NCwgICAgIDQ4LCAgICAgNTIsICAgICA1NiwgICAgIDY0LCAgICAgNzIsICAgICA4MCwgICAgIDg4LCAgICAgMTAwLAorICAxMTIsICAgIDEyNCwgICAgMTQwLCAgICAxNTYsICAgIDE3MiwgICAgMTkyLCAgICAyMTYsICAgIDI0MCwgICAgMjY4LCAgICAzMDQsCisgIDM0NCwgICAgMzg0LCAgICA0MjQsICAgIDQ2NCwgICAgNTA0LCAgICA1NDQsICAgIDU4NCwgICAgNjI0LCAgICA2NjQsICAgIDcwNCwKKyAgNzQ0LCAgICA3ODQsICAgIDgyNCwgICAgODY0LCAgICA5MDQsICAgIDk0NCwgICAgOTYwCit9OyAgIC8qIDQ2IHNjZmJhbmRzICovCisKK3N0YXRpYyBjb25zdCBTSE9SVCBzZmJfNjRfMTIwWzEzXSA9Cit7CisgIDAsICAgICAgNCwgICAgICA4LCAgICAgIDEyLCAgICAgMTYsICAgICAyMCwgICAgIDI0LCAgICAgMzIsICAgICA0MCwgICAgIDQ4LAorICA2NCwgICAgIDkyLCAgICAgMTIwCit9OyAgIC8qIDEyIHNjZmJhbmRzICovCiAKIHN0YXRpYyBjb25zdCBTSE9SVCBzZmJfNDhfOTYwWzUwXSA9CiB7CkBAIC0zNTgsOSArNDE3LDkgQEAKIGNvbnN0IFNGQl9JTkZPIHNmYk9mZnNldFRhYmxlc1s1XVsxNl0gPQogewogICB7Ci0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCisgICAgeyBzZmJfOTZfMTAyNCwgc2ZiXzk2XzEyOCwgNDEsIDEyIH0sCisgICAgeyBzZmJfOTZfMTAyNCwgc2ZiXzk2XzEyOCwgNDEsIDEyIH0sCisgICAgeyBzZmJfNjRfMTAyNCwgc2ZiXzY0XzEyOCwgNDcsIDEyIH0sCiAgICAgeyBzZmJfNDhfMTAyNCwgc2ZiXzQ4XzEyOCwgNDksIDE0IH0sCiAgICAgeyBzZmJfNDhfMTAyNCwgc2ZiXzQ4XzEyOCwgNDksIDE0IH0sCiAgICAgeyBzZmJfMzJfMTAyNCwgc2ZiXzQ4XzEyOCwgNTEsIDE0IH0sCkBAIC0zNzIsOSArNDMxLDkgQEAKICAgICB7IHNmYl84XzEwMjQsIHNmYl84XzEyOCwgNDAsIDE1IH0sCiAgICAgeyBzZmJfOF8xMDI0LCBzZmJfOF8xMjgsIDQwLCAxNSB9LAogICB9LCB7Ci0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCisgICAgeyBzZmJfOTZfOTYwLCBzZmJfOTZfMTIwLCA0MCwgMTIgfSwKKyAgICB7IHNmYl85Nl85NjAsIHNmYl85Nl8xMjAsIDQwLCAxMiB9LAorICAgIHsgc2ZiXzY0Xzk2MCwgc2ZiXzY0XzEyMCwgNDYsIDEyIH0sCiAgICAgeyBzZmJfNDhfOTYwLCBzZmJfNDhfMTIwLCA0OSwgMTQgfSwKICAgICB7IHNmYl80OF85NjAsIHNmYl80OF8xMjAsIDQ5LCAxNCB9LAogICAgIHsgc2ZiXzMyXzk2MCwgc2ZiXzQ4XzEyMCwgNDksIDE0IH0sCkBAIC0zODgsOSArNDQ3LDkgQEAKICAgfSwgewogICAgIHsgTlVMTCwgTlVMTCwgMCwgMCB9LAogICB9LCB7Ci0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCisgICAgeyBzZmJfNDhfNTEyLCAgTlVMTCwgMzYsIDAgfSwKKyAgICB7IHNmYl80OF81MTIsICBOVUxMLCAzNiwgMCB9LAorICAgIHsgc2ZiXzQ4XzUxMiwgIE5VTEwsIDM2LCAwIH0sCiAgICAgeyBzZmJfNDhfNTEyLCAgTlVMTCwgMzYsIDAgfSwKICAgICB7IHNmYl80OF81MTIsIE5VTEwsIDM2LCAwfSwKICAgICB7IHNmYl8zMl81MTIsIE5VTEwsIDM3LCAwIH0sCkBAIC00MDIsOSArNDYxLDkgQEAKICAgICB7IHNmYl8yNF81MTIsIE5VTEwsIDMxLCAwIH0sCiAgICAgeyBzZmJfMjRfNTEyLCBOVUxMLCAzMSwgMCB9LAogICB9LCB7Ci0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCi0gICAgeyBOVUxMLCBOVUxMLCAwLCAwIH0sCisgICAgeyBzZmJfNDhfNDgwLCBOVUxMLCAzNSwgMCB9LAorICAgIHsgc2ZiXzQ4XzQ4MCwgTlVMTCwgMzUsIDAgfSwKKyAgICB7IHNmYl80OF80ODAsIE5VTEwsIDM1LCAwIH0sCiAgICAgeyBzZmJfNDhfNDgwLCBOVUxMLCAzNSwgMCB9LAogICAgIHsgc2ZiXzQ4XzQ4MCwgTlVMTCwgMzUsIDAgfSwKICAgICB7IHNmYl8zMl80ODAsIE5VTEwsIDM3LCAwIH0sCmRpZmYgLS1naXQgYS9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXIuY3BwIGIvbGliQUFDZGVjL3NyYy9hYWNkZWNvZGVyLmNwcAppbmRleCBlMTljNTAxLi41NzllNDcwIDEwMDY0NAotLS0gYS9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXIuY3BwCisrKyBiL2xpYkFBQ2RlYy9zcmMvYWFjZGVjb2Rlci5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTE1NywyMyArMTU3LDkgQEAKIAogI2luY2x1ZGUgImNvbmNlYWwuaCIKIAorICAjaW5jbHVkZSAiRkRLX2NyYy5oIgogCiAKLSNkZWZpbmUgQ0FOX0RPX1BTKGFvdCkgXAotICAoKGFvdCkgPT0gQU9UX0FBQ19MQyBcCi18fCAoYW90KSA9PSBBT1RfU0JSIFwKLXx8IChhb3QpID09IEFPVF9QUyBcCi18fCAoYW90KSA9PSBBT1RfRVJfQlNBQyBcCi18fCAoYW90KSA9PSBBT1RfRFJNX0FBQykKLQotI2RlZmluZSBJU19VU0FDKGFvdCkgXAotICAoKGFvdCkgPT0gQU9UX1VTQUMgXAotfHwgKGFvdCkgPT0gQU9UX1JTVkQ1MCkKLQotI2RlZmluZSBJU19MT1dERUxBWShhb3QpIFwKLSAgKChhb3QpID09IEFPVF9FUl9BQUNfTEQgXAotfHwgKGFvdCkgPT0gQU9UX0VSX0FBQ19FTEQpCi0KIHZvaWQgQ0FhY0RlY29kZXJfU3luY1FtZk1vZGUoSEFORExFX0FBQ0RFQ09ERVIgc2VsZikKIHsKIApAQCAtNTUyLDggKzUzOCw5IEBACiAgICAgICAgICAgICAgICAgcHJldmlvdXNfZWxlbWVudCwKICAgICAgICAgICAgICAgICBlbEluZGV4LAogICAgICAgICAgICAgICAgIHNlbGYtPmZsYWdzICYgQUNfSU5ERVAgKTsKLSAgICAgICAgLyogRW5hYmxlIFNCUiBmb3IgaW1wbGljaXQgU0JSIHNpZ25hbGxpbmcuICovCi0gICAgICAgIGlmIChzYnJFcnJvciA9PSBTQlJERUNfT0spIHsKKyAgICAgICAgLyogRW5hYmxlIFNCUiBmb3IgaW1wbGljaXQgU0JSIHNpZ25hbGxpbmcgYnV0IG9ubHkgaWYgbm8gc2V2ZXJlIGVycm9yIGhhcHBlbmQuICovCisgICAgICAgIGlmICggKHNickVycm9yID09IFNCUkRFQ19PSykKKyAgICAgICAgICB8fCAoc2JyRXJyb3IgPT0gU0JSREVDX1BBUlNFX0VSUk9SKSApIHsKICAgICAgICAgICBzZWxmLT5zYnJFbmFibGVkID0gMTsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKQEAgLTU2OCw3ICs1NTUsNyBAQAogICAgICAgICBGREtwdXNoQmlEaXJlY3Rpb25hbChoQnMsICpjb3VudCk7CiAgICAgICAgICpjb3VudCA9IDA7CiAgICAgICB9IGVsc2UgewotICAgICAgICAvKiBJZiB0aGlzIGlzIG5vdCBhIGZpbGwgZWxlbWVudCB3aXRoIGEga25vd24gbGVuZ3RoLCB3ZSBhcmUgc2NyZXdlZCBhbiBubyBmdXJ0aGVyIHBhcnNpbmcgbWFrZXMgc2Vuc2UuICovCisgICAgICAgIC8qIElmIHRoaXMgaXMgbm90IGEgZmlsbCBlbGVtZW50IHdpdGggYSBrbm93biBsZW5ndGgsIHdlIGFyZSBzY3Jld2VkIGFuZCBmdXJ0aGVyIHBhcnNpbmcgbWFrZXMgbm8gc2Vuc2UuICovCiAgICAgICAgIGlmIChzYnJFcnJvciAhPSBTQlJERUNfT0spIHsKICAgICAgICAgICBzZWxmLT5mcmFtZU9LID0gMDsKICAgICAgICAgfQpAQCAtODQ3LDEyICs4MzQsMTggQEAKICAgc3dpdGNoIChhc2MtPm1fYW90KSB7CiAgIGNhc2UgQU9UX0FBQ19MQzoKICAgICBzZWxmLT5zdHJlYW1JbmZvLnByb2ZpbGUgPSAxOwotICAgIGJyZWFrOworCisgIGNhc2UgQU9UX0VSX0FBQ19TQ0FMOgorICAgIGlmIChhc2MtPm1fc2MubV9nYVNwZWNpZmljQ29uZmlnLm1fbGF5ZXIgPiAwKSB7CisgICAgICAvKiBhYWNfc2NhbGFibGVfZXh0ZW5zaW9uX2VsZW1lbnQoKSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gKi8KKyAgICAgIHJldHVybiBBQUNfREVDX1VOU1VQUE9SVEVEX0ZPUk1BVDsKKyAgICB9CiAKICAgY2FzZSBBT1RfU0JSOgogICBjYXNlIEFPVF9QUzoKICAgY2FzZSBBT1RfRVJfQUFDX0xEOgogICBjYXNlIEFPVF9FUl9BQUNfRUxEOgorICBjYXNlIEFPVF9EUk1fQUFDOgogICAgIGJyZWFrOwogCiAgIGRlZmF1bHQ6CkBAIC05NzIsMTEgKzk2NSwyMCBAQAogCiAgIGlmIChhc2MtPm1fYW90ID09IEFPVF9FUl9BQUNfRUxEKSB7CiAgICAgc2VsZi0+ZmxhZ3MgfD0gIEFDX0VMRDsKKyAgICBzZWxmLT5mbGFncyB8PSAoYXNjLT5tX3NiclByZXNlbnRGbGFnKSA/IEFDX1NCUl9QUkVTRU5UIDogMDsgIC8qIE5lZWQgdG8gc2V0IHRoZSBTQlIgZmxhZyBmb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy4gRXZlbiBpZiBTQlIgaXMgbm90IHN1cHBvcnRlZC4gKi8KICAgICBzZWxmLT5mbGFncyB8PSAoYXNjLT5tX3NjLm1fZWxkU3BlY2lmaWNDb25maWcubV9zYnJDcmNGbGFnKSA/IEFDX1NCUkNSQyA6IDA7CiAgICAgc2VsZi0+ZmxhZ3MgfD0gKGFzYy0+bV9zYy5tX2VsZFNwZWNpZmljQ29uZmlnLm1fdXNlTGRRbWZUaW1lQWxpZ24pID8gQUNfTERfTVBTIDogMDsKICAgfQogICBzZWxmLT5mbGFncyB8PSAoYXNjLT5tX2FvdCA9PSBBT1RfRVJfQUFDX0xEKSA/IEFDX0xEIDogMDsKICAgc2VsZi0+ZmxhZ3MgfD0gKGFzYy0+bV9lcENvbmZpZyA+PSAwKSA/IEFDX0VSIDogMDsKKyAgaWYgKCBhc2MtPm1fYW90ID09IEFPVF9EUk1fQUFDICkgeworICAgIHNlbGYtPmZsYWdzIHw9IEFDX0RSTXxBQ19TQlJDUkN8QUNfU0NBTEFCTEU7CisgIH0KKyAgaWYgKCAoYXNjLT5tX2FvdCA9PSBBT1RfQUFDX1NDQUwpCisgICAgfHwgKGFzYy0+bV9hb3QgPT0gQU9UX0VSX0FBQ19TQ0FMKSApIHsKKyAgICBzZWxmLT5mbGFncyB8PSBBQ19TQ0FMQUJMRTsKKyAgfQogCiAKICAgaWYgKGFzYy0+bV9zYnJQcmVzZW50RmxhZykgewpAQCAtMTE2Miw2ICsxMTY0LDkgQEAKIAogICAvKiBDaGVjayBzYW1wbGluZyBmcmVxdWVuY3kgICovCiAgIHN3aXRjaCAoIHNlbGYtPnN0cmVhbUluZm8uYWFjU2FtcGxlUmF0ZSApIHsKKyAgICBjYXNlIDk2MDAwOgorICAgIGNhc2UgODgyMDA6CisgICAgY2FzZSA2NDAwMDoKICAgICBjYXNlIDE2MDAwOgogICAgIGNhc2UgMTIwMDA6CiAgICBjYXNlIDExMDI1OgpAQCAtMTQ5MCw3ICsxNDk1LDcgQEAKICAgICAgICAgICAvKiBnZXQgdGhlIHJlbWFpbmluZyBiaXRzIG9mIHRoaXMgZnJhbWUgKi8KICAgICAgICAgICBiaXRDbnQgPSB0cmFuc3BvcnREZWNfR2V0QXVCaXRzUmVtYWluaW5nKHNlbGYtPmhJbnB1dCwgMCk7CiAKLSAgICAgICAgICBpZiAoIChiaXRDbnQgPiAwKSAmJiAoc2VsZi0+ZmxhZ3MgJiBBQ19TQlJfUFJFU0VOVCkgJiYgKHNlbGYtPmZsYWdzICYgKEFDX1VTQUN8QUNfUlNWRDUwfEFDX0VMRCkpICkKKyAgICAgICAgICBpZiAoIChiaXRDbnQgPiAwKSAmJiAoc2VsZi0+ZmxhZ3MgJiBBQ19TQlJfUFJFU0VOVCkgJiYgKHNlbGYtPmZsYWdzICYgKEFDX1VTQUN8QUNfUlNWRDUwfEFDX0VMRHxBQ19EUk0pKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgU0JSX0VSUk9SIGVyciA9IFNCUkRFQ19PSzsKICAgICAgICAgICAgIGludCAgZWxJZHgsIG51bUNoRWxlbWVudHMgPSBlbF9jbnRbSURfU0NFXSArIGVsX2NudFtJRF9DUEVdOwpAQCAtMTUyOCw2ICsxNTMzLDEzIEBACiAgICAgICAgICAgfQogCiAKKyAgICAgICAgICBpZiAoc2VsZi0+ZmxhZ3MgJiBBQ19EUk0pCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKChiaXRDbnQgPSAoSU5UKUZES2dldFZhbGlkQml0cyhicykpICE9IDApIHsKKyAgICAgICAgICAgICAgRkRLcHVzaEJpRGlyZWN0aW9uYWwoYnMsIGJpdENudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCiAgICAgICAgICAgaWYgKCAhIChzZWxmLT5mbGFncyAmIChBQ19VU0FDfEFDX1JTVkQ1MHxBQ19EUk0pKSApCiAgICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUgKCBiaXRDbnQgPiA3ICkgewpkaWZmIC0tZ2l0IGEvbGliQUFDZGVjL3NyYy9hYWNkZWNvZGVyLmggYi9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXIuaAppbmRleCAzNTQxNzczLi4yNWJjMzVkIDEwMDY0NAotLS0gYS9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXIuaAorKysgYi9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXIuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMjI2LDYgKzIyNiw4IEBACiAgIEZJWFBfREJMICAgICBleHRHYWluWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgR2FpbiB0aGF0IG11c3QgYmUgYXBwbGllZCB0byB0aGUgb3V0cHV0IHNpZ25hbC4gKi8KICAgVUlOVCAgICAgICAgIGV4dEdhaW5EZWxheTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEZWxheSB0aGF0IG11c3QgYmUgYWNjb3VudGVkIGZvciBleHRHYWluLiAqLwogCisgIElOVF9QQ00gICAgICBwY21PdXRwdXRCdWZmZXJbKDgpKigyMDQ4KV07CisKIH07CiAKIApkaWZmIC0tZ2l0IGEvbGliQUFDZGVjL3NyYy9hYWNkZWNvZGVyX2xpYi5jcHAgYi9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXJfbGliLmNwcAppbmRleCA5NGViM2MwLi44ODYzZGE1IDEwMDY0NAotLS0gYS9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXJfbGliLmNwcAorKysgYi9saWJBQUNkZWMvc3JjL2FhY2RlY29kZXJfbGliLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTEwLDcgKzExMCw3IEBACiAvKiBEZWNvZGVyIGxpYnJhcnkgaW5mbyAqLwogI2RlZmluZSBBQUNERUNPREVSX0xJQl9WTDAgMgogI2RlZmluZSBBQUNERUNPREVSX0xJQl9WTDEgNQotI2RlZmluZSBBQUNERUNPREVSX0xJQl9WTDIgMTAKKyNkZWZpbmUgQUFDREVDT0RFUl9MSUJfVkwyIDE3CiAjZGVmaW5lIEFBQ0RFQ09ERVJfTElCX1RJVExFICJBQUMgRGVjb2RlciBMaWIiCiAjaWZkZWYgX19BTkRST0lEX18KICNkZWZpbmUgQUFDREVDT0RFUl9MSUJfQlVJTERfREFURSAiIgpAQCAtMTgxLDggKzE4MSw5IEBACiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLyogaWYgYmFzZWxheWVyIGlzIE9LIHdlIGNvbnRpbnVlIGRlY29kaW5nICovCi0gICAgICAgIGlmKGxheWVyICA+PSAxKXsKKyAgICAgICAgaWYobGF5ZXIgPj0gMSl7CiAgICAgICAgICAgc2VsZi0+bnJPZkxheWVycyA9IGxheWVyOworICAgICAgICAgIGVyciA9IEFBQ19ERUNfT0s7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICB9CkBAIC03ODUsOCArNzg2LDggQEAKIAogTElOS1NQRUNfQ1BQIEFBQ19ERUNPREVSX0VSUk9SIGFhY0RlY29kZXJfRGVjb2RlRnJhbWUoCiAgICAgICAgIEhBTkRMRV9BQUNERUNPREVSICBzZWxmLAotICAgICAgICBJTlRfUENNICAgICAgICAgICAqcFRpbWVEYXRhLAotICAgICAgICBjb25zdCBJTlQgICAgICAgICAgdGltZURhdGFTaXplLAorICAgICAgICBJTlRfUENNICAgICAgICAgICAqcFRpbWVEYXRhX2V4dGVybiwKKyAgICAgICAgY29uc3QgSU5UICAgICAgICAgIHRpbWVEYXRhU2l6ZV9leHRlcm4sCiAgICAgICAgIGNvbnN0IFVJTlQgICAgICAgICBmbGFncykKIHsKICAgICBBQUNfREVDT0RFUl9FUlJPUiBFcnJvclN0YXR1czsKQEAgLTc5NiwxMiArNzk3LDE3IEBACiAgICAgSEFORExFX0ZES19CSVRTVFJFQU0gaEJzOwogICAgIGludCBmVHBJbnRlcnJ1cHRpb24gPSAwOyAgLyogVHJhbnNwb3J0IG9yaWdpbmF0ZWQgaW50ZXJydXB0aW9uIGRldGVjdGlvbi4gKi8KICAgICBpbnQgZlRwQ29uY2VhbCA9IDA7ICAgICAgIC8qIFRyYW5zcG9ydCBvcmlnaW5hdGVkIGNvbmNlYWxtZW50LiAqLworICAgIElOVF9QQ00gKnBUaW1lRGF0YSA9IE5VTEw7CisgICAgSU5UIHRpbWVEYXRhU2l6ZSA9IDA7CiAKIAogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgIHJldHVybiBBQUNfREVDX0lOVkFMSURfSEFORExFOwogICAgIH0KIAorICAgIHBUaW1lRGF0YSA9IHNlbGYtPnBjbU91dHB1dEJ1ZmZlcjsKKyAgICB0aW1lRGF0YVNpemUgPSBzaXplb2Yoc2VsZi0+cGNtT3V0cHV0QnVmZmVyKS9zaXplb2YoKnNlbGYtPnBjbU91dHB1dEJ1ZmZlcik7CisKICAgICBpZiAoZmxhZ3MgJiBBQUNERUNfSU5UUikgewogICAgICAgc2VsZi0+c3RyZWFtSW5mby5udW1Mb3N0QWNjZXNzVW5pdHMgPSAwOwogICAgIH0KQEAgLTkxOCw3ICs5MjQsOCBAQAogICAgIGlmIChzZWxmLT5zYnJFbmFibGVkKQogICAgIHsKICAgICAgIFNCUl9FUlJPUiBzYnJFcnJvciA9IFNCUkRFQ19PSzsKLSAgICAgIGludCBjaE91dE1hcElkeCA9ICgoc2VsZi0+Y2hNYXBJbmRleD09MCkgJiYgKHNlbGYtPnN0cmVhbUluZm8ubnVtQ2hhbm5lbHM8NykpID8gc2VsZi0+c3RyZWFtSW5mby5udW1DaGFubmVscyA6IHNlbGYtPmNoTWFwSW5kZXg7CisgICAgICBpbnQgY2hJZHgsIG51bUNvcmVDaGFubmVsID0gc2VsZi0+c3RyZWFtSW5mby5udW1DaGFubmVsczsKKyAgICAgIGludCBjaE91dE1hcElkeCA9ICgoc2VsZi0+Y2hNYXBJbmRleD09MCkgJiYgKG51bUNvcmVDaGFubmVsPDcpKSA/IG51bUNvcmVDaGFubmVsIDogc2VsZi0+Y2hNYXBJbmRleDsKIAogICAgICAgLyogc2V0IHBhcmFtcyAqLwogICAgICAgc2JyRGVjb2Rlcl9TZXRQYXJhbSAoIHNlbGYtPmhTYnJEZWNvZGVyLApAQCAtOTc4LDEwICs5ODUsMTAgQEAKIAogICAgICAgIGlmIChzZWxmLT5wc1Bvc3NpYmxlKSB7CiAgICAgICAgICBzZWxmLT5mbGFncyB8PSBBQ19QU19QUkVTRU5UOwotICAgICAgICAgc2VsZi0+Y2hhbm5lbFR5cGVbMF0gPSBBQ1RfRlJPTlQ7Ci0gICAgICAgICBzZWxmLT5jaGFubmVsVHlwZVsxXSA9IEFDVF9GUk9OVDsKLSAgICAgICAgIHNlbGYtPmNoYW5uZWxJbmRpY2VzWzBdID0gMDsKLSAgICAgICAgIHNlbGYtPmNoYW5uZWxJbmRpY2VzWzFdID0gMTsKKyAgICAgICB9CisgICAgICAgZm9yIChjaElkeCA9IG51bUNvcmVDaGFubmVsOyBjaElkeCA8IHNlbGYtPnN0cmVhbUluZm8ubnVtQ2hhbm5lbHM7IGNoSWR4Kz0xKSB7CisgICAgICAgICBzZWxmLT5jaGFubmVsVHlwZVtjaElkeF0gPSBBQ1RfRlJPTlQ7CisgICAgICAgICBzZWxmLT5jaGFubmVsSW5kaWNlc1tjaElkeF0gPSBjaElkeDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KQEAgLTEwMDYsNyArMTAxMyw4IEBACiAgICAgICAgICAgICBzZWxmLT5jaGFubmVsT3V0cHV0TWFwcGluZywKICAgICAgICAgICAgIChzZWxmLT5saW1pdGVyRW5hYmxlQ3VycikgPyAmcGNtTGltaXRlclNjYWxlIDogTlVMTAogICAgICAgKTsKLSAgICBpZiAoZG14RXJyID09IFBDTURNWF9JTlZBTElEX01PREUpIHsKKyAgICBpZiAoIChFcnJvclN0YXR1cyA9PSBBQUNfREVDX09LKQorICAgICAgJiYgKGRteEVyciA9PSBQQ01ETVhfSU5WQUxJRF9NT0RFKSApIHsKICAgICAgIC8qIEFubm91bmNlIHRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgY3VycmVudCBjb21iaW5hdGlvbiBvZiBjaGFubmVsIGNvbmZpZ3VyYXRpb24gYW5kIGRvd25taXgKICAgICAgICAqIHNldHRpbmdzIGFyZSBub3Qga25vdyB0byBwcm9kdWNlIGEgcHJlZGljdGFibGUgYmVoYXZpb3IgYW5kIHRodXMgbWF5YmUgcHJvZHVjZSBzdHJhbmdlIG91dHB1dC4gKi8KICAgICAgIEVycm9yU3RhdHVzID0gQUFDX0RFQ19ERUNPREVfRlJBTUVfRVJST1I7CkBAIC0xMDUxLDYgKzEwNTksMTkgQEAKICAgICAvKiBVcGRhdGUgU3RhdGlzdGljcyAqLwogICAgIGFhY0RlY29kZXJfVXBkYXRlQml0U3RyZWFtQ291bnRlcnMoJnNlbGYtPnN0cmVhbUluZm8sIGhCcywgbkJpdHMsIEVycm9yU3RhdHVzKTsKIAorICAgIC8qIENoZWNrIHdoZXRoZXIgZXh0ZXJuYWwgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guICovCisgICAgaWYgKHRpbWVEYXRhU2l6ZV9leHRlcm4gPCBzZWxmLT5zdHJlYW1JbmZvLm51bUNoYW5uZWxzKnNlbGYtPnN0cmVhbUluZm8uZnJhbWVTaXplKSB7CisgICAgICBFcnJvclN0YXR1cyA9IEFBQ19ERUNfT1VUUFVUX0JVRkZFUl9UT09fU01BTEw7CisgICAgfQorCisgICAgLyogVXBkYXRlIGV4dGVybmFsIG91dHB1dCBidWZmZXIuICovCisgICAgaWYgKCBJU19PVVRQVVRfVkFMSUQoRXJyb3JTdGF0dXMpICkgeworICAgICAgRkRLbWVtY3B5KHBUaW1lRGF0YV9leHRlcm4sIHBUaW1lRGF0YSwgc2VsZi0+c3RyZWFtSW5mby5udW1DaGFubmVscypzZWxmLT5zdHJlYW1JbmZvLmZyYW1lU2l6ZSpzaXplb2YoKnBUaW1lRGF0YSkpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIEZES21lbWNsZWFyKHBUaW1lRGF0YV9leHRlcm4sIHRpbWVEYXRhU2l6ZV9leHRlcm4qc2l6ZW9mKCpwVGltZURhdGFfZXh0ZXJuKSk7CisgICAgfQorCiAgICAgcmV0dXJuIEVycm9yU3RhdHVzOwogfQogCkBAIC0xMTIwLDYgKzExNDEsNyBAQAogICAvKiBTZXQgZmxhZ3MgKi8KICAgaW5mby0+ZmxhZ3MgPSAwCiAgICAgICB8IENBUEZfQUFDX0xDCisgICAgICB8IENBUEZfRVJfQUFDX1NDQUwKICAgICAgIHwgQ0FQRl9BQUNfVkNCMTEKICAgICAgIHwgQ0FQRl9BQUNfSENSCiAgICAgICB8IENBUEZfQUFDX1JWTEMKQEAgLTExMzAsNiArMTE1Miw3IEBACiAKICAgICAgIHwgQ0FQRl9BQUNfTVBFRzQKIAorICAgICAgfCBDQVBGX0FBQ19EUk1fQlNGT1JNQVQKIAogICAgICAgfCBDQVBGX0FBQ18xMDI0CiAgICAgICB8IENBUEZfQUFDXzk2MApkaWZmIC0tZ2l0IGEvbGliQUFDZGVjL3NyYy9ibG9jay5jcHAgYi9saWJBQUNkZWMvc3JjL2Jsb2NrLmNwcAppbmRleCA5ZDcwM2NjLi4yOTY1ZmE2IDEwMDY0NAotLS0gYS9saWJBQUNkZWMvc3JjL2Jsb2NrLmNwcAorKysgYi9saWJBQUNkZWMvc3JjL2Jsb2NrLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMzI0LDExICszMjQsMTEgQEAKIAogICAgICAgaWYgKGZsYWdzICYgQUNfRVJfSENSKSB7CiAgICAgICAgIC8qIEhDUiBpbnB1dCAobG9uZykgLS0gY29sbGVjdGluZyBzaWRlaW5mbyAoZm9yIEhDUi1fbG9uZ18gb25seSkgKi8KLSAgICAgICAgcE51bUxpbmVzSW5TZWNbbnVtTGluZXNJblNlY0lkeF0gPSBCYW5kT2Zmc2V0c1t0b3BdIC0gQmFuZE9mZnNldHNbYmFuZF07Ci0gICAgICAgIG51bUxpbmVzSW5TZWNJZHgrKzsKICAgICAgICAgaWYgKG51bUxpbmVzSW5TZWNJZHggPj0gTUFYX1NGQl9IQ1IpIHsKICAgICAgICAgICByZXR1cm4gQUFDX0RFQ19QQVJTRV9FUlJPUjsKICAgICAgICAgfQorICAgICAgICBwTnVtTGluZXNJblNlY1tudW1MaW5lc0luU2VjSWR4XSA9IEJhbmRPZmZzZXRzW3RvcF0gLSBCYW5kT2Zmc2V0c1tiYW5kXTsKKyAgICAgICAgbnVtTGluZXNJblNlY0lkeCsrOwogICAgICAgICBpZiAoCiAgICAgICAgICAgICAgKHNlY3RfY2IgPT0gQk9PS1NDTCkgKQogICAgICAgICB7CmRpZmYgLS1naXQgYS9saWJBQUNlbmMvaW5jbHVkZS9hYWNlbmNfbGliLmggYi9saWJBQUNlbmMvaW5jbHVkZS9hYWNlbmNfbGliLmgKaW5kZXggOGMwZTFjZC4uODI4YTkxNyAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL2luY2x1ZGUvYWFjZW5jX2xpYi5oCisrKyBiL2xpYkFBQ2VuYy9pbmNsdWRlL2FhY2VuY19saWIuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtODk3LDExICs4OTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgb25seSB3aXRoIHN0ZXJlbyBpbnB1dCBhdWRpbyBkYXRhLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDIzOiBNUEVHLTQgQUFDIExvdy1EZWxheS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAzOTogTVBFRy00IEFBQyBFbmhhbmNlZCBMb3ctRGVsYXkuIFNpbmNlIHRoZXJlIGlzIG5vIDo6QVVESU9fT0JKRUNUX1RZUEUgZm9yIEVMRCBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiB3aXRoIFNCUiBkZWZpbmVkLCBlbmFibGUgU0JSIGV4cGxpY2l0ZWx5IGJ5IDo6QUFDRU5DX1NCUl9NT0RFIHBhcmFtZXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxMjk6IE1QRUctMiBBQUMgTG93IENvbXBsZXhpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMTMyOiBNUEVHLTIgQUFDIExvdyBDb21wbGV4aXR5IHdpdGggU3BlY3RyYWwgQmFuZCBSZXBsaWNhdGlvbiAoSEUtQUFDKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxNTY6IE1QRUctMiBBQUMgTG93IENvbXBsZXhpdHkgd2l0aCBTcGVjdHJhbCBCYW5kIFJlcGxpY2F0aW9uIGFuZCBQYXJhbWV0cmljIFN0ZXJlbyAoSEUtQUFDIHYyKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY29uZmlndXJhdGlvbiBjYW4gYmUgdXNlZCBvbmx5IHdpdGggc3RlcmVvIGlucHV0IGF1ZGlvIGRhdGEuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0aW9uIHdpdGggU0JSIGRlZmluZWQsIGVuYWJsZSBTQlIgZXhwbGljaXRlbHkgYnkgOjpBQUNFTkNfU0JSX01PREUgcGFyYW1ldGVyLiAqLwogCiAgIEFBQ0VOQ19CSVRSQVRFICAgICAgICAgICAgICAgICAgPSAweDAxMDEsICAvKiE8IFRvdGFsIGVuY29kZXIgYml0cmF0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgbWFuZGF0b3J5IGFuZCBpbnRlcmFjdHMgd2l0aCA6OkFBQ0VOQ19CSVRSQVRFTU9ERS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBDQlI6IEJpdHJhdGUgaW4gYml0cy9zZWNvbmQuCkBAIC05NTgsNiArOTU0LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSB0byBmcy8yOiBGcmVxdWVuY3kgYmFuZHdpZHRoIGluIEhlcnR6LiAoRXhwZXJ0cyBvbmx5LCBiZXR0ZXIgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3VjaCB0aGlzIHZhbHVlIHRvIGF2b2lkIGRlZ3JhZGVkIGF1ZGlvIHF1YWxpdHkpICovCiAKKyAgQUFDRU5DX1BFQUtfQklUUkFURSAgICAgICAgICAgICA9IDB4MDIwNywgIC8qITwgUGVhayBiaXRyYXRlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIGFkanVzdCBtYXhpbXVtIGJpdHMgcGVyIGF1ZGlvIGZyYW1lLiBCaXRyYXRlIGlzIGluIGJpdHMvc2Vjb25kLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHBlYWsgYml0cmF0ZSB3aWxsIGludGVybmFsbHkgYmUgbGltaXRlZCB0byB0aGUgY2hvc2VuIGJpdHJhdGUgOjpBQUNFTkNfQklUUkFURSBhcyBsb3dlciBsaW1pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIG51bWJlcl9vZl9lZmZlY3RpdmVfY2hhbm5lbHMqNjE0NCBiaXQgYXMgdXBwZXIgbGltaXQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZyB0aGUgcGVhayBiaXRyYXRlIGVxdWFsIHRvIDo6QUFDRU5DX0JJVFJBVEUgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBhdWRpbyBmcmFtZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSBvZiBjb25zdGFudCBzaXplLiBTaW5jZSB0aGUgcGVhayBiaXRhdGUgaXMgaW4gYml0cy9zZWNvbmQsIHRoZSBmcmFtZSBzaXplcyBjYW4gdmFyeSBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgYnl0ZSBpbiBvbmUgb3IgdGhlIG90aGVyIGRpcmVjdGlvbiBvdmVyIHZhcmlvdXMgZnJhbWVzLiBIb3dldmVyLCBpdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gcmVkdWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwZWFrIHBpdHJhdGUgdG8gOjpBQUNFTkNfQklUUkFURSAtIGl0IHdvdWxkIGRpc2FibGUgdGhlIGJpdHJlc2Vydm9pciwgd2hpY2ggd291bGQgYWZmZWN0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpbyBxdWFsaXR5IGJ5IGEgbGFyZ2UgYW1vdW50LiAqLworCiAgIEFBQ0VOQ19UUkFOU01VWCAgICAgICAgICAgICAgICAgPSAweDAzMDAsICAvKiE8IFRyYW5zcG9ydCB0eXBlIHRvIGJlIHVzZWQuIFNlZSA6OlRSQU5TUE9SVF9UWVBFIGluIEZES19hdWRpby5oLiBGb2xsb3dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gZW5jb2RlciBsaWJyYXJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDA6IHJhdyBhY2Nlc3MgdW5pdHMKQEAgLTEwMjMsNiArMTAyOSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFEVFM6IE1heGltdW0gbnVtYmVyIG9mIHN1YiBmcmFtZXMgcmVzdHJpY3RlZCB0byA0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIExPQVMvTEFUTTogTWF4aW11bSBudW1iZXIgb2Ygc3ViIGZyYW1lcyByZXN0cmljdGVkIHRvIDIuKi8KIAorICBBQUNFTkNfQVVESU9NVVhWRVIgICAgICAgICAgICAgID0gMHgwMzA0LCAgLyohPCBBdWRpb011eFZlcnNpb24gdG8gYmUgdXNlZCBmb3IgTEFUTS4gKEF1ZGlvTXV4VmVyc2lvbkEsIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDA6IERlZmF1bHQsIG5vIHRyYW5zbWlzc2lvbiBvZiB0YXJhIEJ1ZmZlciBmdWxsbmVzcywgbm8gQVNDIGxlbmd0aCBhbmQgaW5jbHVkaW5nIGFjdHVhbCBsYXRtIEJ1ZmZlciBmdWxsbmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDE6IFRyYW5zbWlzc2lvbiBvZiB0YXJhIEJ1ZmZlciBmdWxsbmVzcywgQVNDIGxlbmd0aCBhbmQgYWN0dWFsIGxhdG0gQnVmZmVyIGZ1bGxuZXNzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDI6IFRyYW5zbWlzc2lvbiBvZiB0YXJhIEJ1ZmZlciBmdWxsbmVzcywgQVNDIGxlbmd0aCBhbmQgbWF4aW11bSBsZXZlbCBvZiBsYXRtIEJ1ZmZlciBmdWxsbmVzcy4gKi8KKwogICBBQUNFTkNfUFJPVEVDVElPTiAgICAgICAgICAgICAgID0gMHgwMzA2LCAgLyohPCBDb25maWd1cmUgcHJvdGVjdGlvbiBpbiB0cmFucHNvcnQgbGF5ZXI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMDogTm8gcHJvdGVjdGlvbi4gKGRlZmF1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMTogQ1JDIGFjdGl2ZSBmb3IgQURUUyBiaXRzdHJlYW0gZm9ybWF0LiAqLwpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9hYWNFbmNfcm9tLmNwcCBiL2xpYkFBQ2VuYy9zcmMvYWFjRW5jX3JvbS5jcHAKaW5kZXggMGNkZjVmZS4uYzY0NzdlMyAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNFbmNfcm9tLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL2FhY0VuY19yb20uY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05Myw3ICs5Myw3IEBACiAvKgogICAgSHVmZm1hbiBUYWJsZXMKICovCi1jb25zdCBJTlQgRkRLYWFjRW5jX2h1ZmZfbHRhYjFfMlszXVszXVszXVszXT0KK2NvbnN0IFVMT05HIEZES2FhY0VuY19odWZmX2x0YWIxXzJbM11bM11bM11bM109CiB7CiAgIHsKICAgICB7IHsweDAwMGIwMDA5LDB4MDAwOTAwMDcsMHgwMDBiMDAwOX0sIHsweDAwMGEwMDA4LDB4MDAwNzAwMDYsMHgwMDBhMDAwOH0sIHsweDAwMGIwMDA5LDB4MDAwOTAwMDgsMHgwMDBiMDAwOX0gfSwKQEAgLTExMyw3ICsxMTMsNyBAQAogfTsKIAogCi1jb25zdCBJTlQgRkRLYWFjRW5jX2h1ZmZfbHRhYjNfNFszXVszXVszXVszXT0KK2NvbnN0IFVMT05HIEZES2FhY0VuY19odWZmX2x0YWIzXzRbM11bM11bM11bM109CiB7CiAgIHsKICAgICB7IHsweDAwMDEwMDA0LDB4MDAwNDAwMDUsMHgwMDA4MDAwOH0sIHsweDAwMDQwMDA1LDB4MDAwNTAwMDQsMHgwMDA4MDAwOH0sIHsweDAwMDkwMDA5LDB4MDAwOTAwMDgsMHgwMDBhMDAwYn0gfSwKQEAgLTEzMiw3ICsxMzIsNyBAQAogICB9CiB9OwogCi1jb25zdCBJTlQgRkRLYWFjRW5jX2h1ZmZfbHRhYjVfNls5XVs5XT0KK2NvbnN0IFVMT05HIEZES2FhY0VuY19odWZmX2x0YWI1XzZbOV1bOV09CiB7CiAgIHsweDAwMGQwMDBiLCAweDAwMGMwMDBhLCAweDAwMGIwMDA5LCAweDAwMGIwMDA5LCAweDAwMGEwMDA5LCAweDAwMGIwMDA5LCAweDAwMGIwMDA5LCAweDAwMGMwMDBhLCAweDAwMGQwMDBifSwKICAgezB4MDAwYzAwMGEsIDB4MDAwYjAwMDksIDB4MDAwYTAwMDgsIDB4MDAwOTAwMDcsIDB4MDAwODAwMDcsIDB4MDAwOTAwMDcsIDB4MDAwYTAwMDgsIDB4MDAwYjAwMDksIDB4MDAwYzAwMGF9LApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgIHsweDAwMGQwMDBiLCAweDAwMGMwMDBhLCAweDAwMGMwMDA5LCAweDAwMGIwMDA5LCAweDAwMGEwMDA5LCAweDAwMGEwMDA5LCAweDAwMGIwMDA5LCAweDAwMGMwMDBhLCAweDAwMGQwMDBifQogfTsKIAotY29uc3QgSU5UIEZES2FhY0VuY19odWZmX2x0YWI3XzhbOF1bOF09Citjb25zdCBVTE9ORyBGREthYWNFbmNfaHVmZl9sdGFiN184WzhdWzhdPQogewogICB7MHgwMDAxMDAwNSwgMHgwMDAzMDAwNCwgMHgwMDA2MDAwNSwgMHgwMDA3MDAwNiwgMHgwMDA4MDAwNywgMHgwMDA5MDAwOCwgMHgwMDBhMDAwOSwgMHgwMDBiMDAwYX0sCiAgIHsweDAwMDMwMDA0LCAweDAwMDQwMDAzLCAweDAwMDYwMDA0LCAweDAwMDcwMDA1LCAweDAwMDgwMDA2LCAweDAwMDgwMDA3LCAweDAwMDkwMDA3LCAweDAwMDkwMDA4fSwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogICB7MHgwMDBiMDAwYSwgMHgwMDBhMDAwOCwgMHgwMDBhMDAwOCwgMHgwMDBhMDAwOCwgMHgwMDBiMDAwOSwgMHgwMDBiMDAwOSwgMHgwMDBjMDAwOSwgMHgwMDBjMDAwYX0KIH07CiAKLWNvbnN0IElOVCBGREthYWNFbmNfaHVmZl9sdGFiOV8xMFsxM11bMTNdPQorY29uc3QgVUxPTkcgRkRLYWFjRW5jX2h1ZmZfbHRhYjlfMTBbMTNdWzEzXT0KIHsKICAgezB4MDAwMTAwMDYsIDB4MDAwMzAwMDUsIDB4MDAwNjAwMDYsIDB4MDAwODAwMDYsIDB4MDAwOTAwMDcsIDB4MDAwYTAwMDgsIDB4MDAwYTAwMDksIDB4MDAwYjAwMGEsIDB4MDAwYjAwMGEsIDB4MDAwYzAwMGEsIDB4MDAwYzAwMGIsIDB4MDAwZDAwMGIsIDB4MDAwZDAwMGN9LAogICB7MHgwMDAzMDAwNSwgMHgwMDA0MDAwNCwgMHgwMDA2MDAwNCwgMHgwMDA3MDAwNSwgMHgwMDA4MDAwNiwgMHgwMDA4MDAwNywgMHgwMDA5MDAwNywgMHgwMDBhMDAwOCwgMHgwMDBhMDAwOCwgMHgwMDBhMDAwOSwgMHgwMDBiMDAwYSwgMHgwMDBjMDAwYSwgMHgwMDBjMDAwYn0sCkBAIC0zOTIsNyArMzkyLDcgQEAKICAgezB4MDA0NiwgMHgwMGVhLCAweDAwMzQsIDB4MDBlYSwgMHgwMDExLCAweDAwMWIsIDB4MDBhOSwgMHgwMDk0LCAweDAwZTIsIDB4MDAzMSwgMHgwMGQwLCAweDAwZTUsIDB4MDAwNywgMHgwMDcwLCAweDAwNjksIDB4MDAzZSwgMHgwMDIxfQogfTsKIAotY29uc3QgSU5UIEZES2FhY0VuY19odWZmX2N0YWJzY2ZbMTIxXT0KK2NvbnN0IFVMT05HIEZES2FhY0VuY19odWZmX2N0YWJzY2ZbMTIxXT0KIHsKICAgMHgwMDAzZmZlOCwgMHgwMDAzZmZlNiwgMHgwMDAzZmZlNywgMHgwMDAzZmZlNSwgMHgwMDA3ZmZmNSwgMHgwMDA3ZmZmMSwgMHgwMDA3ZmZlZCwgMHgwMDA3ZmZmNiwKICAgMHgwMDA3ZmZlZSwgMHgwMDA3ZmZlZiwgMHgwMDA3ZmZmMCwgMHgwMDA3ZmZmYywgMHgwMDA3ZmZmZCwgMHgwMDA3ZmZmZiwgMHgwMDA3ZmZmZSwgMHgwMDA3ZmZmNywKQEAgLTY1NywxMSArNjU3LDExIEBACiAqLwogY29uc3QgRklYUF9EQkwgRkRLYWFjRW5jX3Ruc0VuY0NvZWZmM1s4XT0KIHsKLSAgMHg4MWYxZDIwMSwgMHg5MTI2MTQ4MSwgMHhhZGI5MjMwMSwgMHhkNDM4YWYwMCwgMHgwMDAwMDAwMCwgMHgzNzg5ODA4MCwgMHg2NDEzMGRmZiwgMHg3Y2NhNmZmZgorICAoRklYUF9EQkwpMHg4MWYxZDIwMSwgKEZJWFBfREJMKTB4OTEyNjE0ODEsIChGSVhQX0RCTCkweGFkYjkyMzAxLCAoRklYUF9EQkwpMHhkNDM4YWYwMCwgKEZJWFBfREJMKTB4MDAwMDAwMDAsIChGSVhQX0RCTCkweDM3ODk4MDgwLCAoRklYUF9EQkwpMHg2NDEzMGRmZiwgKEZJWFBfREJMKTB4N2NjYTZmZmYKIH07CiBjb25zdCBGSVhQX0RCTCBGREthYWNFbmNfdG5zQ29lZmYzQm9yZGVyc1s4XT17Ci0gIDB4ODAwMDAwMDEgLyotNCovLCAgMHg4N2I4MjZkZiAvKi0zKi8sICAweDlkZjI0MTU0IC8qLTIqLywgIDB4YmZmZmZmZTUgLyotMSovLAotICAweGU5YzVlNTc4IC8qIDAqLywgIDB4MWM3YjkwZjAgLyogMSovLCAgMHg0ZmNlODNhOSAvKiAyKi8sICAweDczNTJmMmMzIC8qIDMqLworICAoRklYUF9EQkwpMHg4MDAwMDAwMSAvKi00Ki8sICAoRklYUF9EQkwpMHg4N2I4MjZkZiAvKi0zKi8sICAoRklYUF9EQkwpMHg5ZGYyNDE1NCAvKi0yKi8sICAoRklYUF9EQkwpMHhiZmZmZmZlNSAvKi0xKi8sCisgIChGSVhQX0RCTCkweGU5YzVlNTc4IC8qIDAqLywgIChGSVhQX0RCTCkweDFjN2I5MGYwIC8qIDEqLywgIChGSVhQX0RCTCkweDRmY2U4M2E5IC8qIDIqLywgIChGSVhQX0RCTCkweDczNTJmMmMzIC8qIDMqLwogfTsKIAogLyoKQEAgLTY2OSwxNSArNjY5LDE1IEBACiAqLwogY29uc3QgRklYUF9EQkwgRkRLYWFjRW5jX3Ruc0VuY0NvZWZmNFsxNl09CiB7Ci0gIDB4ODA4YmM4ODEsIDB4ODRlMmU1ODEsIDB4OGQ2YjRhMDEsIDB4OTlkYTkyMDEsIDB4YTljNDU3MDEsIDB4YmM5ZGRlODEsIDB4ZDFjMmQ1MDAsIDB4ZTg3YWU1NDAsCi0gIDB4MDAwMDAwMDAsIDB4MWE5Y2Q5YzAsIDB4MzQwZmYyNDAsIDB4NGIzYzhiZmYsIDB4NWYxZjVlN2YsIDB4NmVkOWViN2YsIDB4NzliYzM4N2YsIDB4N2Y0YzdlN2YKKyAgKEZJWFBfREJMKTB4ODA4YmM4ODEsIChGSVhQX0RCTCkweDg0ZTJlNTgxLCAoRklYUF9EQkwpMHg4ZDZiNGEwMSwgKEZJWFBfREJMKTB4OTlkYTkyMDEsIChGSVhQX0RCTCkweGE5YzQ1NzAxLCAoRklYUF9EQkwpMHhiYzlkZGU4MSwgKEZJWFBfREJMKTB4ZDFjMmQ1MDAsIChGSVhQX0RCTCkweGU4N2FlNTQwLAorICAoRklYUF9EQkwpMHgwMDAwMDAwMCwgKEZJWFBfREJMKTB4MWE5Y2Q5YzAsIChGSVhQX0RCTCkweDM0MGZmMjQwLCAoRklYUF9EQkwpMHg0YjNjOGJmZiwgKEZJWFBfREJMKTB4NWYxZjVlN2YsIChGSVhQX0RCTCkweDZlZDllYjdmLCAoRklYUF9EQkwpMHg3OWJjMzg3ZiwgKEZJWFBfREJMKTB4N2Y0YzdlN2YKIH07CiBjb25zdCBGSVhQX0RCTCBGREthYWNFbmNfdG5zQ29lZmY0Qm9yZGVyc1sxNl09CiB7Ci0gIDB4ODAwMDAwMDEgLyotOCovLCAgMHg4MjJkZWZmMCAvKi03Ki8sICAweDg4YTRiZmU2IC8qLTYqLywgIDB4OTMyYzE1OWQgLyotNSovLAotICAweGExNjgyN2MyIC8qLTQqLywgIDB4YjJkY2RlMjcgLyotMyovLCAgMHhjNmYyMGI5MSAvKi0yKi8sICAweGRjZjg5YzY0IC8qLTEqLywKLSAgMHhmNDMwOGNlMSAvKiAwKi8sICAweDBkNjEzMDU0IC8qIDEqLywgIDB4Mjc4ZGRlODAgLyogMiovLCAgMHg0MDAwMDAxYiAvKiAzKi8sCi0gIDB4NTVhNjEyN2IgLyogNCovLCAgMHg2NzhkZGU4ZiAvKiA1Ki8sICAweDc0ZWYwZWQ3IC8qIDYqLywgIDB4N2QzM2YwZGEgLyogNyovCisgIChGSVhQX0RCTCkweDgwMDAwMDAxIC8qLTgqLywgIChGSVhQX0RCTCkweDgyMmRlZmYwIC8qLTcqLywgIChGSVhQX0RCTCkweDg4YTRiZmU2IC8qLTYqLywgIChGSVhQX0RCTCkweDkzMmMxNTlkIC8qLTUqLywKKyAgKEZJWFBfREJMKTB4YTE2ODI3YzIgLyotNCovLCAgKEZJWFBfREJMKTB4YjJkY2RlMjcgLyotMyovLCAgKEZJWFBfREJMKTB4YzZmMjBiOTEgLyotMiovLCAgKEZJWFBfREJMKTB4ZGNmODljNjQgLyotMSovLAorICAoRklYUF9EQkwpMHhmNDMwOGNlMSAvKiAwKi8sICAoRklYUF9EQkwpMHgwZDYxMzA1NCAvKiAxKi8sICAoRklYUF9EQkwpMHgyNzhkZGU4MCAvKiAyKi8sICAoRklYUF9EQkwpMHg0MDAwMDAxYiAvKiAzKi8sCisgIChGSVhQX0RCTCkweDU1YTYxMjdiIC8qIDQqLywgIChGSVhQX0RCTCkweDY3OGRkZThmIC8qIDUqLywgIChGSVhQX0RCTCkweDc0ZWYwZWQ3IC8qIDYqLywgIChGSVhQX0RCTCkweDdkMzNmMGRhIC8qIDcqLwogfTsKIGNvbnN0IEZJWFBfREJMIEZES2FhY0VuY19tVGFiXzRfM0VsY1s1MTJdPXsKICAgRkwyRlhDT05TVF9EQkwoMC4zOTY4NTAyNjI5OTIwNDk5KSxGTDJGWENPTlNUX0RCTCgwLjM5Nzg4NDA2MzQ4NjgzMzUpLEZMMkZYQ09OU1RfREJMKDAuMzk4OTE4NTM1OTM1NDcxMSksRkwyRlhDT05TVF9EQkwoMC4zOTk5NTM2Nzk0NjYxNDMyKSwKZGlmZiAtLWdpdCBhL2xpYkFBQ2VuYy9zcmMvYWFjRW5jX3JvbS5oIGIvbGliQUFDZW5jL3NyYy9hYWNFbmNfcm9tLmgKaW5kZXggMzdlNTAxMi4uODYyNDE3ZiAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNFbmNfcm9tLmgKKysrIGIvbGliQUFDZW5jL3NyYy9hYWNFbmNfcm9tLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEwNSwxMSArMTA1LDExIEBACiAvKgogICBIdWZmbWFuIFRhYmxlcwogKi8KLWV4dGVybiBjb25zdCBJTlQgICAgRkRLYWFjRW5jX2h1ZmZfbHRhYjFfMlszXVszXVszXVszXTsKLWV4dGVybiBjb25zdCBJTlQgICAgRkRLYWFjRW5jX2h1ZmZfbHRhYjNfNFszXVszXVszXVszXTsKLWV4dGVybiBjb25zdCBJTlQgICAgRkRLYWFjRW5jX2h1ZmZfbHRhYjVfNls5XVs5XTsKLWV4dGVybiBjb25zdCBJTlQgICAgRkRLYWFjRW5jX2h1ZmZfbHRhYjdfOFs4XVs4XTsKLWV4dGVybiBjb25zdCBJTlQgICAgRkRLYWFjRW5jX2h1ZmZfbHRhYjlfMTBbMTNdWzEzXTsKK2V4dGVybiBjb25zdCBVTE9ORyAgRkRLYWFjRW5jX2h1ZmZfbHRhYjFfMlszXVszXVszXVszXTsKK2V4dGVybiBjb25zdCBVTE9ORyAgRkRLYWFjRW5jX2h1ZmZfbHRhYjNfNFszXVszXVszXVszXTsKK2V4dGVybiBjb25zdCBVTE9ORyAgRkRLYWFjRW5jX2h1ZmZfbHRhYjVfNls5XVs5XTsKK2V4dGVybiBjb25zdCBVTE9ORyAgRkRLYWFjRW5jX2h1ZmZfbHRhYjdfOFs4XVs4XTsKK2V4dGVybiBjb25zdCBVTE9ORyAgRkRLYWFjRW5jX2h1ZmZfbHRhYjlfMTBbMTNdWzEzXTsKIGV4dGVybiBjb25zdCBVQ0hBUiAgRkRLYWFjRW5jX2h1ZmZfbHRhYjExWzE3XVsxN107CiBleHRlcm4gY29uc3QgVUNIQVIgIEZES2FhY0VuY19odWZmX2x0YWJzY2ZbMTIxXTsKIGV4dGVybiBjb25zdCBVU0hPUlQgRkRLYWFjRW5jX2h1ZmZfY3RhYjFbM11bM11bM11bM107CkBAIC0xMjMsNyArMTIzLDcgQEAKIGV4dGVybiBjb25zdCBVU0hPUlQgRkRLYWFjRW5jX2h1ZmZfY3RhYjlbMTNdWzEzXTsKIGV4dGVybiBjb25zdCBVU0hPUlQgRkRLYWFjRW5jX2h1ZmZfY3RhYjEwWzEzXVsxM107CiBleHRlcm4gY29uc3QgVVNIT1JUIEZES2FhY0VuY19odWZmX2N0YWIxMVsyMV1bMTddOwotZXh0ZXJuIGNvbnN0IElOVCAgICBGREthYWNFbmNfaHVmZl9jdGFic2NmWzEyMV07CitleHRlcm4gY29uc3QgVUxPTkcgIEZES2FhY0VuY19odWZmX2N0YWJzY2ZbMTIxXTsKIAogLyoKICAgcXVhbnRpemVyCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL2FhY2VuYy5jcHAgYi9saWJBQUNlbmMvc3JjL2FhY2VuYy5jcHAKaW5kZXggNTY5NjYyYi4uNWU4YzA4ZCAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmMuY3BwCisrKyBiL2xpYkFBQ2VuYy9zcmMvYWFjZW5jLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTA3LDYgKzEwNywzOSBAQAogCiAjZGVmaW5lIE1JTl9CVUZTSVpFX1BFUl9FRkZfQ0hBTiA2MTQ0CiAKK0lOVCBGREthYWNFbmNfQ2FsY0JpdHNQZXJGcmFtZSgKKyAgICAgICAgY29uc3QgSU5UIGJpdFJhdGUsCisgICAgICAgIGNvbnN0IElOVCBmcmFtZUxlbmd0aCwKKyAgICAgICAgY29uc3QgSU5UIHNhbXBsaW5nUmF0ZQorICAgICAgICApCit7CisgICAgaW50IHNoaWZ0ID0gMDsKKyAgICB3aGlsZSAoKGZyYW1lTGVuZ3RoICYgfigoMSA8PCAoc2hpZnQgKyAxKSkgLSAxKSkgPT0gZnJhbWVMZW5ndGgKKyAgICAgICAgJiYgKHNhbXBsaW5nUmF0ZSAmIH4oKDEgPDwgKHNoaWZ0ICsgMSkpIC0gMSkpID09IHNhbXBsaW5nUmF0ZSkKKyAgICB7CisgICAgICBzaGlmdCsrOworICAgIH0KKworICAgIHJldHVybiAoYml0UmF0ZSooZnJhbWVMZW5ndGg+PnNoaWZ0KSkgLyAoc2FtcGxpbmdSYXRlPj5zaGlmdCk7Cit9CisKK0lOVCBGREthYWNFbmNfQ2FsY0JpdHJhdGUoCisgICAgICAgIGNvbnN0IElOVCBiaXRzUGVyRnJhbWUsCisgICAgICAgIGNvbnN0IElOVCBmcmFtZUxlbmd0aCwKKyAgICAgICAgY29uc3QgSU5UIHNhbXBsaW5nUmF0ZQorICAgICAgICApCit7CisgICAgaW50IHNoaWZ0ID0gMDsKKyAgICB3aGlsZSAoKGZyYW1lTGVuZ3RoICYgfigoMSA8PCAoc2hpZnQgKyAxKSkgLSAxKSkgPT0gZnJhbWVMZW5ndGgKKyAgICAgICAgJiYgKHNhbXBsaW5nUmF0ZSAmIH4oKDEgPDwgKHNoaWZ0ICsgMSkpIC0gMSkpID09IHNhbXBsaW5nUmF0ZSkKKyAgICB7CisgICAgICBzaGlmdCsrOworICAgIH0KKworICAgIHJldHVybiAoYml0c1BlckZyYW1lICogKHNhbXBsaW5nUmF0ZT4+c2hpZnQpKSAvICggZnJhbWVMZW5ndGg+PnNoaWZ0KSA7CisKK30KKwogc3RhdGljIEFBQ19FTkNPREVSX0VSUk9SIEZES2FhY0VuY19Jbml0Q2hlY2tBbmNpbGxhcnkoSU5UIGJpdFJhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgZnJhbWVsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYW5jaWxsYXJ5UmF0ZSwKQEAgLTIyMCwyMSArMjUzLDE5IEBACiAvKioKICAqIFxicmllZiAgQ29udmVydCBlbmNvZGVyIGJpdHJlc2Vydm9pciB2YWx1ZSBmb3IgdHJhbnNwb3J0IGxpYnJhcnkuCiAgKgotICogXHBhcmFtIGJpdHJhdGVNb2RlICAgICAgICAgICBCaXRyYXRlbW9kZSB1c2VkIGluIGN1cnJlbnQgZW5jb2RlciBpbnN0YW5jZS4gU2UgOjpBQUNFTkNfQklUUkFURV9NT0RFCi0gKiBccGFyYW0gYml0cmVzVG90YWwgICAgICAgICAgIEVuY29kZXIgYml0cmVzZXJ2b2lyIGxldmVsIGluIGJpdHMuCisgKiBccGFyYW0gaEFhY0VuYyAgICAgICAgICAgICAgIEVuY29kZXIgaGFuZGxlCiAgKgogICogXHJldHVybiAgQ29ycmVjdGVkIGJpdHJlc2Vydm9pciBsZXZlbCB1c2VkIGluIHRyYW5zcG9ydCBsaWJyYXJ5LgogICovCiBzdGF0aWMgSU5UIEZES2FhY0VuY19FbmNCaXRyZXNUb1RwQml0cmVzKAotICAgICAgICBjb25zdCBBQUNFTkNfQklUUkFURV9NT0RFIGJpdHJhdGVNb2RlLAotICAgICAgICBjb25zdCBJTlQgICAgICAgICAgICAgICAgIGJpdHJlc1RvdGFsCisgICAgICAgIGNvbnN0IEhBTkRMRV9BQUNfRU5DICAgICAgaEFhY0VuYwogICAgICAgICApCiB7CiAgIElOVCB0cmFuc3BvckJpdHJlc2Vydm9pciA9IDA7CiAKLSAgc3dpdGNoIChiaXRyYXRlTW9kZSkgeworICBzd2l0Y2ggKGhBYWNFbmMtPmJpdHJhdGVNb2RlKSB7CiAgICAgY2FzZSBBQUNFTkNfQlJfTU9ERV9DQlI6Ci0gICAgICB0cmFuc3BvckJpdHJlc2Vydm9pciA9IGJpdHJlc1RvdGFsOyAvKiBlbmNvZGVyIGJpdHJlc2Vydm9pciBsZXZlbCAqLworICAgICAgdHJhbnNwb3JCaXRyZXNlcnZvaXIgPSBoQWFjRW5jLT5xY0tlcm5lbC0+Yml0UmVzVG90OyAvKiBlbmNvZGVyIGJpdHJlc2Vydm9pciBsZXZlbCAqLwogICAgICAgYnJlYWs7CiAgICAgY2FzZSBBQUNFTkNfQlJfTU9ERV9WQlJfMToKICAgICBjYXNlIEFBQ0VOQ19CUl9NT0RFX1ZCUl8yOgpAQCAtMjUzLDYgKzI4NCwxMCBAQAogICAgICAgRkRLX0FTU0VSVCgwKTsKICAgfQogCisgIGlmIChoQWFjRW5jLT5jb25maWctPmF1ZGlvTXV4VmVyc2lvbj09MikgeworICAgIHRyYW5zcG9yQml0cmVzZXJ2b2lyID0gTUlOX0JVRlNJWkVfUEVSX0VGRl9DSEFOICogaEFhY0VuYy0+Y2hhbm5lbE1hcHBpbmcubkNoYW5uZWxzRWZmOworICB9CisKICAgcmV0dXJuIHRyYW5zcG9yQml0cmVzZXJ2b2lyOwogfQogCkBAIC0yODksNiArMzI0LDcgQEAKICAgICBjb25maWctPm1pbkJpdHNQZXJGcmFtZSA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBtaW51bSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIEFVICovCiAgICAgY29uZmlnLT5tYXhCaXRzUGVyRnJhbWUgPSAtMTsgICAgICAgICAgICAgICAgICAgLyogbWludW0gbnVtYmVyIG9mIGJpdHMgaW4gZWFjaCBBVSAqLwogICAgIGNvbmZpZy0+Yml0cmVzZXJ2b2lyICAgID0gLTE7ICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQsIHVuaW5pdGlhbGl6ZWQgdmFsdWUgKi8KKyAgICBjb25maWctPmF1ZGlvTXV4VmVyc2lvbiA9IC0xOyAgICAgICAgICAgICAgICAgICAvKiBhdWRpbyBtdXggdmVyc2lvbiBub3QgY29uZmlndXJlZCAqLwogCiAgICAgLyogaW5pdCB0YWJzIGluIGZpeHBvaW50X21hdGggKi8KICAgICBJbml0TGRJbnQoKTsKQEAgLTQzNSw3ICs0NzEsOSBAQAogICAgICAgICAgJmF2ZXJhZ2VCaXRzUGVyRnJhbWUsCiAgICAgICAgICAgY29uZmlnLT5iaXRyYXRlTW9kZSwKICAgICAgICAgICBjb25maWctPm5TdWJGcmFtZXMKLSAgICAgICAgICApICE9IGNvbmZpZy0+Yml0UmF0ZSApCisgICAgICAgICAgKSAhPSBjb25maWctPmJpdFJhdGUKKyAgICAgICYmICEoKGNvbmZpZy0+Yml0cmF0ZU1vZGU+PTEpICYmIChjb25maWctPmJpdHJhdGVNb2RlPD01KSkKKyAgICAgKQogICB7CiAgICAgcmV0dXJuIEFBQ19FTkNfVU5TVVBQT1JURURfQklUUkFURTsKICAgfQpAQCAtNTYyLDcgKzYwMCwxMCBAQAogICAgICAgcWNJbml0LmF2ZXJhZ2VCaXRzICAgICA9IChhdmVyYWdlQml0c1BlckZyYW1lKzcpJn43OwogICAgICAgcWNJbml0LmJpdFJlcyAgICAgICAgICA9IE1JTl9CVUZTSVpFX1BFUl9FRkZfQ0hBTipjbS0+bkNoYW5uZWxzRWZmOwogICAgICAgcWNJbml0Lm1heEJpdHMgICAgICAgICA9IE1JTl9CVUZTSVpFX1BFUl9FRkZfQ0hBTipjbS0+bkNoYW5uZWxzRWZmOwotICAgICAgcWNJbml0Lm1pbkJpdHMgICAgICAgICA9IDA7CisgICAgICBxY0luaXQubWF4Qml0cyAgICAgICAgID0gKGNvbmZpZy0+bWF4Qml0c1BlckZyYW1lIT0tMSkgPyBmaXhNaW4ocWNJbml0Lm1heEJpdHMsIGNvbmZpZy0+bWF4Qml0c1BlckZyYW1lKSA6IHFjSW5pdC5tYXhCaXRzOworICAgICAgcWNJbml0Lm1heEJpdHMgICAgICAgICA9IGZpeE1heChxY0luaXQubWF4Qml0cywgKGF2ZXJhZ2VCaXRzUGVyRnJhbWUrNykmfjcpOworICAgICAgcWNJbml0Lm1pbkJpdHMgICAgICAgICA9IChjb25maWctPm1pbkJpdHNQZXJGcmFtZSE9LTEpID8gY29uZmlnLT5taW5CaXRzUGVyRnJhbWUgOiAwOworICAgICAgcWNJbml0Lm1pbkJpdHMgICAgICAgICA9IGZpeE1pbihxY0luaXQubWluQml0cywgYXZlcmFnZUJpdHNQZXJGcmFtZSZ+Nyk7CiAgIH0KICAgZWxzZQogICB7CkBAIC01NzMsOSArNjE0LDExIEBACiAKICAgICAgIHFjSW5pdC5tYXhCaXRzICAgICAgICAgPSBmaXhNaW4oTUlOX0JVRlNJWkVfUEVSX0VGRl9DSEFOKmNtLT5uQ2hhbm5lbHNFZmYsICgoYXZlcmFnZUJpdHNQZXJGcmFtZSs3KSZ+NykrcWNJbml0LmJpdFJlcyk7CiAgICAgICBxY0luaXQubWF4Qml0cyAgICAgICAgID0gKGNvbmZpZy0+bWF4Qml0c1BlckZyYW1lIT0tMSkgPyBmaXhNaW4ocWNJbml0Lm1heEJpdHMsIGNvbmZpZy0+bWF4Qml0c1BlckZyYW1lKSA6IHFjSW5pdC5tYXhCaXRzOworICAgICAgcWNJbml0Lm1heEJpdHMgICAgICAgICA9IGZpeE1pbihNSU5fQlVGU0laRV9QRVJfRUZGX0NIQU4qY20tPm5DaGFubmVsc0VmZiwgZml4TWF4KHFjSW5pdC5tYXhCaXRzLCAoYXZlcmFnZUJpdHNQZXJGcmFtZSs3KzgpJn43KSk7CiAKICAgICAgIHFjSW5pdC5taW5CaXRzICAgICAgICAgPSBmaXhNYXgoMCwgKChhdmVyYWdlQml0c1BlckZyYW1lLTEpJn43KS1xY0luaXQuYml0UmVzLXRyYW5zcG9ydEVuY19HZXRTdGF0aWNCaXRzKGhUcEVuYywgKChhdmVyYWdlQml0c1BlckZyYW1lKzcpJn43KStxY0luaXQuYml0UmVzKSk7CiAgICAgICBxY0luaXQubWluQml0cyAgICAgICAgID0gKGNvbmZpZy0+bWluQml0c1BlckZyYW1lIT0tMSkgPyBmaXhNYXgocWNJbml0Lm1pbkJpdHMsIGNvbmZpZy0+bWluQml0c1BlckZyYW1lKSA6IHFjSW5pdC5taW5CaXRzOworICAgICAgcWNJbml0Lm1pbkJpdHMgICAgICAgICA9IGZpeE1pbihxY0luaXQubWluQml0cywgKGF2ZXJhZ2VCaXRzUGVyRnJhbWUgLSB0cmFuc3BvcnRFbmNfR2V0U3RhdGljQml0cyhoVHBFbmMsIHFjSW5pdC5tYXhCaXRzKSkmfjcpOwogICB9CiAKICAgcWNJbml0LnNhbXBsZVJhdGUgICAgICAgICAgPSBjb25maWctPnNhbXBsZVJhdGU7CkBAIC01ODMsMTEgKzYyNiw5IEBACiAgIHFjSW5pdC5uU3ViRnJhbWVzICAgICAgICAgID0gY29uZmlnLT5uU3ViRnJhbWVzOwogICBxY0luaXQucGFkZGluZy5wYWRkaW5nUmVzdCA9IGNvbmZpZy0+c2FtcGxlUmF0ZTsKIAotICAvKiBDYWxjIG1lYW5QZSAqLwotICBid19yYXRpbyA9IGZEaXZOb3JtKChGSVhQX0RCTCloQWFjRW5jLT5iYW5kd2lkdGg5MGRCLCAoRklYUF9EQkwpKGNvbmZpZy0+c2FtcGxlUmF0ZT4+MSksICZxYncpOwotICBxYncgPSBERlJBQ1RfQklUUy0xLXFidzsKLSAgLyogcWNJbml0Lm1lYW5QZSA9IDEwLjBmICogRlJBTUVfTEVOX0xPTkcgKiBoQWFjRW5jLT5iYW5kd2lkdGg5MGRCLyhjb25maWctPnNhbXBsZVJhdGUvMi4wZik7ICovCi0gIHFjSW5pdC5tZWFuUGUgPSBmTXVsdChid19yYXRpbywgKEZJWFBfREJMKSgoMTAqY29uZmlnLT5mcmFtZWxlbmd0aCk8PDE2KSkgPj4gKHFidy0xNSk7CisgIC8qIENhbGMgbWVhblBlOiBxY0luaXQubWVhblBlID0gMTAuMGYgKiBGUkFNRV9MRU5fTE9ORyAqIGhBYWNFbmMtPmJhbmR3aWR0aDkwZEIvKGNvbmZpZy0+c2FtcGxlUmF0ZS8yLjBmKTsgKi8KKyAgYndfcmF0aW8gPSBmRGl2Tm9ybSgoRklYUF9EQkwpKDEwKmNvbmZpZy0+ZnJhbWVsZW5ndGgqaEFhY0VuYy0+YmFuZHdpZHRoOTBkQiksIChGSVhQX0RCTCkoY29uZmlnLT5zYW1wbGVSYXRlKSwgJnFidyk7CisgIHFjSW5pdC5tZWFuUGUgPSBGREttYXgoKElOVClzY2FsZVZhbHVlKGJ3X3JhdGlvLCBxYncrMS0oREZSQUNUX0JJVFMtMSkpLCAxKTsKIAogICAvKiBDYWxjIG1heEJpdEZhYyAqLwogICBtYmZhYyA9IGZEaXZOb3JtKChNSU5fQlVGU0laRV9QRVJfRUZGX0NIQU4tNzQ0KSpjbS0+bkNoYW5uZWxzRWZmLCBxY0luaXQuYXZlcmFnZUJpdHMvcWNJbml0Lm5TdWJGcmFtZXMsICZxbWJmYWMpOwpAQCAtNjQ5LDIzICs2OTAsNyBAQAogICBpZiAoRXJyb3JTdGF0dXMgIT0gQUFDX0VOQ19PSykKICAgICBnb3RvIGJhaWw7CiAKLSAgLyogTWFwIHZpcnR1YWwgYW90J3MgdG8gaW50ZXJuIGFvdCB1c2VkIGluIGJpdHN0cmVhbSB3cml0ZXIuICovCi0gIHN3aXRjaCAoaEFhY0VuYy0+Y29uZmlnLT5hdWRpb09iamVjdFR5cGUpIHsKLSAgICBjYXNlIEFPVF9NUDJfQUFDX0xDOgotICAgIGNhc2UgQU9UX0RBQlBMVVNfQUFDX0xDOgotICAgICAgaEFhY0VuYy0+YW90ID0gQU9UX0FBQ19MQzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgQU9UX01QMl9TQlI6Ci0gICAgY2FzZSBBT1RfREFCUExVU19TQlI6Ci0gICAgICBoQWFjRW5jLT5hb3QgPSBBT1RfU0JSOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBT1RfTVAyX1BTOgotICAgIGNhc2UgQU9UX0RBQlBMVVNfUFM6Ci0gICAgICBoQWFjRW5jLT5hb3QgPSBBT1RfUFM7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgaEFhY0VuYy0+YW90ID0gaEFhY0VuYy0+Y29uZmlnLT5hdWRpb09iamVjdFR5cGU7Ci0gIH0KKyAgaEFhY0VuYy0+YW90ID0gaEFhY0VuYy0+Y29uZmlnLT5hdWRpb09iamVjdFR5cGU7CiAKICAgLyogY29tbW9uIHRoaW5ncyAqLwogCkBAIC05MzAsNyArOTU1LDcgQEAKICAgICAgICAgICAgICAgdHJhbnNwb3J0RW5jX1dyaXRlQWNjZXNzVW5pdCgKICAgICAgICAgICAgICAgICAgICAgaFRwRW5jLAogICAgICAgICAgICAgICAgICAgICB0b3RhbEJpdHMsCi0gICAgICAgICAgICAgICAgICAgIEZES2FhY0VuY19FbmNCaXRyZXNUb1RwQml0cmVzKGhBYWNFbmMtPmJpdHJhdGVNb2RlLCBoQWFjRW5jLT5xY0tlcm5lbC0+Yml0UmVzVG90KSwKKyAgICAgICAgICAgICAgICAgICAgRkRLYWFjRW5jX0VuY0JpdHJlc1RvVHBCaXRyZXMoaEFhY0VuYyksCiAgICAgICAgICAgICAgICAgICAgIGNtLT5uQ2hhbm5lbHNFZmYpOwogCiAgICAgICAgICAgICAgIC8qIHdyaXRlIGJpdHN0cmVhbSAqLwpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9hYWNlbmMuaCBiL2xpYkFBQ2VuYy9zcmMvYWFjZW5jLmgKaW5kZXggODdmYzNlOC4uNzk1MjRiNSAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmMuaAorKysgYi9saWJBQUNlbmMvc3JjL2FhY2VuYy5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05OCw2ICs5OCwxMSBAQAogCiAjaW5jbHVkZSAic2JyX2VuY29kZXIuaCIKIAorI2RlZmluZSBCSVRSRVNfTUFYX0xEICAgNDAwMAorI2RlZmluZSBCSVRSRVNfTUlOX0xEICAgIDUwMAorI2RlZmluZSBCSVRSQVRFX01BWF9MRCA3MDAwMCAvKiBNYXggYXNzdW1lZCBiaXRyYXRlIGZvciBiaXRyZXMgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgQklUUkFURV9NSU5fTEQgMTIwMDAgLyogTWluIGFzc3VtZWQgYml0cmF0ZSBmb3IgYml0cmVzIGNhbGN1bGF0aW9uICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTIwNCw2ICsyMDksOCBAQAogICBJTlQgICBtYXhCaXRzUGVyRnJhbWU7ICAgICAgICAvKiBtYXhpbXVtIG51bWJlciBvZiBiaXRzIGluIEFVICovCiAgIElOVCAgIGJpdHJlc2Vydm9pcjsgICAgICAgICAgIC8qIHNpemUgb2YgYml0cmVzZXJ2b2lyICovCiAKKyAgSU5UICAgYXVkaW9NdXhWZXJzaW9uOyAgICAgICAgLyogYXVkaW8gbXV4IHZlcnNpb24gaW4gbG9hcy9sYXRtIHRyYW5zcG9ydCBmb3JtYXQgKi8KKwogICBVSU5UICBzYnJSYXRpbzsgICAgICAgICAgICAgICAvKiBzYnIgc2FtcGxpbmcgcmF0ZSByYXRpbzogZHVhbC0gb3Igc2luZ2xlLXJhdGUgKi8KIAogICBVQ0hBUiB1c2VUbnM7ICAgICAgICAgICAgICAgICAvKiBmbGFnOiB1c2UgdGVtcG9yYWwgbm9pc2Ugc2hhcGluZyAqLwpAQCAtMjIzLDYgKzIzMCwzNiBAQAogdHlwZWRlZiBzdHJ1Y3QgQUFDX0VOQyAqSEFORExFX0FBQ19FTkM7CiAKIC8qKgorICogXGJyaWVmIENhbGN1bGF0ZSBmcmFtZXNpemUgaW4gYml0cyBmb3IgZ2l2ZW4gYml0IHJhdGUsIGZyYW1lIGxlbmd0aCBhbmQgc2FtcGxpbmcgcmF0ZS4KKyAqCisgKiBccGFyYW0gYml0UmF0ZSAgICAgICAgICAgICAgIFR0YXJnZXQgYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuCisgKiBccGFyYW0gZnJhbWVMZW5ndGggICAgICAgICAgIE51bWJlciBvZiBhdWRpbyBzYW1wbGVzIGluIG9uZSBmcmFtZS4KKyAqIFxwYXJhbSBzYW1wbGluZ1JhdGUgICAgICAgICAgU2FtcGxpbmcgcmF0ZSBpbiBIei4KKyAqCisgKiBccmV0dXJuICAgICAgICAgICAgICAgICAgICAgIEZyYW1lc2l6ZSBpbiBiaXRzIHBlciBmcmFtZS4KKyovCitJTlQgRkRLYWFjRW5jX0NhbGNCaXRzUGVyRnJhbWUoCisgICAgICAgIGNvbnN0IElOVCBiaXRSYXRlLAorICAgICAgICBjb25zdCBJTlQgZnJhbWVMZW5ndGgsCisgICAgICAgIGNvbnN0IElOVCBzYW1wbGluZ1JhdGUKKyAgICAgICAgKTsKKworLyoqCisgKiBcYnJpZWYgQ2FsY3VsYXRlIGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kIGZvciBnaXZlbiBmcmFtZXNpemUsIGZyYW1lIGxlbmd0aCBhbmQgc2FtcGxpbmcgcmF0ZS4KKyAqCisgKiBccGFyYW0gYml0c1BlckZyYW1lICAgICAgICAgIEZyYW1lc2l6ZSBpbiBiaXRzIHBlciBmcmFtZS4KKyAqIFxwYXJhbSBmcmFtZUxlbmd0aCAgICAgICAgICAgTnVtYmVyIG9mIGF1ZGlvIHNhbXBsZXMgaW4gb25lIGZyYW1lLgorICogXHBhcmFtIHNhbXBsaW5nUmF0ZSAgICAgICAgICBTYW1wbGluZyByYXRlIGluIEh6LgorICoKKyAqIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgQml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuCisqLworSU5UIEZES2FhY0VuY19DYWxjQml0cmF0ZSgKKyAgICAgICAgY29uc3QgSU5UIGJpdHNQZXJGcmFtZSwKKyAgICAgICAgY29uc3QgSU5UIGZyYW1lTGVuZ3RoLAorICAgICAgICBjb25zdCBJTlQgc2FtcGxpbmdSYXRlCisgICAgICAgICk7CisKKy8qKgogICogXGJyaWVmIExpbWl0IGdpdmVuIGJpdCByYXRlIHRvIGEgdmFsaWQgdmFsdWUKICAqIFxwYXJhbSBoVHBFbmMgdHJhbnNwb3J0IGVuY29kZXIgaGFuZGxlCiAgKiBccGFyYW0gY29yZVNhbXBsaW5nUmF0ZSB0aGUgc2FtcGxlIHJhdGUgdG8gYmUgdXNlZCBmb3IgdGhlIEFBQyBlbmNvZGVyCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL2FhY2VuY19oY3IuaCBiL2xpYkFBQ2VuYy9zcmMvYWFjZW5jX2hjci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzQyNDdhLi4wMDAwMDAwCi0tLSBhL2xpYkFBQ2VuYy9zcmMvYWFjZW5jX2hjci5oCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCi0KLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgotICBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gMS4gICAgSU5UUk9EVUNUSU9OCi1UaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQgKCJGREsgQUFDIENvZGVjIikgaXMgc29mdHdhcmUgdGhhdCBpbXBsZW1lbnRzCi10aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgotVGhpcyBGREsgQUFDIENvZGVjIHNvZnR3YXJlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgb24gYSB3aWRlIHZhcmlldHkgb2YgQW5kcm9pZCBkZXZpY2VzLgotCi1BQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKLWF1ZGlvIGNvZGVjcy4gQUFDLUVMRCBpcyBjb25zaWRlcmVkIHRoZSBiZXN0LXBlcmZvcm1pbmcgZnVsbC1iYW5kd2lkdGggY29tbXVuaWNhdGlvbnMgY29kZWMgYnkKLWluZGVwZW5kZW50IHN0dWRpZXMgYW5kIGlzIHdpZGVseSBkZXBsb3llZC4gQUFDIGhhcyBiZWVuIHN0YW5kYXJkaXplZCBieSBJU08gYW5kIElFQyBhcyBwYXJ0Ci1vZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KLQotUGF0ZW50IGxpY2Vuc2VzIGZvciBuZWNlc3NhcnkgcGF0ZW50IGNsYWltcyBmb3IgdGhlIEZESyBBQUMgQ29kZWMgKGluY2x1ZGluZyB0aG9zZSBvZiBGcmF1bmhvZmVyKQotbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwotaW5kaXZpZHVhbGx5IGZvciB0aGUgcHVycG9zZSBvZiBlbmNvZGluZyBvciBkZWNvZGluZyBiaXQgc3RyZWFtcyBpbiBwcm9kdWN0cyB0aGF0IGFyZSBjb21wbGlhbnQgd2l0aAotdGhlIElTTy9JRUMgTVBFRyBhdWRpbyBzdGFuZGFyZHMuIFBsZWFzZSBub3RlIHRoYXQgbW9zdCBtYW51ZmFjdHVyZXJzIG9mIEFuZHJvaWQgZGV2aWNlcyBhbHJlYWR5IGxpY2Vuc2UKLXRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwotc29mdHdhcmUgbWF5IGFscmVhZHkgYmUgY292ZXJlZCB1bmRlciB0aG9zZSBwYXRlbnQgbGljZW5zZXMgd2hlbiBpdCBpcyB1c2VkIGZvciB0aG9zZSBsaWNlbnNlZCBwdXJwb3NlcyBvbmx5LgotCi1Db21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKLWFyZSBhbHNvIGF2YWlsYWJsZSBmcm9tIEZyYXVuaG9mZXIuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGNoZWNrIHRoZSBGcmF1bmhvZmVyIHdlYnNpdGUgZm9yIGFkZGl0aW9uYWwKLWFwcGxpY2F0aW9ucyBpbmZvcm1hdGlvbiBhbmQgZG9jdW1lbnRhdGlvbi4KLQotMi4gICAgQ09QWVJJR0hUIExJQ0VOU0UKLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0Ci1wYXltZW50IG9mIGNvcHlyaWdodCBsaWNlbnNlIGZlZXMgcHJvdmlkZWQgdGhhdCB5b3Ugc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVlvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCi15b3VyIG1vZGlmaWNhdGlvbnMgdGhlcmV0byBpbiBzb3VyY2UgY29kZSBmb3JtLgotCi1Zb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLXByb3ZpZGVkIHdpdGggcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIGJpbmFyeSBmb3JtLgotWW91IG11c3QgbWFrZSBhdmFpbGFibGUgZnJlZSBvZiBjaGFyZ2UgY29waWVzIG9mIHRoZSBjb21wbGV0ZSBzb3VyY2UgY29kZSBvZiB0aGUgRkRLIEFBQyBDb2RlYyBhbmQgeW91cgotbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgotCi1UaGUgbmFtZSBvZiBGcmF1bmhvZmVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgbGlicmFyeSB3aXRob3V0Ci1wcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVlvdSBtYXkgbm90IGNoYXJnZSBjb3B5cmlnaHQgbGljZW5zZSBmZWVzIGZvciBhbnlvbmUgdG8gdXNlLCBjb3B5IG9yIGRpc3RyaWJ1dGUgdGhlIEZESyBBQUMgQ29kZWMKLXNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgotCi1Zb3VyIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBzb2Z0d2FyZQotYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KLSJGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZCIgbXVzdCBiZSByZXBsYWNlZCBieSB0aGUgdGVybQotIlRoaXJkLVBhcnR5IE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkLiIKLQotMy4gICAgTk8gUEFURU5UIExJQ0VOU0UKLQotTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCi1BUkUgR1JBTlRFRCBCWSBUSElTIFNPRlRXQVJFIExJQ0VOU0UuIEZyYXVuaG9mZXIgcHJvdmlkZXMgbm8gd2FycmFudHkgb2YgcGF0ZW50IG5vbi1pbmZyaW5nZW1lbnQgd2l0aAotcmVzcGVjdCB0byB0aGlzIHNvZnR3YXJlLgotCi1Zb3UgbWF5IHVzZSB0aGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIG9ubHkgZm9yIHB1cnBvc2VzIHRoYXQgYXJlIGF1dGhvcml6ZWQKLWJ5IGFwcHJvcHJpYXRlIHBhdGVudCBsaWNlbnNlcy4KLQotNC4gICAgRElTQ0xBSU1FUgotCi1UaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKLSJBUyBJUyIgYW5kIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMKLW9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCi1DT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCi1pbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXM7IGxvc3Mgb2YgdXNlLCBkYXRhLCBvciBwcm9maXRzLAotb3IgYnVzaW5lc3MgaW50ZXJydXB0aW9uLCBob3dldmVyIGNhdXNlZCBhbmQgb24gYW55IHRoZW9yeSBvZiBsaWFiaWxpdHksIHdoZXRoZXIgaW4gY29udHJhY3QsIHN0cmljdAotbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCi1hZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KLQotNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgotCi1GcmF1bmhvZmVyIEluc3RpdHV0ZSBmb3IgSW50ZWdyYXRlZCBDaXJjdWl0cyBJSVMKLUF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCi1BbSBXb2xmc21hbnRlbCAzMwotOTEwNTggRXJsYW5nZW4sIEdlcm1hbnkKLQotd3d3Lmlpcy5mcmF1bmhvZmVyLmRlL2FtbQotYW1tLWluZm9AaWlzLmZyYXVuaG9mZXIuZGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogIE1QRUcgQUFDIEF1ZGlvIEVuY29kZXIgICoqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAgSW5pdGlhbCBhdXRob3I6ICAgICAgIFIuIEJvZWhtCi0gICBjb250ZW50cy9kZXNjcmlwdGlvbjogaHVmZm1hbiBjb2Rld29yZCByZW9yZGVyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWQgb24gc291cmNlIGZyb20gYWFjRXJyUm9iVHJhbnMKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9BQUNFTkNfSENSCi0jZGVmaW5lIF9BQUNFTkNfSENSX0gKLQotCi0jZW5kaWYgIC8qIGlmbmRlZiBfQUFDRU5DX0hDUiAqLwpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfbGliLmNwcCBiL2xpYkFBQ2VuYy9zcmMvYWFjZW5jX2xpYi5jcHAKaW5kZXggNjM1NjNmZC4uMjg0NTE3NyAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfbGliLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL2FhY2VuY19saWIuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05OCw3ICs5OCw3IEBACiAvKiBFbmNvZGVyIGxpYnJhcnkgaW5mbyAqLwogI2RlZmluZSBBQUNFTkNPREVSX0xJQl9WTDAgMwogI2RlZmluZSBBQUNFTkNPREVSX0xJQl9WTDEgNAotI2RlZmluZSBBQUNFTkNPREVSX0xJQl9WTDIgMTIKKyNkZWZpbmUgQUFDRU5DT0RFUl9MSUJfVkwyIDIyCiAjZGVmaW5lIEFBQ0VOQ09ERVJfTElCX1RJVExFICJBQUMgRW5jb2RlciIKICNpZmRlZiBfX0FORFJPSURfXwogI2RlZmluZSBBQUNFTkNPREVSX0xJQl9CVUlMRF9EQVRFICIiCkBAIC0xNTMsNiArMTUzLDcgQEAKICAgICBVSU5UICAgICAgICAgICAgICB1c2VyQWZ0ZXJidXJuZXI7CiAgICAgVUlOVCAgICAgICAgICAgICAgdXNlckZyYW1lbGVuZ3RoOwogICAgIFVJTlQgICAgICAgICAgICAgIHVzZXJBbmNEYXRhUmF0ZTsKKyAgICBVSU5UICAgICAgICAgICAgICB1c2VyUGVha0JpdHJhdGU7CiAKICAgICBVQ0hBUiAgICAgICAgICAgICB1c2VyVG5zOyAgICAgICAgICAgICAgIC8qITwgVXNlIFROUyBjb2RpbmcuICovCiAgICAgVUNIQVIgICAgICAgICAgICAgdXNlclBuczsgICAgICAgICAgICAgICAvKiE8IFVzZSBQTlMgY29kaW5nLiAqLwpAQCAtMzAzLDcgKzMwNCw3IEBACiAgICAgaW50IGksIGNmZ0lkeCA9IC0xOwogICAgIGNvbnN0IFVMT05HIGNoYW5uZWxCaXRyYXRlID0gdG90YWxCaXRyYXRlIC8gRkRLYWFjRW5jX0dldENoYW5uZWxNb2RlQ29uZmlndXJhdGlvbihjaGFubmVsTW9kZSktPm5DaGFubmVsc0VmZjsKIAotICAgIGZvciAoaT0wOyBpPChzaXplb2YoZWxkU2JyQXV0b0NvbmZpZ1RhYikvc2l6ZW9mKEVMRF9TQlJfQ09ORklHVVJBVE9SKSk7IGkrKykgeworICAgIGZvciAoaT0wOyBpPChpbnQpKHNpemVvZihlbGRTYnJBdXRvQ29uZmlnVGFiKS9zaXplb2YoRUxEX1NCUl9DT05GSUdVUkFUT1IpKTsgaSsrKSB7CiAgICAgICBpZiAoIChzYW1wbGluZ1JhdGUgPD0gZWxkU2JyQXV0b0NvbmZpZ1RhYltpXS5zYW1wbGluZ1JhdGUpCiAgICAgICAgICYmIChjaGFubmVsQml0cmF0ZSA+PSBlbGRTYnJBdXRvQ29uZmlnVGFiW2ldLmJpdHJhdGVSYW5nZSkgKQogICAgICAgewpAQCAtMzI2LDEwICszMjcsNyBAQAogewogICAgIElOVCBzYnJVc2VkID0gMDsKIAotICAgIGlmICggKGhBYWNDb25maWctPmF1ZGlvT2JqZWN0VHlwZT09QU9UX1NCUikgICAgICAgICB8fCAoaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlPT1BT1RfUFMpCi0gICAgICB8fCAoaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlPT1BT1RfTVAyX1NCUikgICAgIHx8IChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU9PUFPVF9NUDJfUFMpCi0gICAgICB8fCAoaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlPT1BT1RfREFCUExVU19TQlIpIHx8IChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU9PUFPVF9EQUJQTFVTX1BTKQotICAgICAgfHwgKGhBYWNDb25maWctPmF1ZGlvT2JqZWN0VHlwZT09QU9UX0RSTV9TQlIpICAgICB8fCAoaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlPT1BT1RfRFJNX01QRUdfUFMpICkKKyAgICBpZiAoIChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU9PUFPVF9TQlIpIHx8IChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU9PUFPVF9QUykgKQogICAgIHsKICAgICAgICAgc2JyVXNlZCA9IDE7CiAgICAgfQpAQCAtMzQ1LDEwICszNDMsNyBAQAogewogICAgIElOVCBwc1VzZWQgPSAwOwogCi0gICAgaWYgKCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfUFMpCi0gICAgICB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfTVAyX1BTKQotICAgICAgfHwgKGF1ZGlvT2JqZWN0VHlwZT09QU9UX0RBQlBMVVNfUFMpCi0gICAgICB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfRFJNX01QRUdfUFMpICkKKyAgICBpZiAoIChhdWRpb09iamVjdFR5cGU9PUFPVF9QUykgKQogICAgIHsKICAgICAgICAgcHNVc2VkID0gMTsKICAgICB9CkBAIC0zNzMsOCArMzY4LDcgQEAKICAgICBzYnJTaWduYWxpbmcgPSBTSUdfSU1QTElDSVQ7IC8qIGRlZmF1bHQ6IGltcGxpY2l0IHNpZ25hbGluZyAqLwogICB9CiAKLSAgaWYgKChhdWRpb09iamVjdFR5cGU9PUFPVF9BQUNfTEMpICAgICB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfU0JSKSAgICAgfHwgKGF1ZGlvT2JqZWN0VHlwZT09QU9UX1BTKSAgICB8fAotICAgICAgKGF1ZGlvT2JqZWN0VHlwZT09QU9UX01QMl9BQUNfTEMpIHx8IChhdWRpb09iamVjdFR5cGU9PUFPVF9NUDJfU0JSKSB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfTVAyX1BTKSApIHsKKyAgaWYgKCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfQUFDX0xDKSB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfU0JSKSB8fCAoYXVkaW9PYmplY3RUeXBlPT1BT1RfUFMpICkgewogICAgIHN3aXRjaCAodHJhbnNwb3J0VHlwZSkgewogICAgICAgY2FzZSBUVF9NUDRfQURJRjoKICAgICAgIGNhc2UgVFRfTVA0X0FEVFM6CkBAIC00MzAsMjIgKzQyNCw3IEBACiAKICAgY2MtPmZsYWdzID0gMDsKIAotICAvKiBNYXAgdmlydHVhbCBhb3QgdG8gdHJhbnNwb3J0IGFvdC4gKi8KLSAgc3dpdGNoIChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGUpIHsKLSAgICBjYXNlIEFPVF9NUDJfQUFDX0xDOgotICAgICAgdHJhbnNwb3J0X0FPVCA9IEFPVF9BQUNfTEM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIEFPVF9NUDJfU0JSOgotICAgICAgdHJhbnNwb3J0X0FPVCA9IEFPVF9TQlI7Ci0gICAgICBjYy0+ZmxhZ3MgfD0gQ0NfU0JSOwotICAgICBicmVhazsKLSAgICBjYXNlIEFPVF9NUDJfUFM6Ci0gICAgICB0cmFuc3BvcnRfQU9UID0gQU9UX1BTOwotICAgICAgY2MtPmZsYWdzIHw9IENDX1NCUjsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICB0cmFuc3BvcnRfQU9UID0gaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlOwotICB9CisgIHRyYW5zcG9ydF9BT1QgPSBoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU7CiAKICAgaWYgKGhBYWNDb25maWctPmF1ZGlvT2JqZWN0VHlwZSA9PSBBT1RfRVJfQUFDX0VMRCkgewogICAgIGNjLT5mbGFncyB8PSAoaEFhY0NvbmZpZy0+c3ludGF4RmxhZ3MgJiBBQ19TQlJfUFJFU0VOVCkgPyBDQ19TQlIgOiAwOwpAQCAtNTExLDE2ICs0OTAsNyBAQAogICBjYy0+c2FtcGxpbmdSYXRlICAgID0gaEFhY0NvbmZpZy0+c2FtcGxlUmF0ZTsKIAogICAvKiBNcGVnLTQgc2lnbmFsaW5nIGZvciB0cmFuc3BvcnQgbGlicmFyeS4gKi8KLSAgc3dpdGNoICggaEFhY0NvbmZpZy0+YXVkaW9PYmplY3RUeXBlICkgewotICAgIGNhc2UgQU9UX01QMl9BQUNfTEM6Ci0gICAgY2FzZSBBT1RfTVAyX1NCUjoKLSAgICBjYXNlIEFPVF9NUDJfUFM6Ci0gICAgICBjYy0+ZmxhZ3MgJj0gfkNDX01QRUdfSUQ7IC8qIFJlcXVpcmVkIGZvciBBRFRTLiAqLwotICAgICAgY2MtPmV4dEFPVCA9IEFPVF9OVUxMX09CSkVDVDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBjYy0+ZmxhZ3MgfD0gQ0NfTVBFR19JRDsKLSAgfQorICBjYy0+ZmxhZ3MgfD0gQ0NfTVBFR19JRDsKIAogICAvKiBFUi10b29scyBzaWduYWxpbmcuICovCiAgIGNjLT5mbGFncyAgICAgfD0gKGhBYWNDb25maWctPnN5bnRheEZsYWdzICYgQUNfRVJfVkNCMTEpID8gQ0NfVkNCMTEgOiAwOwpAQCAtNTg1LDYgKzU1NSw3IEBACiAgICAgY29uZmlnLT51c2VyQ2hhbm5lbE1vZGUgPSBoQWFjQ29uZmlnLT5jaGFubmVsTW9kZTsKICAgICBjb25maWctPnVzZXJCaXRyYXRlICAgICA9IGhBYWNDb25maWctPmJpdFJhdGU7CiAgICAgY29uZmlnLT51c2VyQml0cmF0ZU1vZGUgPSBoQWFjQ29uZmlnLT5iaXRyYXRlTW9kZTsKKyAgICBjb25maWctPnVzZXJQZWFrQml0cmF0ZSA9IChVSU5UKS0xOwogICAgIGNvbmZpZy0+dXNlckJhbmR3aWR0aCAgID0gaEFhY0NvbmZpZy0+YmFuZFdpZHRoOwogICAgIGNvbmZpZy0+dXNlclRucyAgICAgICAgID0gaEFhY0NvbmZpZy0+dXNlVG5zOwogICAgIGNvbmZpZy0+dXNlclBucyAgICAgICAgID0gaEFhY0NvbmZpZy0+dXNlUG5zOwpAQCAtNzkyLDEyICs3NjMsMTUgQEAKICAgICBoQWFjQ29uZmlnLT5zeW50YXhGbGFncyAgICAgPSAwOwogICAgIGhBYWNDb25maWctPmVwQ29uZmlnICAgICAgICA9IC0xOwogCisgICAgaWYgKGNvbmZpZy0+dXNlclRwVHlwZT09VFRfTVA0X0xBVE1fTUNQMSB8fCBjb25maWctPnVzZXJUcFR5cGU9PVRUX01QNF9MQVRNX01DUDAgfHwgY29uZmlnLT51c2VyVHBUeXBlPT1UVF9NUDRfTE9BUykgeworICAgICAgaEFhY0NvbmZpZy0+YXVkaW9NdXhWZXJzaW9uID0gY29uZmlnLT51c2VyVHBBbXh2OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGhBYWNDb25maWctPmF1ZGlvTXV4VmVyc2lvbiA9IC0xOworICAgIH0KKwogICAgIC8qIEFkYXB0IGludGVybmFsIEFPVCB3aGVuIG5lY2Vzc2FyeS4gKi8KICAgICBzd2l0Y2ggKCBoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGUgKSB7Ci0gICAgICBjYXNlIEFPVF9NUDJfQUFDX0xDOgotICAgICAgY2FzZSBBT1RfTVAyX1NCUjoKLSAgICAgIGNhc2UgQU9UX01QMl9QUzoKLSAgICAgICAgICBoQWFjQ29uZmlnLT51c2VQbnMgPSAwOwogICAgICAgY2FzZSBBT1RfQUFDX0xDOgogICAgICAgY2FzZSBBT1RfU0JSOgogICAgICAgY2FzZSBBT1RfUFM6CkBAIC04MzksMTEgKzgxMywxNiBAQAogICAgIHN3aXRjaCAoIGhBYWNDb25maWctPmF1ZGlvT2JqZWN0VHlwZSApIHsKICAgICAgIGNhc2UgQU9UX0VSX0FBQ19MRDoKICAgICAgIGNhc2UgQU9UX0VSX0FBQ19FTEQ6Ci0gICAgICAgIGlmIChjb25maWctPnVzZXJCaXRyYXRlTW9kZT09OCkgewotICAgICAgICAgIGhBYWNDb25maWctPmJpdHJhdGVNb2RlID0gMDsKLSAgICAgICAgfQogICAgICAgICBpZiAoY29uZmlnLT51c2VyQml0cmF0ZU1vZGU9PTApIHsKLSAgICAgICAgICBoQWFjQ29uZmlnLT5iaXRyZXNlcnZvaXIgPSAxMDAqY29uZmlnLT5uQ2hhbm5lbHM7IC8qIGRlZmF1bHQsIHJlZHVjZWQgYml0cmVzZXJ2b2lyICovCisgICAgICAgICAgLyogYml0cmVzZXJ2b2lyICA9IChtYXhCaXRSZXMtbWluQml0UmVzKS8obWF4Qml0UmF0ZS1taW5CaXRyYXRlKSooYml0UmF0ZS1taW5CaXRyYXRlKSttaW5CaXRSZXM7ICovCisgICAgICAgICAgaWYgKCBpc0xvd0RlbGF5KGhBYWNDb25maWctPmF1ZGlvT2JqZWN0VHlwZSkgKSB7CisgICAgICAgICAgICBJTlQgYml0cmVzZXJ2b2lyOworICAgICAgICAgICAgSU5UIGJyUGVyQ2hhbm5lbCA9IGhBYWNDb25maWctPmJpdFJhdGUvaEFhY0NvbmZpZy0+bkNoYW5uZWxzOworICAgICAgICAgICAgYnJQZXJDaGFubmVsICAgICA9IGZNaW4oQklUUkFURV9NQVhfTEQsIGZNYXgoQklUUkFURV9NSU5fTEQsIGJyUGVyQ2hhbm5lbCkpOworICAgICAgICAgICAgRklYUF9EQkwgc2xvcGUgICA9IGZEaXZOb3JtKChiclBlckNoYW5uZWwtQklUUkFURV9NSU5fTEQpLCBCSVRSQVRFX01BWF9MRC1CSVRSQVRFX01JTl9MRCk7IC8qIGNhbGMgc2xvcGUgZm9yIGludGVycG9sYXRpb24gKi8KKyAgICAgICAgICAgIGJpdHJlc2Vydm9pciAgICAgPSBmTXVsdEkoc2xvcGUsIChJTlQpKEJJVFJFU19NQVhfTEQtQklUUkVTX01JTl9MRCkpICsgQklUUkVTX01JTl9MRDsgLyogaW50ZXJwb2xhdGUgKi8KKyAgICAgICAgICAgIGhBYWNDb25maWctPmJpdHJlc2Vydm9pciA9IGJpdHJlc2Vydm9pciAmIH43OyAvKiBhbGlnbiB0byBieXRlcyAqLworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoaEFhY0NvbmZpZy0+Yml0cmF0ZU1vZGUhPTApIHsKICAgICAgICAgICByZXR1cm4gQUFDRU5DX0lOVkFMSURfQ09ORklHOwpAQCAtODg0LDYgKzg2MywxOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKChoQWFjQ29uZmlnLT5iaXRyYXRlTW9kZSA+PSAwKSAmJiAoaEFhY0NvbmZpZy0+Yml0cmF0ZU1vZGUgPD0gNSkpIHsKKyAgICAgIGlmICgoSU5UKWNvbmZpZy0+dXNlclBlYWtCaXRyYXRlICE9IC0xKSB7CisgICAgICAgIGhBYWNDb25maWctPm1heEJpdHNQZXJGcmFtZSA9IChGREthYWNFbmNfQ2FsY0JpdHNQZXJGcmFtZShmTWF4KGhBYWNDb25maWctPmJpdFJhdGUsIChJTlQpY29uZmlnLT51c2VyUGVha0JpdHJhdGUpLCBoQWFjQ29uZmlnLT5mcmFtZWxlbmd0aCwgaEFhY0NvbmZpZy0+c2FtcGxlUmF0ZSkgKyA3KSZ+NzsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBoQWFjQ29uZmlnLT5tYXhCaXRzUGVyRnJhbWUgPSAtMTsKKyAgICAgIH0KKyAgICAgIGlmIChoQWFjQ29uZmlnLT5hdWRpb011eFZlcnNpb249PTIpIHsKKyAgICAgICAgaEFhY0NvbmZpZy0+bWluQml0c1BlckZyYW1lID0gZk1pbigzMio4LCBGREthYWNFbmNfQ2FsY0JpdHNQZXJGcmFtZShoQWFjQ29uZmlnLT5iaXRSYXRlLCBoQWFjQ29uZmlnLT5mcmFtZWxlbmd0aCwgaEFhY0NvbmZpZy0+c2FtcGxlUmF0ZSkpJn43OworICAgICAgfQorICAgIH0KKwogICAgIC8qIEluaXRpYWxpemUgU0JSIHBhcmFtZXRlcnMgKi8KICAgICBpZiAoIChoQWFjQ29uZmlnLT5hdWRpb09iamVjdFR5cGU9PUFPVF9FUl9BQUNfRUxEKQogICAgICAgJiYgKGNvbmZpZy0+dXNlclNickVuYWJsZWQgPT0gKFVDSEFSKS0xKSAmJiAoY29uZmlnLT51c2VyU2JyUmF0aW89PTApICkKQEAgLTkxNCw3ICs5MDUsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgIC8qIFNCUiByYXRpbyBoYXMgYmVlbiBzZXQgYnkgdGhlIHVzZXIsIHNvIHVzZSBpdC4gKi8KLSAgICAgIGhBYWNDb25maWctPnNiclJhdGlvID0gY29uZmlnLT51c2VyU2JyUmF0aW87CisgICAgICBoQWFjQ29uZmlnLT5zYnJSYXRpbyA9IGlzU2JyQWN0aXZlKGhBYWNDb25maWcpID8gY29uZmlnLT51c2VyU2JyUmF0aW8gOiAwOwogICAgIH0KIAogICAgIHsKQEAgLTExMzksNyArMTEzMCw3IEBACiAgICAgICAgICAgICAgICAgaEFhY0NvbmZpZyk7CiAKICAgICAgICAgLyogY3JlYXRlIGZsYWdzIGZvciB0cmFuc3BvcnQgZW5jb2RlciAqLwotICAgICAgICBpZiAoY29uZmlnLT51c2VyVHBBbXh2ID09IDEpIHsKKyAgICAgICAgaWYgKGNvbmZpZy0+dXNlclRwQW14diAhPSAwKSB7CiAgICAgICAgICAgICBmbGFncyB8PSBUUF9GTEFHX0xBVE1fQU1WOwogICAgICAgICB9CiAgICAgICAgIC8qIENsZWFyIG91dHB1dCBidWZmZXIgKi8KQEAgLTE1NjksNyArMTU2MCw3IEBACiAgICAgICAgICAgJiYgKChoQWFjRW5jb2Rlci0+ZXh0UGFyYW0udXNlckNoYW5uZWxNb2RlPT1NT0RFXzFfMl8yKXx8KGhBYWNFbmNvZGVyLT5leHRQYXJhbS51c2VyQ2hhbm5lbE1vZGU9PU1PREVfMV8yXzJfMSkpICkKICAgICAgICAgewogICAgICAgICAgIC8qIFNldCBtYXRyaXggbWl4ZG93biBjb2VmZmljaWVudC4gKi8KLSAgICAgICAgICBVSU5UIHBjZVZhbHVlID0gKFVJTlQpKCAoMTw8MykgfCAoKG1hdHJpeF9taXhkb3duX2lkeCYweDMpPDwxKSB8IDEgKTsKKyAgICAgICAgICBVSU5UIHBjZVZhbHVlID0gKFVJTlQpKCAoMDw8MykgfCAoKG1hdHJpeF9taXhkb3duX2lkeCYweDMpPDwxKSB8IDEgKTsKICAgICAgICAgICBpZiAoaEFhY0VuY29kZXItPmV4dFBhcmFtLnVzZXJQY2VBZGRpdGlvbnMgIT0gcGNlVmFsdWUpIHsKICAgICAgICAgICAgIGhBYWNFbmNvZGVyLT5leHRQYXJhbS51c2VyUGNlQWRkaXRpb25zID0gcGNlVmFsdWU7CiAgICAgICAgICAgICBoQWFjRW5jb2Rlci0+SW5pdEZsYWdzIHw9IEFBQ0VOQ19JTklUX1RSQU5TUE9SVDsKQEAgLTE3ODUsMTkgKzE3NzYsMTYgQEAKICAgICAgICAgICAgIC8qIGNoZWNrIGlmIEFPVCBtYXRjaGVzIHRoZSBhbGxvY2F0ZWQgbW9kdWxlcyAqLwogICAgICAgICAgICAgc3dpdGNoICggdmFsdWUgKSB7CiAgICAgICAgICAgICAgIGNhc2UgQU9UX1BTOgotICAgICAgICAgICAgICBjYXNlIEFPVF9NUDJfUFM6CiAgICAgICAgICAgICAgICAgaWYgKCEoaEFhY0VuY29kZXItPmVuY29kZXJfbW9kaXMgJiAoRU5DX01PREVfRkxBR19QUykpKSB7CiAgICAgICAgICAgICAgICAgICBlcnIgPSBBQUNFTkNfSU5WQUxJRF9DT05GSUc7CiAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBjYXNlIEFPVF9TQlI6Ci0gICAgICAgICAgICAgIGNhc2UgQU9UX01QMl9TQlI6CiAgICAgICAgICAgICAgICAgaWYgKCEoaEFhY0VuY29kZXItPmVuY29kZXJfbW9kaXMgJiAoRU5DX01PREVfRkxBR19TQlIpKSkgewogICAgICAgICAgICAgICAgICAgZXJyID0gQUFDRU5DX0lOVkFMSURfQ09ORklHOwogICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgY2FzZSBBT1RfQUFDX0xDOgotICAgICAgICAgICAgICBjYXNlIEFPVF9NUDJfQUFDX0xDOgogICAgICAgICAgICAgICBjYXNlIEFPVF9FUl9BQUNfTEQ6CiAgICAgICAgICAgICAgIGNhc2UgQU9UX0VSX0FBQ19FTEQ6CiAgICAgICAgICAgICAgICAgaWYgKCEoaEFhY0VuY29kZXItPmVuY29kZXJfbW9kaXMgJiAoRU5DX01PREVfRkxBR19BQUMpKSkgewpAQCAtMTgyMyw2ICsxODExLDcgQEAKICAgICAgICAgaWYgKHNldHRpbmdzLT51c2VyQml0cmF0ZU1vZGUgIT0gdmFsdWUpIHsKICAgICAgICAgICAgIHN3aXRjaCAoIHZhbHVlICkgewogICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgIGNhc2UgMTogY2FzZSAyOiBjYXNlIDM6IGNhc2UgNDogY2FzZSA1OgogICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgc2V0dGluZ3MtPnVzZXJCaXRyYXRlTW9kZSA9IHZhbHVlOwogICAgICAgICAgICAgICAgIGhBYWNFbmNvZGVyLT5Jbml0RmxhZ3MgfD0gQUFDRU5DX0lOSVRfQ09ORklHIHwgQUFDRU5DX0lOSVRfVFJBTlNQT1JUOwpAQCAtMTk3Myw2ICsxOTYyLDE2IEBACiAgICAgICAgICAgICBoQWFjRW5jb2Rlci0+SW5pdEZsYWdzIHw9IEFBQ0VOQ19JTklUX1RSQU5TUE9SVDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFBQ0VOQ19BVURJT01VWFZFUjoKKyAgICAgICAgaWYgKHNldHRpbmdzLT51c2VyVHBBbXh2ICE9IHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoICEoKHZhbHVlPT0wKSB8fCAodmFsdWU9PTEpIHx8ICh2YWx1ZT09MikpICkgeworICAgICAgICAgICAgICAgIGVyciA9IEFBQ0VOQ19JTlZBTElEX0NPTkZJRzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldHRpbmdzLT51c2VyVHBBbXh2ID0gdmFsdWU7CisgICAgICAgICAgICBoQWFjRW5jb2Rlci0+SW5pdEZsYWdzIHw9IEFBQ0VOQ19JTklUX1RSQU5TUE9SVDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICBjYXNlIEFBQ0VOQ19UUFNVQkZSQU1FUzoKICAgICAgICAgaWYgKHNldHRpbmdzLT51c2VyVHBOc3ViRnJhbWVzICE9IHZhbHVlKSB7CiAgICAgICAgICAgICBpZiAoISAoICh2YWx1ZT49MSkgJiYgKHZhbHVlPD00KSApICkgewpAQCAtMTk5OCw3ICsxOTk3LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBQUNFTkNfTUVUQURBVEFfTU9ERToKICAgICAgICAgaWYgKChVSU5UKXNldHRpbmdzLT51c2VyTWV0YURhdGFNb2RlICE9IHZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAoICEoKHZhbHVlPj0wKSAmJiAodmFsdWU8PTIpKSApIHsKKyAgICAgICAgICAgIGlmICggISgoKElOVCl2YWx1ZT49MCkgJiYgKChJTlQpdmFsdWU8PTIpKSApIHsKICAgICAgICAgICAgICAgICBlcnIgPSBBQUNFTkNfSU5WQUxJRF9DT05GSUc7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMDA2LDYgKzIwMDUsMTIgQEAKICAgICAgICAgICAgIGhBYWNFbmNvZGVyLT5Jbml0RmxhZ3MgfD0gQUFDRU5DX0lOSVRfQ09ORklHOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUFDRU5DX1BFQUtfQklUUkFURToKKyAgICAgICAgaWYgKHNldHRpbmdzLT51c2VyUGVha0JpdHJhdGUgIT0gdmFsdWUpIHsKKyAgICAgICAgICAgIHNldHRpbmdzLT51c2VyUGVha0JpdHJhdGUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGhBYWNFbmNvZGVyLT5Jbml0RmxhZ3MgfD0gQUFDRU5DX0lOSVRfQ09ORklHIHwgQUFDRU5DX0lOSVRfVFJBTlNQT1JUOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICBlcnIgPSBBQUNFTkNfVU5TVVBQT1JURURfUEFSQU1FVEVSOwogICAgICAgYnJlYWs7CkBAIC0yMDc2LDYgKzIwODEsOSBAQAogICAgIGNhc2UgQUFDRU5DX0hFQURFUl9QRVJJT0Q6CiAgICAgICAgIHZhbHVlID0gKFVJTlQpaEFhY0VuY29kZXItPmNvZGVyQ29uZmlnLmhlYWRlclBlcmlvZDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBQUNFTkNfQVVESU9NVVhWRVI6CisgICAgICAgIHZhbHVlID0gKFVJTlQpaEFhY0VuY29kZXItPmFhY0NvbmZpZy5hdWRpb011eFZlcnNpb247CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUFDRU5DX1RQU1VCRlJBTUVTOgogICAgICAgICB2YWx1ZSA9IChVSU5UKXNldHRpbmdzLT51c2VyVHBOc3ViRnJhbWVzOwogICAgICAgICBicmVhazsKQEAgLTIwODgsNiArMjA5NiwxMiBAQAogICAgIGNhc2UgQUFDRU5DX01FVEFEQVRBX01PREU6CiAgICAgICAgIHZhbHVlID0gKGhBYWNFbmNvZGVyLT5tZXRhRGF0YUFsbG93ZWQ9PTApID8gMCA6IChVSU5UKXNldHRpbmdzLT51c2VyTWV0YURhdGFNb2RlOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIEFBQ0VOQ19QRUFLX0JJVFJBVEU6CisgICAgICAgIHZhbHVlID0gKFVJTlQpLTE7IC8qIHBlYWsgYml0cmF0ZSBwYXJhbWV0ZXIgaXMgbWVhbmluZ2xlc3MgKi8KKyAgICAgICAgaWYgKCAoKElOVCloQWFjRW5jb2Rlci0+ZXh0UGFyYW0udXNlclBlYWtCaXRyYXRlIT0tMSkgKSB7CisgICAgICAgICAgdmFsdWUgPSAoVUlOVCkoZk1heCgoSU5UKWhBYWNFbmNvZGVyLT5leHRQYXJhbS51c2VyUGVha0JpdHJhdGUsIGhBYWNFbmNvZGVyLT5hYWNDb25maWcuYml0UmF0ZSkpOyAvKiBwZWFrIGJpdHJhdGUgcGFyYW1ldGVyIGlzIGluIHVzZSAqLworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAvL2VyciA9IE1QU19JTlZBTElEX1BBUkFNRVRFUjsKICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfdG5zLmNwcCBiL2xpYkFBQ2VuYy9zcmMvYWFjZW5jX3Rucy5jcHAKaW5kZXggODVhZWE2NS4uOWEwN2U4ZiAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfdG5zLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL2FhY2VuY190bnMuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05NSwxMyArOTUsNyBAQAogI2luY2x1ZGUgImFhY0VuY19yb20uaCIKICNpbmNsdWRlICJhYWNlbmNfdG5zLmgiCiAKLWVudW0gewotICAgIEhJRklMVCA9IDAsIC8qIGluZGV4IG9mIGhpZ2hlciBmaWx0ZXIgKi8KLSAgICBMT0ZJTFQgPSAxIC8qIGluZGV4IG9mIGxvd2VyIGZpbHRlciAqLwotfTsKLQotCi0jZGVmaW5lIEZJTFRFUl9ESVJFQ1RJT04gMAorI2RlZmluZSBGSUxURVJfRElSRUNUSU9OIDAgLyogMCA9IHVwLCAxID0gZG93biAqLwogCiBzdGF0aWMgY29uc3QgRklYUF9EQkwgYWNmV2luZG93TG9uZ1sxMiszKzFdID0gewogICAweDdmZmZmZmZmLDB4N2ZiODAwMDAsMHg3ZWUwMDAwMCwweDdkNzgwMDAwLDB4N2I4MDAwMDAsMHg3OGY4MDAwMCwweDc1ZTAwMDAwLDB4NzIzODAwMDAsCkBAIC0xMTIsMjAgKzEwNiw2IEBACiAgIDB4N2ZmZmZmZmYsMHg3ZTAwMDAwMCwweDc4MDAwMDAwLDB4NmUwMDAwMDAsMHg2MDAwMDAwMCwweDRlMDAwMDAwLDB4MzgwMDAwMDAsMHgxZTAwMDAwMAogfTsKIAotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIElOVCAgICAgIGZpbHRlckVuYWJsZWRbTUFYX05VTV9PRl9GSUxURVJTXTsKLSAgSU5UICAgICAgdGhyZXNoT25bTUFYX05VTV9PRl9GSUxURVJTXTsgICAgICAgICAgICAgICAgLyogbWluLiBwcmVkaWN0aW9uIGdhaW4gZm9yIHVzaW5nIHRucyBUQUJVTCovCi0gIElOVCAgICAgIGZpbHRlclN0YXJ0RnJlcVtNQVhfTlVNX09GX0ZJTFRFUlNdOyAgICAgICAgIC8qIGxvd2VzdCBmcmVxIGZvciBscGMgVEFCVUwqLwotICBJTlQgICAgICB0bnNMaW1pdE9yZGVyW01BWF9OVU1fT0ZfRklMVEVSU107ICAgICAgICAgICAvKiBMaW1pdCBmb3IgVE5TIG9yZGVyIFRBQlVMKi8KLSAgSU5UICAgICAgdG5zRmlsdGVyRGlyZWN0aW9uW01BWF9OVU1fT0ZfRklMVEVSU107ICAgICAgLyogRmlsdGVyaW5nIGRpcmVjdGlvbiwgMD11cCwgMT1kb3duIFRBQlVMICovCi0gIElOVCAgICAgIGFjZlNwbGl0W01BWF9OVU1fT0ZfRklMVEVSU107Ci0gIEZJWFBfREJMIHRuc1RpbWVSZXNvbHV0aW9uW01BWF9OVU1fT0ZfRklMVEVSU107ICAgICAgIC8qIFROUyBtYXguIHRpbWUgcmVzb2x1dGlvbiBUQUJVTC4gU2hvdWxkIGJlIGZyYWN0IGJ1dCBNU1ZDIHdvbid0IGNvbXBpbGUgdGhlbiAqLwotICBJTlQgICAgICBzZXBlcmF0ZUZpbHRlcnNBbGxvd2VkOwotCi19IFROU19QQVJBTUVURVJfVEFCVUxBVEVEOwotCi0KIHR5cGVkZWYgc3RydWN0ewogICBJTlQgICAgICAgICAgICAgICAgICAgICAgYml0UmF0ZUZyb21bMl07ICAvKiBub25lU2JyPTAsIHVzZVNicj0xICovCiAgIElOVCAgICAgICAgICAgICAgICAgICAgICBiaXRSYXRlVG9bMl07ICAgIC8qIG5vbmVTYnI9MCwgdXNlU2JyPTEgKi8KQEAgLTM3Myw2ICszNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBjaGFubmVscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYmxvY2tUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBncmFudWxlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBpc0xvd0RlbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBsZFNiclByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVE5TX0NPTkZJRyAqdEMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNZX0NPTkZJR1VSQVRJT04gKnBDLApAQCAtMzg1LDYgKzM2Niw4IEBACiAgIGlmIChjaGFubmVscyA8PSAwKQogICAgIHJldHVybiAoQUFDX0VOQ09ERVJfRVJST1IpMTsKIAorICB0Qy0+aXNMb3dEZWxheSA9IGlzTG93RGVsYXk7CisKICAgLyogaW5pdGlhbGl6ZSBUTlMgZmlsdGVyIGZsYWcsIG9yZGVyLCBhbmQgY29lZmZpY2llbnQgcmVzb2x1dGlvbiAoaW4gYml0cyBwZXIgY29lZmYpICovCiAgIHRDLT50bnNBY3RpdmUgICAgICA9IChhY3RpdmUpID8gVFJVRSA6IEZBTFNFOwogICB0Qy0+bWF4T3JkZXIgICAgICAgPSAoYmxvY2tUeXBlID09IFNIT1JUX1dJTkRPVykgPyA1IDogMTI7ICAvKiBtYXhpbXVtOiA3LCAyMCAqLwpAQCAtNDUwLDI3ICs0MzMsMTQgQEAKICAgICAgICAgY29uc3QgVE5TX1BBUkFNRVRFUl9UQUJVTEFURUQqIHBDZmcgPSBGREthYWNFbmNfR2V0VG5zUGFyYW0oYml0UmF0ZSwgY2hhbm5lbHMsIGxkU2JyUHJlc2VudCk7CiAKICAgICAgICAgaWYgKCBwQ2ZnICE9IE5VTEwgKSB7CisKKyAgICAgICAgICBGREttZW1jcHkoJih0Qy0+Y29uZlRhYiksIHBDZmcsIHNpemVvZih0Qy0+Y29uZlRhYikpOworCiAgICAgICAgICAgdEMtPmxwY1N0YXJ0QmFuZFtISUZJTFRdICAgICAgICAgPSBGREthYWNFbmNfRnJlcVRvQmFuZFdpdGhSb3VuZGluZyhwQ2ZnLT5maWx0ZXJTdGFydEZyZXFbSElGSUxUXSwgc2FtcGxlUmF0ZSwgcEMtPnNmYkNudCwgcEMtPnNmYk9mZnNldCk7CiAgICAgICAgICAgdEMtPmxwY1N0YXJ0TGluZVtISUZJTFRdICAgICAgICAgPSBwQy0+c2ZiT2Zmc2V0W3RDLT5scGNTdGFydEJhbmRbSElGSUxUXV07CiAgICAgICAgICAgdEMtPmxwY1N0YXJ0QmFuZFtMT0ZJTFRdICAgICAgICAgPSBGREthYWNFbmNfRnJlcVRvQmFuZFdpdGhSb3VuZGluZyhwQ2ZnLT5maWx0ZXJTdGFydEZyZXFbTE9GSUxUXSwgc2FtcGxlUmF0ZSwgcEMtPnNmYkNudCwgcEMtPnNmYk9mZnNldCk7CiAgICAgICAgICAgdEMtPmxwY1N0YXJ0TGluZVtMT0ZJTFRdICAgICAgICAgPSBwQy0+c2ZiT2Zmc2V0W3RDLT5scGNTdGFydEJhbmRbTE9GSUxUXV07CiAKLSAgICAgICAgICB0Qy0+Y29uZlRhYi50aHJlc2hPbltISUZJTFRdID0gcENmZy0+dGhyZXNoT25bSElGSUxUXTsKLSAgICAgICAgICB0Qy0+Y29uZlRhYi50aHJlc2hPbltMT0ZJTFRdID0gcENmZy0+dGhyZXNoT25bTE9GSUxUXTsKLQotICAgICAgICAgIHRDLT5jb25mVGFiLnRuc0xpbWl0T3JkZXJbSElGSUxUXSA9IHBDZmctPnRuc0xpbWl0T3JkZXJbSElGSUxUXTsKLSAgICAgICAgICB0Qy0+Y29uZlRhYi50bnNMaW1pdE9yZGVyW0xPRklMVF0gPSBwQ2ZnLT50bnNMaW1pdE9yZGVyW0xPRklMVF07Ci0KLSAgICAgICAgICB0Qy0+Y29uZlRhYi50bnNGaWx0ZXJEaXJlY3Rpb25bSElGSUxUXSA9IHBDZmctPnRuc0ZpbHRlckRpcmVjdGlvbltISUZJTFRdOwotICAgICAgICAgIHRDLT5jb25mVGFiLnRuc0ZpbHRlckRpcmVjdGlvbltMT0ZJTFRdID0gcENmZy0+dG5zRmlsdGVyRGlyZWN0aW9uW0xPRklMVF07Ci0KLSAgICAgICAgICB0Qy0+Y29uZlRhYi5hY2ZTcGxpdFtISUZJTFRdID0gcENmZy0+YWNmU3BsaXRbSElGSUxUXTsKLSAgICAgICAgICB0Qy0+Y29uZlRhYi5hY2ZTcGxpdFtMT0ZJTFRdID0gcENmZy0+YWNmU3BsaXRbTE9GSUxUXTsKLQotICAgICAgICAgIHRDLT5jb25mVGFiLmZpbHRlckVuYWJsZWRbSElGSUxUXSA9IHBDZmctPmZpbHRlckVuYWJsZWRbSElGSUxUXTsKLSAgICAgICAgICB0Qy0+Y29uZlRhYi5maWx0ZXJFbmFibGVkW0xPRklMVF0gPSBwQ2ZnLT5maWx0ZXJFbmFibGVkW0xPRklMVF07Ci0gICAgICAgICAgdEMtPmNvbmZUYWIuc2VwZXJhdGVGaWx0ZXJzQWxsb3dlZCA9IHBDZmctPnNlcGVyYXRlRmlsdGVyc0FsbG93ZWQ7Ci0KICAgICAgICAgICBGREthYWNFbmNfQ2FsY0dhdXNzV2luZG93KHRDLT5hY2ZXaW5kb3dbSElGSUxUXSwgdEMtPm1heE9yZGVyKzEsIHNhbXBsZVJhdGUsIGdyYW51bGVMZW5ndGgsIHBDZmctPnRuc1RpbWVSZXNvbHV0aW9uW0hJRklMVF0sIFROU19USU1FUkVTX1NDQUxFKTsKICAgICAgICAgICBGREthYWNFbmNfQ2FsY0dhdXNzV2luZG93KHRDLT5hY2ZXaW5kb3dbTE9GSUxUXSwgdEMtPm1heE9yZGVyKzEsIHNhbXBsZVJhdGUsIGdyYW51bGVMZW5ndGgsIHBDZmctPnRuc1RpbWVSZXNvbHV0aW9uW0xPRklMVF0sIFROU19USU1FUkVTX1NDQUxFKTsKICAgICAgICAgfQpAQCAtNjE0LDYgKzU4NCw3IEBACiAKIHN0YXRpYyB2b2lkIEZES2FhY0VuY19NZXJnZWRBdXRvQ29ycmVsYXRpb24oCiAgICAgICAgIGNvbnN0IEZJWFBfREJMICAgICAgICAgICAqc3BlY3RydW0sCisgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgICAgaXNMb3dEZWxheSwKICAgICAgICAgY29uc3QgRklYUF9EQkwgICAgICAgICAgICBhY2ZXaW5kb3dbTUFYX05VTV9PRl9GSUxURVJTXVtUTlNfTUFYX09SREVSKzMrMV0sCiAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgICAgbHBjU3RhcnRMaW5lW01BWF9OVU1fT0ZfRklMVEVSU10sCiAgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgICAgbHBjU3RvcExpbmUsCkBAIC02MzMsNiArNjA0LDggQEAKICAgICBGREttZW1jbGVhcigmX3J4eDFbMF0sIHNpemVvZihGSVhQX0RCTCkqKG1heE9yZGVyKzEpKTsKICAgICBGREttZW1jbGVhcigmX3J4eDJbMF0sIHNpemVvZihGSVhQX0RCTCkqKG1heE9yZGVyKzEpKTsKIAorICAgIGlkeDAgPSBpZHgxID0gaWR4MiA9IGlkeDMgPSBpZHg0ID0gMDsKKwogICAgIC8qIE1EQ1QgbGluZSBpbmRpY2VzIHNlcGFyYXRpbmcgdGhlIDFzdCwgMm5kLCAzcmQsIGFuZCA0dGggYW5hbHlzaXMgcXVhcnRlcnMgKi8KICAgICBpZiAoIChhY2ZTcGxpdFtMT0ZJTFRdPT0tMSkgfHwgKGFjZlNwbGl0W0hJRklMVF09PS0xKSApIHsKICAgICAgIC8qIGF1dG9jb3JyZWxhdGlvbiBmdW5jdGlvbiBmb3IgMXN0LCAybmQsIDNyZCwgYW5kIDR0aCBxdWFydGVyIG9mIHRoZSBzcGVjdHJ1bSAqLwpAQCAtNjc2LDE3ICs2NDksMjcgQEAKICAgICAvKiBjb21wdXRlIGVuZXJneSBub3JtYWxpemF0aW9uIGZhY3RvcnMsIGkuIGUuIDEvZW5lcmd5IChzYXZlcyBzb21lIGRpdmlzaW9ucykgKi8KICAgICBpZiAocnh4MV8wICE9IEZMMkZYQ09OU1RfREJMKDAuZikpCiAgICAgewotICAgICAgICBJTlQgc2NfZmFjMSA9IC0xOwotICAgICAgICBGSVhQX0RCTCBmYWMxID0gRkRLYWFjRW5jX0F1dG9Db3JyTm9ybUZhYyhyeHgxXzAsICgoLTIqc2MxKStuc2MxKSwgJnNjX2ZhYzEpOwotICAgICAgICBfcnh4MVswXSA9IHNjYWxlVmFsdWUoZk11bHQocnh4MV8wLGZhYzEpLHNjX2ZhYzEpOworICAgICAgSU5UIHNjX2ZhYzEgPSAtMTsKKyAgICAgIEZJWFBfREJMIGZhYzEgPSBGREthYWNFbmNfQXV0b0NvcnJOb3JtRmFjKHJ4eDFfMCwgKCgtMipzYzEpK25zYzEpLCAmc2NfZmFjMSk7CisgICAgICBfcnh4MVswXSA9IHNjYWxlVmFsdWUoZk11bHQocnh4MV8wLGZhYzEpLHNjX2ZhYzEpOwogCisgICAgICBpZiAoaXNMb3dEZWxheSkKKyAgICAgIHsKICAgICAgICAgZm9yIChsYWcgPSAxOyBsYWcgPD0gbWF4T3JkZXI7IGxhZysrKSB7CiAgICAgICAgICAgLyogY29tcHV0ZSBlbmVyZ3ktbm9ybWFsaXplZCBhbmQgd2luZG93ZWQgYXV0b2NvcnJlbGF0aW9uIHZhbHVlcyBhdCB0aGlzIGxhZyAqLworICAgICAgICAgIEZJWFBfREJMIHgxID0gRkRLYWFjRW5jX0NhbGNBdXRvQ29yclZhbHVlKHBTcGVjdHJ1bSwgaWR4MCwgaWR4MSwgbGFnLCBuc2MxKTsKKyAgICAgICAgICBfcnh4MVtsYWddID0gZk11bHQoc2NhbGVWYWx1ZShmTXVsdCh4MSxmYWMxKSxzY19mYWMxKSwgYWNmV2luZG93W0xPRklMVF1bbGFnXSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgZm9yIChsYWcgPSAxOyBsYWcgPD0gbWF4T3JkZXI7IGxhZysrKSB7CiAgICAgICAgICAgaWYgKCgzICogbGFnKSA8PSBtYXhPcmRlciArIDMpIHsKICAgICAgICAgICAgICAgRklYUF9EQkwgeDEgPSBGREthYWNFbmNfQ2FsY0F1dG9Db3JyVmFsdWUocFNwZWN0cnVtLCBpZHgwLCBpZHgxLCBsYWcsIG5zYzEpOwogICAgICAgICAgICAgICBfcnh4MVtsYWddID0gZk11bHQoc2NhbGVWYWx1ZShmTXVsdCh4MSxmYWMxKSxzY19mYWMxKSwgYWNmV2luZG93W0xPRklMVF1bMypsYWddKTsKICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgIH0KICAgICB9CiAKICAgICAvKiBhdXRvIGNvcnIgb3ZlciB1cHBlciAzLzQgb2Ygc3BlY3RydW0gKi8KQEAgLTc2Miw4ICs3NDUsMTIgQEAKICAgICA6ICZ0bnNEYXRhLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvOwogCiAgIHRuc0RhdGEtPmZpbHRlcnNNZXJnZWQgID0gRkFMU0U7Ci0gIHRzYmktPnRuc0FjdGl2ZSAgICAgICAgID0gRkFMU0U7Ci0gIHRzYmktPnByZWRpY3Rpb25HYWluICAgID0gMTAwMDsKKworICB0c2JpLT50bnNBY3RpdmVbSElGSUxUXSAgICAgICAgID0gRkFMU0U7CisgIHRzYmktPnByZWRpY3Rpb25HYWluW0hJRklMVF0gICAgPSAxMDAwOworICB0c2JpLT50bnNBY3RpdmVbTE9GSUxUXSAgICAgICAgID0gRkFMU0U7CisgIHRzYmktPnByZWRpY3Rpb25HYWluW0xPRklMVF0gICAgPSAxMDAwOworCiAgIHRuc0luZm8tPm51bU9mRmlsdGVyc1tzdWJCbG9ja051bWJlcl0gPSAwOwogICB0bnNJbmZvLT5jb2VmUmVzW3N1YkJsb2NrTnVtYmVyXSAgICAgID0gdEMtPmNvZWZSZXM7CiAgIGZvciAoaSA9IDA7IGkgPCB0Qy0+bWF4T3JkZXI7IGkrKykgewpAQCAtNzc5LDYgKzc2Niw3IEBACiAKICAgICBGREthYWNFbmNfTWVyZ2VkQXV0b0NvcnJlbGF0aW9uKAogICAgICAgICAgIHNwZWN0cnVtLAorICAgICAgICAgIHRDLT5pc0xvd0RlbGF5LAogICAgICAgICAgIHRDLT5hY2ZXaW5kb3csCiAgICAgICAgICAgdEMtPmxwY1N0YXJ0TGluZSwKICAgICAgICAgICB0Qy0+bHBjU3RvcExpbmUsCkBAIC03ODgsNyArNzc2LDcgQEAKICAgICAgICAgICByeHgyKTsKIAogICAgIC8qIGNvbXB1dGUgaGlnaGVyIFROUyBmaWx0ZXIgaW4gbGF0dGljZSAoUGFyQ29yKSBmb3JtIHdpdGggTGVSb3V4LUd1ZWd1ZW4gYWxnb3JpdGhtICovCi0gICAgdHNiaS0+cHJlZGljdGlvbkdhaW4gPSBGREthYWNFbmNfQXV0b1RvUGFyY29yKHJ4eDIsIHBhcmNvcl90bXAsIHRDLT5jb25mVGFiLnRuc0xpbWl0T3JkZXJbSElGSUxUXSk7CisgICAgdHNiaS0+cHJlZGljdGlvbkdhaW5bSElGSUxUXSA9IEZES2FhY0VuY19BdXRvVG9QYXJjb3Iocnh4MiwgcGFyY29yX3RtcCwgdEMtPmNvbmZUYWIudG5zTGltaXRPcmRlcltISUZJTFRdKTsKIAogICAgIC8qIG5vbi1saW5lYXIgcXVhbnRpemF0aW9uIG9mIFROUyBsYXR0aWNlIGNvZWZmaWNpZW50cyB3aXRoIGdpdmVuIHJlc29sdXRpb24gKi8KICAgICBGREthYWNFbmNfUGFyY29yMkluZGV4KApAQCAtODE1LDkgKzgwMyw5IEBACiAgICAgdG5zSW5mby0+bGVuZ3RoW3N1YkJsb2NrTnVtYmVyXVtISUZJTFRdID0gc2ZiQ250IC0gdEMtPmxwY1N0YXJ0QmFuZFtISUZJTFRdOwogCiAgICAgLyogZGlzYWJsZSBUTlMgaWYgcHJlZGljdGlvbkdhaW4gaXMgbGVzcyB0aGFuIDNkQiBvciBzdW1TcXJDb2VmIGlzIHRvbyBzbWFsbCAqLwotICAgIGlmICgodHNiaS0+cHJlZGljdGlvbkdhaW4gPiB0Qy0+Y29uZlRhYi50aHJlc2hPbltISUZJTFRdKSB8fCAoc3VtU3FyQ29lZiA+ICh0Qy0+Y29uZlRhYi50bnNMaW1pdE9yZGVyW0hJRklMVF0vMiArIDIpKSkKKyAgICBpZiAoKHRzYmktPnByZWRpY3Rpb25HYWluW0hJRklMVF0gPiB0Qy0+Y29uZlRhYi50aHJlc2hPbltISUZJTFRdKSB8fCAoc3VtU3FyQ29lZiA+ICh0Qy0+Y29uZlRhYi50bnNMaW1pdE9yZGVyW0hJRklMVF0vMiArIDIpKSkKICAgICB7Ci0gICAgICB0c2JpLT50bnNBY3RpdmUgPSBUUlVFOworICAgICAgdHNiaS0+dG5zQWN0aXZlW0hJRklMVF0gPSBUUlVFOwogICAgICAgdG5zSW5mby0+bnVtT2ZGaWx0ZXJzW3N1YkJsb2NrTnVtYmVyXSsrOwogCiAgICAgICAvKiBjb21wdXRlIHNlY29uZCBmaWx0ZXIgZm9yIGxvd2VyIHF1YXJ0ZXI7IG9ubHkgYWxsb3dlZCBmb3IgbG9uZyB3aW5kb3dzISAqLwpAQCAtODU3LDYgKzg0NSw3IEBACiAgICAgICAgICAgfHwgKCAoc3VtU3FyQ29lZiA+IDkpICAmJiAoc3VtU3FyQ29lZiA8IDIyICogdEMtPmNvbmZUYWIudG5zTGltaXRPcmRlcltMT0ZJTFRdKSApICkKICAgICAgICAgewogICAgICAgICAgIC8qIGNvbXBhcmUgbG93ZXIgdG8gdXBwZXIgZmlsdGVyOyBpZiB0aGV5IGFyZSB2ZXJ5IHNpbWlsYXIsIG1lcmdlIHRoZW0gKi8KKyAgICAgICAgICB0c2JpLT50bnNBY3RpdmVbTE9GSUxUXSA9IFRSVUU7CiAgICAgICAgICAgc3VtU3FyQ29lZiA9IDA7CiAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRDLT5jb25mVGFiLnRuc0xpbWl0T3JkZXJbTE9GSUxUXTsgaSsrKSB7CiAgICAgICAgICAgICBzdW1TcXJDb2VmICs9IEZES2Ficyh0bnNJbmZvLT5jb2VmW3N1YkJsb2NrTnVtYmVyXVtISUZJTFRdW2ldIC0gdG5zSW5mby0+Y29lZltzdWJCbG9ja051bWJlcl1bTE9GSUxUXVtpXSk7CkBAIC04ODQsNiArODczLDggQEAKICAgICAgICAgICAgIHRuc0luZm8tPm51bU9mRmlsdGVyc1tzdWJCbG9ja051bWJlcl0rKzsKICAgICAgICAgICB9CiAgICAgICAgIH0gLyogZmlsdGVyIGxvd2VyIHBhcnQgKi8KKyAgICAgICAgdHNiaS0+cHJlZGljdGlvbkdhaW5bTE9GSUxUXT1wcmVkR2FpbjsKKwogICAgICAgfSAvKiBzZWNvbmQgZmlsdGVyIGFsbG93ZWQgICovCiAgICAgfSAvKiBpZiBwcmVkaWN0aW9uR2FpbiA+IDE0MzcgLi4uICovCiAgIH0gLyogbWF4T3JkZXIgPiAwICYmIHRuc0FjdGl2ZSAqLwpAQCAtOTQ0LDcgKzkzNSw3IEBACiAgICAgICBJTlQgZG9TeW5jID0gMSwgYWJzRGlmZlN1bSA9IDA7CiAKICAgICAgIC8qIGlmIFROUyBpcyBhY3RpdmUgaW4gYXQgbGVhc3Qgb25lIGNoYW5uZWwsIGNoZWNrIGlmIFBhckNvciBjb2VmZmljaWVudHMgb2YgaGlnaGVyIGZpbHRlciBhcmUgc2ltaWxhciAqLwotICAgICAgaWYgKHBTYkluZm9EZXN0Vy0+dG5zQWN0aXZlIHx8IHBTYkluZm9TcmNXLT50bnNBY3RpdmUpIHsKKyAgICAgIGlmIChwU2JJbmZvRGVzdFctPnRuc0FjdGl2ZVtISUZJTFRdIHx8IHBTYkluZm9TcmNXLT50bnNBY3RpdmVbSElGSUxUXSkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdEMtPm1heE9yZGVyOyBpKyspIHsKICAgICAgICAgICBhYnNEaWZmID0gRkRLYWJzKHRuc0luZm9EZXN0LT5jb2VmW3ddW0hJRklMVF1baV0gLSB0bnNJbmZvU3JjLT5jb2VmW3ddW0hJRklMVF1baV0pOwogICAgICAgICAgIGFic0RpZmZTdW0gKz0gYWJzRGlmZjsKQEAgLTk1NywxMiArOTQ4LDEyIEBACiAKICAgICAgICAgaWYgKGRvU3luYykgewogICAgICAgICAgICAgLyogaWYgbm8gc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSB3YXMgZGV0ZWN0ZWQsIHN5bmNocm9uaXplIGNvZWZmaWNpZW50IHNldHMgKi8KLSAgICAgICAgICAgIGlmIChwU2JJbmZvU3JjVy0+dG5zQWN0aXZlKSB7CisgICAgICAgICAgICBpZiAocFNiSW5mb1NyY1ctPnRuc0FjdGl2ZVtISUZJTFRdKSB7CiAgICAgICAgICAgICAgIC8qIG5vIGRlc3QgZmlsdGVyLCBvciBtb3JlIGRlc3QgdGhhbiBzb3VyY2UgZmlsdGVyczogdXNlIG9uZSBkZXN0IGZpbHRlciAqLwotICAgICAgICAgICAgICBpZiAoKCFwU2JJbmZvRGVzdFctPnRuc0FjdGl2ZSkgfHwKLSAgICAgICAgICAgICAgICAgICgocFNiSW5mb0Rlc3RXLT50bnNBY3RpdmUpICYmICh0bnNJbmZvRGVzdC0+bnVtT2ZGaWx0ZXJzW3ddID4gdG5zSW5mb1NyYy0+bnVtT2ZGaWx0ZXJzW3ddKSkpCisgICAgICAgICAgICAgIGlmICgoIXBTYkluZm9EZXN0Vy0+dG5zQWN0aXZlW0hJRklMVF0pIHx8CisgICAgICAgICAgICAgICAgICAoKHBTYkluZm9EZXN0Vy0+dG5zQWN0aXZlW0hJRklMVF0pICYmICh0bnNJbmZvRGVzdC0+bnVtT2ZGaWx0ZXJzW3ddID4gdG5zSW5mb1NyYy0+bnVtT2ZGaWx0ZXJzW3ddKSkpCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwU2JJbmZvRGVzdFctPnRuc0FjdGl2ZSA9IHRuc0luZm9EZXN0LT5udW1PZkZpbHRlcnNbd10gPSAxOworICAgICAgICAgICAgICAgIHBTYkluZm9EZXN0Vy0+dG5zQWN0aXZlW0hJRklMVF0gPSB0bnNJbmZvRGVzdC0+bnVtT2ZGaWx0ZXJzW3ddID0gMTsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB0bnNEYXRhRGVzdC0+ZmlsdGVyc01lcmdlZCA9IHRuc0RhdGFTcmMtPmZpbHRlcnNNZXJnZWQ7CiAgICAgICAgICAgICAgIHRuc0luZm9EZXN0LT5vcmRlciAgICAgICBbd11bSElGSUxUXSA9IHRuc0luZm9TcmMtPm9yZGVyICAgICAgIFt3XVtISUZJTFRdOwpAQCAtOTc1LDcgKzk2Niw3IEBACiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcFNiSW5mb0Rlc3RXLT50bnNBY3RpdmUgPSB0bnNJbmZvRGVzdC0+bnVtT2ZGaWx0ZXJzW3ddID0gMDsKKyAgICAgICAgICAgICAgcFNiSW5mb0Rlc3RXLT50bnNBY3RpdmVbSElGSUxUXSA9IHRuc0luZm9EZXN0LT5udW1PZkZpbHRlcnNbd10gPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEwMTIsOCArMTAwMyw4IEBACiB7CiAgICAgSU5UIGksIHN0YXJ0TGluZSwgc3RvcExpbmU7CiAKLSAgICBpZiAoICggKGJsb2NrVHlwZSA9PSBTSE9SVF9XSU5ET1cpICYmICghdG5zRGF0YS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bc3ViQmxvY2tOdW1iZXJdLnRuc0FjdGl2ZSkgKQotICAgICAgfHwgKCAoYmxvY2tUeXBlICE9IFNIT1JUX1dJTkRPVykgJiYgKCF0bnNEYXRhLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZSkgKSApCisgICAgaWYgKCAoIChibG9ja1R5cGUgPT0gU0hPUlRfV0lORE9XKSAmJiAoIXRuc0RhdGEtPmRhdGFSYXcuU2hvcnQuc3ViQmxvY2tJbmZvW3N1YkJsb2NrTnVtYmVyXS50bnNBY3RpdmVbSElGSUxUXSkgKQorICAgICAgfHwgKCAoYmxvY2tUeXBlICE9IFNIT1JUX1dJTkRPVykgJiYgKCF0bnNEYXRhLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZVtISUZJTFRdKSApICkKICAgICB7CiAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0xMTI5LDggKzExMjAsOSBAQAogICBGSVhQX0RCTCAqUkVTVFJJQ1Qgd29ya0J1ZmZlciA9IHBhcmNvcldvcmtCdWZmZXI7CiAgIGNvbnN0IEZJWFBfREJMICBhdXRvQ29ycl8wID0gaW5wdXRbMF07CiAKKyAgRkRLbWVtY2xlYXIocmVmbENvZWZmLG51bU9mQ29lZmYqc2l6ZW9mKEZJWFBfREJMKSk7CisKICAgaWYoKEZJWFBfREJMKWlucHV0WzBdID09IEZMMkZYQ09OU1RfREJMKDAuMCkpIHsKLSAgICBGREttZW1jbGVhcihyZWZsQ29lZmYsbnVtT2ZDb2VmZipzaXplb2YoRklYUF9EQkwpKTsKICAgICByZXR1cm4ocHJlZGljdGlvbkdhaW4pOwogICB9CiAKZGlmZiAtLWdpdCBhL2xpYkFBQ2VuYy9zcmMvYWFjZW5jX3Rucy5oIGIvbGliQUFDZW5jL3NyYy9hYWNlbmNfdG5zLmgKaW5kZXggZjJiNzMxZi4uMjgyNGNiYyAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfdG5zLmgKKysrIGIvbGliQUFDZW5jL3NyYy9hYWNlbmNfdG5zLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTExNywyMSArMTE3LDI1IEBACiAKICNkZWZpbmUgTUFYX05VTV9PRl9GSUxURVJTIDIKIAorI2RlZmluZSBISUZJTFQgMCAgICAgICAgICAgLyogaW5kZXggb2YgaGlnaGVyIGZpbHRlciAgICovCisjZGVmaW5lIExPRklMVCAxICAgICAgICAgICAvKiBpbmRleCBvZiBsb3dlciBmaWx0ZXIgICAgKi8KIAotdHlwZWRlZiBzdHJ1Y3R7IC8qc3R1ZmYgdGhhdCBpcyB0YWJ1bGF0ZWQgZGVwZW5kZW50IG9uIGJpdHJhdGUgZXRjLiAqLwotICBJTlQgICAgIGZpbHRlckVuYWJsZWRbTUFYX05VTV9PRl9GSUxURVJTXTsKLSAgSU5UICAgICB0aHJlc2hPbltNQVhfTlVNX09GX0ZJTFRFUlNdOyAgICAgICAgICAgICAgICAvKiBtaW4uIHByZWRpY3Rpb24gZ2FpbiBmb3IgdXNpbmcgdG5zIFRBQlVMKi8KLSAgSU5UICAgICB0bnNMaW1pdE9yZGVyW01BWF9OVU1fT0ZfRklMVEVSU107ICAgICAgICAgICAvKiBMaW1pdCBmb3IgVE5TIG9yZGVyIFRBQlVMKi8KLSAgSU5UICAgICB0bnNGaWx0ZXJEaXJlY3Rpb25bTUFYX05VTV9PRl9GSUxURVJTXTsgICAgICAvKiBGaWx0ZXJpbmcgZGlyZWN0aW9uLCAwPXVwLCAxPWRvd24gVEFCVUwgKi8KLSAgSU5UICAgICBhY2ZTcGxpdFtNQVhfTlVNX09GX0ZJTFRFUlNdOwotICBJTlQgICAgIHNlcGVyYXRlRmlsdGVyc0FsbG93ZWQ7CiAKLX1UTlNfQ09ORklHX1RBQlVMQVRFRDsKLQordHlwZWRlZiBzdHJ1Y3R7IC8qIHN0dWZmIHRoYXQgaXMgdGFidWxhdGVkIGRlcGVuZGVudCBvbiBiaXRyYXRlIGV0Yy4gKi8KKyAgSU5UICAgICAgZmlsdGVyRW5hYmxlZFtNQVhfTlVNX09GX0ZJTFRFUlNdOworICBJTlQgICAgICB0aHJlc2hPbltNQVhfTlVNX09GX0ZJTFRFUlNdOyAgICAgICAgICAgICAgICAvKiBtaW4uIHByZWRpY3Rpb24gZ2FpbiBmb3IgdXNpbmcgdG5zIFRBQlVMKi8KKyAgSU5UICAgICAgZmlsdGVyU3RhcnRGcmVxW01BWF9OVU1fT0ZfRklMVEVSU107ICAgICAgICAgLyogbG93ZXN0IGZyZXEgZm9yIGxwYyBUQUJVTCovCisgIElOVCAgICAgIHRuc0xpbWl0T3JkZXJbTUFYX05VTV9PRl9GSUxURVJTXTsgICAgICAgICAgIC8qIExpbWl0IGZvciBUTlMgb3JkZXIgVEFCVUwqLworICBJTlQgICAgICB0bnNGaWx0ZXJEaXJlY3Rpb25bTUFYX05VTV9PRl9GSUxURVJTXTsgICAgICAvKiBGaWx0ZXJpbmcgZGlyZWN0aW9uLCAwPXVwLCAxPWRvd24gVEFCVUwgKi8KKyAgSU5UICAgICAgYWNmU3BsaXRbTUFYX05VTV9PRl9GSUxURVJTXTsKKyAgRklYUF9EQkwgdG5zVGltZVJlc29sdXRpb25bTUFYX05VTV9PRl9GSUxURVJTXTsgICAgICAgLyogVE5TIG1heC4gdGltZSByZXNvbHV0aW9uIFRBQlVMLiBTaG91bGQgYmUgZnJhY3QgYnV0IE1TVkMgd29uJ3QgY29tcGlsZSB0aGVuICovCisgIElOVCAgICAgIHNlcGVyYXRlRmlsdGVyc0FsbG93ZWQ7Cit9IFROU19QQVJBTUVURVJfVEFCVUxBVEVEOwogCiAKIHR5cGVkZWYgc3RydWN0IHsgICAvKmFzc2lnbmVkIGF0IEluaXRUaW1lKi8KLSAgVE5TX0NPTkZJR19UQUJVTEFURUQgY29uZlRhYjsKKyAgVE5TX1BBUkFNRVRFUl9UQUJVTEFURUQgY29uZlRhYjsKKyAgSU5UIGlzTG93RGVsYXk7CiAgIElOVCB0bnNBY3RpdmU7CiAgIElOVCBtYXhPcmRlcjsgICAgICAgICAgICAgICAgLyogbWF4LiBvcmRlciBvZiB0bnMgZmlsdGVyICovCiAgIElOVCBjb2VmUmVzOwpAQCAtMTQ4LDggKzE1Miw4IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBJTlQgICB0bnNBY3RpdmU7Ci0gIElOVCAgIHByZWRpY3Rpb25HYWluOworICBJTlQgICB0bnNBY3RpdmVbTUFYX05VTV9PRl9GSUxURVJTXTsKKyAgSU5UICAgcHJlZGljdGlvbkdhaW5bTUFYX05VTV9PRl9GSUxURVJTXTsKIH0gVE5TX1NVQkJMT0NLX0lORk87CiAKIHR5cGVkZWYgc3RydWN0eyAgIC8qY2hhbmdlZCBhdCBydW5UaW1lKi8KZGlmZiAtLWdpdCBhL2xpYkFBQ2VuYy9zcmMvYWRqX3Roci5jcHAgYi9saWJBQUNlbmMvc3JjL2Fkal90aHIuY3BwCmluZGV4IDY0MzM2MzMuLmE3OWE5YWUgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvYWRqX3Roci5jcHAKKysrIGIvbGliQUFDZW5jL3NyYy9hZGpfdGhyLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTMwLDE0ICsxMzAsMTQgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBJTlQgICAgICAgICAgICAgICAgIGJpdHJhdGU7Ci0gIExPTkcgICAgICAgICAgICAgICAgYml0czJQZUZhY3Rvcl9tb25vOwotICBMT05HICAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3JfbW9ub19zbG9wZTsKLSAgTE9ORyAgICAgICAgICAgICAgICBiaXRzMlBlRmFjdG9yX3N0ZXJlbzsKLSAgTE9ORyAgICAgICAgICAgICAgICBiaXRzMlBlRmFjdG9yX3N0ZXJlb19zbG9wZTsKLSAgTE9ORyAgICAgICAgICAgICAgICBiaXRzMlBlRmFjdG9yX21vbm9fc2NmT3B0OwotICBMT05HICAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3JfbW9ub19zY2ZPcHRfc2xvcGU7Ci0gIExPTkcgICAgICAgICAgICAgICAgYml0czJQZUZhY3Rvcl9zdGVyZW9fc2NmT3B0OwotICBMT05HICAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3Jfc3RlcmVvX3NjZk9wdF9zbG9wZTsKKyAgVUxPTkcgICAgICAgICAgICAgICBiaXRzMlBlRmFjdG9yX21vbm87CisgIFVMT05HICAgICAgICAgICAgICAgYml0czJQZUZhY3Rvcl9tb25vX3Nsb3BlOworICBVTE9ORyAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3Jfc3RlcmVvOworICBVTE9ORyAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3Jfc3RlcmVvX3Nsb3BlOworICBVTE9ORyAgICAgICAgICAgICAgIGJpdHMyUGVGYWN0b3JfbW9ub19zY2ZPcHQ7CisgIFVMT05HICAgICAgICAgICAgICAgYml0czJQZUZhY3Rvcl9tb25vX3NjZk9wdF9zbG9wZTsKKyAgVUxPTkcgICAgICAgICAgICAgICBiaXRzMlBlRmFjdG9yX3N0ZXJlb19zY2ZPcHQ7CisgIFVMT05HICAgICAgICAgICAgICAgYml0czJQZUZhY3Rvcl9zdGVyZW9fc2NmT3B0X3Nsb3BlOwogCiB9IEJJVF9QRV9TRkFDOwogCkBAIC0xNTMsMTAgKzE1MywxMCBAQAogICB7IDI0MDAwLCAweDIzRDcwQTNELCAweDAyOUYxNkIxLCAweDIxOTk5OTlBLCAweDA3REQ0NDEzLCAweDIzRDcwQTNELCAweDAyOUYxNkIxLCAweDIxOTk5OTlBLCAweDA3REQ0NDEzfSwKICAgeyAzMjAwMCwgMHgyNDdBRTE0OCwgMHgxMUIxRDkyQiwgMHgyMzg1MUVCOCwgMHgwMUY3NTEwNSwgMHgyNDdBRTE0OCwgMHgxMTBBMTM3RiwgMHgyMzg1MUVCOCwgMHgwMUY3NTEwNX0sCiAgIHsgNDgwMDAsIDB4MkQxRUI4NTIsIDB4NjgzM0M2MDAsIDB4MjQ3QUUxNDgsIDB4MDE0RjhCNTksIDB4MkNDQ0NDQ0QsIDB4NjhEQjhCQUMsIDB4MjQ3QUUxNDgsIDB4MDFGNzUxMDV9LAotICB7IDY0MDAwLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI1MUVCODUyLCAweDE1NEM5ODVGLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI1NzBBM0Q3LCAweDE1NEM5ODVGfSwKLSAgeyA5NjAwMCwgMHg2MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzOUVCODUxRiwgMHgwODg1MDlDMCwgMHg2MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzQTNENzBBNCwgMHgwODg1MDlDMH0sCi0gIHsxMjgwMDAsIDB4NjAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NDIzRDcwQTQsIDB4MThBNDNCQjQsIDB4NjAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NDI4RjVDMjksIDB4MTgxRTAzRjd9LAotICB7MTQ4MDAwLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDUxNDdBRTE0LCAweDAwMDAwMDAwLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDUxNDdBRTE0LCAweDAwMDAwMDAwfQorICB7IDY0MDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI1MUVCODUyLCAweDAxNDgwMDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI1NzBBM0Q3LCAweDAxNDgwMDAwfSwKKyAgeyA5NjAwMCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNjAwMDAwMCwgMHgwMTAwMDAwMCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNjAwMDAwMCwgMHgwMTAwMDAwMH0sCisgIHsxMjgwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4MjcwYTNkODAsIDB4MDEwMDAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4MjcwYTNkODAsIDB4MDEwMDAwMDB9LAorICB7MTQ4MDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI4MDAwMDAwLCAweDAwMDAwMDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI4MDAwMDAwLCAweDAwMDAwMDAwfQogfTsKIAogc3RhdGljIGNvbnN0IEJJVF9QRV9TRkFDIFNfQml0czJQZVRhYjIyMDUwW10gPSB7CkBAIC0xNjYsOCArMTY2LDggQEAKICAgeyA0ODAwMCwgMHgyM2Q3MGEzZCwgMHgwMTRmOGI1OSwgMHgyMTk5OTk5YSwgMHgwM2VlYTIwYSwgMHgyM2Q3MGEzZCwgMHgxNGY4YjU5LCAgMHgyMTk5OTk5YSwgMHgwM2VlYTIwYX0sCiAgIHsgNjQwMDAsIDB4MjQ3YWUxNDgsIDB4MDhkOGVjOTYsIDB4MjM4NTFlYjgsIDB4MDBmYmE4ODIsIDB4MjQ3YWUxNDgsIDB4ODg1MDljMCwgIDB4MjM4NTFlYjgsIDB4MDBmYmE4ODJ9LAogICB7IDk2MDAwLCAweDJkMWViODUyLCAweDM0MTllMzAwLCAweDI0N2FlMTQ4LCAweDAwYTdjNWFjLCAweDJjY2NjY2NkLCAweDM0NmRjNWQ2LCAweDI0N2FlMTQ4LCAweDAwZmJhODgyfSwKLSAgezEyODAwMCwgMHg2MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgyNTFlYjg1MiwgMHgwMjlmMTZiMSwgMHg2MDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgyNTcwYTNkNywgMHgwMDlmMTZiMX0sCi0gIHsxNDgwMDAsIDB4NjAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjZiODUxZWMsIDB4MDAwMDAwMDAsIDB4NjAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjcwYTNkNzEsIDB4MDAwMDAwMDB9CisgIHsxMjgwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4MjUxZWI4NTIsIDB4MDI5ZjE2YjEsIDB4NjAwMDAwMDAsIDB4MjVjMjhmNDAsIDB4MjU3MGEzZDcsIDB4MDA5ZjE2YjF9LAorICB7MTQ4MDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI2Yjg1MWVjLCAweDAwMDAwMDAwLCAweDYwMDAwMDAwLCAweDI1YzI4ZjQwLCAweDI3MGEzZDcxLCAweDAwMDAwMDAwfQogfTsKIAogc3RhdGljIGNvbnN0IEJJVF9QRV9TRkFDIFNfQml0czJQZVRhYjI0MDAwW10gPSB7CkBAIC0xNzgsMjEgKzE3OCwyMSBAQAogICB7IDY0MDAwLCAweDI0Y2NjY2NkLCAweDA1ZTVmMzBlLCAweDIyZTE0N2FlLCAweDAxYTM2ZTJmLCAweDI0Y2NjY2NkLCAweDA1ZTVmMzBlLCAweDIzMzMzMzMzLCAweDAxNGY4YjU5fSwKICAgeyA5NjAwMCwgMHgyYThmNWMyOSwgMHgyNGIzM2RiMCwgMHgyNDdhZTE0OCwgMHgwMGZiYTg4MiwgMHgyYThmNWMyOSwgMHgyNmZlNzE4YiwgMHgyNDdhZTE0OCwgMHgwMGZiYTg4Mn0sCiAgIHsxMjgwMDAsIDB4NGU2NjY2NjYsIDB4MWNkNWY5OWMsIDB4MjU3MGEzZDcsIDB4MDEwYzZmN2EsIDB4NTBhM2Q3MGEsIDB4MTkyYTczNzEsIDB4MjU3MGEzZDcsIDB4MDEwYzZmN2F9LAotICB7MTQ4MDAwLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI2MTQ3YWUxLCAweDAwMDAwMDAwLCAweDYwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI2MTQ3YWUxLCAweDAwMDAwMDAwfQorICB7MTQ4MDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI2MTQ3YWUxLCAweDAwMDAwMDAwLCAweDI1YzI4ZjQwLCAweDAwMDAwMDAwLCAweDI2MTQ3YWUxLCAweDAwMDAwMDAwfQogfTsKIAogc3RhdGljIGNvbnN0IEJJVF9QRV9TRkFDIFNfQml0czJQZVRhYjMyMDAwW10gPSB7Ci0gIHsgMTYwMDAsIDB4MTE5OTk5OWEsIDB4MjBjNDliYTYsIDB4MDAwMDAwMDAsIDB4NDU3N2Q5NTUsIDB4MDAwMDAwMDAsIDB4NjBmZTQ3OTksIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAotICB7IDI0MDAwLCAweDE5OTk5OTlhLCAweDBmYmE4ODI3LCAweDEwZjVjMjhmLCAweDFiODY2ZTQ0LCAweDE3YWUxNDdiLCAweDBmYmE4ODI3LCAweDAwMDAwMDAwLCAweDRkNTUxZDY5fSwKKyAgeyAxNjAwMCwgMHgyNDdhZTE0MCwgMHhGRkZGQUMxRSwgMHgyNzBhM2Q4MCwgMHhGRkZFOUI3QywgMHgxNGNjY2NjMCwgMHgwMDAxMTBBMSwgMHgxNWMyOGY2MCwgMHhGRkZFRUY1Rn0sCisgIHsgMjQwMDAsIDB4MjMzMzMzNDAsIDB4MGZiYTg4MjcsIDB4MjE5OTk5ODAsIDB4MWI4NjZlNDQsIDB4MThmNWMyODAsIDB4MGZiYTg4MjcsIDB4MTE5OTk5YTAsIDB4NGQ1NTFkNjl9LAogICB7IDMyMDAwLCAweDFkNzBhM2Q3LCAweDA3MzU3ZTY3LCAweDE3YWUxNDdiLCAweDA5ZDQ5NTE4LCAweDFiODUxZWI4LCAweDBhN2M1YWM0LCAweDEyZTE0N2FlLCAweDExMGExMzdmfSwKICAgeyA0ODAwMCwgMHgyMGY1YzI4ZiwgMHgwNDk2NjdiNiwgMHgxYzdhZTE0OCwgMHgwNTNlMmQ2MiwgMHgyMGEzZDcwYSwgMHgwNTNlMmQ2MiwgMHgxYjMzMzMzMywgMHgwNWU1ZjMwZX0sCiAgIHsgNjQwMDAsIDB4MjMzMzMzMzMsIDB4MDI5ZjE2YjEsIDB4MWYwYTNkNzEsIDB4MDJmMmY5ODcsIDB4MjMzMzMzMzMsIDB4MDI5ZjE2YjEsIDB4MWUxNDdhZTEsIDB4MDNlZWEyMGF9LAogICB7IDk2MDAwLCAweDI1YzI4ZjVjLCAweDJjM2M5ZWVkLCAweDIxZWI4NTFmLCAweDAxZjc1MTA1LCAweDI1YzI4ZjVjLCAweDBhN2M1YWM0LCAweDIxZWI4NTFmLCAweDAxYTM2ZTJmfSwKICAgezEyODAwMCwgMHg1MGY1YzI4ZiwgMHgxOGE0M2JiNCwgMHgyM2Q3MGEzZCwgMHgwMTBjNmY3YSwgMHgzMDAwMDAwMCwgMHgxNjhiNWNjMCwgMHgyMzg1MWViOCwgMHgwMTkyYTczN30sCi0gIHsxNDgwMDAsIDB4NjAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MjQ3YWUxNDgsIDB4MDBkZmIyM2IsIDB4M2RjMjhmNWMsIDB4MzAwZjRhYWYsIDB4MjQ3YWUxNDgsIDB4MDFiZjY0NzZ9LAotICB7MTYwMDAwLCAweDYwMDAwMDAwLCAweGIxNWI1NzQwLCAweDI0Y2NjY2NkLCAweDA1M2UyZDYyLCAweDRmNWMyOGY2LCAweGJlZmQwMDcyLCAweDI1MWViODUyLCAweDA0ZmIxMTg0fSwKLSAgezIwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgyYjMzMzMzMywgMHgwODM2YmU5MSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgyYjMzMzMzMywgMHgwODkwMzkwZn0sCi0gIHszMjAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NDk0N2FlMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NGE4ZjVjMjksIDB4MDAwMDAwMDB9CisgIHsxNDgwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4MjQ3YWUxNDgsIDB4MDBkZmIyM2IsIDB4M2RjMjhmNWMsIDB4MzAwZjRhYWYsIDB4MjQ3YWUxNDgsIDB4MDFiZjY0NzZ9LAorICB7MTYwMDAwLCAweDI1YzI4ZjQwLCAweGIxNWI1NzQwLCAweDI0Y2NjY2NkLCAweDA1M2UyZDYyLCAweDRmNWMyOGY2LCAweGJlZmQwMDcyLCAweDI1MWViODUyLCAweDA0ZmIxMTg0fSwKKyAgezIwMDAwMCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyYjMzMzMzMywgMHgwODM2YmU5MSwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyYjMzMzMzMywgMHgwODkwMzkwZn0sCisgIHszMjAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4NDk0N2FlMTQsIDB4MDAwMDAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4NGE4ZjVjMjksIDB4MDAwMDAwMDB9CiB9OwogCiBzdGF0aWMgY29uc3QgQklUX1BFX1NGQUMgU19CaXRzMlBlVGFiNDQxMDBbXSA9IHsKQEAgLTIwNSw4ICsyMDUsOCBAQAogICB7MTI4MDAwLCAweDJhZTE0N2FlLCAweDFiNDM1MjY1LCAweDIyM2Q3MGE0LCAweDAxOTJhNzM3LCAweDJhM2Q3MGE0LCAweDEwNDBiZmU0LCAweDIxZWI4NTFmLCAweDAxOTJhNzM3fSwKICAgezE0ODAwMCwgMHgzYjg1MWViOCwgMHgyODMyMDY5YywgMHgyMzMzMzMzMywgMHgwMGRmYjIzYiwgMHgzNDI4ZjVjMywgMHgyMDU0YzI4OCwgMHgyMmUxNDdhZSwgMHgwMGRmYjIzYn0sCiAgIHsxNjAwMDAsIDB4NGEzZDcwYTQsIDB4YzMyZWJlNWEsIDB4MjM4NTFlYjgsIDB4MDFkNWMzMTYsIDB4NDAwMDAwMDAsIDB4Y2I5MjNhMmIsIDB4MjMzMzMzMzMsIDB4MDFkNWMzMTZ9LAotICB7MjAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI1YzI4ZjVjLCAweDA3MTNmMDc4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI1NzBhM2Q3LCAweDA3MmE0ZjE3fSwKLSAgezMyMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzZmFlMTQ3YiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzZmFlMTQ3YiwgMHgwMDAwMDAwMH0KKyAgezIwMDAwMCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNWMyOGY1YywgMHgwNzEzZjA3OCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNTcwYTNkNywgMHgwNzJhNGYxN30sCisgIHszMjAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4M2ZhZTE0N2IsIDB4MDAwMDAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4M2ZhZTE0N2IsIDB4MDAwMDAwMDB9CiB9OwogCiBzdGF0aWMgY29uc3QgQklUX1BFX1NGQUMgU19CaXRzMlBlVGFiNDgwMDBbXSA9IHsKQEAgLTIxOSw4ICsyMTksOCBAQAogICB7MTI4MDAwLCAweDI4ZjVjMjhmLCAweDE0NzI3ZGNjLCAweDIxNDdhZTE0LCAweDAyMThkZWY0LCAweDI4NTFlYjg1LCAweDBlMjdlMGYwLCAweDIwZjVjMjhmLCAweDAyMThkZWY0fSwKICAgezE0ODAwMCwgMHgzNTcwYTNkNywgMHgxY2Q1Zjk5YywgMHgyMjhmNWMyOSwgMHgwMWJmNjQ3NiwgMHgzMGY1YzI4ZiwgMHgxODc3N2U3NSwgMHgyMjNkNzBhNCwgMHgwMWJmNjQ3Nn0sCiAgIHsxNjAwMDAsIDB4NDAwMDAwMDAsIDB4Y2I5MjNhMmIsIDB4MjMzMzMzMzMsIDB4MDE5MmE3MzcsIDB4MzllYjg1MWYsIDB4ZDA4ZDRiYWUsIDB4MjJlMTQ3YWUsIDB4MDE5MmE3Mzd9LAotICB7MjAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI1MWViODUyLCAweDA2Nzc1YTFiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDI0Y2NjY2NkLCAweDA2YTQxNzVhfSwKLSAgezMyMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzY2NjY2NjZCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgzZDFlYjg1MiwgMHgwMDAwMDAwMH0KKyAgezIwMDAwMCwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNTFlYjg1MiwgMHgwNjc3NWExYiwgMHgyNWMyOGY0MCwgMHgwMDAwMDAwMCwgMHgyNGNjY2NjZCwgMHgwNmE0MTc1YX0sCisgIHszMjAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4M2NjY2NjY2QsIDB4MDAwMDAwMDAsIDB4MjVjMjhmNDAsIDB4MDAwMDAwMDAsIDB4M2QxZWI4NTIsIDB4MDAwMDAwMDB9CiB9OwogCiBzdGF0aWMgY29uc3QgQklUUzJQRV9DRkdfVEFCIGJpdHMyUGVDb25maWdUYWJbXSA9IHsKQEAgLTI1OCw2ICsyNTgsNyBAQAogICAgICAgICBjb25zdCBJTlQgbkNoYW5uZWxzLAogICAgICAgICBjb25zdCBJTlQgc2FtcGxlUmF0ZSwKICAgICAgICAgY29uc3QgSU5UIGFkdmFuY2VkQml0c1RvUGUsCisgICAgICAgIGNvbnN0IElOVCBkWm9uZVF1YW50RW5hYmxlLAogICAgICAgICBjb25zdCBJTlQgaW52UXVhbnQKICAgICAgICAgKQogewpAQCAtMzI5LDcgKzMzMCwzMiBAQAogICB9IC8qIGFkdmFuY2VkQml0c1RvUGUgKi8KIAogCi0gIC8qIHJldHVybiBiaXRzMnBlIGZhY3RvciAqLworICBpZiAoZFpvbmVRdWFudEVuYWJsZSkKKyAgeworICAgIGlmKGJpdDJQRV9tID49IChGTDJGWENPTlNUX0RCTCgwLjZmKSk+PmJpdDJQRV9lKQorICAgIHsKKyAgICAgIC8qIEFkZGl0aW9uYWwgaGVhZHJvb20gZm9yIGFkZGl0aW9uICovCisgICAgICBiaXQyUEVfbSA+Pj0gMTsKKyAgICAgIGJpdDJQRV9lICArPSAxOworICAgIH0KKworICAgIC8qIHRoZSBxdWFudFRlbmRlbmN5Q29tcGVuc2F0b3IgY29tcGVuc2F0ZXMgYSBsb3dlciBiaXQgY29uc3VtcHRpb24gZHVlIHRvIGluY3JlYXNpbmcgdGhlIHRlbmRlbmN5IHRvIHF1YW50aXplIGxvdyBzcGVjdHJhbCB2YWx1ZXMgdG8gdGhlIGxvd2VyIHF1YW50aXplciBib3JkZXIgZm9yIGJpdHJhdGVzIGJlbG93IGEgY2VydGFpbiBiaXRyYXRlIHRocmVzaG9sZCAtLT4gc2VlIGFsc28gZnVuY3Rpb24gY2FsY1NmYkRpc3RMRCBpbiBxdWFudGl6ZS5jICovCisgICAgaWYgKChiaXRSYXRlL25DaGFubmVscyA+IDMyMDAwKSAmJiAoYml0UmF0ZS9uQ2hhbm5lbHMgPD0gNDAwMDApKSB7CisgICAgICBiaXQyUEVfbSArPSAoRkwyRlhDT05TVF9EQkwoMC40ZikpPj5iaXQyUEVfZTsKKyAgICB9CisgICAgZWxzZSBpZiAoYml0UmF0ZS9uQ2hhbm5lbHMgPiAyMDAwMCkgeworICAgICAgYml0MlBFX20gKz0gKEZMMkZYQ09OU1RfREJMKDAuM2YpKT4+Yml0MlBFX2U7CisgICAgfQorICAgIGVsc2UgaWYgKGJpdFJhdGUvbkNoYW5uZWxzID49IDE2MDAwKSB7CisgICAgICBiaXQyUEVfbSArPSAoRkwyRlhDT05TVF9EQkwoMC4zZikpPj5iaXQyUEVfZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBiaXQyUEVfbSArPSAoRkwyRlhDT05TVF9EQkwoMC4wZikpPj5iaXQyUEVfZTsKKyAgICB9CisgIH0KKworCisgIC8qKioqKiAzLikgUmV0dXJuIGJpdHMycGUgZmFjdG9yICoqKioqLwogICAqYml0czJQZUZhY3Rvcl9tID0gYml0MlBFX207CiAgICpiaXRzMlBlRmFjdG9yX2UgPSBiaXQyUEVfZTsKIH0KQEAgLTE2NDksNiArMTY3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDX09VVF9FTEVNRU5UKiAgIHFjRWxlbWVudFsoOCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1lfT1VUX0VMRU1FTlQqICBwc3lPdXRFbGVtZW50Wyg4KV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgIGRlc2lyZWRQZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UICAgICAgICAgbWF4SXRlcjJuZEd1ZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgICAgICAgICBwcm9jZXNzRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCAgICAgICAgIGVsZW1lbnRPZmZzZXQpCiB7CkBAIC0xNzMzLDcgKzE3NjAsNyBAQAogICAgLyogUGFydCBJSUk6IEl0ZXJhdGUgdW50aWwgYml0IGNvbnN0cmFpbnRzIGFyZSBtZXQgKi8KICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAgICBpdGVyID0gMDsKLSAgIHdoaWxlICgoZml4cF9hYnMocmVkUGVHbG9iYWwgLSBkZXNpcmVkUGUpID4gZk11bHRJKEZMMkZYQ09OU1RfREJMKDAuMDVmKSxkZXNpcmVkUGUpKSAmJiAoaXRlciA8IDEpKSB7CisgICB3aGlsZSAoKGZpeHBfYWJzKHJlZFBlR2xvYmFsIC0gZGVzaXJlZFBlKSA+IGZNdWx0SShGTDJGWENPTlNUX0RCTCgwLjA1ZiksZGVzaXJlZFBlKSkgJiYgKGl0ZXIgPCBtYXhJdGVyMm5kR3Vlc3MpKSB7CiAKICAgICAgSU5UIGRlc2lyZWRQZU5vQUhHbG9iYWw7CiAgICAgIElOVCByZWRQZU5vQUhHbG9iYWwgPSAwOwpAQCAtMjEzOCw3ICsyMTY1LDcgQEAKICAgICAgICAgYnJlc1BhcmFtLT5jbGlwU3BlbmRMb3csIGJyZXNQYXJhbS0+Y2xpcFNwZW5kSGlnaCwKICAgICAgICAgYnJlc1BhcmFtLT5taW5CaXRTcGVuZCwgYnJlc1BhcmFtLT5tYXhCaXRTcGVuZCwgYml0c3BlbmRfc2xvcGUpOwogCi0gICAgcGVfcGVycyA9IGZEaXZOb3JtKHBleCAtIGFkalRockNoYW4tPnBlTWluLCBhZGpUaHJDaGFuLT5wZU1heCAtIGFkalRockNoYW4tPnBlTWluKTsKKyAgICBwZV9wZXJzID0gKHBleCA+IGFkalRockNoYW4tPnBlTWluKSA/IGZEaXZOb3JtKHBleCAtIGFkalRockNoYW4tPnBlTWluLCBhZGpUaHJDaGFuLT5wZU1heCAtIGFkalRockNoYW4tPnBlTWluKSA6IDA7CiAgICAgdG1wX2ZpeCA9IGZNdWx0KCgoRklYUF9EQkwpYml0U3BlbmQgKyAoRklYUF9EQkwpYml0U2F2ZSksIHBlX3BlcnMpOwogICAgIGJpdHJlc0ZhY19maXggPSAoVU5JVFk+PjEpIC0gKChGSVhQX0RCTCliaXRTYXZlPj4xKSArICh0bXBfZml4Pj4xKTsgcWJyZXMgPSAoREZSQUNUX0JJVFMtMik7CiAKQEAgLTIyMjUsNyArMjI1Miw4IEBACiAgICAgICAgIElOVCAgICAgICAgICAgICBuQ2hhbm5lbHNFZmYsCiAgICAgICAgIElOVCAgICAgICAgICAgICBzYW1wbGVSYXRlLAogICAgICAgICBJTlQgICAgICAgICAgICAgYWR2YW5jZWRCaXRzVG9QZSwKLSAgICAgICAgRklYUF9EQkwgICAgICAgIHZiclF1YWxGYWN0b3IKKyAgICAgICAgRklYUF9EQkwgICAgICAgIHZiclF1YWxGYWN0b3IsCisgICAgICAgIGNvbnN0IElOVCAgICAgICBkWm9uZVF1YW50RW5hYmxlCiAgICAgICAgICkKIHsKICAgSU5UIGk7CkBAIC0yMjMzLDYgKzIyNjEsMTAgQEAKICAgRklYUF9EQkwgUE9JTlQ4ID0gRkwyRlhDT05TVF9EQkwoMC44Zik7CiAgIEZJWFBfREJMIFBPSU5UNiA9IEZMMkZYQ09OU1RfREJMKDAuNmYpOwogCisgIC8qIE1heCBudW1iZXIgb2YgaXRlcmF0aW9ucyBpbiBzZWNvbmQgZ3Vlc3MgaXMgMyBmb3IgbG93ZGVsYXkgYW90IGFuZCBmb3IgY29uZmlndXJhdGlvbnMgd2l0aAorICAgICBtdWx0aXBsZSBhdWRpbyBlbGVtZW50cyBpbiBnZW5lcmFsLCBvdGhlcndpc2UgaXRlcmF0aW9uIHZhbHVlIGlzIGFsd2F5cyAxLiAqLworICBoQWRqVGhyLT5tYXhJdGVyMm5kR3Vlc3MgPSAoYWR2YW5jZWRCaXRzVG9QZSE9MCB8fCBuRWxlbWVudHM+MSkgPyAzIDogMTsKKwogICAvKiBjb21tb24gZm9yIGFsbCBlbGVtZW50czogKi8KICAgLyogcGFyYW1ldGVycyBmb3IgYml0cmVzIGNvbnRyb2wgKi8KICAgaEFkalRoci0+YnJlc1BhcmFtTG9uZy5jbGlwU2F2ZUxvdyAgID0gKEZJWFBfREJMKTB4MTk5OTk5OWE7IC8qIEZMMkZYQ09OU1RfREJMKDAuMmYpOyAqLwpAQCAtMjMxMywxMCArMjM0NSwxMSBAQAogICAgIEZES2FhY0VuY19Jbml0Qml0czJQZUZhY3RvcigKICAgICAgICAgICAgICAgJmF0c0VsZW0tPmJpdHMyUGVGYWN0b3JfbSwKICAgICAgICAgICAgICAgJmF0c0VsZW0tPmJpdHMyUGVGYWN0b3JfZSwKLSAgICAgICAgICAgICAgY2hCaXRyYXRlLCAgICAgICAvKiBiaXRyYXRlL2NoYW5uZWwqLworICAgICAgICAgICAgICBjaEJpdHJhdGUqbkNoYW5uZWxzRWZmLCAvKiBvdmVyYWxsIGJpdHJhdGUgKi8KICAgICAgICAgICAgICAgbkNoYW5uZWxzRWZmLCAgICAvKiBudW1iZXIgb2YgY2hhbm5lbHMgKi8KICAgICAgICAgICAgICAgc2FtcGxlUmF0ZSwKICAgICAgICAgICAgICAgYWR2YW5jZWRCaXRzVG9QZSwKKyAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZSwKICAgICAgICAgICAgICAgaW52UXVhbnQKICAgICAgICAgICAgICAgKTsKIApAQCAtMjU0NSw2ICsyNTc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNfT1VUKiAgICAgICAgICAgICBxY091dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNZX09VVF9FTEVNRU5UKiAgICBwc3lPdXRFbGVtZW50Wyg4KV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgICAgICAgICAgQ0JSYml0cmF0ZU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgICAgICAgICAgICAgbWF4SXRlcjJuZEd1ZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEFOTkVMX01BUFBJTkcqICAgIGNtKQogewogICAgIGludCBpOwpAQCAtMjU3MCw2ICsyNjA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3lPdXRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY0VsZW1lbnRbaV0tPmdyYW50ZWRQZUNvcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEl0ZXIybmRHdWVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgICAgICAgICAvKiBQcm9jZXNzIG9ubHkgMSBlbGVtZW50ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpOyAgICAgICAgLyogUHJvY2VzcyBleGFjdGx5IFRISVMgZWxlbWVudCAqLwogCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL2Fkal90aHIuaCBiL2xpYkFBQ2VuYy9zcmMvYWRqX3Roci5oCmluZGV4IDY5YjFkY2MuLmJlNjhjNmUgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvYWRqX3Roci5oCisrKyBiL2xpYkFBQ2VuYy9zcmMvYWRqX3Roci5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMTgsNyArMTE4LDggQEAKICAgICAgICAgICAgICAgICBJTlQgbkNoYW5uZWxzRWZmLAogICAgICAgICAgICAgICAgIElOVCBzYW1wbGVSYXRlLAogICAgICAgICAgICAgICAgIElOVCBhZHZhbmNlZEJpdHNUb1BlLAotICAgICAgICAgICAgICAgIEZJWFBfREJMIHZiclF1YWxGYWN0b3IpOworICAgICAgICAgICAgICAgIEZJWFBfREJMIHZiclF1YWxGYWN0b3IsCisgICAgICAgICAgICAgICAgY29uc3QgSU5UIGRab25lUXVhbnRFbmFibGUpOwogIAogCiB2b2lkIEZES2FhY0VuY19EaXN0cmlidXRlQml0cyhBREpfVEhSX1NUQVRFICphZGpUaHJTdGF0ZSwKQEAgLTE0MCw2ICsxNDEsNyBAQAogICAgIFFDX09VVCogICAgICAgICAgIHFjT3V0LAogICAgIFBTWV9PVVRfRUxFTUVOVCogIHBzeU91dEVsZW1lbnRbKDgpXSwKICAgICBJTlQgICAgICAgICAgICAgICBDQlJiaXRyYXRlTW9kZSwKKyAgICBJTlQgICAgICAgICAgICAgICBtYXhJdGVyMm5kR3Vlc3MsCiAgICAgQ0hBTk5FTF9NQVBQSU5HKiAgY20pOwogCiB2b2lkIEZES2FhY0VuY19BZGpUaHJDbG9zZShBREpfVEhSX1NUQVRFKiogaEFkalRocik7CmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL2Fkal90aHJfZGF0YS5oIGIvbGliQUFDZW5jL3NyYy9hZGpfdGhyX2RhdGEuaAppbmRleCAzZWI3Njc4Li43YzNhMTkxIDEwMDY0NAotLS0gYS9saWJBQUNlbmMvc3JjL2Fkal90aHJfZGF0YS5oCisrKyBiL2xpYkFBQ2VuYy9zcmMvYWRqX3Rocl9kYXRhLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTE0NSw2ICsxNDUsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBCUkVTX1BBUkFNIGJyZXNQYXJhbUxvbmcsIGJyZXNQYXJhbVNob3J0OwogICBBVFNfRUxFTUVOVCogYWRqVGhyU3RhdGVFbGVtWyg4KV07CisgIElOVCBtYXhJdGVyMm5kR3Vlc3M7CiB9IEFESl9USFJfU1RBVEU7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9iYW5kd2lkdGguY3BwIGIvbGliQUFDZW5jL3NyYy9iYW5kd2lkdGguY3BwCmluZGV4IDZmYzdkODcuLjY5MzczNjIgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvYmFuZHdpZHRoLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL2JhbmR3aWR0aC5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEyNyw3ICsxMjcsNyBAQAogICB7IDgwMDAsICAyMDAwLCAgMjAwMH0sCiAgIHsxMjAwMCwgIDIwMDAsICAyMzAwfSwKICAgezE2MDAwLCAgMjIwMCwgIDI1MDB9LAotICB7MjQwMDAsICA1NjUwLCAgNjQwMH0sCisgIHsyNDAwMCwgIDU2NTAsICA3MjAwfSwKICAgezMyMDAwLCAgMTE2MDAsIDEyMDAwfSwKICAgezQwMDAwLCAgMTIwMDAsIDE2MDAwfSwKICAgezQ4MDAwLCAgMTYwMDAsIDE2MDAwfSwKQEAgLTEzOCwxMCArMTM4LDEwIEBACiBzdGF0aWMgY29uc3QgQkFORFdJRFRIX1RBQiBiYW5kV2lkdGhUYWJsZV9MRF8zMjAwMFtdID0gewogICB7IDgwMDAsICAyMDAwLCAgMjAwMH0sCiAgIHsxMjAwMCwgIDIwMDAsICAyMDAwfSwKLSAgezI0MDAwLCAgNDI1MCwgIDUyMDB9LAorICB7MjQwMDAsICA0MjUwLCAgNzIwMH0sCiAgIHszMjAwMCwgIDg0MDAsICA5MDAwfSwKICAgezQwMDAwLCAgOTQwMCwgIDExMzAwfSwKLSAgezQ4MDAwLCAgMTE5MDAsIDEzNzAwfSwKKyAgezQ4MDAwLCAgMTE5MDAsIDE0NzAwfSwKICAgezY0MDAwLCAgMTQ4MDAsIDE2MDAwfSwKICAgezc2MDAwLCAgMTYwMDAsIDE2MDAwfSwKICAgezM2MDAwMSwgMTYwMDAsIDE2MDAwfQpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9pbnRlbnNpdHkuY3BwIGIvbGliQUFDZW5jL3NyYy9pbnRlbnNpdHkuY3BwCmluZGV4IDZkODA3ZjcuLmI0NWIyN2IgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvaW50ZW5zaXR5LmNwcAorKysgYi9saWJBQUNlbmMvc3JjL2ludGVuc2l0eS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTMyNSw3ICszMjUsNiBAQAogCiAgICAgICBjaGFubmVsQ29ycltzZmIgKyBzZmJvZmZzXSA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOwogCi0gICAgICBGREtfQVNTRVJUKDUwID49IDQ5KTsKICAgICAgIC8qIG1heCB3aWR0aCBvZiBzY2FsZWZhY3RvcmJhbmQgaXMgOTY7IHdpZHRoJ3MgYXJlIGFsd2F5cyBldmVuICovCiAgICAgICAvKiBpbnZfbiBpcyBzY2FsZWQgd2l0aCBmYWN0b3IgMiB0byBjb21wZW5zYXRlIGZNdWx0RGl2MigpIGluIHN1YnNlcXVlbnQgbG9vcHMgKi8KICAgICAgIGludl9uID0gR2V0SW52SW50KChzZmJPZmZzZXRbc2ZiICsgc2Zib2ZmcyArIDFdIC0gc2ZiT2Zmc2V0W3NmYiArIHNmYm9mZnNdKT4+MSk7CmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL3Buc3BhcmFtLmNwcCBiL2xpYkFBQ2VuYy9zcmMvcG5zcGFyYW0uY3BwCmluZGV4IGFmYzViZGQuLjlkNTlkZGMgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvcG5zcGFyYW0uY3BwCisrKyBiL2xpYkFBQ2VuYy9zcmMvcG5zcGFyYW0uY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMDcsNiArMTA3LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgVUxPTkcgYnJGcm9tOwogICBVTE9ORyBiclRvOworICBVQ0hBUiBTMTYwMDA7CiAgIFVDSEFSIFMyMjA1MDsKICAgVUNIQVIgUzI0MDAwOwogICBVQ0hBUiBTMzIwMDA7CkBAIC0xMTUsMjUgKzExNiwyNiBAQAogfSBBVVRPX1BOU19UQUI7CiAKIHN0YXRpYyBjb25zdCBBVVRPX1BOU19UQUIgbGV2ZWxUYWJsZV9tb25vW109IHsKLSAgezAsICAgICAgMTE5OTksIDEsIDEsIDEsIDEsIDEsfSwKLSAgezEyMDAwLCAgMTk5OTksIDEsIDEsIDEsIDEsIDEsfSwKLSAgezIwMDAwLCAgMjg5OTksIDIsIDEsIDEsIDEsIDEsfSwKLSAgezI5MDAwLCAgNDA5OTksIDQsIDQsIDQsIDIsIDIsfSwKLSAgezQxMDAwLCAgNTU5OTksIDksIDksIDcsIDcsIDcsfSwKLSAgezU2MDAwLCAgNzk5OTksIDAsIDAsIDAsIDksIDksfSwKLSAgezgwMDAwLCAgOTk5OTksIDAsIDAsIDAsIDAsIDAsfSwKLSAgezEwMDAwMCw5OTk5OTksIDAsIDAsIDAsIDAsIDAsfSwKKyAgezAsICAgICAgMTE5OTksIDAsIDEsIDEsIDEsIDEsIDEsfSwKKyAgezEyMDAwLCAgMTk5OTksIDAsIDEsIDEsIDEsIDEsIDEsfSwKKyAgezIwMDAwLCAgMjg5OTksIDAsIDIsIDEsIDEsIDEsIDEsfSwKKyAgezI5MDAwLCAgNDA5OTksIDAsIDQsIDQsIDQsIDIsIDIsfSwKKyAgezQxMDAwLCAgNTU5OTksIDAsIDksIDksIDcsIDcsIDcsfSwKKyAgezU2MDAwLCAgNjE5OTksIDAsIDAsIDAsIDAsIDksIDksfSwKKyAgezYyMDAwLCAgNzU5OTksIDAsIDAsIDAsIDAsIDAsIDAsfSwKKyAgezc2MDAwLCAgOTI5OTksIDAsIDAsIDAsIDAsIDAsIDAsfSwKKyAgezkzMDAwLCA5OTk5OTksIDAsIDAsIDAsIDAsIDAsIDAsfSwKIH07CiAKIHN0YXRpYyBjb25zdCBBVVRPX1BOU19UQUIgbGV2ZWxUYWJsZV9zdGVyZW9bXT0gewotICB7MCwgICAgICAxMTk5OSwgMSwgMSwgMSwgMSwgMSx9LAotICB7MTIwMDAsICAxOTk5OSwgMywgMSwgMSwgMSwgMSx9LAotICB7MjAwMDAsICAyODk5OSwgMywgMywgMywgMiwgMix9LAotICB7MjkwMDAsICA0MDk5OSwgNywgNiwgNiwgNSwgNSx9LAotICB7NDEwMDAsICA1NTk5OSwgOSwgOSwgNywgNywgNyx9LAotICB7NTYwMDAsICA3OTk5OSwgMCwgMCwgMCwgMCwgMCx9LAotICB7ODAwMDAsICA5OTk5OSwgMCwgMCwgMCwgMCwgMCx9LAotICB7MTAwMDAwLDk5OTk5OSwgMCwgMCwgMCwgMCwgMCx9LAorICB7MCwgICAgICAxMTk5OSwgMCwgMSwgMSwgMSwgMSwgMSx9LAorICB7MTIwMDAsICAxOTk5OSwgMCwgMywgMSwgMSwgMSwgMSx9LAorICB7MjAwMDAsICAyODk5OSwgMCwgMywgMywgMywgMiwgMix9LAorICB7MjkwMDAsICA0MDk5OSwgMCwgNywgNiwgNiwgNSwgNSx9LAorICB7NDEwMDAsICA1NTk5OSwgMCwgOSwgOSwgNywgNywgNyx9LAorICB7NTYwMDAsICA3OTk5OSwgMCwgMCwgMCwgMCwgMCwgMCx9LAorICB7ODAwMDAsICA5OTk5OSwgMCwgMCwgMCwgMCwgMCwgMCx9LAorICB7MTAwMDAwLDk5OTk5OSwgMCwgMCwgMCwgMCwgMCwgMCx9LAogfTsKIAogCkBAIC0xNjAsMTEgKzE2MiwxMSBAQAogfTsKIAogc3RhdGljIGNvbnN0IEFVVE9fUE5TX1RBQiBsZXZlbFRhYmxlX2xvd0NvbXBsZXhpdHlbXT0gewotICB7MCwgICAgICAyNzk5OSwgMCwgMCwgMCwgMCwgMCx9LAotICB7MjgwMDAsICAzMTk5OSwgMiwgMiwgMiwgMiwgMix9LAotICB7MzIwMDAsICA0Nzk5OSwgMywgMywgMywgMywgMyx9LAotICB7NDgwMDAsICA0ODAwMCwgNCwgNCwgNCwgNCwgNCx9LAotICB7NDgwMDEsIDk5OTk5OSwgMCwgMCwgMCwgMCwgMCx9LAorICB7MCwgICAgICAyNzk5OSwgMCwgMCwgMCwgMCwgMCwgMCx9LAorICB7MjgwMDAsICAzMTk5OSwgMCwgMiwgMiwgMiwgMiwgMix9LAorICB7MzIwMDAsICA0Nzk5OSwgMCwgMywgMywgMywgMywgMyx9LAorICB7NDgwMDAsICA0ODAwMCwgMCwgNCwgNCwgNCwgNCwgNCx9LAorICB7NDgwMDEsIDk5OTk5OSwgMCwgMCwgMCwgMCwgMCwgMCx9LAogfTsKIAogLyogY29udmVyc2lvbiBvZiBvbGQgTEMgdHVuaW5nIHRhYmxlcyB0byBuZXcgKExEIGVuYykgc3RydWN0dXJlIChvbmx5IGVudHJpZXMgd2hpY2ggYXJlIGFjdHVhbGx5IHVzZWQgd2VyZSBjb252ZXJ0ZWQpICovCkBAIC0yMTEsNiArMjEzLDcgQEAKICAgfQogCiAgIHN3aXRjaCAoc2FtcGxlUmF0ZSkgeworICBjYXNlIDE2MDAwOiBoVXNlUG5zID0gbGV2ZWxUYWJsZVtpXS5TMTYwMDA7IGJyZWFrOwogICBjYXNlIDIyMDUwOiBoVXNlUG5zID0gbGV2ZWxUYWJsZVtpXS5TMjIwNTA7IGJyZWFrOwogICBjYXNlIDI0MDAwOiBoVXNlUG5zID0gbGV2ZWxUYWJsZVtpXS5TMjQwMDA7IGJyZWFrOwogICBjYXNlIDMyMDAwOiBoVXNlUG5zID0gbGV2ZWxUYWJsZVtpXS5TMzIwMDA7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9wc3lfY29uZmlndXJhdGlvbi5jcHAgYi9saWJBQUNlbmMvc3JjL3BzeV9jb25maWd1cmF0aW9uLmNwcAppbmRleCA0MzkzZmExLi45YTcyYzY4IDEwMDY0NAotLS0gYS9saWJBQUNlbmMvc3JjL3BzeV9jb25maWd1cmF0aW9uLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL3BzeV9jb25maWd1cmF0aW9uLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtNjM0LDEzICs2MzQsMTQgQEAKICAgICAgICAgaWYgKHBzeUNvbmYtPnNmYk9mZnNldFtzZmJdID49IHBzeUNvbmYtPmxvd3Bhc3NMaW5lKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHBzeUNvbmYtPnNmYkFjdGl2ZSA9IHNmYjsKKyAgICBwc3lDb25mLT5zZmJBY3RpdmUgPSBGREttYXgoc2ZiLCAxKTsKIAogICAgIGZvciAoc2ZiID0gMDsgc2ZiIDwgcHN5Q29uZi0+c2ZiQ250OyBzZmIrKyl7CiAgICAgICAgIGlmIChwc3lDb25mLT5zZmJPZmZzZXRbc2ZiXSA+PSBwc3lDb25mLT5sb3dwYXNzTGluZUxGRSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBwc3lDb25mLT5zZmJBY3RpdmVMRkUgPSBzZmI7CisgICAgcHN5Q29uZi0+c2ZiQWN0aXZlID0gRkRLbWF4KHBzeUNvbmYtPnNmYkFjdGl2ZSwgcHN5Q29uZi0+c2ZiQWN0aXZlTEZFKTsKIAogICAgIC8qIGNhbGN1bGF0ZSBtaW5TbnIgKi8KICAgICBGREthYWNFbmNfaW5pdE1pblNucihiaXRyYXRlLApkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9wc3lfbWFpbi5jcHAgYi9saWJBQUNlbmMvc3JjL3BzeV9tYWluLmNwcAppbmRleCA1OTE5M2M3Li40NDZjODk0IDEwMDY0NAotLS0gYS9saWJBQUNlbmMvc3JjL3BzeV9tYWluLmNwcAorKysgYi9saWJBQUNlbmMvc3JjL3BzeV9tYWluLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMzQyLDYgKzM0Miw3IEBACiAgICAgICAgIHRuc0NoYW5uZWxzLAogICAgICAgICBMT05HX1dJTkRPVywKICAgICAgICAgaFBzeS0+Z3JhbnVsZUxlbmd0aCwKKyAgICAgICAgaXNMb3dEZWxheShhdWRpb09iamVjdFR5cGUpLAogICAgICAgICAoc3ludGF4RmxhZ3MmQUNfU0JSX1BSRVNFTlQpPzE6MCwKICAgICAgICAmKGhQc3ktPnBzeUNvbmZbMF0udG5zQ29uZiksCiAgICAgICAgJmhQc3ktPnBzeUNvbmZbMF0sCkBAIC0zNjIsNiArMzYzLDcgQEAKICAgICAgICAgICAgIHRuc0NoYW5uZWxzLAogICAgICAgICAgICAgU0hPUlRfV0lORE9XLAogICAgICAgICAgICAgaFBzeS0+Z3JhbnVsZUxlbmd0aCwKKyAgICAgICAgICAgIGlzTG93RGVsYXkoYXVkaW9PYmplY3RUeXBlKSwKICAgICAgICAgICAgIChzeW50YXhGbGFncyZBQ19TQlJfUFJFU0VOVCk/MTowLAogICAgICAgICAgICAmaFBzeS0+cHN5Q29uZlsxXS50bnNDb25mLAogICAgICAgICAgICAmaFBzeS0+cHN5Q29uZlsxXSwKQEAgLTQ0Nyw3ICs0NDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgICAgICAgICAgdG90YWxDaGFubmVscwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiB7Ci0gICAgSU5UIGNvbW1vbldpbmRvdyA9IDE7CisgICAgY29uc3QgSU5UIGNvbW1vbldpbmRvdyA9IDE7CiAgICAgSU5UIG1heFNmYlBlckdyb3VwWygyKV07CiAgICAgSU5UIG1kY3RTcGVjdHJ1bV9lOwogICAgIElOVCBjaDsgICAvKiBjb3VudHMgdGhyb3VnaCBjaGFubmVscyAgICAgICAgICAqLwpAQCAtNjIxLDcgKzYyMyw3IEBACiAgICAgICAgICAgRkRLbWVtY2xlYXIoJnBzeURhdGFbY2hdLT5tZGN0U3BlY3RydW1bcHN5RGF0YVtjaF0tPmxvd3Bhc3NMaW5lK3dPZmZzZXRdLAogICAgICAgICAgICAgICAgICAgICAgICh3aW5kb3dMZW5ndGhbY2hdLXBzeURhdGFbY2hdLT5sb3dwYXNzTGluZSkqc2l6ZW9mKEZJWFBfREJMKSk7CiAKLSAgICAgICAgICBpZiAoaFBzeUNvbmZMb25nLT5maWx0ZXJiYW5rICE9IEZCX0xDKSB7CisgICAgICAgICAgaWYgKCAoaFBzeUNvbmZMb25nLT5maWx0ZXJiYW5rICE9IEZCX0xDKSAmJiAocHN5RGF0YVtjaF0tPmxvd3Bhc3NMaW5lID49IEZBREVfT1VUX0xFTikgKSB7CiAgICAgICAgICAgICAvKiBEbyBibGVuZGluZyB0byByZWR1Y2UgZ2liYnMgYXJ0aWZhY3RzICovCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8RkFERV9PVVRfTEVOOyBpKyspIHsKICAgICAgICAgICAgICAgcHN5RGF0YVtjaF0tPm1kY3RTcGVjdHJ1bVtwc3lEYXRhW2NoXS0+bG93cGFzc0xpbmUrd09mZnNldCAtIEZBREVfT1VUX0xFTiArIGldID0gZk11bHQocHN5RGF0YVtjaF0tPm1kY3RTcGVjdHJ1bVtwc3lEYXRhW2NoXS0+bG93cGFzc0xpbmUrd09mZnNldCAtIEZBREVfT1VUX0xFTiArIGldLCBmYWRlT3V0RmFjdG9yW2ldKTsKQEAgLTc2Myw3ICs3NjUsOCBAQAogCiAgICAgLyogQWR2YW5jZSBwc3ljaG9hY291c3RpY3M6IFRvbmFsaXR5IGFuZCBUTlMgKi8KICAgICBpZiAocHN5U3RhdGljWzBdLT5pc0xGRSkgewotICAgICAgICB0bnNEYXRhWzBdLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZSA9IDA7CisgICAgICAgIHRuc0RhdGFbMF0tPmRhdGFSYXcuTG9uZy5zdWJCbG9ja0luZm8udG5zQWN0aXZlW0hJRklMVF0gPSAwOworICAgICAgICB0bnNEYXRhWzBdLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZVtMT0ZJTFRdID0gMDsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTgxNSwxNSArODE4LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgJmhUaGlzUHN5Q29uZlsxXS0+dG5zQ29uZik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEZES19BU1NFUlQoY29tbW9uV2luZG93PTEpOyAvKiBhbGwgY2hlY2tzIGZvciBUTlMgZG8gb25seSB3b3JrIGZvciBjb21tb24gd2luZG93cyAod2hpY2ggaXMgYWx3YXlzIHNldCkqLworICAgICAgICAgICAgRkRLX0FTU0VSVCgxPT1jb21tb25XaW5kb3cpOyAvKiBhbGwgY2hlY2tzIGZvciBUTlMgZG8gb25seSB3b3JrIGZvciBjb21tb24gd2luZG93cyAod2hpY2ggaXMgYWx3YXlzIHNldCkqLwogICAgICAgICAgICAgZm9yKHcgPSAwOyB3IDwgbldpbmRvd3NbMF07IHcrKykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoaXNTaG9ydFdpbmRvd1swXSkKLSAgICAgICAgICAgICAgICAgICAgdG5zQWN0aXZlW3ddID0gdG5zRGF0YVswXS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bd10udG5zQWN0aXZlIHx8Ci0gICAgICAgICAgICAgICAgICAgICgoY2hhbm5lbHMgPT0gMikgPyB0bnNEYXRhWzFdLT5kYXRhUmF3LlNob3J0LnN1YkJsb2NrSW5mb1t3XS50bnNBY3RpdmUgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5zQWN0aXZlW3ddID0gdG5zRGF0YVswXS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bd10udG5zQWN0aXZlW0hJRklMVF0gfHwKKyAgICAgICAgICAgICAgICAgICAgdG5zRGF0YVswXS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bd10udG5zQWN0aXZlW0xPRklMVF0gfHwKKyAgICAgICAgICAgICAgICAgICAgdG5zRGF0YVtjaGFubmVscy0xXS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bd10udG5zQWN0aXZlW0hJRklMVF0gfHwKKyAgICAgICAgICAgICAgICAgICAgdG5zRGF0YVtjaGFubmVscy0xXS0+ZGF0YVJhdy5TaG9ydC5zdWJCbG9ja0luZm9bd10udG5zQWN0aXZlW0xPRklMVF07CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0bnNBY3RpdmVbd10gPSB0bnNEYXRhWzBdLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZSB8fAotICAgICAgICAgICAgICAgICAgICAoKGNoYW5uZWxzID09IDIpID8gdG5zRGF0YVsxXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby50bnNBY3RpdmUgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgdG5zQWN0aXZlW3ddID0gdG5zRGF0YVswXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby50bnNBY3RpdmVbSElGSUxUXSB8fAorICAgICAgICAgICAgICAgICAgICB0bnNEYXRhWzBdLT5kYXRhUmF3Lkxvbmcuc3ViQmxvY2tJbmZvLnRuc0FjdGl2ZVtMT0ZJTFRdIHx8CisgICAgICAgICAgICAgICAgICAgIHRuc0RhdGFbY2hhbm5lbHMtMV0tPmRhdGFSYXcuTG9uZy5zdWJCbG9ja0luZm8udG5zQWN0aXZlW0hJRklMVF0gfHwKKyAgICAgICAgICAgICAgICAgICAgdG5zRGF0YVtjaGFubmVscy0xXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby50bnNBY3RpdmVbTE9GSUxUXTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZm9yKGNoID0gMDsgY2ggPCBjaGFubmVsczsgY2grKykgewpAQCAtMTE1MCw4ICsxMTU3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgcHN5RGF0YVtjaF0tPnNmYk1heFNjYWxlU3BlYy5Mb25nLAogICAgICAgICAgICAgICAgICAgICAgICBzZmJUb25hbGl0eVtjaF0sCiAgICAgICAgICAgICAgICAgICAgICAgIHBzeU91dENoYW5uZWxbY2hdLT50bnNJbmZvLm9yZGVyWzBdWzBdLAotICAgICAgICAgICAgICAgICAgICAgICB0bnNEYXRhW2NoXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby5wcmVkaWN0aW9uR2FpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdG5zRGF0YVtjaF0tPmRhdGFSYXcuTG9uZy5zdWJCbG9ja0luZm8udG5zQWN0aXZlLAorICAgICAgICAgICAgICAgICAgICAgICB0bnNEYXRhW2NoXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby5wcmVkaWN0aW9uR2FpbltISUZJTFRdLAorICAgICAgICAgICAgICAgICAgICAgICB0bnNEYXRhW2NoXS0+ZGF0YVJhdy5Mb25nLnN1YkJsb2NrSW5mby50bnNBY3RpdmVbSElGSUxUXSwKICAgICAgICAgICAgICAgICAgICAgICAgcHN5T3V0Q2hhbm5lbFtjaF0tPnNmYkVuZXJneUxkRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgcHN5T3V0Q2hhbm5lbFtjaF0tPm5vaXNlTnJnICk7CiAgICAgICAgIH0gLyogIWlzTEZFICovCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL3FjX2RhdGEuaCBiL2xpYkFBQ2VuYy9zcmMvcWNfZGF0YS5oCmluZGV4IGE5MzA5YzguLjAwZDYwOTAgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvcWNfZGF0YS5oCisrKyBiL2xpYkFBQ2VuYy9zcmMvcWNfZGF0YS5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0yNjksNiArMjY5LDggQEAKICAgQklUQ05UUl9TVEFURSAqaEJpdENvdW50ZXI7CiAgIEFESl9USFJfU1RBVEUgKmhBZGpUaHI7CiAKKyAgSU5UIGRab25lUXVhbnRFbmFibGU7ICAgLyogZW5hYmxlIGRlYWQgem9uZSBxdWFudGl6ZXIgKi8KKwogfSBRQ19TVEFURTsKIAogI2VuZGlmIC8qIF9RQ19EQVRBX0ggKi8KZGlmZiAtLWdpdCBhL2xpYkFBQ2VuYy9zcmMvcWNfbWFpbi5jcHAgYi9saWJBQUNlbmMvc3JjL3FjX21haW4uY3BwCmluZGV4IGI3NDUxMGEuLjljZDczZjYgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvcWNfbWFpbi5jcHAKKysrIGIvbGliQUFDZW5jL3NyYy9xY19tYWluLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTA3LDE0ICsxMDcsMTEgQEAKIH0gVEFCX1ZCUl9RVUFMX0ZBQ1RPUjsKIAogc3RhdGljIGNvbnN0IFRBQl9WQlJfUVVBTF9GQUNUT1IgdGFibGVWYnJRdWFsRmFjdG9yW10gPSB7Ci0gIHtRQ0RBVEFfQlJfTU9ERV9DQlIsICAgRkwyRlhDT05TVF9EQkwoMC4wMGYpfSwKICAge1FDREFUQV9CUl9NT0RFX1ZCUl8xLCBGTDJGWENPTlNUX0RCTCgwLjE2MGYpfSwgLyogMzIga2JwcyBtb25vICAgQUFDLUxDICsgU0JSICsgUFMgKi8KICAge1FDREFUQV9CUl9NT0RFX1ZCUl8yLCBGTDJGWENPTlNUX0RCTCgwLjE0OGYpfSwgLyogNjQga2JwcyBzdGVyZW8gQUFDLUxDICsgU0JSICAgICAgKi8KICAge1FDREFUQV9CUl9NT0RFX1ZCUl8zLCBGTDJGWENPTlNUX0RCTCgwLjEzNWYpfSwgLyogODAgLSA5NiBrYnBzIHN0ZXJlbyBBQUMtTEMgICAgICAgKi8KICAge1FDREFUQV9CUl9NT0RFX1ZCUl80LCBGTDJGWENPTlNUX0RCTCgwLjExMWYpfSwgLyogMTI4IGticHMgc3RlcmVvIEFBQy1MQyAgICAgICAgICAgKi8KLSAge1FDREFUQV9CUl9NT0RFX1ZCUl81LCBGTDJGWENPTlNUX0RCTCgwLjA3MGYpfSwgLyogMTkyIGticHMgc3RlcmVvIEFBQy1MQyAgICAgICAgICAgKi8KLSAge1FDREFUQV9CUl9NT0RFX1NGUiwgICBGTDJGWENPTlNUX0RCTCgwLjAwZil9LAotICB7UUNEQVRBX0JSX01PREVfRkYsICAgIEZMMkZYQ09OU1RfREJMKDAuMDBmKX0KKyAge1FDREFUQV9CUl9NT0RFX1ZCUl81LCBGTDJGWENPTlNUX0RCTCgwLjA3MGYpfSAgLyogMTkyIGticHMgc3RlcmVvIEFBQy1MQyAgICAgICAgICAgKi8KIH07CiAKIHN0YXRpYyBJTlQgaXNDb25zdGFudEJpdHJhdGVNb2RlKApAQCAtMzY5LDYgKzM2Niw3IEBACiBBQUNfRU5DT0RFUl9FUlJPUiBGREthYWNFbmNfUUNJbml0KFFDX1NUQVRFICpoUUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBRQ19JTklUICppbml0KQogeworICBpbnQgaTsKICAgaFFDLT5tYXhCaXRzUGVyRnJhbWUgPSBpbml0LT5tYXhCaXRzOwogICBoUUMtPm1pbkJpdHNQZXJGcmFtZSA9IGluaXQtPm1pbkJpdHM7CiAgIGhRQy0+bkVsZW1lbnRzICAgICAgID0gaW5pdC0+Y2hhbm5lbE1hcHBpbmctPm5FbGVtZW50czsKQEAgLTM4Miw3ICszODAsNyBAQAogICBpZiAoIGlzQ29uc3RhbnRCaXRyYXRlTW9kZShoUUMtPmJpdHJhdGVNb2RlKSApIHsKICAgICBJTlQgYml0cmVzUGVyQ2hhbm5lbCA9IChoUUMtPmJpdFJlc1RvdE1heCAvIGluaXQtPmNoYW5uZWxNYXBwaW5nLT5uQ2hhbm5lbHNFZmYpOwogICAgIC8qIDA6IGZ1bGwgYml0cmVzZXJ2b2lyLCAxOiByZWR1Y2VkIGJpdHJlc2Vydm9pciwgMjogZGlzYWJsZWQgYml0cmVzZXJ2b2lyICovCi0gICAgaFFDLT5iaXREaXN0cmlidXRpb25Nb2RlID0gKGJpdHJlc1BlckNoYW5uZWw+MTAwKSA/IDAgOiAoYml0cmVzUGVyQ2hhbm5lbD4wKSA/IDEgOiAyOworICAgIGhRQy0+Yml0RGlzdHJpYnV0aW9uTW9kZSA9IChiaXRyZXNQZXJDaGFubmVsPkJJVFJFU19NSU5fTEQpID8gMCA6IChiaXRyZXNQZXJDaGFubmVsPjApID8gMSA6IDI7CiAgIH0KICAgZWxzZSB7CiAgICAgaFFDLT5iaXREaXN0cmlidXRpb25Nb2RlID0gMDsgLyogZnVsbCBiaXRyZXNlcnZvaXIgKi8KQEAgLTM5OSwyNSArMzk3LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaXQtPmF2ZXJhZ2VCaXRzL2luaXQtPm5TdWJGcmFtZXMpIC0gaFFDLT5nbG9iSGRyQml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoUUMtPm1heEJpdHNQZXJGcmFtZS9pbml0LT5jaGFubmVsTWFwcGluZy0+bkNoYW5uZWxzRWZmKTsKIAotICBzd2l0Y2goaFFDLT5iaXRyYXRlTW9kZSl7Ci0gICAgY2FzZSBRQ0RBVEFfQlJfTU9ERV9DQlI6Ci0gICAgY2FzZSBRQ0RBVEFfQlJfTU9ERV9WQlJfMToKLSAgICBjYXNlIFFDREFUQV9CUl9NT0RFX1ZCUl8yOgotICAgIGNhc2UgUUNEQVRBX0JSX01PREVfVkJSXzM6Ci0gICAgY2FzZSBRQ0RBVEFfQlJfTU9ERV9WQlJfNDoKLSAgICBjYXNlIFFDREFUQV9CUl9NT0RFX1ZCUl81OgotICAgIGNhc2UgUUNEQVRBX0JSX01PREVfU0ZSOgotICAgIGNhc2UgUUNEQVRBX0JSX01PREVfRkY6Ci0gICAgICBpZigoaW50KWhRQy0+Yml0cmF0ZU1vZGUgPCAoaW50KShzaXplb2YodGFibGVWYnJRdWFsRmFjdG9yKS9zaXplb2YoVEFCX1ZCUl9RVUFMX0ZBQ1RPUikpKXsKLSAgICAgICAgaFFDLT52YnJRdWFsRmFjdG9yID0gKEZJWFBfREJMKXRhYmxlVmJyUXVhbEZhY3RvcltoUUMtPmJpdHJhdGVNb2RlXS52YnJRdWFsRmFjdG9yOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaFFDLT52YnJRdWFsRmFjdG9yID0gRkwyRlhDT05TVF9EQkwoMC5mKTsgLyogZGVmYXVsdCBzZXR0aW5nICovCi0gICAgICB9CisgIGhRQy0+dmJyUXVhbEZhY3RvciA9IEZMMkZYQ09OU1RfREJMKDAuZik7CisgIGZvciAoaT0wOyBpPChpbnQpKHNpemVvZih0YWJsZVZiclF1YWxGYWN0b3IpL3NpemVvZihUQUJfVkJSX1FVQUxfRkFDVE9SKSk7IGkrKykgeworICAgIGlmIChoUUMtPmJpdHJhdGVNb2RlPT10YWJsZVZiclF1YWxGYWN0b3JbaV0uYml0cmF0ZU1vZGUpIHsKKyAgICAgIGhRQy0+dmJyUXVhbEZhY3RvciA9IChGSVhQX0RCTCl0YWJsZVZiclF1YWxGYWN0b3JbaV0udmJyUXVhbEZhY3RvcjsKICAgICAgIGJyZWFrOwotICAgIGNhc2UgUUNEQVRBX0JSX01PREVfSU5WQUxJRDoKLSAgICBkZWZhdWx0OgotICAgICAgaFFDLT52YnJRdWFsRmFjdG9yID0gRkwyRlhDT05TVF9EQkwoMC5mKTsKLSAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChpbml0LT5jaGFubmVsTWFwcGluZy0+bkNoYW5uZWxzRWZmID09IDEgJiYKKyAgICAgKGluaXQtPmJpdHJhdGUgLyBpbml0LT5jaGFubmVsTWFwcGluZy0+bkNoYW5uZWxzRWZmKSA8IDMyMDAwICYmCisgICAgIGluaXQtPmFkdmFuY2VkQml0c1RvUGUgIT0gMAorICAgICApCisgIHsKKyAgICBoUUMtPmRab25lUXVhbnRFbmFibGUgPSAxOworICB9IGVsc2UgeworICAgIGhRQy0+ZFpvbmVRdWFudEVuYWJsZSA9IDA7CiAgIH0KIAogICBGREthYWNFbmNfQWRqVGhySW5pdCgKQEAgLTQyOSw3ICs0MjQsOCBAQAogICAgICAgICBpbml0LT5jaGFubmVsTWFwcGluZy0+bkNoYW5uZWxzRWZmLAogICAgICAgICBpbml0LT5zYW1wbGVSYXRlLCAgICAgICAgICAgICAgICAgLyogb3V0cHV0IHNhbXBsZSByYXRlICovCiAgICAgICAgIGluaXQtPmFkdmFuY2VkQml0c1RvUGUsICAgICAgICAgICAvKiBpZiBzZXQsIGNhbGMgYml0czJQRSBmYWN0b3IgZGVwZW5kaW5nIG9uIHNhbXBsZXJhdGUgKi8KLSAgICAgICAgaFFDLT52YnJRdWFsRmFjdG9yCisgICAgICAgIGhRQy0+dmJyUXVhbEZhY3RvciwKKyAgICAgICAgaFFDLT5kWm9uZVF1YW50RW5hYmxlCiAgICAgICAgICk7CiAKICAgcmV0dXJuIEFBQ19FTkNfT0s7CkBAIC04OTIsNiArODg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dFtjXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc3lPdXRbY10tPnBzeU91dEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25zdGFudEJpdHJhdGVNb2RlKGhRQy0+Yml0cmF0ZU1vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhRQy0+aEFkalRoci0+bWF4SXRlcjJuZEd1ZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtKTsKIAogICAgICAgfSAvKiAtZW5kLSBzdWIgZnJhbWUgY291bnRlciAqLwpAQCAtOTE5LDYgKzkxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgRkRLYWFjRW5jX0VzdGltYXRlU2NhbGVGYWN0b3JzKHBzeU91dFtjXS0+cHN5T3V0RWxlbWVudFtpXS0+cHN5T3V0Q2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNFbGVtZW50W2NdW2ldLT5xY091dENoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhRQy0+aW52UXVhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhRQy0+ZFpvbmVRdWFudEVuYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY20tPmVsSW5mb1tpXS5uQ2hhbm5lbHNJbkVsKTsKIAogCkBAIC0xMDEzLDcgKzEwMTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjT3V0Q2gtPm1kY3RTcGVjdHJ1bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dENoLT5nbG9iYWxHYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjT3V0Q2gtPnNjZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dENoLT5xdWFudFNwZWMpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dENoLT5xdWFudFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaFFDLT5kWm9uZVF1YW50RW5hYmxlKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRkRLYWFjRW5jX2NhbGNNYXhWYWx1ZUluU2ZiKHBzeU91dENoLT5zZmJDbnQsCkBAIC0xMjYzLDYgKzEyNjIsOCBAQAogICAgIGNhc2UgUUNEQVRBX0JSX01PREVfVkJSXzQ6CiAgICAgY2FzZSBRQ0RBVEFfQlJfTU9ERV9WQlJfNToKICAgICAgIHFjT3V0WzBdLT50b3RGaWxsQml0cyA9IChxY091dFswXS0+Z3JhbnRlZER5bkJpdHMgLSBxY091dFswXS0+dXNlZER5bkJpdHMpJjc7IC8qIHByZWNhbGN1bGF0ZSBhbGlnbm1lbnQgYml0cyAqLworICAgICAgcWNPdXRbMF0tPnRvdGFsQml0cyA9IHFjT3V0WzBdLT5zdGF0aWNCaXRzICsgcWNPdXRbMF0tPnVzZWREeW5CaXRzICsgcWNPdXRbMF0tPnRvdEZpbGxCaXRzICsgcWNPdXRbMF0tPmVsZW1lbnRFeHRCaXRzICsgcWNPdXRbMF0tPmdsb2JhbEV4dEJpdHM7CisgICAgICBxY091dFswXS0+dG90RmlsbEJpdHMgKz0gKCBmaXhNYXgoMCwgcWNLZXJuZWwtPm1pbkJpdHNQZXJGcmFtZSAtIHFjT3V0WzBdLT50b3RhbEJpdHMpICsgNykgJiB+NzsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBRQ0RBVEFfQlJfTU9ERV9DQlI6CkBAIC0xMjcyLDYgKzEyNzMsOCBAQAogICAgICAgLyogcHJvY2Vzc2luZyBmaWxsLWJpdHMgKi8KICAgICAgIElOVCBkZWx0YUJpdFJlcyA9IHFjT3V0WzBdLT5ncmFudGVkRHluQml0cyAtIHFjT3V0WzBdLT51c2VkRHluQml0cyA7CiAgICAgICBxY091dFswXS0+dG90RmlsbEJpdHMgPSBmaXhNYXgoKGRlbHRhQml0UmVzJjcpLCAoZGVsdGFCaXRSZXMgLSAoZml4TWF4KDAsYml0UmVzU3BhY2UtNykmfjcpKSk7CisgICAgICBxY091dFswXS0+dG90YWxCaXRzID0gcWNPdXRbMF0tPnN0YXRpY0JpdHMgKyBxY091dFswXS0+dXNlZER5bkJpdHMgKyBxY091dFswXS0+dG90RmlsbEJpdHMgKyBxY091dFswXS0+ZWxlbWVudEV4dEJpdHMgKyBxY091dFswXS0+Z2xvYmFsRXh0Qml0czsKKyAgICAgIHFjT3V0WzBdLT50b3RGaWxsQml0cyArPSAoIGZpeE1heCgwLCBxY0tlcm5lbC0+bWluQml0c1BlckZyYW1lIC0gcWNPdXRbMF0tPnRvdGFsQml0cykgKyA3KSAmIH43OwogICAgICAgYnJlYWs7CiAgIH0gLyogc3dpdGNoIChxY0tlcm5lbC0+Yml0cmF0ZU1vZGUpICovCiAKZGlmZiAtLWdpdCBhL2xpYkFBQ2VuYy9zcmMvcXVhbnRpemUuY3BwIGIvbGliQUFDZW5jL3NyYy9xdWFudGl6ZS5jcHAKaW5kZXggNTM4MGUzNS4uYTc0ZGEwZSAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9xdWFudGl6ZS5jcHAKKysrIGIvbGliQUFDZW5jL3NyYy9xdWFudGl6ZS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEwNCwxMyArMTA0LDE5IEBACiBzdGF0aWMgdm9pZCBGREthYWNFbmNfcXVhbnRpemVMaW5lcyhJTlQgICAgICBnYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICBub09mTGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICptZGN0U3BlY3RydW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICAgICAgKnF1YVNwZWN0cnVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICBTSE9SVCAgICAqcXVhU3BlY3RydW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgICAgIGRab25lUXVhbnRFbmFibGUpCiB7CiAgIGludCAgIGxpbmU7Ci0gIEZJWFBfREJMIGsgPSBGTDJGWENPTlNUX0RCTCgtMC4wOTQ2ZiArIDAuNWYpPj4xNjsKKyAgRklYUF9EQkwgayA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOwogICBGSVhQX1FURCBxdWFudGl6ZXIgPSBGREthYWNFbmNfcXVhbnRUYWJsZVFbKC1nYWluKSYzXTsKICAgSU5UICAgICAgcXVhbnRpemVyc2hpZnQgPSAoKC1nYWluKT4+MikrMTsKKyAgY29uc3QgSU5UIGtTaGlmdD0xNjsKIAorICBpZiAoZFpvbmVRdWFudEVuYWJsZSkKKyAgICBrID0gRkwyRlhDT05TVF9EQkwoMC4yM2YpPj5rU2hpZnQ7CisgIGVsc2UKKyAgICBrID0gRkwyRlhDT05TVF9EQkwoLTAuMDk0NmYgKyAwLjVmKT4+a1NoaWZ0OwogCiAgIGZvciAobGluZSA9IDA7IGxpbmUgPCBub09mTGluZXM7IGxpbmUrKykKICAgewpAQCAtMjYzLDcgKzI2OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKm1kY3RTcGVjdHJ1bSwKICAgICAgICAgICAgICAgICAgICAgICBJTlQgZ2xvYmFsR2FpbiwKICAgICAgICAgICAgICAgICAgICAgICBJTlQgKnNjYWxlZmFjdG9ycywKLSAgICAgICAgICAgICAgICAgICAgICBTSE9SVCAqcXVhbnRpemVkU3BlY3RydW0pCisgICAgICAgICAgICAgICAgICAgICAgU0hPUlQgKnF1YW50aXplZFNwZWN0cnVtLAorICAgICAgICAgICAgICAgICAgICAgIElOVCBkWm9uZVF1YW50RW5hYmxlKQogewogICBJTlQgc2ZiT2ZmcyxzZmI7CiAKQEAgLTI4MCw3ICsyODcsOCBAQAogICAgIEZES2FhY0VuY19xdWFudGl6ZUxpbmVzKGdsb2JhbEdhaW4gLSBzY2FsZWZhY3RvciwgLyogUVNTICovCiAgICAgICAgICAgICAgICAgICBzZmJPZmZzZXRbc2ZiT2ZmcytzZmIrMV0gLSBzZmJPZmZzZXRbc2ZiT2ZmcytzZmJdLAogICAgICAgICAgICAgICAgICAgbWRjdFNwZWN0cnVtICsgc2ZiT2Zmc2V0W3NmYk9mZnMrc2ZiXSwKLSAgICAgICAgICAgICAgICAgIHF1YW50aXplZFNwZWN0cnVtICsgc2ZiT2Zmc2V0W3NmYk9mZnMrc2ZiXSk7CisgICAgICAgICAgICAgICAgICBxdWFudGl6ZWRTcGVjdHJ1bSArIHNmYk9mZnNldFtzZmJPZmZzK3NmYl0sCisgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlKTsKICAgfQogfQogCkBAIC0yOTYsNyArMzA0LDggQEAKIEZJWFBfREJMIEZES2FhY0VuY19jYWxjU2ZiRGlzdChGSVhQX0RCTCAqbWRjdFNwZWN0cnVtLAogICAgICAgICAgICAgICAgICAgICAgU0hPUlQgKnF1YW50U3BlY3RydW0sCiAgICAgICAgICAgICAgICAgICAgICBJTlQgbm9PZkxpbmVzLAotICAgICAgICAgICAgICAgICAgICAgSU5UIGdhaW4KKyAgICAgICAgICAgICAgICAgICAgIElOVCBnYWluLAorICAgICAgICAgICAgICAgICAgICAgSU5UIGRab25lUXVhbnRFbmFibGUKICAgICAgICAgICAgICAgICAgICAgICkKIHsKICAgSU5UIGksc2NhbGU7CkBAIC0zMTEsNyArMzIwLDggQEAKICAgICBGREthYWNFbmNfcXVhbnRpemVMaW5lcyhnYWluLAogICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICAgJm1kY3RTcGVjdHJ1bVtpXSwKLSAgICAgICAgICAgICAgICAgJnF1YW50U3BlY3RydW1baV0pOworICAgICAgICAgICAgICAgICAmcXVhbnRTcGVjdHJ1bVtpXSwKKyAgICAgICAgICAgICAgICAgIGRab25lUXVhbnRFbmFibGUpOwogCiAgICAgaWYgKGZBYnMocXVhbnRTcGVjdHJ1bVtpXSk+TUFYX1FVQU5UKSB7CiAgICAgICByZXR1cm4gRkwyRlhDT05TVF9EQkwoMC4wZik7CmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL3F1YW50aXplLmggYi9saWJBQUNlbmMvc3JjL3F1YW50aXplLmgKaW5kZXggOTc1Yjk4ZS4uMTZkM2Q0ZSAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9xdWFudGl6ZS5oCisrKyBiL2xpYkFBQ2VuYy9zcmMvcXVhbnRpemUuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTAyLDEyICsxMDIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICBJTlQgc2ZiUGVyR3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgSU5UICpzZmJPZmZzZXQsIEZJWFBfREJMICptZGN0U3BlY3RydW0sCiAgICAgICAgICAgICAgICAgICAgICAgSU5UIGdsb2JhbEdhaW4sIElOVCAqc2NhbGVmYWN0b3JzLAotICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICpxdWFudGl6ZWRTcGVjdHJ1bSk7CisgICAgICAgICAgICAgICAgICAgICAgU0hPUlQgKnF1YW50aXplZFNwZWN0cnVtLAorICAgICAgICAgICAgICAgICAgICAgIElOVCBkWm9uZVF1YW50RW5hYmxlKTsKIAogRklYUF9EQkwgRkRLYWFjRW5jX2NhbGNTZmJEaXN0KEZJWFBfREJMICptZGN0U3BlY3RydW0sCiAgICAgICAgICAgICAgICAgICAgICBTSE9SVCAqcXVhbnRTcGVjdHJ1bSwKICAgICAgICAgICAgICAgICAgICAgIElOVCBub09mTGluZXMsCi0gICAgICAgICAgICAgICAgICAgICBJTlQgZ2Fpbik7CisgICAgICAgICAgICAgICAgICAgICBJTlQgZ2FpbiwKKyAgICAgICAgICAgICAgICAgICAgIElOVCBkWm9uZVF1YW50RW5hYmxlKTsKIAogdm9pZCBGREthYWNFbmNfY2FsY1NmYlF1YW50RW5lcmd5QW5kRGlzdChGSVhQX0RCTCAqbWRjdFNwZWN0cnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICAgKnF1YW50U3BlY3RydW0sCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL3NmX2VzdGltLmNwcCBiL2xpYkFBQ2VuYy9zcmMvc2ZfZXN0aW0uY3BwCmluZGV4IDcyYjc1YTYuLjFjYjI0M2IgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvc2ZfZXN0aW0uY3BwCisrKyBiL2xpYkFBQ2VuYy9zcmMvc2ZfZXN0aW0uY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0zNjMsNyArMzYzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICBJTlQgc2NmLAogICAgICAgICAgICAgICAgICAgICAgIElOVCBtaW5TY2YsCiAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgICpkaXN0TGREYXRhLAotICAgICAgICAgICAgICAgICAgICAgIElOVCAqbWluU2NmQ2FsY3VsYXRlZAorICAgICAgICAgICAgICAgICAgICAgIElOVCAqbWluU2NmQ2FsY3VsYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICBJTlQgZFpvbmVRdWFudEVuYWJsZQogICAgICAgICAgICAgICAgICAgICAgICkKIHsKICAgIEZJWFBfREJMIHNmYkRpc3RMZERhdGE7CkBAIC0zNzUsNyArMzc2LDggQEAKICAgIHNmYkRpc3RMZERhdGEgPSBGREthYWNFbmNfY2FsY1NmYkRpc3Qoc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRTcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlKTsKICAgICptaW5TY2ZDYWxjdWxhdGVkID0gc2NmOwogICAgLyogbm1yID4gMS4yNSAtPiB0cnkgdG8gaW1wcm92ZSBubXIgKi8KICAgIGlmIChzZmJEaXN0TGREYXRhID4gKHRocmVzaExkRGF0YS1kaXN0RmFjdG9yTGREYXRhKSkgewpAQCAtMzkwLDcgKzM5Miw4IEBACiAgICAgICAgICBzZmJEaXN0TGREYXRhID0gRkRLYWFjRW5jX2NhbGNTZmJEaXN0KHNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50U3BlY1RtcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZiV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZSk7CiAKICAgICAgICAgIGlmIChzZmJEaXN0TGREYXRhIDwgc2ZiRGlzdEJlc3RMZERhdGEpIHsKICAgICAgICAgICAgIHNjZkJlc3QgPSBzY2Y7CkBAIC00MDgsNyArNDExLDggQEAKICAgICAgICAgIHNmYkRpc3RMZERhdGEgPSBGREthYWNFbmNfY2FsY1NmYkRpc3Qoc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRTcGVjVG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlKTsKIAogICAgICAgICAgaWYgKHNmYkRpc3RMZERhdGEgPCBzZmJEaXN0QmVzdExkRGF0YSkgewogICAgICAgICAgICAgc2NmQmVzdCA9IHNjZjsKQEAgLTQyOSw3ICs0MzMsOCBAQAogICAgICAgICAgc2ZiRGlzdExkRGF0YSA9IEZES2FhY0VuY19jYWxjU2ZiRGlzdChzcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudFNwZWNUbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRab25lUXVhbnRFbmFibGUpOwogCiAgICAgICAgICBpZiAoc2ZiRGlzdExkRGF0YSA8IHNmYkRpc3RBbGxvd2VkTGREYXRhKSB7CiAgICAgICAgICAgICptaW5TY2ZDYWxjdWxhdGVkID0gc2NmQmVzdCsxOwpAQCAtNDU0LDYgKzQ1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFDX09VVF9DSEFOTkVMICAgKnFjT3V0Q2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hPUlQgKnF1YW50U3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hPUlQgKnF1YW50U3BlY1RtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGRab25lUXVhbnRFbmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAqc2NmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgKm1pblNjZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKnNmYkRpc3QsCkBAIC01NzAsNyArNTc2LDggQEAKICAgICAgICAgICAgIHNmYkRpc3ROZXcgPSBGREthYWNFbmNfY2FsY1NmYkRpc3QocWNPdXRDaGFubmVsLT5tZGN0U3BlY3RydW0rc2ZiT2ZmcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRTcGVjVG1wK3NmYk9mZnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2ZBY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2ZBY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRab25lUXVhbnRFbmFibGUpOwogCiAgICAgICAgICAgICBpZiAoc2ZiRGlzdE5ldyA8IHNmYkRpc3Rbc2ZiQWN0XSkgewogICAgICAgICAgICAgICAvKiBzdWNjZXNzLCByZXBsYWNlIHNjZiBieSBuZXcgb25lICovCkBAIC02MjksNiArNjM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ19PVVRfQ0hBTk5FTCAgKnFjT3V0Q2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSE9SVCAqcXVhbnRTcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICpxdWFudFNwZWNUbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGRab25lUXVhbnRFbmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICpzY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICptaW5TY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKnNmYkRpc3QsCkBAIC03MjQsNyArNzMyLDggQEAKICAgICAgICAgICAgICAgICBzZmJEaXN0TmV3W3NmYl0gPSBGREthYWNFbmNfY2FsY1NmYkRpc3QocWNPdXRDaGFubmVsLT5tZGN0U3BlY3RydW0rc2ZiT2ZmcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudFNwZWNUbXArc2ZiT2ZmcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmJXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2ZBY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZkFjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlKTsKIAogICAgICAgICAgICAgICAgIGlmIChzZmJEaXN0TmV3W3NmYl0gPnFjT3V0Q2hhbm5lbC0+c2ZiVGhyZXNob2xkTGREYXRhW3NmYl0pIHsKICAgICAgICAgICAgICAgICAgIC8qIG5vIGltcHJvdmVtZW50LCBza2lwIGZ1cnRoZXIgZGlzdC4gY2FsY3VsYXRpb25zICovCkBAIC03NjgsNiArNzc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUNfT1VUX0NIQU5ORUwgICpxY091dENoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICpxdWFudFNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICpxdWFudFNwZWNUbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBkWm9uZVF1YW50RW5hYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgKnNjZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICptaW5TY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICpzZmJEaXN0LApAQCAtODgzLDcgKzg5Myw4IEBACiAgICAgICAgICAgICAgICAgc2ZiRGlzdE5ld1tzZmJdID0gRkRLYWFjRW5jX2NhbGNTZmJEaXN0KHFjT3V0Q2hhbm5lbC0+bWRjdFNwZWN0cnVtK3NmYk9mZnNbc2ZiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudFNwZWNUbXArc2ZiT2Zmc1tzZmJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYk9mZnNbc2ZiKzFdLXNmYk9mZnNbc2ZiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2ZOZXcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZk5ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlKTsKIAogICAgICAgICAgICAgICAgIGlmIChzZmJEaXN0TmV3W3NmYl0gPiBzZmJEaXN0TWF4W3NmYl0pIHsKICAgICAgICAgICAgICAgICAgIC8qIG5vIGltcHJvdmVtZW50LCBza2lwIGZ1cnRoZXIgZGlzdC4gY2FsY3VsYXRpb25zICovCkBAIC05NjMsNyArOTc0LDggQEAKICAgICAgICAgICAgICAgc2ZiRGlzdE5ld1tzZmJdID0gRkRLYWFjRW5jX2NhbGNTZmJEaXN0KHFjT3V0Q2hhbm5lbC0+bWRjdFNwZWN0cnVtK3NmYk9mZnNbc2ZiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50U3BlY1RtcCtzZmJPZmZzW3NmYl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmJPZmZzW3NmYisxXS1zZmJPZmZzW3NmYl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2ZOZXcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmTmV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZSk7CiAKICAgICAgICAgICAgICAgaWYgKHNmYkRpc3ROZXdbc2ZiXSA+IHFjT3V0Q2hhbm5lbC0+c2ZiVGhyZXNob2xkTGREYXRhW3NmYl0pIHsKICAgICAgICAgICAgICAgICAvKiBubyBpbXByb3ZlbWVudCwgc2tpcCBmdXJ0aGVyIGRpc3QuIGNhbGN1bGF0aW9ucyAqLwpAQCAtMTA1OCw3ICsxMDcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgKlJFU1RSSUNUIGdsb2JhbEdhaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKlJFU1RSSUNUIHNmYkZvcm1GYWN0b3JMZERhdGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsY29uc3QgSU5UIGludlF1YW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNIT1JUICpSRVNUUklDVCBxdWFudFNwZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSE9SVCAqUkVTVFJJQ1QgcXVhbnRTcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElOVCBkWm9uZVF1YW50RW5hYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogewogICBJTlQgaSwgaiwgc2ZiLCBzZmJPZmZzOwpAQCAtMTE2MCw3ICsxMTczLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50U3BlY1RtcCtwc3lPdXRDaGFubmVsLT5zZmJPZmZzZXRzW3NmYk9mZnMrc2ZiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzeU91dENoYW5uZWwtPnNmYk9mZnNldHNbc2ZiT2ZmcytzZmIrMV0tcHN5T3V0Q2hhbm5lbC0+c2ZiT2Zmc2V0c1tzZmJPZmZzK3NmYl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hMZERhdGEsIHNjZkludCwgbWluU2ZNYXhRdWFudFtzZmJPZmZzK3NmYl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2ZiRGlzdExkRGF0YVtzZmJPZmZzK3NmYl0sICZtaW5TY2ZDYWxjdWxhdGVkW3NmYk9mZnMrc2ZiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNmYkRpc3RMZERhdGFbc2ZiT2ZmcytzZmJdLCAmbWluU2NmQ2FsY3VsYXRlZFtzZmJPZmZzK3NmYl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICB9CiAgICAgICAgIHNjZltzZmJPZmZzK3NmYl0gPSBzY2ZJbnQ7CkBAIC0xMTg3LDIwICsxMjAxLDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNmYk5SZWxldmFudExpbmVzKTsKIAogCi0gICAgRkRLYWFjRW5jX2Fzc2ltaWxhdGVTaW5nbGVTY2YocHN5T3V0Q2hhbm5lbCwgcWNPdXRDaGFubmVsLCBxdWFudFNwZWMsIHF1YW50U3BlY1RtcCwgc2NmLAorICAgIEZES2FhY0VuY19hc3NpbWlsYXRlU2luZ2xlU2NmKHBzeU91dENoYW5uZWwsIHFjT3V0Q2hhbm5lbCwgcXVhbnRTcGVjLCBxdWFudFNwZWNUbXAsCisgICAgICAgICAgICAgICAgICAgICAgICBkWm9uZVF1YW50RW5hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NmLAogICAgICAgICAgICAgICAgICAgICAgICAgbWluU2ZNYXhRdWFudCwgc2ZiRGlzdExkRGF0YSwgc2ZiQ29uc3RQZVBhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZmJGb3JtRmFjdG9yTGREYXRhLCBzZmJOUmVsZXZhbnRMaW5lcywgbWluU2NmQ2FsY3VsYXRlZCwgMSk7CiAKKyAgICBpZihpbnZRdWFudCA+IDEpIHsKKyAgICAgIEZES2FhY0VuY19hc3NpbWlsYXRlTXVsdGlwbGVTY2YocHN5T3V0Q2hhbm5lbCwgcWNPdXRDaGFubmVsLCBxdWFudFNwZWMsIHF1YW50U3BlY1RtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRab25lUXVhbnRFbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICBzY2YsCisgICAgICAgICAgICAgICAgICAgICAgICBtaW5TZk1heFF1YW50LCBzZmJEaXN0TGREYXRhLCBzZmJDb25zdFBlUGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNmYkZvcm1GYWN0b3JMZERhdGEsIHNmYk5SZWxldmFudExpbmVzKTsKIAotICAgIEZES2FhY0VuY19hc3NpbWlsYXRlTXVsdGlwbGVTY2YocHN5T3V0Q2hhbm5lbCwgcWNPdXRDaGFubmVsLCBxdWFudFNwZWMsIHF1YW50U3BlY1RtcCwgc2NmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5TZk1heFF1YW50LCBzZmJEaXN0TGREYXRhLCBzZmJDb25zdFBlUGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZiRm9ybUZhY3RvckxkRGF0YSwgc2ZiTlJlbGV2YW50TGluZXMpOworICAgICAgRkRLYWFjRW5jX2Fzc2ltaWxhdGVNdWx0aXBsZVNjZihwc3lPdXRDaGFubmVsLCBxY091dENoYW5uZWwsIHF1YW50U3BlYywgcXVhbnRTcGVjVG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pblNmTWF4UXVhbnQsIHNmYkRpc3RMZERhdGEsIHNmYkNvbnN0UGVQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc2ZiRm9ybUZhY3RvckxkRGF0YSwgc2ZiTlJlbGV2YW50TGluZXMpOwogCiAKLSAgICBGREthYWNFbmNfRkRLYWFjRW5jX2Fzc2ltaWxhdGVNdWx0aXBsZVNjZjIocHN5T3V0Q2hhbm5lbCwgcWNPdXRDaGFubmVsLCBxdWFudFNwZWMsIHF1YW50U3BlY1RtcCwgc2NmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluU2ZNYXhRdWFudCwgc2ZiRGlzdExkRGF0YSwgc2ZiQ29uc3RQZVBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZmJGb3JtRmFjdG9yTGREYXRhLCBzZmJOUmVsZXZhbnRMaW5lcyk7Ci0KKyAgICAgIEZES2FhY0VuY19GREthYWNFbmNfYXNzaW1pbGF0ZU11bHRpcGxlU2NmMihwc3lPdXRDaGFubmVsLCBxY091dENoYW5uZWwsIHF1YW50U3BlYywgcXVhbnRTcGVjVG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pblNmTWF4UXVhbnQsIHNmYkRpc3RMZERhdGEsIHNmYkNvbnN0UGVQYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgc2ZiRm9ybUZhY3RvckxkRGF0YSwgc2ZiTlJlbGV2YW50TGluZXMpOworICAgIH0KICAgfQogCiAKQEAgLTEyMjMsNyArMTI0OSw4IEBACiAgICAgICAgICAgICAgICBGREthYWNFbmNfY2FsY1NmYkRpc3QocWNPdXRDaGFubmVsLT5tZGN0U3BlY3RydW0rcHN5T3V0Q2hhbm5lbC0+c2ZiT2Zmc2V0c1tzZmJPZmZzK3NmYl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRTcGVjK3BzeU91dENoYW5uZWwtPnNmYk9mZnNldHNbc2ZiT2ZmcytzZmJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzeU91dENoYW5uZWwtPnNmYk9mZnNldHNbc2ZiT2ZmcytzZmIrMV0tcHN5T3V0Q2hhbm5lbC0+c2ZiT2Zmc2V0c1tzZmJPZmZzK3NmYl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NmW3NmYk9mZnMrc2ZiXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjZltzZmJPZmZzK3NmYl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgIH0KICAgICAgIH0KQEAgLTEyODEsNiArMTMwOCw3IEBACiBGREthYWNFbmNfRXN0aW1hdGVTY2FsZUZhY3RvcnMoUFNZX09VVF9DSEFOTkVMICpwc3lPdXRDaGFubmVsW10sCiAgICAgICAgICAgICAgICAgICAgICBRQ19PVVRfQ0hBTk5FTCogcWNPdXRDaGFubmVsW10sCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaW52UXVhbnQsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBJTlQgZFpvbmVRdWFudEVuYWJsZSwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBuQ2hhbm5lbHMpCiB7CiAgIGludCBjaDsKQEAgLTEyOTMsNyArMTMyMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnFjT3V0Q2hhbm5lbFtjaF0tPmdsb2JhbEdhaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNPdXRDaGFubmVsW2NoXS0+c2ZiRm9ybUZhY3RvckxkRGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxpbnZRdWFudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dENoYW5uZWxbY2hdLT5xdWFudFNwZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY091dENoYW5uZWxbY2hdLT5xdWFudFNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFpvbmVRdWFudEVuYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgIH0KIApkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9zZl9lc3RpbS5oIGIvbGliQUFDZW5jL3NyYy9zZl9lc3RpbS5oCmluZGV4IGI1YWMwMDAuLmVmOGQzNjYgMTAwNjQ0Ci0tLSBhL2xpYkFBQ2VuYy9zcmMvc2ZfZXN0aW0uaAorKysgYi9saWJBQUNlbmMvc3JjL3NmX2VzdGltLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTExMCw2ICsxMTAsNyBAQAogRkRLYWFjRW5jX0VzdGltYXRlU2NhbGVGYWN0b3JzKFBTWV9PVVRfQ0hBTk5FTCAqcHN5T3V0Q2hhbm5lbFtdLAogICAgICAgICAgICAgICAgICAgICAgUUNfT1VUX0NIQU5ORUwqIHFjT3V0Q2hhbm5lbFtdLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGludlF1YW50LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgSU5UIGRab25lUXVhbnRFbmFibGUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbkNoYW5uZWxzKTsKIAogCmRpZmYgLS1naXQgYS9saWJBQUNlbmMvc3JjL3Ruc19mdW5jLmggYi9saWJBQUNlbmMvc3JjL3Ruc19mdW5jLmgKaW5kZXggNmVlMGVkYi4uNWU1MjY1ZCAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy90bnNfZnVuYy5oCisrKyBiL2xpYkFBQ2VuYy9zcmMvdG5zX2Z1bmMuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTAwLDYgKzEwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNoYW5uZWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBibG9ja3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGdyYW51bGVMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGlzTG93RGVsYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGxkU2JyUHJlc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBUTlNfQ09ORklHICp0bnNDb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUFNZX0NPTkZJR1VSQVRJT04gKnBzeUNvbmZpZywKZGlmZiAtLWdpdCBhL2xpYkZESy9pbmNsdWRlL2ZpeHBvaW50X21hdGguaCBiL2xpYkZESy9pbmNsdWRlL2ZpeHBvaW50X21hdGguaAppbmRleCBkZjE0MWQzLi4wZDUwZjBhIDEwMDY0NAotLS0gYS9saWJGREsvaW5jbHVkZS9maXhwb2ludF9tYXRoLmgKKysrIGIvbGliRkRLL2luY2x1ZGUvZml4cG9pbnRfbWF0aC5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05NCw2ICs5NCwzNSBAQAogCiAjaW5jbHVkZSAiY29tbW9uX2ZpeC5oIgogCisjaWYgIWRlZmluZWQoRlVOQ1RJT05fZklzTGVzc1RoYW4pCisvKioKKyAqIFxicmllZiBDb21wYXJlcyB0d28gZml4cG9pbnQgdmFsdWVzIGluY2wuIHNjYWxpbmcuCisgKiBccGFyYW0gYV9tIG1hbnRpc3NhIG9mIHRoZSBmaXJzdCBpbnB1dCB2YWx1ZS4KKyAqIFxwYXJhbSBhX2UgZXhwb25lbnQgb2YgdGhlIGZpcnN0IGlucHV0IHZhbHVlLgorICogXHBhcmFtIGJfbSBtYW50aXNzYSBvZiB0aGUgc2Vjb25kIGlucHV0IHZhbHVlLgorICogXHBhcmFtIGJfZSBleHBvbmVudCBvZiB0aGUgc2Vjb25kIGlucHV0IHZhbHVlLgorICogXHJldHVybiBub24temVybyBpZiAoYV9tKjJeYV9lKSA8IChiX20qMl5iX2UpLCAwIG90aGVyd2lzZQorICovCitGREtfSU5MSU5FIElOVCBmSXNMZXNzVGhhbihGSVhQX0RCTCBhX20sIElOVCBhX2UsIEZJWFBfREJMIGJfbSwgSU5UIGJfZSkKK3sKKyAgaWYgKGFfZSA+IGJfZSkgeworICAgIHJldHVybiAoYl9tID4+IGZNaW4oYV9lLWJfZSwgREZSQUNUX0JJVFMtMSkgPiBhX20pOworICB9IGVsc2UgeworICAgIHJldHVybiAoYV9tID4+IGZNaW4oYl9lLWFfZSwgREZSQUNUX0JJVFMtMSkgPCBiX20pOworICB9Cit9CisKK0ZES19JTkxJTkUgSU5UIGZJc0xlc3NUaGFuKEZJWFBfU0dMIGFfbSwgSU5UIGFfZSwgRklYUF9TR0wgYl9tLCBJTlQgYl9lKQoreworICBpZiAoYV9lID4gYl9lKSB7CisgICAgcmV0dXJuIChiX20gPj4gZk1pbihhX2UtYl9lLCBGUkFDVF9CSVRTLTEpID4gYV9tKTsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gKGFfbSA+PiBmTWluKGJfZS1hX2UsIEZSQUNUX0JJVFMtMSkgPCBiX20pOworICB9Cit9CisjZW5kaWYKKworCiAKICNkZWZpbmUgTERfREFUQV9TQ0FMSU5HICg2NC4wZikKICNkZWZpbmUgTERfREFUQV9TSElGVCAgIDYgICAvKiBwb3coMiwgTERfREFUQV9TSElGVCkgPSBMRF9EQVRBX1NDQUxJTkcgKi8KQEAgLTQzOCwxMSArNDY3LDExIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gYXJyYXkgZm9yIDEvbiwgbj0xLi41MAorIGFycmF5IGZvciAxL24sIG49MS4uODAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICBleHRlcm4gY29uc3QgRklYUF9EQkwgaW52Q291bnRbNTBdOworICBleHRlcm4gY29uc3QgRklYUF9EQkwgaW52Q291bnRbODBdOwogCiAgIExOS19TRUNUSU9OX0lOSVRDT0RFCiAgIGlubGluZSB2b2lkIEluaXRJbnZJbnQodm9pZCkge30KQEAgLTQ1MCwxNCArNDc5LDE0IEBACiAKIC8qKgogICogXGJyaWVmIENhbGN1bGF0ZSB0aGUgdmFsdWUgb2YgMS9pIHdoZXJlIGkgaXMgYSBpbnRlZ2VyIHZhbHVlLiBJdCBzdXBwb3J0cwotICogICAgICAgIGlucHV0IHZhbHVlcyBmcm9tIDEgdXB0byA1MC4KKyAqICAgICAgICBpbnB1dCB2YWx1ZXMgZnJvbSAxIHVwdG8gODAuCiAgKiBccGFyYW0gaW50VmFsdWUgSW50ZWdlciBpbnB1dCB2YWx1ZS4KICAqIFxwYXJhbSBGSVhQX0RCTCByZXByZXNlbnRhdGlvbiBvZiAxL2ludFZhbHVlCiAgKi8KIGlubGluZSBGSVhQX0RCTCBHZXRJbnZJbnQoaW50IGludFZhbHVlKQogewotICBGREtfQVNTRVJUKChpbnRWYWx1ZSA+IDApICYmIChpbnRWYWx1ZSA8IDUwKSk7Ci0gIEZES19BU1NFUlQoaW50VmFsdWU8NTApOworICBGREtfQVNTRVJUKChpbnRWYWx1ZSA+IDApICYmIChpbnRWYWx1ZSA8IDgwKSk7CisgIEZES19BU1NFUlQoaW50VmFsdWU8ODApOwogCXJldHVybiBpbnZDb3VudFtpbnRWYWx1ZV07CiB9CiAKZGlmZiAtLWdpdCBhL2xpYkZESy9zcmMvRkRLX2NvcmUuY3BwIGIvbGliRkRLL3NyYy9GREtfY29yZS5jcHAKaW5kZXggYTcwNmViMC4uMWQ4YWM3YiAxMDA2NDQKLS0tIGEvbGliRkRLL3NyYy9GREtfY29yZS5jcHAKKysrIGIvbGliRkRLL3NyYy9GREtfY29yZS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTkzLDcgKzkzLDcgQEAKIC8qIEZESyB0b29scyBsaWJyYXJ5IGluZm8gKi8KICNkZWZpbmUgRkRLX1RPT0xTX0xJQl9WTDAgMgogI2RlZmluZSBGREtfVE9PTFNfTElCX1ZMMSAzCi0jZGVmaW5lIEZES19UT09MU19MSUJfVkwyIDIKKyNkZWZpbmUgRkRLX1RPT0xTX0xJQl9WTDIgNgogI2RlZmluZSBGREtfVE9PTFNfTElCX1RJVExFICJGREsgVG9vbHMiCiAjaWZkZWYgX19BTkRST0lEX18KICNkZWZpbmUgRkRLX1RPT0xTX0xJQl9CVUlMRF9EQVRFICIiCmRpZmYgLS1naXQgYS9saWJGREsvc3JjL0ZES190b29sc19yb20uY3BwIGIvbGliRkRLL3NyYy9GREtfdG9vbHNfcm9tLmNwcAppbmRleCBjNmU1MTdlLi4yOWUzN2YyIDEwMDY0NAotLS0gYS9saWJGREsvc3JjL0ZES190b29sc19yb20uY3BwCisrKyBiL2xpYkZESy9zcmMvRkRLX3Rvb2xzX3JvbS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTE5MDIsNyArMTkwMiw3IEBACiAweGI1MDR9OwogCiBMTktfU0VDVElPTl9DT05TVERBVEFfTDEKLWNvbnN0IEZJWFBfREJMIGludkNvdW50WzUwXT0gIC8qIFRoaXMgY291bGQgYmUgMTYtYml0IHdpZGUgKi8KK2NvbnN0IEZJWFBfREJMIGludkNvdW50WzgwXT0gIC8qIFRoaXMgY291bGQgYmUgMTYtYml0IHdpZGUgKi8KIHsKICAgICAweDAwMDAwMDAwLCAweDdmZmZmZmZmLCAweDQwMDAwMDAwLCAweDJhYWFhYWFiLCAweDIwMDAwMDAwLAogICAgIDB4MTk5OTk5OWEsIDB4MTU1NTU1NTUsIDB4MTI0OTI0OTIsIDB4MTAwMDAwMDAsIDB4MGUzOGUzOGUsCkBAIC0xOTEzLDcgKzE5MTMsMTMgQEAKICAgICAweDA0NDQ0NDQ0LCAweDA0MjEwODQyLCAweDA0MDAwMDAwLCAweDAzZTBmODNlLCAweDAzYzNjM2M0LAogICAgIDB4MDNhODNhODQsIDB4MDM4ZTM4ZTQsIDB4MDM3NTlmMjMsIDB4MDM1ZTUwZDgsIDB4MDM0ODM0ODMsCiAgICAgMHgwMzMzMzMzMywgMHgwMzFmMzgzMiwgMHgwMzBjMzBjMywgMHgwMmZhMGJlOCwgMHgwMmU4YmEyZiwKLSAgICAweDAyZDgyZDgzLCAweDAyYzg1OTBiLCAweDAyYjkzMTA1LCAweDAyYWFhYWFiLCAweDAyOWNiYzE1CisgICAgMHgwMmQ4MmQ4MywgMHgwMmM4NTkwYiwgMHgwMmI5MzEwNSwgMHgwMmFhYWFhYiwgMHgwMjljYmMxNSwKKyAgICAweDAyOGY1YzI5LCAweDAyODI4MjgzLCAweDAyNzYyNzYyLCAweDAyNmE0MzlmLCAweDAyNWVkMDk4LAorICAgIDB4MDI1M2M4MjUsIDB4MDI0OTI0OTIsIDB4MDIzZWUwOTAsIDB4MDIzNGY3MmMsIDB4MDIyYjYzY2MsCisgICAgMHgwMjIyMjIyMiwgMHgwMjE5MmUyYSwgMHgwMjEwODQyMSwgMHgwMjA4MjA4MiwgMHgwMjAwMDAwMCwKKyAgICAweDAxZjgxZjgyLCAweDAxZjA3YzFmLCAweDAxZTkxMzFiLCAweDAxZTFlMWUyLCAweDAxZGFlNjA3LAorICAgIDB4MDFkNDFkNDIsIDB4MDFjZDg1NjksIDB4MDFjNzFjNzIsIDB4MDFjMGUwNzAsIDB4MDFiYWNmOTEsCisgICAgMHgwMWI0ZTgxYiwgMHgwMWFmMjg2YywgMHgwMWE5OGVmNiwgMHgwMWE0MWE0MiwgMHgwMTllYzhlOQogfTsKIAogCkBAIC0yMDMzLDE5ICsyMDM5LDYgQEAKICAgeyAmbm9kZV9hYWNfY3BlMCwgJm5vZGVfYWFjX2NwZTEgfQogfTsKIAotI2RlZmluZSBlbF9tcGVnc3Jlc19zY2UgJmVsX2FhY19zY2VbMl0KLQotc3RhdGljIGNvbnN0IGVsZW1lbnRfbGlzdF90IG5vZGVfbXBlZ3NyZXNfc2NlID0gewotICBlbF9tcGVnc3Jlc19zY2UsCi0gIHsgTlVMTCwgTlVMTCB9Ci19OwotCi1zdGF0aWMgY29uc3QgZWxlbWVudF9saXN0X3Qgbm9kZV9tcGVnc3Jlc19jcGUgPSB7Ci0gIGVsX2FhY19jcGUxLAotICB7IE5VTEwsIE5VTEwgfQotfTsKLQotCiAvKgogICogQU9UIEMtIHsxNywyM30KICAqIGVwQ29uZmlnID0gMCwxCkBAIC0yMjQzLDcgKzIyMzYsNyBAQAogICBpY3NfaW5mbywKICAgbXMsCiAgIGx0cF9kYXRhX3ByZXNlbnQsCi0gIGx0cF9kYXRhLAorICAvKiBsdHBfZGF0YSwgKi8KICAgZ2xvYmFsX2dhaW4sCiAgIHNlY3Rpb25fZGF0YSwKICAgc2NhbGVfZmFjdG9yX2RhdGEsCkBAIC0yMjU0LDcgKzIyNDcsNyBAQAogICBuZXh0X2NoYW5uZWwsCiAKICAgbHRwX2RhdGFfcHJlc2VudCwKLSAgbHRwX2RhdGEsCisgIC8qIGx0cF9kYXRhLCAqLwogICBnbG9iYWxfZ2FpbiwKICAgc2VjdGlvbl9kYXRhLAogICBzY2FsZV9mYWN0b3JfZGF0YSwKQEAgLTIyOTcsNyArMjI5MCwxNzggQEAKICAgeyAmbm9kZV9hYWNfY3BlMF9lcGMxLCAmbm9kZV9hYWNfY3BlMV9lcGMxIH0KIH07CiAKKy8qCisgKiBBT1QgPSAyMAorICogZXBDb25maWcgPSAwCisgKi8KK3N0YXRpYyBjb25zdCByYmRfaWRfdCBlbF9zY2FsX3NjZV9lcGMwW10gPSB7CisgIGljc19pbmZvLCAgICAgICAgICAgIC8qIEVTQyAxICovCisgIHRuc19kYXRhX3ByZXNlbnQsCisgIGx0cF9kYXRhX3ByZXNlbnQsCisgIC8qIGx0cF9kYXRhLCAqLworICBnbG9iYWxfZ2FpbiwKKyAgc2VjdGlvbl9kYXRhLAorICBzY2FsZV9mYWN0b3JfZGF0YSwKKyAgZXNjMV9oY3IsCisgIGVzYzJfcnZsYywgICAgICAgICAgIC8qIEVTQyAyICovCisgIHRuc19kYXRhLCAgICAgICAgICAgIC8qIEVTQyAzICovCisgIHNwZWN0cmFsX2RhdGEsICAgICAgIC8qIEVTQyA0ICovCisgIGVuZF9vZl9zZXF1ZW5jZQorfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBlbGVtZW50X2xpc3Qgbm9kZV9zY2FsX3NjZV9lcGMwID0geworICBlbF9zY2FsX3NjZV9lcGMwLAorICB7IE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHJiZF9pZF90IGVsX3NjYWxfY3BlX2VwYzBbXSA9IHsKKyAgaWNzX2luZm8sICAgICAgICAgICAgLyogRVNDIDAgKi8KKyAgbXMsCisgIHRuc19kYXRhX3ByZXNlbnQsICAgIC8qIEVTQyAxIChjaCAwKSAqLworICBsdHBfZGF0YV9wcmVzZW50LAorICAvKiBsdHBfZGF0YSwgKi8KKyAgZ2xvYmFsX2dhaW4sCisgIHNlY3Rpb25fZGF0YSwKKyAgc2NhbGVfZmFjdG9yX2RhdGEsCisgIGVzYzFfaGNyLAorICBlc2MyX3J2bGMsICAgICAgICAgICAvKiBFU0MgMiAoY2ggMCkgKi8KKyAgdG5zX2RhdGEsICAgICAgICAgICAgLyogRVNDIDMgKGNoIDApICovCisgIHNwZWN0cmFsX2RhdGEsICAgICAgIC8qIEVTQyA0IChjaCAwKSAqLworICBuZXh0X2NoYW5uZWwsCisgIHRuc19kYXRhX3ByZXNlbnQsICAgIC8qIEVTQyAxIChjaCAxKSAqLworICBsdHBfZGF0YV9wcmVzZW50LAorICBnbG9iYWxfZ2FpbiwKKyAgc2VjdGlvbl9kYXRhLAorICBzY2FsZV9mYWN0b3JfZGF0YSwKKyAgZXNjMV9oY3IsCisgIGVzYzJfcnZsYywgICAgICAgICAgIC8qIEVTQyAyIChjaCAxKSAqLworICB0bnNfZGF0YSwgICAgICAgICAgICAvKiBFU0MgMyAoY2ggMSkgKi8KKyAgc3BlY3RyYWxfZGF0YSwgICAgICAgLyogRVNDIDQgKGNoIDEpICovCisgIGVuZF9vZl9zZXF1ZW5jZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlbGVtZW50X2xpc3Qgbm9kZV9zY2FsX2NwZV9lcGMwID0geworICBlbF9zY2FsX2NwZV9lcGMwLAorICB7IE5VTEwsIE5VTEwgfQorfTsKKworLyoKKyAqIEFPVCA9IDIwCisgKiBlcENvbmZpZyA9IDEKKyAqLworc3RhdGljIGNvbnN0IHJiZF9pZF90IGVsX3NjYWxfc2NlX2VwYzFbXSA9IHsKKyAgaWNzX2luZm8sCisgIHRuc19kYXRhX3ByZXNlbnQsCisgIGx0cF9kYXRhX3ByZXNlbnQsCisgIC8qIGx0cF9kYXRhLCAqLworICBnbG9iYWxfZ2FpbiwKKyAgc2VjdGlvbl9kYXRhLAorICBzY2FsZV9mYWN0b3JfZGF0YSwKKyAgZXNjMV9oY3IsCisgIHRuc19kYXRhLAorICBzcGVjdHJhbF9kYXRhLAorICBlbmRfb2Zfc2VxdWVuY2UKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWxlbWVudF9saXN0IG5vZGVfc2NhbF9zY2VfZXBjMSA9IHsKKyAgZWxfc2NhbF9zY2VfZXBjMSwKKyAgeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCByYmRfaWRfdCBlbF9zY2FsX2NwZV9lcGMxW10gPSB7CisgIGljc19pbmZvLAorICBtcywKKyAgdG5zX2RhdGFfcHJlc2VudCwKKyAgbHRwX2RhdGFfcHJlc2VudCwKKyAgLyogbHRwX2RhdGEsICovCisgIGdsb2JhbF9nYWluLAorICBzZWN0aW9uX2RhdGEsCisgIHNjYWxlX2ZhY3Rvcl9kYXRhLAorICBlc2MxX2hjciwKKyAgbmV4dF9jaGFubmVsLAorICB0bnNfZGF0YV9wcmVzZW50LAorICBsdHBfZGF0YV9wcmVzZW50LAorICAvKiBsdHBfZGF0YSwgKi8KKyAgZ2xvYmFsX2dhaW4sCisgIHNlY3Rpb25fZGF0YSwKKyAgc2NhbGVfZmFjdG9yX2RhdGEsCisgIGVzYzFfaGNyLAorICBuZXh0X2NoYW5uZWwsCisgIHRuc19kYXRhLAorICBuZXh0X2NoYW5uZWwsCisgIHRuc19kYXRhLAorICBuZXh0X2NoYW5uZWwsCisgIHNwZWN0cmFsX2RhdGEsCisgIG5leHRfY2hhbm5lbCwKKyAgc3BlY3RyYWxfZGF0YSwKKyAgZW5kX29mX3NlcXVlbmNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGVsZW1lbnRfbGlzdCBub2RlX3NjYWxfY3BlX2VwYzEgPSB7CisgIGVsX3NjYWxfY3BlX2VwYzEsCisgIHsgTlVMTCwgTlVMTCB9Cit9OworCisvKgorICogUHNldWRvIEFPVCBmb3IgRFJNL0RSTSsgKHNpbWlsYXIgdG8gQU9UIDIwKQorICogRGVyaXZlZCBmcm9tIGVwQ29uZmlnID0gMQorICovCitzdGF0aWMgY29uc3QgcmJkX2lkX3QgZWxfZHJtX3NjZVtdID0geworICBkcm1jcmNfc3RhcnRfcmVnLAorICBpY3NfaW5mbywKKyAgdG5zX2RhdGFfcHJlc2VudCwKKyAgbHRwX2RhdGFfcHJlc2VudCwKKyAgLyogbHRwX2RhdGEsICovCisgIGdsb2JhbF9nYWluLAorICBzZWN0aW9uX2RhdGEsCisgIHNjYWxlX2ZhY3Rvcl9kYXRhLAorICBlc2MxX2hjciwKKyAgdG5zX2RhdGEsCisgIGRybWNyY19lbmRfcmVnLAorICBzcGVjdHJhbF9kYXRhLAorICBlbmRfb2Zfc2VxdWVuY2UKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWxlbWVudF9saXN0IG5vZGVfZHJtX3NjZSA9IHsKKyAgZWxfZHJtX3NjZSwKKyAgeyBOVUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCByYmRfaWRfdCBlbF9kcm1fY3BlW10gPSB7CisgIGRybWNyY19zdGFydF9yZWcsCisgIGljc19pbmZvLAorICBtcywKKyAgdG5zX2RhdGFfcHJlc2VudCwKKyAgbHRwX2RhdGFfcHJlc2VudCwKKyAgLyogbHRwX2RhdGEsICovCisgIGdsb2JhbF9nYWluLAorICBzZWN0aW9uX2RhdGEsCisgIHNjYWxlX2ZhY3Rvcl9kYXRhLAorICBlc2MxX2hjciwKKyAgbmV4dF9jaGFubmVsLAorICB0bnNfZGF0YV9wcmVzZW50LAorICBsdHBfZGF0YV9wcmVzZW50LAorICAvKiBsdHBfZGF0YSwgKi8KKyAgZ2xvYmFsX2dhaW4sCisgIHNlY3Rpb25fZGF0YSwKKyAgc2NhbGVfZmFjdG9yX2RhdGEsCisgIGVzYzFfaGNyLAorICBuZXh0X2NoYW5uZWwsCisgIHRuc19kYXRhLAorICBuZXh0X2NoYW5uZWwsCisgIHRuc19kYXRhLAorICBkcm1jcmNfZW5kX3JlZywKKyAgbmV4dF9jaGFubmVsLAorICBzcGVjdHJhbF9kYXRhLAorICBuZXh0X2NoYW5uZWwsCisgIHNwZWN0cmFsX2RhdGEsCisgIGVuZF9vZl9zZXF1ZW5jZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlbGVtZW50X2xpc3Qgbm9kZV9kcm1fY3BlID0geworICBlbF9kcm1fY3BlLAorICB7IE5VTEwsIE5VTEwgfQorfTsKIAogLyoKICAqIEFPVCA9IDM5CkBAIC0yNDEyLDYgKzI1NzYsMTkgQEAKICAgICAgICAgICByZXR1cm4gJm5vZGVfYWFjX2NwZV9lcGMxOwogICAgICAgfQogICAgICAgYnJlYWs7CisgICAgY2FzZSBBT1RfRVJfQUFDX1NDQUw6CisgICAgICBpZiAobkNoYW5uZWxzID09IDEpIHsKKyAgICAgICAgaWYgKGVwQ29uZmlnIDw9IDApCisgICAgICAgICAgcmV0dXJuICZub2RlX3NjYWxfc2NlX2VwYzA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICByZXR1cm4gJm5vZGVfc2NhbF9zY2VfZXBjMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChlcENvbmZpZyA8PSAwKQorICAgICAgICAgIHJldHVybiAmbm9kZV9zY2FsX2NwZV9lcGMwOworICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuICZub2RlX3NjYWxfY3BlX2VwYzE7CisgICAgICB9CisgICAgICBicmVhazsKICAgICBjYXNlIEFPVF9FUl9BQUNfRUxEOgogICAgICAgaWYgKG5DaGFubmVscyA9PSAxKSB7CiAgICAgICAgIGlmIChlcENvbmZpZyA8PSAwKQpAQCAtMjQyNCwxMSArMjYwMSwxNCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgcmV0dXJuICZub2RlX2VsZF9jcGVfZXBjMTsKICAgICAgIH0KLSAgICBjYXNlIEFPVF9NUEVHU19SRVNJRFVBTFM6CisgICAgY2FzZSBBT1RfRFJNX0FBQzoKKyAgICBjYXNlIEFPVF9EUk1fU0JSOgorICAgIGNhc2UgQU9UX0RSTV9NUEVHX1BTOgorICAgICAgRkRLX0FTU0VSVChlcENvbmZpZyA9PSAxKTsKICAgICAgIGlmIChuQ2hhbm5lbHMgPT0gMSkgewotICAgICAgICByZXR1cm4gJm5vZGVfbXBlZ3NyZXNfc2NlOworICAgICAgICByZXR1cm4gJm5vZGVfZHJtX3NjZTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAmbm9kZV9tcGVnc3Jlc19jcGU7CisgICAgICAgIHJldHVybiAmbm9kZV9kcm1fY3BlOwogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2xpYkZESy9zcmMvYXJtL3FtZl9hcm0uY3BwIGIvbGliRkRLL3NyYy9hcm0vcW1mX2FybS5jcHAKaW5kZXggMGMwY2U4MC4uZmJlZWJmYiAxMDA2NDQKLS0tIGEvbGliRkRLL3NyYy9hcm0vcW1mX2FybS5jcHAKKysrIGIvbGliRkRLL3NyYy9hcm0vcW1mX2FybS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTQ4Miw0MiArNDgyLDQyIEBACiAgICAgIEIgPSBwX2ZsdFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzhdIFRvcD1bOV0gICAgICovCiAgICAgIEEgPSBwX2ZsdG1bM107ICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzMxNl0gVG9wPVszMTddICovCiAgICAgIHN0YTAgPSBzdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAvKiBzYXZlIHN0YXRlWzBdICAgICAgICAgICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD05Li4uLi4uLi4uLi4zMTkgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTYuLi4uLi4uLi4uLjYgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD04LDE4LCAgICAuLi4zMTggICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD05Li4uLi4uLi4uLi4zMTkgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTYuLi4uLi4uLi4uLjYgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD04LDE4LCAgICAuLi4zMTggICovCiAgICAgIEIgPSBwX2ZsdFszXTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzZdIFRvcD1bN10gICAgICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTcuLi4uLi4uLi4uLjcgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTcuLi4uLi4uLi4uLjcgICovCiAgICAgIEEgPSBwX2ZsdG1bNF07ICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzMxOF0gVG9wPVszMTldICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD03Li4uLi4uLi4uLi4zMTcgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTguLi4uLi4uLi4uLjggICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD02Li4uLi4uLi4uLi4zMTYgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD03Li4uLi4uLi4uLi4zMTcgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTguLi4uLi4uLi4uLjggICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD02Li4uLi4uLi4uLi4zMTYgICovCiAgICAgIEIgPSBwX2ZsdFsyXTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209W1hdIFRvcD1bNV0gICAgICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD05Li4uLi4uLi4uLi4zMTkgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD05Li4uLi4uLi4uLi4zMTkgICovCiAgICAgIEEgPSBwX2ZsdG1bMl07ICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209W1hdIFRvcD1bMzE1XSAgICovCi0gICAgICpzdGErKyA9ICAgICAgICAgU01VTFdUKCBpbWFnLCBCICk7ICAvKiBpbmRleD01LDE1LCAuLi4gICAzMTUgICovCisgICAgIHN0YVswXSA9ICAgICAgICAgU01VTFdUKCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD01LDE1LCAuLi4gICAzMTUgICovCiAgICAgIHJlc3VsdCA9IFNNTEFXVCggc3RhMCwgICByZWFsLCBBICk7ICAvKiBpbmRleD0zMTUuLi4uLi4uLi4uLjUgICovCiAKLSAgICAgKnBNeVRpbWVPdXQrKyA9IHJlc3VsdDsKKyAgICAgcE15VGltZU91dFswXSA9IHJlc3VsdDsgcE15VGltZU91dCsrOwogCiAgICAgIHJlYWwgPSAqLS1yZWFsU2xvdDsKICAgICAgaW1hZyA9ICotLWltYWdTbG90OwogICAgICBBID0gcF9mbHRtWzBdOyAgICAgICAgICAgICAgICAgICAgICAgLyogQm90dG9tPVszMTBdIFRvcD1bMzExXSAqLwogICAgICBCID0gcF9mbHRbN107ICAgICAgICAgICAgICAgICAgICAgICAgLyogQm90dG9tPVsxNF0gIFRvcD1bMTVdICAqLwogICAgICByZXN1bHQgPSBTTUxBV0IoIHN0YVswXSwgcmVhbCwgQSApOyAgLyogaW5kZXg9MzEwLi4uLi4uLi4uLi4wICAqLwotICAgICAqc3RhKysgPSBTTUxBV0IoIHN0YVsxXSwgaW1hZywgQiApOyAgLyogaW5kZXg9MTQuLi4uLi4uLi4uMzI0ICAqLwotICAgICAqcE15VGltZU91dCsrID0gcmVzdWx0OworICAgICBzdGFbMF0gPSBTTUxBV0IoIHN0YVsxXSwgaW1hZywgQiApOyBzdGErKzsgLyogaW5kZXg9MTQuLi4uLi4uLi4uMzI0ICAqLworICAgICBwTXlUaW1lT3V0WzBdID0gcmVzdWx0OyBwTXlUaW1lT3V0Kys7CiAgICAgIEIgPSBwX2ZsdFs2XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzEyXSAgVG9wPVsxM10gICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTEuLi4uLi4uLi4uLjEgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTEuLi4uLi4uLi4uLjEgICovCiAgICAgIEEgPSBwX2ZsdG1bMV07ICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzMxMl0gVG9wPVszMTNdICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD0xMy4uLi4uLi4uLi4zMjMgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTIuLi4uLi4uLi4uLjIgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD0xMi4uLi4uLi4uLi4zMjIgICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTMuLi4uLi4uLi4uLjMgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD0xMy4uLi4uLi4uLi4zMjMgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTIuLi4uLi4uLi4uLjIgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD0xMi4uLi4uLi4uLi4zMjIgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTMuLi4uLi4uLi4uLjMgICovCiAgICAgIEEgPSBwX2ZsdG1bMl07ICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzMxNF0gVG9wPVszMTVdICovCiAgICAgIEIgPSBwX2ZsdFs1XTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBCb3R0b209WzEwXSAgVG9wPVsxMV0gICovCi0gICAgICpzdGErKyA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7ICAvKiBpbmRleD0xMS4uLi4uLi4uLi4zMjEgICovCi0gICAgICpzdGErKyA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7ICAvKiBpbmRleD0zMTQuLi4uLi4uLi4uLjQgICovCi0gICAgICpzdGErKyA9ICAgICAgICAgU01VTFdCKCBpbWFnLCBCICk7ICAvKiBpbmRleD0xMC4uLi4uLi4uLi4zMjAgICovCisgICAgIHN0YVswXSA9IFNNTEFXVCggc3RhWzFdLCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD0xMS4uLi4uLi4uLi4zMjEgICovCisgICAgIHN0YVswXSA9IFNNTEFXQiggc3RhWzFdLCByZWFsLCBBICk7IHN0YSsrOyAvKiBpbmRleD0zMTQuLi4uLi4uLi4uLjQgICovCisgICAgIHN0YVswXSA9ICAgICAgICAgU01VTFdCKCBpbWFnLCBCICk7IHN0YSsrOyAvKiBpbmRleD0xMC4uLi4uLi4uLi4zMjAgICovCiAKIAogICAgICBwX2ZsdCAgICArPSA1OwpAQCAtNTY2LDIxICs1NjYsMjEgQEAKICAgICAgQSA9IHBfZmx0bVswXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMzEwXSBUb3A9WzMxMV0gKi8KICAgICAgQiA9IHBfZmx0WzddOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMTRdICBUb3A9WzE1XSAgKi8KICAgICAgcmVzdWx0ID0gU01MQVdCKCBzdGFbMF0sIHJlYWwsIEEgKTsgIC8qIGluZGV4PTMxMC4uLi4uLi4uLi4uMCAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdCKCBzdGFbMV0sIGltYWcsIEIgKTsgIC8qIGluZGV4PTE0Li4uLi4uLi4uLjMyNCAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdCKCBzdGFbMV0sIGltYWcsIEIgKTsgc3RhKys7IC8qIGluZGV4PTE0Li4uLi4uLi4uLjMyNCAgKi8KICAgICAgQiA9IHBfZmx0WzZdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMTJdICBUb3A9WzEzXSAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdUKCBzdGFbMV0sIHJlYWwsIEEgKTsgIC8qIGluZGV4PTMxMS4uLi4uLi4uLi4uMSAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdUKCBzdGFbMV0sIHJlYWwsIEEgKTsgc3RhKys7IC8qIGluZGV4PTMxMS4uLi4uLi4uLi4uMSAgKi8KICAgICAgQSA9IHBfZmx0bVsxXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMzEyXSBUb3A9WzMxM10gKi8KLSAgICAgKnN0YSsrID0gU01MQVdUKCBzdGFbMV0sIGltYWcsIEIgKTsgIC8qIGluZGV4PTEzLi4uLi4uLi4uLjMyMyAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdCKCBzdGFbMV0sIHJlYWwsIEEgKTsgIC8qIGluZGV4PTMxMi4uLi4uLi4uLi4uMiAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdCKCBzdGFbMV0sIGltYWcsIEIgKTsgIC8qIGluZGV4PTEyLi4uLi4uLi4uLjMyMiAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdUKCBzdGFbMV0sIHJlYWwsIEEgKTsgIC8qIGluZGV4PTMxMy4uLi4uLi4uLi4uMyAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdUKCBzdGFbMV0sIGltYWcsIEIgKTsgc3RhKys7IC8qIGluZGV4PTEzLi4uLi4uLi4uLjMyMyAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdCKCBzdGFbMV0sIHJlYWwsIEEgKTsgc3RhKys7IC8qIGluZGV4PTMxMi4uLi4uLi4uLi4uMiAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdCKCBzdGFbMV0sIGltYWcsIEIgKTsgc3RhKys7IC8qIGluZGV4PTEyLi4uLi4uLi4uLjMyMiAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdUKCBzdGFbMV0sIHJlYWwsIEEgKTsgc3RhKys7IC8qIGluZGV4PTMxMy4uLi4uLi4uLi4uMyAgKi8KICAgICAgQSA9IHBfZmx0bVsyXTsgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMzE0XSBUb3A9WzMxNV0gKi8KICAgICAgQiA9IHBfZmx0WzVdOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJvdHRvbT1bMTBdICBUb3A9WzExXSAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdUKCBzdGFbMV0sIGltYWcsIEIgKTsgIC8qIGluZGV4PTExLi4uLi4uLi4uLjMyMSAgKi8KLSAgICAgKnN0YSsrID0gU01MQVdCKCBzdGFbMV0sIHJlYWwsIEEgKTsgIC8qIGluZGV4PTMxNC4uLi4uLi4uLi4uNCAgKi8KLSAgICAgKnN0YSsrID0gICAgICAgICBTTVVMV0IoIGltYWcsIEIgKTsgIC8qIGluZGV4PTEwLi4uLi4uLi4uLjMyMCAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdUKCBzdGFbMV0sIGltYWcsIEIgKTsgc3RhKys7IC8qIGluZGV4PTExLi4uLi4uLi4uLjMyMSAgKi8KKyAgICAgc3RhWzBdID0gU01MQVdCKCBzdGFbMV0sIHJlYWwsIEEgKTsgc3RhKys7IC8qIGluZGV4PTMxNC4uLi4uLi4uLi4uNCAgKi8KKyAgICAgc3RhWzBdID0gICAgICAgICBTTVVMV0IoIGltYWcsIEIgKTsgc3RhKys7IC8qIGluZGV4PTEwLi4uLi4uLi4uLjMyMCAgKi8KIAotICAgICAqcE15VGltZU91dCsrID0gcmVzdWx0OworICAgICBwTXlUaW1lT3V0WzBdID0gcmVzdWx0OyBwTXlUaW1lT3V0Kys7CiAKICAgICAgcF9mbHRtICAgLT0gNTsKICAgICAgcF9mbHQgICAgKz0gNTsKQEAgLTYxMCw4ICs2MTAsOCBAQAogICAgIHsKICAgICAgIEZJWFBfREJMIHJlc3VsdDEsIHJlc3VsdDI7CiAKLSAgICAgIHJlc3VsdDEgPSAqcE15VGltZU91dCsrOwotICAgICAgcmVzdWx0MiA9ICpwTXlUaW1lT3V0Kys7CisgICAgICByZXN1bHQxID0gcE15VGltZU91dFswXTsgcE15VGltZU91dCsrOworICAgICAgcmVzdWx0MiA9IHBNeVRpbWVPdXRbMF07IHBNeVRpbWVPdXQrKzsKIAogICAgICAgcmVzdWx0MSA9IGZNdWx0KHJlc3VsdDEsZ2Fpbik7CiAgICAgICB0aW1lT3V0IC09IHN0cmlkZTsKQEAgLTYzNSw4ICs2MzUsOCBAQAogICAgICAgdGltZU91dFswXSA9IHJlc3VsdDIgPDwgc2NhbGU7CiAjZW5kaWYKIAotICAgICAgcmVzdWx0MSA9ICpwTXlUaW1lT3V0Kys7Ci0gICAgICByZXN1bHQyID0gKnBNeVRpbWVPdXQrKzsKKyAgICAgIHJlc3VsdDEgPSBwTXlUaW1lT3V0WzBdOyBwTXlUaW1lT3V0Kys7CisgICAgICByZXN1bHQyID0gcE15VGltZU91dFswXTsgcE15VGltZU91dCsrOwogCiAgICAgICByZXN1bHQxID0gZk11bHQocmVzdWx0MSxnYWluKTsKICAgICAgIHRpbWVPdXQgLT0gc3RyaWRlOwpAQCAtNjY2LDggKzY2Niw4IEBACiAgICAgZm9yIChub19jaGFubmVscz4+PTI7IG5vX2NoYW5uZWxzLS07KQogICAgIHsKICAgICAgIEZJWFBfREJMIHJlc3VsdDEsIHJlc3VsdDI7Ci0gICAgICByZXN1bHQxID0gKnBNeVRpbWVPdXQrKzsKLSAgICAgIHJlc3VsdDIgPSAqcE15VGltZU91dCsrOworICAgICAgcmVzdWx0MSA9IHBNeVRpbWVPdXRbMF07IHBNeVRpbWVPdXQrKzsKKyAgICAgIHJlc3VsdDIgPSBwTXlUaW1lT3V0WzBdOyBwTXlUaW1lT3V0Kys7CiAgICAgICB0aW1lT3V0IC09IHN0cmlkZTsKICAgICAgIGlmIChyZXN1bHQxIDwgMCkgICAgICAgIHJlc3VsdDEgKz0gYWRkX25lZzsKICAgICAgIGlmIChyZXN1bHQxIDwgbWF4X25lZykgIHJlc3VsdDEgPSBtYXhfbmVnOwpAQCAtNjg4LDggKzY4OCw4IEBACiAgICAgICB0aW1lT3V0WzBdID0gcmVzdWx0MiA8PCBzY2FsZTsKICNlbmRpZgogICAgICAgCi0gICAgICByZXN1bHQxID0gKnBNeVRpbWVPdXQrKzsKLSAgICAgIHJlc3VsdDIgPSAqcE15VGltZU91dCsrOworICAgICAgcmVzdWx0MSA9IHBNeVRpbWVPdXRbMF07IHBNeVRpbWVPdXQrKzsKKyAgICAgIHJlc3VsdDIgPSBwTXlUaW1lT3V0WzBdOyBwTXlUaW1lT3V0Kys7CiAgICAgICB0aW1lT3V0IC09IHN0cmlkZTsKICAgICAgIGlmIChyZXN1bHQxIDwgMCkgICAgICAgIHJlc3VsdDEgKz0gYWRkX25lZzsKICAgICAgIGlmIChyZXN1bHQxIDwgbWF4X25lZykgIHJlc3VsdDEgPSBtYXhfbmVnOwpkaWZmIC0tZ2l0IGEvbGliTXBlZ1RQRGVjL3NyYy90cGRlY19hc2MuY3BwIGIvbGliTXBlZ1RQRGVjL3NyYy90cGRlY19hc2MuY3BwCmluZGV4IGJhZTI3MWUuLjk2YTFiMzUgMTAwNjQ0Ci0tLSBhL2xpYk1wZWdUUERlYy9zcmMvdHBkZWNfYXNjLmNwcAorKysgYi9saWJNcGVnVFBEZWMvc3JjL3RwZGVjX2FzYy5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTExMjYsNiArMTEyNiw4IEBACiAgICAgICBpZiAoIDAgIT0gbGRfc2JyX2hlYWRlcihhc2MsIGhCcywgY2IpICkgewogICAgICAgICByZXR1cm4gVFJBTlNQT1JUREVDX1BBUlNFX0VSUk9SOwogICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gVFJBTlNQT1JUREVDX1VOU1VQUE9SVEVEX0ZPUk1BVDsKICAgICB9CiAgIH0KICAgZXNjLT5tX3VzZUxkUW1mVGltZUFsaWduID0gMDsKQEAgLTExNDYsNyArMTE0OCw3IEBACiAKICAgICBzd2l0Y2ggKGVsZEV4dFR5cGUpIHsKICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGZvcihjbnQ9MDsgY250PGxlbjsgY250KyspIHsKKyAgICAgICAgZm9yKGNudD0wOyBjbnQ8ZWxkRXh0TGVuOyBjbnQrKykgewogICAgICAgICAgIEZES3JlYWRCaXRzKGhCcywgOCApOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTM3Miw0ICsxMzc0LDEzMyBAQAogICByZXR1cm4gKEVycm9yU3RhdHVzKTsKIH0KIAorVFJBTlNQT1JUREVDX0VSUk9SIERybVJhd1NkY0F1ZGlvQ29uZmlnX1BhcnNlKAorICAgICAgICBDU0F1ZGlvU3BlY2lmaWNDb25maWcgKnNlbGYsCisgICAgICAgIEhBTkRMRV9GREtfQklUU1RSRUFNICAgYnMKKyAgICAgICAgKQoreworICBUUkFOU1BPUlRERUNfRVJST1IgRXJyb3JTdGF0dXMgPSBUUkFOU1BPUlRERUNfT0s7CisKKyAgQXVkaW9TcGVjaWZpY0NvbmZpZ19Jbml0KHNlbGYpOworCisgIGlmICgoSU5UKUZES2dldFZhbGlkQml0cyhicykgPCAyMCkgeworICAgIEVycm9yU3RhdHVzID0gVFJBTlNQT1JUREVDX1BBUlNFX0VSUk9SOworICAgIGdvdG8gYmFpbDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBEUk0gLSBBdWRpbyBpbmZvcm1hdGlvbiBkYXRhIGVudGl0eSAtIHR5cGUgOQorICAgICAgIC0gU2hvcnQgSWQgICAgICAgICAgICAyIGJpdHMKKyAgICAgICAtIFN0cmVhbSBJZCAgICAgICAgICAgMiBiaXRzCisgICAgICAgLSBhdWRpbyBjb2RpbmcgICAgICAgIDIgYml0cworICAgICAgIC0gU0JSIGZsYWcgICAgICAgICAgICAxIGJpdAorICAgICAgIC0gYXVkaW8gbW9kZSAgICAgICAgICAyIGJpdHMKKyAgICAgICAtIGF1ZGlvIHNhbXBsaW5nIHJhdGUgMyBiaXRzCisgICAgICAgLSB0ZXh0IGZsYWcgICAgICAgICAgIDEgYml0CisgICAgICAgLSBlbmhhbmNlbWVudCBmbGFnICAgIDEgYml0CisgICAgICAgLSBjb2RlciBmaWVsZCAgICAgICAgIDUgYml0cworICAgICAgIC0gcmZhICAgICAgICAgICAgICAgICAxIGJpdCAgKi8KKworICAgIGludCBhdWRpb0NvZGluZywgYXVkaW9Nb2RlLCBjU2FtcGxpbmdGcmVxLCBjb2RlckZpZWxkLCBzZklkeCwgc2JyRmxhZzsKKworICAgIC8qIFJlYWQgdGhlIFNEQyBmaWVsZCAqLworICAgIEZES3JlYWRCaXRzKGJzLDQpOyAgIC8qIFNob3J0IGFuZCBTdHJlYW0gSWQgKi8KKworICAgIGF1ZGlvQ29kaW5nICAgPSBGREtyZWFkQml0cyhicywgMik7CisgICAgc2JyRmxhZyAgICAgICA9IEZES3JlYWRCaXRzKGJzLCAxKTsKKyAgICBhdWRpb01vZGUgICAgID0gRkRLcmVhZEJpdHMoYnMsIDIpOworICAgIGNTYW1wbGluZ0ZyZXEgPSBGREtyZWFkQml0cyhicywgMyk7ICAgIC8qIGF1ZGlvIHNhbXBsaW5nIHJhdGUgKi8KKworICAgIEZES3JlYWRCaXRzKGJzLCAyKTsgIC8qIFRleHQgYW5kIGVuaGFuY2VtZW50IGZsYWcgKi8KKyAgICBjb2RlckZpZWxkICAgPSBGREtyZWFkQml0cyhicywgNSk7CisgICAgRkRLcmVhZEJpdHMoYnMsIDEpOyAgLyogcmZhICovCisKKyAgICAvKiBFdmFsdWF0ZSBjb25maWd1cmF0aW9uIGFuZCBmaWxsIHRoZSBBU0MgKi8KKyAgICBzd2l0Y2ggKGNTYW1wbGluZ0ZyZXEpIHsKKyAgICBjYXNlIDA6IC8qICA4IGtIeiAqLworICAgICAgc2ZJZHggPSAxMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMTogLyogMTIga0h6ICovCisgICAgICBzZklkeCA9IDk7CisgICAgICBicmVhazsKKyAgICBjYXNlIDI6IC8qIDE2IGtIeiAqLworICAgICAgc2ZJZHggPSA4OworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOiAvKiAyNCBrSHogKi8KKyAgICAgIHNmSWR4ID0gNjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgNTogLyogNDgga0h6ICovCisgICAgICBzZklkeCA9IDM7CisgICAgICBicmVhazsKKyAgICBjYXNlIDQ6IC8qIHJlc2VydmVkICovCisgICAgY2FzZSA2OiAvKiByZXNlcnZlZCAqLworICAgIGNhc2UgNzogLyogcmVzZXJ2ZWQgKi8KKyAgICBkZWZhdWx0OgorICAgICAgRXJyb3JTdGF0dXMgPSBUUkFOU1BPUlRERUNfUEFSU0VfRVJST1I7CisgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgc2VsZi0+bV9zYW1wbGluZ0ZyZXF1ZW5jeUluZGV4ID0gc2ZJZHg7CisgICAgc2VsZi0+bV9zYW1wbGluZ0ZyZXF1ZW5jeSA9IFNhbXBsaW5nUmF0ZVRhYmxlW3NmSWR4XTsKKworICAgIGlmICggc2JyRmxhZyApIHsKKyAgICAgIFVJTlQgaTsKKyAgICAgIGludCB0bXAgPSAtMTsKKyAgICAgIHNlbGYtPm1fc2JyUHJlc2VudEZsYWcgPSAxOworICAgICAgc2VsZi0+bV9leHRlbnNpb25BdWRpb09iamVjdFR5cGUgPSBBT1RfU0JSOworICAgICAgc2VsZi0+bV9leHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeSA9IHNlbGYtPm1fc2FtcGxpbmdGcmVxdWVuY3kgPDwgMTsKKyAgICAgIGZvciAoaT0wOyBpPChzaXplb2YoU2FtcGxpbmdSYXRlVGFibGUpL3NpemVvZihTYW1wbGluZ1JhdGVUYWJsZVswXSkpOyBpKyspeworICAgICAgICBpZiAoU2FtcGxpbmdSYXRlVGFibGVbaV0gPT0gc2VsZi0+bV9leHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeSl7CisgICAgICAgICAgdG1wID0gaTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgc2VsZi0+bV9leHRlbnNpb25TYW1wbGluZ0ZyZXF1ZW5jeUluZGV4ID0gdG1wOworICAgIH0KKworICAgIHN3aXRjaCAoYXVkaW9Db2RpbmcpIHsKKyAgICAgIGNhc2UgMDogLyogQUFDICovCisgICAgICAgICAgc2VsZi0+bV9hb3QgPSBBT1RfRFJNX0FBQyAgICAgOyAgLyogU2V0IHBzZXVkbyBBT1QgZm9yIERybSBBQUMgKi8KKworICAgICAgICBzd2l0Y2ggKGF1ZGlvTW9kZSkgeworICAgICAgICBjYXNlIDE6IC8qIHBhcmFtZXRyaWMgc3RlcmVvICovCisgICAgICAgICAgc2VsZi0+bV9wc1ByZXNlbnRGbGFnID0gMTsKKyAgICAgICAgY2FzZSAwOiAvKiBtb25vICovCisgICAgICAgICAgc2VsZi0+bV9jaGFubmVsQ29uZmlndXJhdGlvbiA9IDE7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogLyogc3RlcmVvICovCisgICAgICAgICAgc2VsZi0+bV9jaGFubmVsQ29uZmlndXJhdGlvbiA9IDI7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgRXJyb3JTdGF0dXMgPSBUUkFOU1BPUlRERUNfUEFSU0VfRVJST1I7CisgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIHNlbGYtPm1fdmNiMTFGbGFnID0gMTsKKyAgICAgICAgc2VsZi0+bV9oY3JGbGFnID0gMTsKKyAgICAgICAgc2VsZi0+bV9zYW1wbGVzUGVyRnJhbWUgPSA5NjA7CisgICAgICAgIHNlbGYtPm1fZXBDb25maWcgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMTogLyogQ0VMUCAqLworICAgICAgICBzZWxmLT5tX2FvdCA9IEFPVF9FUl9DRUxQOworICAgICAgICBzZWxmLT5tX2NoYW5uZWxDb25maWd1cmF0aW9uID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDI6IC8qIEhWWEMgKi8KKyAgICAgICAgc2VsZi0+bV9hb3QgPSBBT1RfRVJfSFZYQzsKKyAgICAgICAgc2VsZi0+bV9jaGFubmVsQ29uZmlndXJhdGlvbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOiAvKiByZXNlcnZlZCAqLworICAgICAgZGVmYXVsdDoKKyAgICAgICAgRXJyb3JTdGF0dXMgPSBUUkFOU1BPUlRERUNfUEFSU0VfRVJST1I7CisgICAgICAgIHNlbGYtPm1fYW90ID0gQU9UX05PTkU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChzZWxmLT5tX3BzUHJlc2VudEZsYWcgJiYgIXNlbGYtPm1fc2JyUHJlc2VudEZsYWcpIHsKKyAgICAgIEVycm9yU3RhdHVzID0gVFJBTlNQT1JUREVDX1BBUlNFX0VSUk9SOworICAgICAgZ290byBiYWlsOworICAgIH0KKyAgfQorCitiYWlsOgorICByZXR1cm4gKEVycm9yU3RhdHVzKTsKK30KIApkaWZmIC0tZ2l0IGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfaGNyLmNwcCBiL2xpYk1wZWdUUERlYy9zcmMvdHBkZWNfZHJtLmNwcApzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBsaWJBQUNlbmMvc3JjL2FhY2VuY19oY3IuY3BwCnJlbmFtZSB0byBsaWJNcGVnVFBEZWMvc3JjL3RwZGVjX2RybS5jcHAKaW5kZXggMzE2NjIzYS4uZGYzMTllNSAxMDA2NDQKLS0tIGEvbGliQUFDZW5jL3NyYy9hYWNlbmNfaGNyLmNwcAorKysgYi9saWJNcGVnVFBEZWMvc3JjL3RwZGVjX2RybS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTgxLDEzICs4MSw2NiBAQAogYW1tLWluZm9AaWlzLmZyYXVuaG9mZXIuZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKiogIE1QRUcgQUFDIEF1ZGlvIEVuY29kZXIgICoqKioqKioqKioqKioqKioqKioqKioqKioKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgTVBFRy00IEFBQyBEZWNvZGVyICAqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi0gICBJbml0aWFsIGF1dGhvcjogICAgICAgUi4gQm9laG0KLSAgIGNvbnRlbnRzL2Rlc2NyaXB0aW9uOiBodWZmbWFuIGNvZGV3b3JkIHJlb3JkZXJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlZCBvbiBzb3VyY2UgZnJvbSBhYWNFcnJSb2JUcmFucworICAgQXV0aG9yKHMpOiAgIENocmlzdGlhbiBHcmllYmVsCisgICBEZXNjcmlwdGlvbjogRFJNIHRyYW5zcG9ydCBzdHVmZgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJhYWNlbmNfaGNyLmgiCisjaW5jbHVkZSAidHBkZWNfZHJtLmgiCisKKworI2luY2x1ZGUgIkZES19iaXRzdHJlYW0uaCIKKworCisKK3ZvaWQgZHJtUmVhZF9DcmNJbml0KEhBTkRMRV9EUk0gcERybSkgICAgICAvKiE8IHBvaW50ZXIgdG8gZHJtIGNyYyBpbmZvIHN0dWN0dXJlICovCit7CisgIEZES19BU1NFUlQocERybSAhPSBOVUxMKTsKKworICBGREtjcmNJbml0KCZwRHJtLT5jcmNJbmZvLCAweDAwMWQsIDB4RkZGRiwgOCk7Cit9CisKK2ludCBkcm1SZWFkX0NyY1N0YXJ0UmVnKAorICAgICAgICAgICAgICAgICAgICAgSEFORExFX0RSTSBwRHJtLCAgICAgICAgICAgIC8qITwgcG9pbnRlciB0byBkcm0gc3R1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9GREtfQklUU1RSRUFNIGhCcywgICAvKiE8IGhhbmRsZSB0byBjdXJyZW50IGJpdCBidWZmZXIgc3RydWN0dXJlICovCisgICAgICAgICAgICAgICAgICAgICBpbnQgbUJpdHMgICAgICAgICAgICAgICAgICAgLyohPCBudW1iZXIgb2YgYml0cyBpbiBjcmMgcmVnaW9uICovCisgICAgICAgICAgICAgICAgICAgKQoreworICBGREtfQVNTRVJUKHBEcm0gIT0gTlVMTCk7CisKKyAgRkRLY3JjUmVzZXQoJnBEcm0tPmNyY0luZm8pOworCisgIHBEcm0tPmNyY1JlYWRWYWx1ZSA9IEZES3JlYWRCaXRzKGhCcywgOCk7CisKKyAgcmV0dXJuICggRkRLY3JjU3RhcnRSZWcoJnBEcm0tPmNyY0luZm8sIGhCcywgbUJpdHMpICk7CisKK30KKwordm9pZCBkcm1SZWFkX0NyY0VuZFJlZygKKyAgICAgICAgICAgICAgICAgICAgSEFORExFX0RSTSBwRHJtLCAgICAgICAgICAgICAvKiE8IHBvaW50ZXIgdG8gZHJtIGNyYyBpbmZvIHN0dWN0dXJlICovCisgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9GREtfQklUU1RSRUFNIGhCcywgICAgLyohPCBoYW5kbGUgdG8gY3VycmVudCBiaXQgYnVmZmVyIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICBpbnQgcmVnICAgICAgICAgICAgICAgICAgICAgIC8qITwgY3JjIHJlZ2lvbiAqLworICAgICAgICAgICAgICAgICAgKQoreworICBGREtfQVNTRVJUKHBEcm0gIT0gTlVMTCk7CisKKyAgRkRLY3JjRW5kUmVnKCZwRHJtLT5jcmNJbmZvLCBoQnMsIHJlZyk7Cit9CisKK1RSQU5TUE9SVERFQ19FUlJPUiBkcm1SZWFkX0NyY0NoZWNrKCBIQU5ETEVfRFJNIHBEcm0gKQoreworICBUUkFOU1BPUlRERUNfRVJST1IgRXJyb3JTdGF0dXMgPSBUUkFOU1BPUlRERUNfT0s7CisgIFVTSE9SVCBjcmM7CisKKyAgY3JjID0gRkRLY3JjR2V0Q1JDKCZwRHJtLT5jcmNJbmZvKSBeIDB4RkY7CisgIGlmIChjcmMgIT0gcERybS0+Y3JjUmVhZFZhbHVlKQorICB7CisgICAgcmV0dXJuIChUUkFOU1BPUlRERUNfQ1JDX0VSUk9SKTsKKyAgfQorCisgIHJldHVybiAoRXJyb3JTdGF0dXMpOworfQorCiAKZGlmZiAtLWdpdCBhL2xpYk1wZWdUUERlYy9zcmMvdHBkZWNfZHJtLmggYi9saWJNcGVnVFBEZWMvc3JjL3RwZGVjX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNjFiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJNcGVnVFBEZWMvc3JjL3RwZGVjX2RybS5oCkBAIC0wLDAgKzEsMTk0IEBACisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKKworqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCisgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAxLiAgICBJTlRST0RVQ1RJT04KK1RoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZCAoIkZESyBBQUMgQ29kZWMiKSBpcyBzb2Z0d2FyZSB0aGF0IGltcGxlbWVudHMKK3RoZSBNUEVHIEFkdmFuY2VkIEF1ZGlvIENvZGluZyAoIkFBQyIpIGVuY29kaW5nIGFuZCBkZWNvZGluZyBzY2hlbWUgZm9yIGRpZ2l0YWwgYXVkaW8uCitUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCisKK0FBQydzIEhFLUFBQyBhbmQgSEUtQUFDIHYyIHZlcnNpb25zIGFyZSByZWdhcmRlZCBhcyB0b2RheSdzIG1vc3QgZWZmaWNpZW50IGdlbmVyYWwgcGVyY2VwdHVhbAorYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQoraW5kZXBlbmRlbnQgc3R1ZGllcyBhbmQgaXMgd2lkZWx5IGRlcGxveWVkLiBBQUMgaGFzIGJlZW4gc3RhbmRhcmRpemVkIGJ5IElTTyBhbmQgSUVDIGFzIHBhcnQKK29mIHRoZSBNUEVHIHNwZWNpZmljYXRpb25zLgorCitQYXRlbnQgbGljZW5zZXMgZm9yIG5lY2Vzc2FyeSBwYXRlbnQgY2xhaW1zIGZvciB0aGUgRkRLIEFBQyBDb2RlYyAoaW5jbHVkaW5nIHRob3NlIG9mIEZyYXVuaG9mZXIpCittYXkgYmUgb2J0YWluZWQgdGhyb3VnaCBWaWEgTGljZW5zaW5nICh3d3cudmlhbGljZW5zaW5nLmNvbSkgb3IgdGhyb3VnaCB0aGUgcmVzcGVjdGl2ZSBwYXRlbnQgb3duZXJzCitpbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCit0aGUgSVNPL0lFQyBNUEVHIGF1ZGlvIHN0YW5kYXJkcy4gUGxlYXNlIG5vdGUgdGhhdCBtb3N0IG1hbnVmYWN0dXJlcnMgb2YgQW5kcm9pZCBkZXZpY2VzIGFscmVhZHkgbGljZW5zZQordGhlc2UgcGF0ZW50IGNsYWltcyB0aHJvdWdoIFZpYSBMaWNlbnNpbmcgb3IgZGlyZWN0bHkgZnJvbSB0aGUgcGF0ZW50IG93bmVycywgYW5kIHRoZXJlZm9yZSBGREsgQUFDIENvZGVjCitzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCisKK0NvbW1lcmNpYWxseS1saWNlbnNlZCBBQUMgc29mdHdhcmUgbGlicmFyaWVzLCBpbmNsdWRpbmcgZmxvYXRpbmctcG9pbnQgdmVyc2lvbnMgd2l0aCBlbmhhbmNlZCBzb3VuZCBxdWFsaXR5LAorYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAorYXBwbGljYXRpb25zIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uLgorCisyLiAgICBDT1BZUklHSFQgTElDRU5TRQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHdpdGhvdXQKK3BheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworWW91IG11c3QgcmV0YWluIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgc29mdHdhcmUgbGljZW5zZSBpbiByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IKK3lvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCisKK1lvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCitZb3UgbXVzdCBtYWtlIGF2YWlsYWJsZSBmcmVlIG9mIGNoYXJnZSBjb3BpZXMgb2YgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG9mIHRoZSBGREsgQUFDIENvZGVjIGFuZCB5b3VyCittb2RpZmljYXRpb25zIHRoZXJldG8gdG8gcmVjaXBpZW50cyBvZiBjb3BpZXMgaW4gYmluYXJ5IGZvcm0uCisKK1RoZSBuYW1lIG9mIEZyYXVuaG9mZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBsaWJyYXJ5IHdpdGhvdXQKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworWW91IG1heSBub3QgY2hhcmdlIGNvcHlyaWdodCBsaWNlbnNlIGZlZXMgZm9yIGFueW9uZSB0byB1c2UsIGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGUgRkRLIEFBQyBDb2RlYworc29mdHdhcmUgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8uCisKK1lvdXIgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIHNvZnR3YXJlCithbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gRm9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjLCB0aGUgdGVybQorIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCisiVGhpcmQtUGFydHkgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQuIgorCiszLiAgICBOTyBQQVRFTlQgTElDRU5TRQorCitOTyBFWFBSRVNTIE9SIElNUExJRUQgTElDRU5TRVMgVE8gQU5ZIFBBVEVOVCBDTEFJTVMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHBhdGVudHMgb2YgRnJhdW5ob2ZlciwKK0FSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCityZXNwZWN0IHRvIHRoaXMgc29mdHdhcmUuCisKK1lvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZAorYnkgYXBwcm9wcmlhdGUgcGF0ZW50IGxpY2Vuc2VzLgorCis0LiAgICBESVNDTEFJTUVSCisKK1RoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBieSBGcmF1bmhvZmVyIG9uIGJlaGFsZiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kIGNvbnRyaWJ1dG9ycworIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcworb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKK2luY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCitvciBidXNpbmVzcyBpbnRlcnJ1cHRpb24sIGhvd2V2ZXIgY2F1c2VkIGFuZCBvbiBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgc3RyaWN0CitsaWFiaWxpdHksIG9yIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYKK2FkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCis1LiAgICBDT05UQUNUIElORk9STUFUSU9OCisKK0ZyYXVuaG9mZXIgSW5zdGl0dXRlIGZvciBJbnRlZ3JhdGVkIENpcmN1aXRzIElJUworQXR0ZW50aW9uOiBBdWRpbyBhbmQgTXVsdGltZWRpYSBEZXBhcnRtZW50cyAtIEZESyBBQUMgTEwKK0FtIFdvbGZzbWFudGVsIDMzCis5MTA1OCBFcmxhbmdlbiwgR2VybWFueQorCit3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCithbW0taW5mb0BpaXMuZnJhdW5ob2Zlci5kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqICBNUEVHLTQgQUFDIERlY29kZXIgICoqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgIEF1dGhvcihzKTogICBKb3NlZiBIb2VwZmwKKyAgIERlc2NyaXB0aW9uOiBEUk0gaW50ZXJmYWNlCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBUUERFQ19EUk1fSAorI2RlZmluZSBUUERFQ19EUk1fSAorCisjaW5jbHVkZSAidHBkZWNfbGliLmgiCisKKworI2luY2x1ZGUgIkZES19jcmMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgeworCisgIEZES19DUkNJTkZPIGNyY0luZm87ICAgICAgICAgICAgIC8qIENSQyBzdGF0ZSBpbmZvICovCisgIFVTSE9SVCAgICAgIGNyY1JlYWRWYWx1ZTsgICAgICAgIC8qIENSQyB2YWx1ZSByZWFkIGZyb20gYml0c3RyZWFtIGRhdGEgKi8KKworfSBTVFJVQ1RfRFJNOworCit0eXBlZGVmIFNUUlVDVF9EUk0gKkhBTkRMRV9EUk07CisKKy8qIQorICBcYnJpZWYgSW5pdGlhbGl6ZSBEUk0gQ1JDCisKKyAgVGhlIGZ1bmN0aW9uIGluaXRpYWx6ZXMgdGhlIGNyYyBidWZmZXIgYW5kIHRoZSBjcmMgbG9va3VwIHRhYmxlLgorCisgIFxyZXR1cm4gIG5vbmUKKyovCit2b2lkIGRybVJlYWRfQ3JjSW5pdCggSEFORExFX0RSTSBwRHJtICk7CisKKy8qKgorICogXGJyaWVmIFN0YXJ0cyBDUkMgcmVnaW9uIHdpdGggYSBtYXhpbXVtIG51bWJlciBvZiBiaXRzCisgKiAgICAgICAgSWYgbUJpdHMgaXMgcG9zaXRpdmUgemVybyBwYWRkaW5nIHdpbGwgYmUgdXNlZCBmb3IgQ1JDIGNhbGN1bGF0aW9uLCBpZiB0aGVyZQorICogICAgICAgIGFyZSBsZXNzIHRoYW4gbUJpdHMgYml0cyBhdmFpbGFibGUuCisgKiAgICAgICAgSWYgbUJpdHMgaXMgbmVnYXRpdmUgbm8gemVybyBwYWRkaW5nIGlzIGRvbmUuCisgKiAgICAgICAgSWYgbUJpdHMgaXMgemVybyB0aGUgbWVtb3J5IGZvciB0aGUgYnVmZmVyIGlzIGFsbG9jYXRlZCBkeW5hbWljYWxseSwgdGhlCisgKiAgICAgICAgbnVtYmVyIG9mIGJpdHMgaXMgbm90IGxpbWl0ZWQuCisgKgorICogXHBhcmFtIHBEcm0gRFJNIGRhdGEgaGFuZGxlCisgKiBccGFyYW0gaEJzIGJpdHN0cmVhbSBoYW5kbGUsIG9uIHdoaWNoIHRoZSBDUkMgcmVnaW9uIHJlZmVyZXMgdG8KKyAqIFxwYXJhbSBtQml0cyBtYXggbnVtYmVyIG9mIGJpdHMgaW4gY3JjIHJlZ2lvbiB0byBiZSBjb25zaWRlcmVkCisgKgorICogXHJldHVybiAgSUQgZm9yIHRoZSBjcmVhdGVkIHJlZ2lvbiwgLTEgaW4gY2FzZSBvZiBhbiBlcnJvcgorICovCitpbnQgZHJtUmVhZF9DcmNTdGFydFJlZygKKyAgICAgICAgSEFORExFX0RSTSBwRHJtLAorICAgICAgICBIQU5ETEVfRkRLX0JJVFNUUkVBTSBoQnMsCisgICAgICAgIGludCBtQml0cworICAgICAgICApOworCisvKioKKyAqIFxicmllZiBFbmRzIENSQyByZWdpb24gaWRlbnRpZmllZCBieSByZWcKKyAqCisgKiBccGFyYW0gcERybSBEUk0gZGF0YSBoYW5kbGUKKyAqIFxwYXJhbSBoQnMgYml0c3RyZWFtIGhhbmRsZSwgb24gd2hpY2ggdGhlIENSQyByZWdpb24gcmVmZXJlcyB0bworICogXHBhcmFtIHJlZyBDUkMgcmVnaW9ucyBJRCByZXR1cm5lZCBieSBkcm1SZWFkX0NyY1N0YXJ0UmVnKCkKKyAqCisgKiBccmV0dXJuICBub25lCisgKi8KK3ZvaWQgZHJtUmVhZF9DcmNFbmRSZWcoCisgICAgICAgIEhBTkRMRV9EUk0gcERybSwKKyAgICAgICAgSEFORExFX0ZES19CSVRTVFJFQU0gaEJzLAorICAgICAgICBpbnQgcmVnCisgICAgICAgICk7CisKKy8qKgorICogXGJyaWVmIENoZWNrIENSQworICoKKyAqIENoZWNrcyBpZiB0aGUgY3VycmVudGx5IGNhbGN1bGF0ZWQgQ1JDIG1hdGNoZXMgdGhlIENSQyBmaWVsZCByZWFkIGZyb20gdGhlIGJpdHN0cmVhbQorICogRGVsZXRlcyBhbGwgQ1JDIHJlZ2lvbnMuCisgKgorICogXHBhcmFtIHBEcm0gRFJNIGRhdGEgaGFuZGxlCisgKgorICogXHJldHVybiBSZXR1cm5zIDAgaWYgdGhleSBhcmUgaWRlbnRpY2FsIG90aGVyd2lzZSAxCisgKi8KK1RSQU5TUE9SVERFQ19FUlJPUiBkcm1SZWFkX0NyY0NoZWNrKCBIQU5ETEVfRFJNIHBEcm0gKTsKKworLyoqCisgKiBcYnJpZWYgQ2hlY2sgaWYgd2UgaGF2ZSBhIHZhbGlkIERSTSBmcmFtZSBhdCB0aGUgY3VycmVudCBiaXRidWZmZXIgcG9zaXRpb24KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgZW5vdWdoIGJpdHMgaW4gYnVmZmVyIGZvciB0aGUgY3VycmVudCBmcmFtZS4KKyAqIEl0IHJlYWRzIG91dCB0aGUgaGVhZGVyIGJpdHMgdG8gcHJlcGFyZSB0aGUgYml0YnVmZmVyIGZvciB0aGUgZGVjb2RlIGxvb3AuCisgKiBJbiBjYXNlIHRoZSBoZWFkZXIgYml0cyBzaG93IGFuIGludmFsaWQgYml0c3RyZWFtL2ZyYW1lLCB0aGUgd2hvbGUgZnJhbWUgaXMgc2tpcHBlZC4KKyAqCisgKiBccGFyYW0gcERybSBEUk0gZGF0YSBoYW5kbGUgd2hpY2ggaXMgZmlsbGVkIHdpdGggcGFyc2VkIERSTSBoZWFkZXIgZGF0YQorICogXHBhcmFtIGJzIGhhbmRsZSBvZiBiaXRzdHJlYW0gZnJvbSB3aG9tIHRoZSBEUk0gaGVhZGVyIGlzIHJlYWQKKyAqCisgKiBccmV0dXJuICBlcnJvciBzdGF0dXMKKyAqLworVFJBTlNQT1JUREVDX0VSUk9SIGRybVJlYWRfRGVjb2RlSGVhZGVyKAorICAgICAgICBIQU5ETEVfRFJNICAgICAgICAgICAgcERybSwKKyAgICAgICAgSEFORExFX0ZES19CSVRTVFJFQU0gIGJzCisgICAgICAgICk7CisKKy8qKgorICogXGJyaWVmICAgUGFyc2UgYSBEcm0gc3BlY2lmaWMgU0RDIGF1ZGlvIGNvbmZpZyBmcm9tIGEgZ2l2ZW4gYml0c3RyZWFtIGhhbmRsZS4KKyAqCisgKiBccGFyYW0gcEFzYyAgICAgICAgICAgICAgICAgICAgICAgICBBIHBvaW50ZXIgdG8gYW4gYWxsb2NhdGVkIENTQXVkaW9TcGVjaWZpY0NvbmZpZyBzdHJ1Y3QuCisgKiBccGFyYW0gaEJzICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRzdHJlYW0gaGFuZGxlLgorICoKKyAqIFxyZXR1cm4gIFRvdGFsIGVsZW1lbnQgY291bnQgaW5jbHVkaW5nIGFsbCBTQ0UsIENQRSBhbmQgTEZFLgorICovCitUUkFOU1BPUlRERUNfRVJST1IgRHJtUmF3U2RjQXVkaW9Db25maWdfUGFyc2UoIENTQXVkaW9TcGVjaWZpY0NvbmZpZyAqcEFzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX0ZES19CSVRTVFJFQU0gaEJzICk7CisKKworCisjZW5kaWYgLyogVFBERUNfRFJNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYk1wZWdUUERlYy9zcmMvdHBkZWNfbGliLmNwcCBiL2xpYk1wZWdUUERlYy9zcmMvdHBkZWNfbGliLmNwcAppbmRleCA0NDU2MTVkLi4yNGY3NTViIDEwMDY0NAotLS0gYS9saWJNcGVnVFBEZWMvc3JjL3RwZGVjX2xpYi5jcHAKKysrIGIvbGliTXBlZ1RQRGVjL3NyYy90cGRlY19saWIuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMDIsNiArMTAyLDcgQEAKIAogI2luY2x1ZGUgInRwZGVjX2xhdG0uaCIKIAorI2luY2x1ZGUgInRwZGVjX2RybS5oIgogCiAKICNkZWZpbmUgTU9EVUxFX05BTUUgInRyYW5zcG9ydERlYyIKQEAgLTExMyw2ICsxMTQsNyBAQAogCiAgIENMYXRtRGVtdXggbGF0bTsKIAorICBTVFJVQ1RfRFJNIGRybTsKIAogfSB0cmFuc3BvcnRkZWNfcGFyc2VyX3Q7CiAKQEAgLTE4Miw2ICsxODQsOSBAQAogICAgIGhJbnB1dC0+bnVtYmVyT2ZSYXdEYXRhQmxvY2tzID0gMDsKICAgICBicmVhazsKIAorICBjYXNlIFRUX0RSTToKKyAgICBkcm1SZWFkX0NyY0luaXQoJmhJbnB1dC0+cGFyc2VyLmRybSk7CisgICAgYnJlYWs7CiAKICAgY2FzZSBUVF9NUDRfTEFUTV9NQ1AwOgogICBjYXNlIFRUX01QNF9MQVRNX01DUDE6CkBAIC0yNTMsNiArMjU4LDE4IEBACiAgICAgICAgIH0KICAgICAgIH0KICAgICAgIGJyZWFrOworICAgIGNhc2UgVFRfRFJNOgorICAgICAgZkNvbmZpZ0ZvdW5kID0gMTsKKyAgICAgIGVyciA9IERybVJhd1NkY0F1ZGlvQ29uZmlnX1BhcnNlKCZoVHAtPmFzY1tsYXllcl0sIGhCcyk7CisgICAgICBpZiAoZXJyID09IFRSQU5TUE9SVERFQ19PSykgeworICAgICAgICBpbnQgZXJyQzsKKworICAgICAgICBlcnJDID0gaFRwLT5jYWxsYmFja3MuY2JVcGRhdGVDb25maWcoaFRwLT5jYWxsYmFja3MuY2JVcGRhdGVDb25maWdEYXRhLCAmaFRwLT5hc2NbbGF5ZXJdKTsKKyAgICAgICAgaWYgKGVyckMgIT0gMCkgeworICAgICAgICAgIGVyciA9IFRSQU5TUE9SVERFQ19QQVJTRV9FUlJPUjsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgYnJlYWs7CiAgIH0KIAogICBpZiAoZXJyID09IFRSQU5TUE9SVERFQ19PSyAmJiBmQ29uZmlnRm91bmQpIHsKQEAgLTEwODMsNiArMTEwMCw3IEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFRfTVA0X1JBVzoKKyAgICBjYXNlIFRUX0RSTToKICAgICAgIC8qIE9uZSBBY2Nlc3MgVW5pdCB3YXMgZmlsbGVkIGludG8gYnVmZmVyLgogICAgICAgICAgU28gZ2V0IHRoZSBsZW5ndGggb3V0IG9mIHRoZSBidWZmZXIuICovCiAgICAgICBoVHAtPmF1TGVuZ3RoW2xheWVyXSA9IEZES2dldFZhbGlkQml0cyhoQnMpOwpAQCAtMTEwMCw3ICsxMTE4LDYgQEAKICAgICAgIH0KICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBUVF9SU1ZENTA6CiAgICAgY2FzZSBUVF9NUDRfQURUUzoKICAgICBjYXNlIFRUX01QNF9MT0FTOgogICAgICAgZXJyID0gdHJhbnNwb3J0RGVjX3JlYWRTdHJlYW0oaFRwLCBsYXllcik7CkBAIC0xMjg0LDYgKzEzMDEsNyBAQAogICAgIHwgQ0FQRl9MQVRNCiAgICAgfCBDQVBGX0xPQVMKICAgICB8IENBUEZfUkFXUEFDS0VUUworICAgIHwgQ0FQRl9EUk0KICAgICA7CiAKICAgcmV0dXJuIFRSQU5TUE9SVERFQ19PSzsgLyogRkRLRVJSX05PRVJST1I7ICovCkBAIC0xMjk1LDYgKzEzMTMsOCBAQAogICBzd2l0Y2ggKHBUcC0+dHJhbnNwb3J0Rm10KSB7CiAgIGNhc2UgVFRfTVA0X0FEVFM6CiAgICAgcmV0dXJuIGFkdHNSZWFkX0NyY1N0YXJ0UmVnKCZwVHAtPnBhcnNlci5hZHRzLCAmcFRwLT5iaXRTdHJlYW1bMF0sIG1CaXRzKTsKKyAgY2FzZSBUVF9EUk06CisgICAgcmV0dXJuIGRybVJlYWRfQ3JjU3RhcnRSZWcoJnBUcC0+cGFyc2VyLmRybSwgJnBUcC0+Yml0U3RyZWFtWzBdLCBtQml0cyk7CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIDA7CiAgIH0KQEAgLTEzMDYsNiArMTMyNiw5IEBACiAgIGNhc2UgVFRfTVA0X0FEVFM6CiAgICAgYWR0c1JlYWRfQ3JjRW5kUmVnKCZwVHAtPnBhcnNlci5hZHRzLCAmcFRwLT5iaXRTdHJlYW1bMF0sIHJlZyk7CiAgICAgYnJlYWs7CisgIGNhc2UgVFRfRFJNOgorICAgIGRybVJlYWRfQ3JjRW5kUmVnKCZwVHAtPnBhcnNlci5kcm0sICZwVHAtPmJpdFN0cmVhbVswXSwgcmVnKTsKKyAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICBicmVhazsKICAgfQpAQCAtMTMyMiw2ICsxMzQ1LDkgQEAKICAgICAgIHRyYW5zcG9ydERlY19BZGp1c3RFbmRPZkFjY2Vzc1VuaXQocFRwKTsKICAgICB9CiAgICAgcmV0dXJuIGFkdHNSZWFkX0NyY0NoZWNrKCZwVHAtPnBhcnNlci5hZHRzKTsKKyAgY2FzZSBUVF9EUk06CisgICAgcmV0dXJuIGRybVJlYWRfQ3JjQ2hlY2soJnBUcC0+cGFyc2VyLmRybSk7CisgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAgcmV0dXJuIFRSQU5TUE9SVERFQ19PSzsKICAgfQpkaWZmIC0tZ2l0IGEvbGliTXBlZ1RQRGVjL3NyYy92ZXJzaW9uIGIvbGliTXBlZ1RQRGVjL3NyYy92ZXJzaW9uCmluZGV4IGZjN2U1ZjAuLjc1ZTIyYzkgMTAwNjQ0Ci0tLSBhL2xpYk1wZWdUUERlYy9zcmMvdmVyc2lvbgorKysgYi9saWJNcGVnVFBEZWMvc3JjL3ZlcnNpb24KQEAgLTIsNyArMiw3IEBACiAvKiBsaWJyYXJ5IGluZm8gKi8KICNkZWZpbmUgVFBfTElCX1ZMMCAyCiAjZGVmaW5lIFRQX0xJQl9WTDEgMwotI2RlZmluZSBUUF9MSUJfVkwyIDQKKyNkZWZpbmUgVFBfTElCX1ZMMiA3CiAjZGVmaW5lIFRQX0xJQl9USVRMRSAiTVBFRyBUcmFuc3BvcnQiCiAjaWZkZWYgX19BTkRST0lEX18KICNkZWZpbmUgVFBfTElCX0JVSUxEX0RBVEUgIiIKZGlmZiAtLWdpdCBhL2xpYk1wZWdUUEVuYy9zcmMvdHBlbmNfbGF0bS5jcHAgYi9saWJNcGVnVFBFbmMvc3JjL3RwZW5jX2xhdG0uY3BwCmluZGV4IDU4ZTUxZWYuLmYyOTIwMTkgMTAwNjQ0Ci0tLSBhL2xpYk1wZWdUUEVuYy9zcmMvdHBlbmNfbGF0bS5jcHAKKysrIGIvbGliTXBlZ1RQRW5jL3NyYy90cGVuY19sYXRtLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMjk2LDYgKzI5Niw3IEBACiAKICAgVVNIT1JUIGNvcmVGcmFtZU9mZnNldD0wOwogCisgIGhBc3MtPnRhcmFCdWZmZXJGdWxsbmVzcyAgPSAweEZGOwogICBoQXNzLT5hdWRpb011eFZlcnNpb25BICAgID0gMDsgLyogZm9yIGZ1dHVyZSBleHRlbnNpb25zICovCiAgIGhBc3MtPnN0cmVhbU11eENvbmZpZ0JpdHMgPSAwOwogCkBAIC0zMzksMTMgKzM0MCw3IEBACiAgICAgICAgICAgICBoQXNzLT5zdHJlYW1NdXhDb25maWdCaXRzKz0xOwogICAgICAgICAgIH0KICAgICAgICAgICBpZiggKHVzZVNhbWVDb25maWcgPT0gMCkgfHwgKHRyYW5zTGF5ZXI9PTApICkgewotICAgICAgICAgICAgVUlOVCBiaXRzOwotCi0gICAgICAgICAgICBpZiAoIGhBc3MtPmF1ZGlvTXV4VmVyc2lvbiA9PSAxICkgewotICAgICAgICAgICAgICBGREtwdXNoRm9yKGhCcywgMik7IC8qIGFsaWduIHRvIEFTQywgZXZlbiBpZiB3ZSBkbyBub3Qga25vdyB0aGUgbGVuZ3RoIG9mIHRoZSAiYXNjTGVuIiBmaWVsZCB5ZXQgKi8KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYml0cyA9IEZES2dldFZhbGlkQml0cyggaEJzICk7CisgICAgICAgICAgICBjb25zdCBVSU5UIGFsaWduQW5jaG9yID0gRkRLZ2V0VmFsaWRCaXRzKGhCcyk7CiAKICAgICAgICAgICAgIHRyYW5zcG9ydEVuY193cml0ZUFTQygKICAgICAgICAgICAgICAgICAgICAgaEJzLApAQCAtMzUzLDE5ICszNDgsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgY2IKICAgICAgICAgICAgICAgICAgICAgKTsKIAotICAgICAgICAgICAgYml0cyA9IEZES2dldFZhbGlkQml0cyggaEJzICkgLSBiaXRzOwotCiAgICAgICAgICAgICBpZiAoIGhBc3MtPmF1ZGlvTXV4VmVyc2lvbiA9PSAxICkgewotICAgICAgICAgICAgICBGREtwdXNoQmFjayhoQnMsIGJpdHMrMik7Ci0gICAgICAgICAgICAgIGhBc3MtPnN0cmVhbU11eENvbmZpZ0JpdHMgKz0gdHJhbnNwb3J0RW5jX0xhdG1Xcml0ZVZhbHVlKCBoQnMsIGJpdHMgKTsKKyAgICAgICAgICAgICAgVUlOVCBhc2NMZW4gPSB0cmFuc3BvcnRFbmNfTGF0bVdyaXRlVmFsdWUoaEJzLCAwKTsKKyAgICAgICAgICAgICAgRkRLYnl0ZUFsaWduKGhCcywgYWxpZ25BbmNob3IpOworICAgICAgICAgICAgICBhc2NMZW4gPSBGREtnZXRWYWxpZEJpdHMoaEJzKSAtIGFsaWduQW5jaG9yIC0gYXNjTGVuOworICAgICAgICAgICAgICBGREtwdXNoQmFjayhoQnMsIEZES2dldFZhbGlkQml0cyhoQnMpIC0gYWxpZ25BbmNob3IpOworCisgICAgICAgICAgICAgIHRyYW5zcG9ydEVuY19MYXRtV3JpdGVWYWx1ZShoQnMsIGFzY0xlbik7CisKICAgICAgICAgICAgICAgdHJhbnNwb3J0RW5jX3dyaXRlQVNDKAogICAgICAgICAgICAgICAgICAgICAgIGhCcywKICAgICAgICAgICAgICAgICAgICAgICBoQXNzLT5jb25maWdbcHJvZ11bbGF5ZXJdLAogICAgICAgICAgICAgICAgICAgICAgIGNiCiAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICBGREtieXRlQWxpZ24oaEJzLCBhbGlnbkFuY2hvcik7IC8qIGFzYyBsZW5ndGggZmlsbGJpdHMgKi8KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaEFzcy0+c3RyZWFtTXV4Q29uZmlnQml0cyArPSBiaXRzOyAvKiBhZGQgYXNjIGxlbmd0aCB0byBzbWMgc3VtbWFyeSAqLworICAgICAgICAgICAgaEFzcy0+c3RyZWFtTXV4Q29uZmlnQml0cyArPSBGREtnZXRWYWxpZEJpdHMoaEJzKSAtIGFsaWduQW5jaG9yOyAvKiBhZGQgYXNjIGxlbmd0aCB0byBzbWMgc3VtbWFyeSAqLwogICAgICAgICAgIH0KICAgICAgICAgICB0cmFuc0xheWVyKys7CiAKQEAgLTM4NCw3ICszODQsNiBAQAogICAgICAgICAgIGNhc2UgQU9UX0VSX0FBQ19MRCAgICAgOgogICAgICAgICAgIGNhc2UgQU9UX0VSX0FBQ19FTEQgICAgOgogICAgICAgICAgIGNhc2UgQU9UX1VTQUM6Ci0gICAgICAgICAgY2FzZSBBT1RfUlNWRDUwOgogICAgICAgICAgICAgcF9saW5mby0+ZnJhbWVMZW5ndGhUeXBlID0gMDsKIAogICAgICAgICAgICAgRkRLd3JpdGVCaXRzKCBoQnMsIHBfbGluZm8tPmZyYW1lTGVuZ3RoVHlwZSwgMyApOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZyYW1lTGVuZ3RoVHlwZSAqLwpkaWZmIC0tZ2l0IGEvbGliTXBlZ1RQRW5jL3NyYy92ZXJzaW9uIGIvbGliTXBlZ1RQRW5jL3NyYy92ZXJzaW9uCmluZGV4IGZjN2U1ZjAuLjg3NDI1NjggMTAwNjQ0Ci0tLSBhL2xpYk1wZWdUUEVuYy9zcmMvdmVyc2lvbgorKysgYi9saWJNcGVnVFBFbmMvc3JjL3ZlcnNpb24KQEAgLTIsNyArMiw3IEBACiAvKiBsaWJyYXJ5IGluZm8gKi8KICNkZWZpbmUgVFBfTElCX1ZMMCAyCiAjZGVmaW5lIFRQX0xJQl9WTDEgMwotI2RlZmluZSBUUF9MSUJfVkwyIDQKKyNkZWZpbmUgVFBfTElCX1ZMMiA2CiAjZGVmaW5lIFRQX0xJQl9USVRMRSAiTVBFRyBUcmFuc3BvcnQiCiAjaWZkZWYgX19BTkRST0lEX18KICNkZWZpbmUgVFBfTElCX0JVSUxEX0RBVEUgIiIKZGlmZiAtLWdpdCBhL2xpYlNCUmRlYy9pbmNsdWRlL3NicmRlY29kZXIuaCBiL2xpYlNCUmRlYy9pbmNsdWRlL3NicmRlY29kZXIuaAppbmRleCAxNzRmYjVjLi4zYmI5YmEzIDEwMDY0NAotLS0gYS9saWJTQlJkZWMvaW5jbHVkZS9zYnJkZWNvZGVyLmgKKysrIGIvbGliU0JSZGVjL2luY2x1ZGUvc2JyZGVjb2Rlci5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0yNjIsNiArMjYyLDcgQEAKICAqICAgICAgICAgaW50byAqY291bnQgaWYgYSBwYXlsb2FkIGxlbmd0aCBpcyBnaXZlbiAoYnlQYXlMZW4gPiAwKS4gSWYgbm8gU0JSIHBheWxvYWQgbGVuZ3RoIGlzCiAgKiAgICAgICAgIGdpdmVuIChic1BheUxlbiA8IDApIHRoZW4gdGhlIGJpdCBzdHJlYW0gcG9zaXRpb24gb24gcmV0dXJuIHdpbGwgYmUgcmFuZG9tIGFmdGVyIHRoaXMKICAqICAgICAgICAgZnVuY3Rpb24gY2FsbCBpbiBjYXNlIG9mIGVycm9ycywgYW5kIGFueSBmdXJ0aGVyIGRlY29kaW5nIHdpbGwgYmUgY29tcGxldGVseSBwb2ludGxlc3MuCisgKiAgICAgICAgIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBlaXRoZXIgbm9ybWFsIG9yZGVyZWQgU0JSIGRhdGEgb3IgcmV2ZXJzZSBvcmRlcmVkIERSTSBTQlIgZGF0YS4KICAqCiAgKiBccGFyYW0gc2VsZiAgICAgICAgICAgU0JSIGRlY29kZXIgaGFuZGxlLgogICogXHBhcmFtIGhCcyAgICAgICAgICAgIEJpdCBzdHJlYW0gaGFuZGxlIGFzIGRhdGEgc291cmNlLgpkaWZmIC0tZ2l0IGEvbGliU0JSZGVjL3NyYy9lbnZfY2FsYy5jcHAgYi9saWJTQlJkZWMvc3JjL2Vudl9jYWxjLmNwcAppbmRleCBhZGU1N2ZjLi5mYTUzMzBhIDEwMDY0NAotLS0gYS9saWJTQlJkZWMvc3JjL2Vudl9jYWxjLmNwcAorKysgYi9saWJTQlJkZWMvc3JjL2Vudl9jYWxjLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTUxLDEzICsxNTEsMTMgQEAKIH0KIEVOVl9DQUxDX05SR1M7CiAKLS8qc3RhdGljKi8gdm9pZCBlcXVhbGl6ZUZpbHRCdWZmZXJFeHAoRklYUF9EQkwgKmZpbHRCdWZmZXIsCitzdGF0aWMgdm9pZCBlcXVhbGl6ZUZpbHRCdWZmZXJFeHAoRklYUF9EQkwgKmZpbHRCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NIQVIgICAqZmlsdEJ1ZmZlcl9lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICpOcmdHYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDSEFSICAgKk5yZ0dhaW5fZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgc3ViYmFuZHMpOwogCi0vKnN0YXRpYyovIHZvaWQgY2FsY05yZ1BlclN1YmJhbmQoRklYUF9EQkwgICoqYW5hbHlzQnVmZmVyUmVhbCwKK3N0YXRpYyB2b2lkIGNhbGNOcmdQZXJTdWJiYW5kKEZJWFBfREJMICAqKmFuYWx5c0J1ZmZlclJlYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCAgKiphbmFseXNCdWZmZXJJbWFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIGxvd1N1YmJhbmQsIGludCBoaWdoU3ViYmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBzdGFydF9wb3MsICBpbnQgbmV4dF9wb3MsCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICpucmdFc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0hBUiAgICAqbnJnRXN0X2UgKTsKIAotLypzdGF0aWMqLyB2b2lkIGNhbGNOcmdQZXJTZmIoRklYUF9EQkwgICoqYW5hbHlzQnVmZmVyUmVhbCwKK3N0YXRpYyB2b2lkIGNhbGNOcmdQZXJTZmIoRklYUF9EQkwgICoqYW5hbHlzQnVmZmVyUmVhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgICoqYW5hbHlzQnVmZmVySW1hZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIG5TZmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICAgICpmcmVxQmFuZFRhYmxlLApAQCAtMTc0LDEzICsxNzQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKm5yZ19lc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDSEFSICAgICpucmdfZXN0X2UgKTsKIAotLypzdGF0aWMqLyB2b2lkIGNhbGNTdWJiYW5kR2FpbihGSVhQX0RCTCAgbnJnUmVmLCBTQ0hBUiBucmdSZWZfZSwgRU5WX0NBTENfTlJHUyogbnJncywgaW50IGMsCitzdGF0aWMgdm9pZCBjYWxjU3ViYmFuZEdhaW4oRklYUF9EQkwgIG5yZ1JlZiwgU0NIQVIgbnJnUmVmX2UsIEVOVl9DQUxDX05SR1MqIG5yZ3MsIGludCBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICB0bXBOb2lzZSwgU0NIQVIgdG1wTm9pc2VfZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAgICAgc2luZVByZXNlbnRGbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICAgICBzaW5lTWFwcGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBub05vaXNlRmxhZyk7CiAKLS8qc3RhdGljKi8gdm9pZCBjYWxjQXZnR2FpbihFTlZfQ0FMQ19OUkdTKiBucmdzLAorc3RhdGljIHZvaWQgY2FsY0F2Z0dhaW4oRU5WX0NBTENfTlJHUyogbnJncywKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgbG93U3ViYmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgaGlnaFN1YmJhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCAgKnN1bVJlZl9tLApAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCAgKnB0ckF2Z0dhaW5fbSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNDSEFSICAgICAqcHRyQXZnR2Fpbl9lKTsKIAotLypzdGF0aWMqLyB2b2lkIGFkanVzdFRpbWVTbG90TEMoRklYUF9EQkwgICpwdHJSZWFsLAorc3RhdGljIHZvaWQgYWRqdXN0VGltZVNsb3RfRWxkR3JpZChGSVhQX0RCTCAgKnB0clJlYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlZfQ0FMQ19OUkdTKiBucmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgKnB0ckhhcm1JbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBsb3dTdWJiYW5kcywKQEAgLTE5Niw4ICsxOTYsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBzY2FsZV9jaGFuZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgbm9Ob2lzZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAqcHRyUGhhc2VJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBmQ2xkZmIpOwotLypzdGF0aWMqLyB2b2lkIGFkanVzdFRpbWVTbG90SFEoRklYUF9EQkwgICpwdHJSZWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgIHNjYWxlX2RpZmZfbG93KTsKKworc3RhdGljIHZvaWQgYWRqdXN0VGltZVNsb3RMQyhGSVhQX0RCTCAgKnB0clJlYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlZfQ0FMQ19OUkdTKiBucmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNIQVIgKnB0ckhhcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBsb3dTdWJiYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBub1N1YmJhbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgIHNjYWxlX2NoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICBub05vaXNlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICpwdHJQaGFzZUluZGV4KTsKK3N0YXRpYyB2b2lkIGFkanVzdFRpbWVTbG90SFEoRklYUF9EQkwgICpwdHJSZWFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgICpwdHJJbWFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX1NCUl9DQUxDVUxBVEVfRU5WRUxPUEUgaF9zYnJfY2FsX2VudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVl9DQUxDX05SR1MqIG5yZ3MsCkBAIC0yMjQsNyArMjMzLDcgQEAKICAgQWRkaXRpb25hbGx5LCB0aGUgZmxhZ3MgaW4gaGFybUZsYWdzUHJldiBhcmUgYmVpbmcgdXBkYXRlZCBieSB0aGlzIGZ1bmN0aW9uCiAgIGZvciB0aGUgbmV4dCBmcmFtZS4KICovCi0vKnN0YXRpYyovIHZvaWQgbWFwU2luZUZsYWdzKFVDSEFSICpmcmVxQmFuZFRhYmxlLCAvKiE8IEJhbmQgYm9yZGVycyAodGhlcmUncyBvbmx5IDEgZmxhZyBwZXIgYmFuZCkgKi8KK3N0YXRpYyB2b2lkIG1hcFNpbmVGbGFncyhVQ0hBUiAqZnJlcUJhbmRUYWJsZSwgICAgICAgICAvKiE8IEJhbmQgYm9yZGVycyAodGhlcmUncyBvbmx5IDEgZmxhZyBwZXIgYmFuZCkgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblNmYiwgICAgICAgICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBiYW5kcyBpbiB0aGUgdGFibGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAqYWRkSGFybW9uaWNzLCAgICAgICAgICAgLyohPCB2ZWN0b3Igd2l0aCAxIGZsYWcgcGVyIHNmYiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaGFybUZsYWdzUHJldiwgICAgICAgICAgIC8qITwgUGFja2VkICdhZGRIYXJtb25pY3MnICovCkBAIC05OTAsNyArOTk5LDYgQEAKICAgICAgICAgICAvKiBQcmV2ZW50IHRoZSBzbW9vdGhpbmcgZmlsdGVyIGZyb20gcnVubmluZyBvbiBjb25zdGFudCBsZXZlbHMgKi8KICAgICAgICAgICBpZiAoai1zdGFydF9wb3MgPCBzbW9vdGhfbGVuZ3RoKQogICAgICAgICAgICAgc21vb3RoX3JhdGlvID0gRkRLX3NickRlY29kZXJfc2JyX3Ntb290aEZpbHRlcltqLXN0YXJ0X3Bvc107Ci0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbW9vdGhfcmF0aW8gPSBGTDJGWENPTlNUX1NHTCgwLjBmKTsKIApAQCAtMTAwNyw3ICsxMDE1LDggQEAKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICBhZGp1c3RUaW1lU2xvdExDKCZhbmFseXNCdWZmZXJSZWFsW2pdW2xvd1N1YmJhbmRdLAorICAgICAgICAgIGlmIChmbGFncyAmIFNCUkRFQ19FTERfR1JJRCkgeworICAgICAgICAgICAgYWRqdXN0VGltZVNsb3RfRWxkR3JpZCgmYW5hbHlzQnVmZmVyUmVhbFtqXVtsb3dTdWJiYW5kXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBOcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmaF9zYnJfY2FsX2Vudi0+aGFybUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93U3ViYmFuZCwKQEAgLTEwMTUsNyArMTAyNCwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVfY2hhbmdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Ob2lzZUZsYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZoX3Nicl9jYWxfZW52LT5waGFzZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgU0JSREVDX0VMRF9HUklEKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFAyU0NBTEUoYWRqX2UpIC0gc2JyU2NhbGVGYWN0b3ItPmxiX3NjYWxlKTsKKyAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICBhZGp1c3RUaW1lU2xvdExDKCZhbmFseXNCdWZmZXJSZWFsW2pdW2xvd1N1YmJhbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcE5yZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoX3Nicl9jYWxfZW52LT5oYXJtSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dTdWJiYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9TdWJiYW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlX2NoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTm9pc2VGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaF9zYnJfY2FsX2Vudi0+cGhhc2VJbmRleCk7CisgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICB9IC8vIGZvcgogCkBAIC0xMTc2LDcgKzExOTYsNyBAQAogICBjYW4gYmUgcGVyZm9ybWVkLgogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIGVudmVsb3BlIGJlZm9yZSBhZGp1c3RpbmcuCiAqLwotLypzdGF0aWMqLyB2b2lkIGVxdWFsaXplRmlsdEJ1ZmZlckV4cChGSVhQX0RCTCAqZmlsdEJ1ZmZlciwgICAgIC8qITwgYnVmZmVyZCBnYWlucyAqLworc3RhdGljIHZvaWQgZXF1YWxpemVGaWx0QnVmZmVyRXhwKEZJWFBfREJMICpmaWx0QnVmZmVyLCAgICAgLyohPCBidWZmZXJkIGdhaW5zICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NIQVIgICAgKmZpbHRCdWZmZXJfZSwgICAvKiE8IGV4cG9uZW50cyBvZiBidWZmZXJkIGdhaW5zICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgKm5yZ0dhaW4sICAgICAgICAvKiE8IGdhaW5zIGZvciBjdXJyZW50IGVudmVsb3BlICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NIQVIgICAgKm5yZ0dhaW5fZSwgICAgICAvKiE8IGV4cG9uZW50cyBvZiBnYWlucyBmb3IgY3VycmVudCBlbnZlbG9wZSAqLwpAQCAtMTMzMSw3ICsxMzUxLDcgQEAKIAogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBpbnRlcnBvbEZyZXEgaXMgdHJ1ZS4KICovCi0vKnN0YXRpYyovIHZvaWQgY2FsY05yZ1BlclN1YmJhbmQoRklYUF9EQkwgICoqYW5hbHlzQnVmZmVyUmVhbCwgLyohPCBSZWFsIHBhcnQgb2Ygc3ViYmFuZCBzYW1wbGVzICovCitzdGF0aWMgdm9pZCBjYWxjTnJnUGVyU3ViYmFuZChGSVhQX0RCTCAgKiphbmFseXNCdWZmZXJSZWFsLCAvKiE8IFJlYWwgcGFydCBvZiBzdWJiYW5kIHNhbXBsZXMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICAqKmFuYWx5c0J1ZmZlckltYWcsIC8qITwgSW1hZ2luYXJ5IHBhcnQgb2Ygc3ViYmFuZCBzYW1wbGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgbG93U3ViYmFuZCwgICAgICAgICAgIC8qITwgQmVnaW4gb2YgdGhlIFNCUiBmcmVxdWVuY3kgcmFuZ2UgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBoaWdoU3ViYmFuZCwgICAgICAgICAgLyohPCBIaWdoIGVuZCBvZiB0aGUgU0JSIGZyZXF1ZW5jeSByYW5nZSAqLwpAQCAtMTQ1Miw3ICsxNDcyLDcgQEAKIAogICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgd2hlbiBpbnRlcnBvbEZyZXEgaXMgZmFsc2UuCiAqLwotLypzdGF0aWMqLyB2b2lkIGNhbGNOcmdQZXJTZmIoRklYUF9EQkwgICoqYW5hbHlzQnVmZmVyUmVhbCwgIC8qITwgUmVhbCBwYXJ0IG9mIHN1YmJhbmQgc2FtcGxlcyAqLworc3RhdGljIHZvaWQgY2FsY05yZ1BlclNmYihGSVhQX0RCTCAgKiphbmFseXNCdWZmZXJSZWFsLCAgLyohPCBSZWFsIHBhcnQgb2Ygc3ViYmFuZCBzYW1wbGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICAqKmFuYWx5c0J1ZmZlckltYWcsICAvKiE8IEltYWdpbmFyeSBwYXJ0IG9mIHN1YmJhbmQgc2FtcGxlcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgblNmYiwgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2Ygc2NhbGUgZmFjdG9yIGJhbmRzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICAgICpmcmVxQmFuZFRhYmxlLCAgICAgICAvKiE8IEZpcnN0IFN1YmJhbmQgZm9yIGVhY2ggU2ZiICovCkBAIC0xNTg1LDcgKzE2MDUsNyBAQAogCiAgIFRoZSByZXN1bHRpbmcgZW5lcmd5IGdhaW4gaXMgZ2l2ZW4gYnkgbWFudGlzc2EgYW5kIGV4cG9uZW50LgogKi8KLS8qc3RhdGljKi8gdm9pZCBjYWxjU3ViYmFuZEdhaW4oRklYUF9EQkwgIG5yZ1JlZiwgICAgICAgICAgICAvKiE8IFJlZmVyZW5jZSBFbmVyZ3kgYWNjb3JkaW5nIHRvIGVudmVsb3BlIGRhdGEgKi8KK3N0YXRpYyB2b2lkIGNhbGNTdWJiYW5kR2FpbihGSVhQX0RCTCAgbnJnUmVmLCAgICAgICAgICAgIC8qITwgUmVmZXJlbmNlIEVuZXJneSBhY2NvcmRpbmcgdG8gZW52ZWxvcGUgZGF0YSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDSEFSICAgICBucmdSZWZfZSwgICAgICAgICAgLyohPCBSZWZlcmVuY2UgRW5lcmd5IGFjY29yZGluZyB0byBlbnZlbG9wZSBkYXRhIChleHBvbmVudCkgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlZfQ0FMQ19OUkdTKiBucmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBpLApAQCAtMTY4OSw3ICsxNzA5LDcgQEAKICAgVGhlIHJlc3VsdCBpcyB1c2VkIGFzIGEgcmVsYXRpdmUgbGltaXQgZm9yIGFsbCBnYWlucyB3aXRoaW4gdGhlCiAgIGN1cnJlbnQgImxpbWl0ZXIgYmFuZCIgKGEgY2VydGFpbiBmcmVxdWVuY3kgcmFuZ2UpLgogKi8KLS8qc3RhdGljKi8gdm9pZCBjYWxjQXZnR2FpbihFTlZfQ0FMQ19OUkdTKiBucmdzLAorc3RhdGljIHZvaWQgY2FsY0F2Z0dhaW4oRU5WX0NBTENfTlJHUyogbnJncywKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgbG93U3ViYmFuZCwgICAgLyohPCBCZWdpbiBvZiB0aGUgbGltaXRlciBiYW5kICovCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgIGhpZ2hTdWJiYW5kLCAgIC8qITwgSGlnaCBlbmQgb2YgdGhlIGxpbWl0ZXIgYmFuZCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgRklYUF9EQkwgICpwdHJTdW1SZWYsCkBAIC0xNzI4LDIxICsxNzQ4LDEwMSBAQAogICAqcHRyU3VtUmVmX2UgPSBzdW1SZWZfZTsKIH0KIAorc3RhdGljIHZvaWQgYWRqdXN0VGltZVNsb3RfRWxkR3JpZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICpwdHJSZWFsLCAgICAgICAgLyohPCBTdWJiYW5kIHNhbXBsZXMgdG8gYmUgYWRqdXN0ZWQsIHJlYWwgcGFydCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5WX0NBTENfTlJHUyogbnJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSICAgICpwdHJIYXJtSW5kZXgsICAgLyohPCBIYXJtb25pYyBpbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIGxvd1N1YmJhbmQsICAgICAvKiE8IExvd2VzdCBRTUYtY2hhbm5lbCBpbiB0aGUgY3VycmVudGx5IHVzZWQgU0JSIHJhbmdlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIG5vU3ViYmFuZHMsICAgICAvKiE8IE51bWJlciBvZiBRTUYgc3ViYmFuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBzY2FsZV9jaGFuZ2UsICAgLyohPCBOdW1iZXIgb2YgYml0cyB0byBzaGlmdCBhZGp1c3RlZCBzYW1wbGVzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgbm9Ob2lzZUZsYWcsICAgIC8qITwgRmxhZyB0byBzdXBwcmVzcyBub2lzZSBhZGRpdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgKnB0clBoYXNlSW5kZXgsICAvKiE8IFN0YXJ0IGluZGV4IHRvIHJhbmRvbSBudW1iZXIgYXJyYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBzY2FsZV9kaWZmX2xvdykgLyohPCAgKi8KK3sKKyAgaW50IGs7CisgIEZJWFBfREJMICBzaWduYWxSZWFsLCBzYk5vaXNlOworICBpbnQgdG9uZV9jb3VudCA9IDA7CisKKyAgRklYUF9EQkwgKnBHYWluICAgICAgID0gbnJncy0+bnJnR2FpbjsgICAgIC8qITwgR2FpbnMgb2YgY3VycmVudCBlbnZlbG9wZSAqLworICBGSVhQX0RCTCAqcE5vaXNlTGV2ZWwgPSBucmdzLT5ub2lzZUxldmVsOyAgLyohPCBOb2lzZSBsZXZlbHMgb2YgY3VycmVudCBlbnZlbG9wZSAqLworICBGSVhQX0RCTCAqcFNpbmVMZXZlbCAgPSBucmdzLT5ucmdTaW5lOyAgICAgLyohPCBTaW5lIGxldmVscyAqLworCisgIGludCAgICBwaGFzZUluZGV4ID0gKnB0clBoYXNlSW5kZXg7CisgIFVDSEFSICBoYXJtSW5kZXggID0gKnB0ckhhcm1JbmRleDsKKworICBzdGF0aWMgY29uc3QgSU5UIGhhcm1vbmljUGhhc2UgWzJdWzRdID0geworICAgIHsgMSwgMCwgLTEsICAwfSwKKyAgICB7IDAsIDEsICAwLCAtMX0KKyAgfTsKKworICBzdGF0aWMgY29uc3QgRklYUF9EQkwgaGFybW9uaWNQaGFzZVggWzJdWzRdID0geworICAgIHsgRkwyRlhDT05TVF9EQkwoMi4wKjEuMjQ1MTgzMTU0NTM5MTM5ZS0wMDEpLCAgRkwyRlhDT05TVF9EQkwoMi4wKi0xLjEyMzc2Nzg1OTMyNTAyOGUtMDAxKSwgIEZMMkZYQ09OU1RfREJMKDIuMCotMS4yNDUxODMxNTQ1MzkxMzllLTAwMSksIEZMMkZYQ09OU1RfREJMKDIuMCogMS4xMjM3Njc4NTkzMjUwMjhlLTAwMSkgfSwKKyAgICB7IEZMMkZYQ09OU1RfREJMKDIuMCoxLjI0NTE4MzE1NDUzOTEzOWUtMDAxKSwgIEZMMkZYQ09OU1RfREJMKDIuMCogMS4xMjM3Njc4NTkzMjUwMjhlLTAwMSksICBGTDJGWENPTlNUX0RCTCgyLjAqLTEuMjQ1MTgzMTU0NTM5MTM5ZS0wMDEpLCBGTDJGWENPTlNUX0RCTCgyLjAqLTEuMTIzNzY3ODU5MzI1MDI4ZS0wMDEpIH0KKyAgfTsKKworICBmb3IgKGs9MDsgayA8IG5vU3ViYmFuZHM7IGsrKykgeworCisgICAgcGhhc2VJbmRleCA9IChwaGFzZUluZGV4ICsgMSkgJiAoU0JSX05GX05PX1JBTkRPTV9WQUwgLSAxKTsKKworICAgIGlmKCAocFNpbmVMZXZlbFswXSAhPSBGTDJGWENPTlNUX0RCTCgwLjBmKSkgfHwgKG5vTm9pc2VGbGFnID09IDEpICl7CisgICAgICBzYk5vaXNlID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgfSBlbHNlIHsKKyAgICAgIHNiTm9pc2UgPSBwTm9pc2VMZXZlbFswXTsKKyAgICB9CisKKyAgICBzaWduYWxSZWFsID0gZk11bHREaXYyKCpwdHJSZWFsLCpwR2FpbikgPDwgKChpbnQpc2NhbGVfY2hhbmdlKTsKKworICAgIHNpZ25hbFJlYWwgKz0gKGZNdWx0RGl2MihGREtfc2JyRGVjb2Rlcl9zYnJfcmFuZG9tUGhhc2VbcGhhc2VJbmRleF1bMF0sIHNiTm9pc2UpPDw0KTsKKworICAgIHNpZ25hbFJlYWwgKz0gcFNpbmVMZXZlbFswXSAqIGhhcm1vbmljUGhhc2VbMF1baGFybUluZGV4XTsKKworICAgICpwdHJSZWFsID0gc2lnbmFsUmVhbDsKKworICAgIGlmIChrID09IDApIHsKKyAgICAgICoocHRyUmVhbC0xKSArPSBzY2FsZVZhbHVlKGZNdWx0RGl2MihoYXJtb25pY1BoYXNlWFtsb3dTdWJiYW5kJjFdW2hhcm1JbmRleF0sIHBTaW5lTGV2ZWxbMF0pLCAtc2NhbGVfZGlmZl9sb3cpICA7CisgICAgICBpZiAoayA8IG5vU3ViYmFuZHMgLSAxKSB7CisgICAgICAgICoocHRyUmVhbCkgICArPSBmTXVsdERpdjIocFNpbmVMZXZlbFsxXSwgaGFybW9uaWNQaGFzZVhbKGxvd1N1YmJhbmQrMSkmMV1baGFybUluZGV4XSk7CisgICAgICB9CisgICAgfQorICAgIGlmIChrID4gMCAmJiBrIDwgbm9TdWJiYW5kcyAtIDEgJiYgdG9uZV9jb3VudCA8IDE2KSB7CisgICAgICAqKHB0clJlYWwpICAgKz0gZk11bHREaXYyKHBTaW5lTGV2ZWxbLSAxXSwgaGFybW9uaWNQaGFzZVggWyhsb3dTdWJiYW5kK2spJjFdICBbaGFybUluZGV4XSk7CisgICAgICAqKHB0clJlYWwpICAgKz0gZk11bHREaXYyKHBTaW5lTGV2ZWxbKyAxXSwgaGFybW9uaWNQaGFzZVggWyhsb3dTdWJiYW5kK2srMSkmMV1baGFybUluZGV4XSk7CisgICAgfQorICAgIGlmIChrID09IG5vU3ViYmFuZHMgLSAxICYmIHRvbmVfY291bnQgPCAxNikgeworICAgICAgaWYgKGsgPiAwKSB7CisgICAgICAgICoocHRyUmVhbCkgICArPSBmTXVsdERpdjIocFNpbmVMZXZlbFstIDFdLCBoYXJtb25pY1BoYXNlWCBbKGxvd1N1YmJhbmQraykmMV1baGFybUluZGV4XSk7CisgICAgICB9CisgICAgICBpZiAoayArIGxvd1N1YmJhbmQgKyAxPCA2MykgeworICAgICAgICAqKHB0clJlYWwrMSkgKz0gZk11bHREaXYyKHBTaW5lTGV2ZWxbMF0sIGhhcm1vbmljUGhhc2VYWyhsb3dTdWJiYW5kK2srMSkmMV1baGFybUluZGV4XSk7CisgICAgICB9CisgICAgfQorCisgICAgaWYocFNpbmVMZXZlbFswXSAhPSBGTDJGWENPTlNUX0RCTCgwLjBmKSl7CisgICAgICB0b25lX2NvdW50Kys7CisgICAgfQorICAgIHB0clJlYWwrKzsKKyAgICBwTm9pc2VMZXZlbCsrOworICAgIHBHYWluKys7CisgICAgcFNpbmVMZXZlbCsrOworICB9CisKKyAgKnB0ckhhcm1JbmRleCA9IChoYXJtSW5kZXggKyAxKSAmIDM7CisgICpwdHJQaGFzZUluZGV4ID0gcGhhc2VJbmRleCAmIChTQlJfTkZfTk9fUkFORE9NX1ZBTCAtIDEpOworfQogCiAvKiEKICAgXGJyaWVmICAgQW1wbGlmeSBvbmUgdGltZXNsb3Qgb2YgdGhlIHNpZ25hbCB3aXRoIHRoZSBjYWxjdWxhdGVkIGdhaW5zCiAgICAgICAgICAgIGFuZCBhZGQgdGhlIG5vaXNlZmxvb3IuCiAqLwogCi0vKnN0YXRpYyovIHZvaWQgYWRqdXN0VGltZVNsb3RMQyhGSVhQX0RCTCAqcHRyUmVhbCwgICAgICAgLyohPCBTdWJiYW5kIHNhbXBsZXMgdG8gYmUgYWRqdXN0ZWQsIHJlYWwgcGFydCAqLworc3RhdGljIHZvaWQgYWRqdXN0VGltZVNsb3RMQyhGSVhQX0RCTCAqcHRyUmVhbCwgICAgICAgLyohPCBTdWJiYW5kIHNhbXBsZXMgdG8gYmUgYWRqdXN0ZWQsIHJlYWwgcGFydCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlZfQ0FMQ19OUkdTKiBucmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAgICAqcHRySGFybUluZGV4LCAgLyohPCBIYXJtb25pYyBpbmRleCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgbG93U3ViYmFuZCwgICAgLyohPCBMb3dlc3QgUU1GLWNoYW5uZWwgaW4gdGhlIGN1cnJlbnRseSB1c2VkIFNCUiByYW5nZS4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgIG5vU3ViYmFuZHMsICAgIC8qITwgTnVtYmVyIG9mIFFNRiBzdWJiYW5kcyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgc2NhbGVfY2hhbmdlLCAgLyohPCBOdW1iZXIgb2YgYml0cyB0byBzaGlmdCBhZGp1c3RlZCBzYW1wbGVzICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBub05vaXNlRmxhZywgICAvKiE8IEZsYWcgdG8gc3VwcHJlc3Mgbm9pc2UgYWRkaXRpb24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgKnB0clBoYXNlSW5kZXgsIC8qITwgU3RhcnQgaW5kZXggdG8gcmFuZG9tIG51bWJlciBhcnJheSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgZkNsZGZiKSAgICAgICAgLyohPCBDTERGQiA4MCBmbGFnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICpwdHJQaGFzZUluZGV4KSAvKiE8IFN0YXJ0IGluZGV4IHRvIHJhbmRvbSBudW1iZXIgYXJyYXkgKi8KIHsKICAgRklYUF9EQkwgKnBHYWluICAgICAgID0gbnJncy0+bnJnR2FpbjsgICAgIC8qITwgR2FpbnMgb2YgY3VycmVudCBlbnZlbG9wZSAqLwogICBGSVhQX0RCTCAqcE5vaXNlTGV2ZWwgPSBucmdzLT5ub2lzZUxldmVsOyAgLyohPCBOb2lzZSBsZXZlbHMgb2YgY3VycmVudCBlbnZlbG9wZSAqLwpAQCAtMTc3NSw0MSArMTg3NSwxMCBAQAogICBzaW5lTGV2ZWxOZXh0ID0gKG5vU3ViYmFuZHMgPiAxKSA/IHBTaW5lTGV2ZWxbMF0gOiBGTDJGWENPTlNUX0RCTCgwLjBmKTsKIAogICBpZiAoc2luZUxldmVsIT1GTDJGWENPTlNUX0RCTCgwLjBmKSkgdG9uZV9jb3VudCsrOwotCiAgIGVsc2UgaWYgKCFub05vaXNlRmxhZykKICAgICAgICAgLyogQWRkIG5vaXNlZmxvb3IgdG8gdGhlIGFtcGxpZmllZCBzaWduYWwgKi8KICAgICAgICAgc2lnbmFsUmVhbCArPSAoZk11bHREaXYyKEZES19zYnJEZWNvZGVyX3Nicl9yYW5kb21QaGFzZVtpbmRleF1bMF0sIHBOb2lzZUxldmVsWzBdKTw8NCk7CiAKLSAgaWYgKGZDbGRmYikgewotCi0gICAgaWYgKCEoaGFybUluZGV4JjB4MSkpIHsKLSAgICAgIC8qIGhhcm1JbmRleCAwLDIgKi8KLSAgICAgIHNpZ25hbFJlYWwgKz0gKGhhcm1JbmRleCYweDIpID8gLXNpbmVMZXZlbCA6IHNpbmVMZXZlbDsKLSAgICAgICpwdHJSZWFsKysgPSBzaWduYWxSZWFsOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIC8qIGhhcm1JbmRleCAxLDMgaW4gY29tYmluYXRpb24gd2l0aCBmcmVxSW52RmxhZyAqLwotICAgICAgaW50IHNoaWZ0ID0gKGludCkgKHNjYWxlX2NoYW5nZSsxKTsKLSAgICAgIHNoaWZ0ID0gKHNoaWZ0Pj0wKSA/IGZpeE1pbihERlJBQ1RfQklUUy0xLHNoaWZ0KSA6IGZpeE1heCgtKERGUkFDVF9CSVRTLTEpLHNoaWZ0KTsKLQotICAgICAgRklYUF9EQkwgdG1wMSA9IHNjYWxlVmFsdWUoIGZNdWx0RGl2MihDMV9DTERGQiwgc2luZUxldmVsKSwgLXNoaWZ0ICk7Ci0KLSAgICAgIEZJWFBfREJMIHRtcDIgPSBmTXVsdERpdjIoQzFfQ0xERkIsIHNpbmVMZXZlbE5leHQpOwotCi0KLSAgICAgIC8qIHNhdmUgc3dpdGNoIGFuZCBjb21wYXJlIG9wZXJhdGlvbnMgYW5kIHJlZHVjZSB0byBYT1Igc3RhdGVtZW50ICovCi0gICAgICBpZiAoICgoaGFybUluZGV4Pj4xKSYweDEpXmZyZXFJbnZGbGFnKSB7Ci0gICAgICAgICAgKihwdHJSZWFsLTEpICs9IHRtcDE7Ci0gICAgICAgICAgc2lnbmFsUmVhbCAgIC09IHRtcDI7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAgICoocHRyUmVhbC0xKSAtPSB0bXAxOwotICAgICAgICAgIHNpZ25hbFJlYWwgICArPSB0bXAyOwotICAgICAgfQotICAgICAgKnB0clJlYWwrKyA9IHNpZ25hbFJlYWw7Ci0gICAgICBmcmVxSW52RmxhZyA9ICFmcmVxSW52RmxhZzsKLSAgICB9Ci0KLSAgfSBlbHNlCiAgIHsKICAgICBpZiAoIShoYXJtSW5kZXgmMHgxKSkgewogICAgICAgLyogaGFybUluZGV4IDAsMiAqLwpAQCAtMTkzMyw4ICsyMDAyLDkgQEAKICAgKnB0ckhhcm1JbmRleCA9IChoYXJtSW5kZXggKyAxKSAmIDM7CiAgICpwdHJQaGFzZUluZGV4ID0gaW5kZXggJiAoU0JSX05GX05PX1JBTkRPTV9WQUwgLSAxKTsKIH0KLXZvaWQgYWRqdXN0VGltZVNsb3RIUShGSVhQX0RCTCAqUkVTVFJJQ1QgcHRyUmVhbCwgICAgICAgICAgIC8qITwgU3ViYmFuZCBzYW1wbGVzIHRvIGJlIGFkanVzdGVkLCByZWFsIHBhcnQgKi8KLSAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCAqUkVTVFJJQ1QgcHRySW1hZywgICAgICAgICAgICAgICAvKiE8IFN1YmJhbmQgc2FtcGxlcyB0byBiZSBhZGp1c3RlZCwgaW1hZyBwYXJ0ICovCitzdGF0aWMgdm9pZCBhZGp1c3RUaW1lU2xvdEhRKAorICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICpSRVNUUklDVCBwdHJSZWFsLCAgICAgIC8qITwgU3ViYmFuZCBzYW1wbGVzIHRvIGJlIGFkanVzdGVkLCByZWFsIHBhcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCAqUkVTVFJJQ1QgcHRySW1hZywgICAgICAvKiE8IFN1YmJhbmQgc2FtcGxlcyB0byBiZSBhZGp1c3RlZCwgaW1hZyBwYXJ0ICovCiAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX1NCUl9DQUxDVUxBVEVfRU5WRUxPUEUgaF9zYnJfY2FsX2VudiwKICAgICAgICAgICAgICAgICAgICAgICBFTlZfQ0FMQ19OUkdTKiBucmdzLAogICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICBsb3dTdWJiYW5kLCAgICAgICAgICAgIC8qITwgTG93ZXN0IFFNRi1jaGFubmVsIGluIHRoZSBjdXJyZW50bHkgdXNlZCBTQlIgcmFuZ2UuICovCkBAIC0yMTM3LDcgKzIyMDcsNiBAQAogICBVQ0hBUiB3b3JrTGltaXRlckJhbmRUYWJsZVtNQVhfRlJFUV9DT0VGRlMgLyAyICsgTUFYX05VTV9QQVRDSEVTICsgMV07CiAgIGludCBwYXRjaEJvcmRlcnNbTUFYX05VTV9QQVRDSEVTICsgMV07CiAgIGludCBreCwgazI7Ci0gIEZJWFBfREJMIHRlbXA7CiAKICAgaW50IGxvd1N1YmJhbmQgPSBmcmVxQmFuZFRhYmxlWzBdOwogICBpbnQgaGlnaFN1YmJhbmQgPSBmcmVxQmFuZFRhYmxlW25vRnJlcUJhbmRzXTsKQEAgLTIxNjksMTMgKzIyMzgsMzIgQEAKIAogCiAgICAgd2hpbGUgKGhpTGltSW5kZXggPD0gdGVtcE5vTGltKSB7CisgICAgICBGSVhQX0RCTCBkaXZfbSwgb2N0X20sIHRlbXA7CisgICAgICBJTlQgZGl2X2UgID0gMCwgb2N0X2UgID0gMCwgdGVtcF9lID0gMDsKKwogICAgICAgazIgPSB3b3JrTGltaXRlckJhbmRUYWJsZVtoaUxpbUluZGV4XSArIGxvd1N1YmJhbmQ7CiAgICAgICBreCA9IHdvcmtMaW1pdGVyQmFuZFRhYmxlW2xvTGltSW5kZXhdICsgbG93U3ViYmFuZDsKIAotICAgICAgdGVtcCA9IEZYX1NHTDJGWF9EQkwoRkRLX2dldE51bU9jdGF2ZXNEaXY4KGt4LGsyKSk7IC8qIE51bWJlciBvZiBvY3RhdmVzICovCi0gICAgICB0ZW1wID0gZk11bHQodGVtcCwgRkRLX3NickRlY29kZXJfc2JyX2xpbWl0ZXJCYW5kc1Blck9jdGF2ZURpdjRbbGltaXRlckJhbmRzXSk7CisgICAgICBkaXZfbSAgPSBmRGl2Tm9ybShrMiwga3gsICZkaXZfZSk7CiAKLSAgICAgIGlmICh0ZW1wIDwgRkwyRlhDT05TVF9EQkwgKDAuNDlmKT4+NSkgeworICAgICAgLyogY2FsY3VsYXRlIG51bWJlciBvZiBvY3RhdmVzICovCisgICAgICBvY3RfbSAgPSBmTG9nMihkaXZfbSwgZGl2X2UsICZvY3RfZSk7CisKKyAgICAgIC8qIG11bHRpcGx5IHdpdGggbGltaXRlcmJhbmRzIHBlciBvY3RhdmUgICAgKi8KKyAgICAgIC8qIHZhbHVlcyAxLCAxLjIsIDIsIDMgLT4gc2NhbGUgZmFjdG9yIG9mIDIgKi8KKyAgICAgIHRlbXAgPSBmTXVsdE5vcm0ob2N0X20sIEZES19zYnJEZWNvZGVyX3Nicl9saW1pdGVyQmFuZHNQZXJPY3RhdmVEaXY0X0RCTFtsaW1pdGVyQmFuZHNdLCAmdGVtcF9lKTsKKworICAgICAgLyogb3ZlcmFsbCBzY2FsZSBmYWN0b3Igb2YgdGVtcCBpc3QgYWRkaXRpb24gb2Ygc2NhbGVmYWN0b3JzIGZyb20gbG9nMiBjYWxjdWxhdGlvbiwKKyAgICAgICAgIGxpbWl0ZXIgYmFuZHMgc2NhbGVmYWN0b3IgKDIpIGFuZCBsaW1pdGVyIGJhbmRzIG11bHRpcGxpY2F0aW9uICovCisgICAgICB0ZW1wX2UgKz0gb2N0X2UgKyAyOworCisgICAgICAvKiAgICBkaXYgY2FuIGJlIGEgbWF4aW11bSBvZiA2NCAoazIgPSA2NCBhbmQga3ggPSAxKQorICAgICAgICAgLT4gb2N0IGNhbiBiZSBhIG1heGltdW0gb2YgNgorICAgICAgICAgLT4gdGVtcCBjYW4gYmUgYSBtYXhpbXVtIG9mIDE4IChhcyBsaW1pdGVyQmFuZHNQZXJPY3RvYXZlIGlzIGEgbWF4aW11bSBmYWN0b3Igb2YgMykKKyAgICAgICAgIC0+IHdlIG5lZWQgYSBzY2FsZSBmYWN0b3Igb2YgNSBmb3IgY29tcGFyaXNzb24KKyAgICAgICovCisgICAgICBpZiAodGVtcCA+PiAoNSAtIHRlbXBfZSkgPCBGTDJGWENPTlNUX0RCTCAoMC40OWYpID4+IDUpIHsKKwogICAgICAgICBpZiAod29ya0xpbWl0ZXJCYW5kVGFibGVbaGlMaW1JbmRleF0gPT0gd29ya0xpbWl0ZXJCYW5kVGFibGVbbG9MaW1JbmRleF0pIHsKICAgICAgICAgICB3b3JrTGltaXRlckJhbmRUYWJsZVtoaUxpbUluZGV4XSA9IGhpZ2hTdWJiYW5kOwogICAgICAgICAgIG5CYW5kcy0tOwpkaWZmIC0tZ2l0IGEvbGliU0JSZGVjL3NyYy9lbnZfZGVjLmNwcCBiL2xpYlNCUmRlYy9zcmMvZW52X2RlYy5jcHAKaW5kZXggMjRiMmQzYi4uYzY1YzE2OSAxMDA2NDQKLS0tIGEvbGliU0JSZGVjL3NyYy9lbnZfZGVjLmNwcAorKysgYi9saWJTQlJkZWMvc3JjL2Vudl9kZWMuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0zNjksNyArMzY5LDcgQEAKICAgRklYUF9TR0wgc3RlcDsgICAgLyogc3BlZWQgb2YgZmFkZSAqLwogICBpbnQgaTsKIAotICBpbnQgY3VycmVudFN0YXJ0UG9zID0gaF9wcmV2X2RhdGEtPnN0b3BQb3MgLSBoSGVhZGVyRGF0YS0+bnVtYmVyVGltZVNsb3RzOworICBpbnQgY3VycmVudFN0YXJ0UG9zID0gRkRLbWF4KDAsIGhfcHJldl9kYXRhLT5zdG9wUG9zIC0gaEhlYWRlckRhdGEtPm51bWJlclRpbWVTbG90cyk7CiAgIGludCBjdXJyZW50U3RvcFBvcyA9IGhIZWFkZXJEYXRhLT5udW1iZXJUaW1lU2xvdHM7CiAKIApkaWZmIC0tZ2l0IGEvbGliU0JSZGVjL3NyYy9lbnZfZXh0ci5jcHAgYi9saWJTQlJkZWMvc3JjL2Vudl9leHRyLmNwcAppbmRleCA2Y2IwYjk5Li5kYWNkOTUxIDEwMDY0NAotLS0gYS9saWJTQlJkZWMvc3JjL2Vudl9leHRyLmNwcAorKysgYi9saWJTQlJkZWMvc3JjL2Vudl9leHRyLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMzI3LDcgKzMyNyw3IEBACiAgIH0KIAogICAvKiBMb29rIGZvciBuZXcgc2V0dGluZ3MuIElFQyAxNDQ5Ni0zLCA0LjYuMTguMy4xICovCi0gIGlmKGhIZWFkZXJEYXRhLT5zeW5jU3RhdGUgIT0gU0JSX0FDVElWRSB8fAorICBpZihoSGVhZGVyRGF0YS0+c3luY1N0YXRlIDwgU0JSX0hFQURFUiB8fAogICAgICBsYXN0SGVhZGVyLnN0YXJ0RnJlcSAgICE9IHBCc0RhdGEtPnN0YXJ0RnJlcSAgIHx8CiAgICAgIGxhc3RIZWFkZXIuc3RvcEZyZXEgICAgIT0gcEJzRGF0YS0+c3RvcEZyZXEgICAgfHwKICAgICAgbGFzdEhlYWRlci5mcmVxU2NhbGUgICAhPSBwQnNEYXRhLT5mcmVxU2NhbGUgICB8fApkaWZmIC0tZ2l0IGEvbGliU0JSZGVjL3NyYy9lbnZfZXh0ci5oIGIvbGliU0JSZGVjL3NyYy9lbnZfZXh0ci5oCmluZGV4IGFiNmI3MDQuLjA1MThlYTkgMTAwNjQ0Ci0tLSBhL2xpYlNCUmRlYy9zcmMvZW52X2V4dHIuaAorKysgYi9saWJTQlJkZWMvc3JjL2Vudl9leHRyLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEyNSw2ICsxMjUsNyBAQAogdHlwZWRlZiBlbnVtCiB7CiAgIEhFQURFUl9OT1RfUFJFU0VOVCwKKyAgSEVBREVSX0VSUk9SLAogICBIRUFERVJfT0ssCiAgIEhFQURFUl9SRVNFVAogfQpAQCAtMTMyLDEwICsxMzMsMTAgQEAKIAogdHlwZWRlZiBlbnVtCiB7Ci0gIFNCUl9OT1RfSU5JVElBTElaRUQsCi0gIFVQU0FNUExJTkcsCi0gIFNCUl9IRUFERVIsCi0gIFNCUl9BQ1RJVkUKKyAgU0JSX05PVF9JTklUSUFMSVpFRCA9IDAsCisgIFVQU0FNUExJTkcgPSAxLAorICBTQlJfSEVBREVSID0gMiwKKyAgU0JSX0FDVElWRSA9IDMKIH0KIFNCUl9TWU5DX1NUQVRFOwogCkBAIC0xNzksNiArMTgwLDcgQEAKICNkZWZpbmUgU0JSREVDX0xPV19QT1dFUiAgICAgIDE2ICAvKiBGbGFnIGluZGljYXRpbmcgdGhhdCBMb3cgUG93ZXIgUU1GIG1vZGUgc2hhbGwgYmUgdXNlZC4gKi8KICNkZWZpbmUgU0JSREVDX1BTX0RFQ09ERUQgICAgIDMyICAvKiBGbGFnIGluZGljYXRpbmcgdGhhdCBQUyB3YXMgZGVjb2RlZCBhbmQgcmVuZGVyZWQuICovCiAjZGVmaW5lIFNCUkRFQ19MRF9NUFNfUU1GICAgIDUxMiAgLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIExELU1QUyBRTUYgc2hhbGwgYmUgdXNlZC4gKi8KKyNkZWZpbmUgU0JSREVDX1NZTlRBWF9EUk0gICAyMDQ4ICAvKiBGbGFnIGluZGljYXRpbmcgdGhhdCBEUk0zMC9EUk0rIHJldmVyc2Ugc3ludGF4IGlzIGJlaW5nIHVzZWQuICovCiAjZGVmaW5lIFNCUkRFQ19ET1dOU0FNUExFICAgODE5MiAgLyogRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIGRvd25zYW1wbGluZyBtb2RlIGlzIHVzZWQuICovCiAjZGVmaW5lIFNCUkRFQ19GTFVTSCAgICAgICAxNjM4NCAgLyogRmxhZyBpcyB1c2VkIHRvIGZsdXNoIGFsbCBlbGVtZW50cyBpbiB1c2UuICovCiAjZGVmaW5lIFNCUkRFQ19GT1JDRV9SRVNFVCAzMjc2OCAgLyogRmxhZyBpcyB1c2VkIHRvIGZvcmNlIGEgcmVzZXQgb2YgYWxsIGVsZW1lbnRzIGluIHVzZS4gKi8KZGlmZiAtLWdpdCBhL2xpYlNCUmRlYy9zcmMvc2JyX2RlYy5jcHAgYi9saWJTQlJkZWMvc3JjL3Nicl9kZWMuY3BwCmluZGV4IDEyODIzMzguLjA4NjQzNDggMTAwNjQ0Ci0tLSBhL2xpYlNCUmRlYy9zcmMvc2JyX2RlYy5jcHAKKysrIGIvbGliU0JSZGVjL3NyYy9zYnJfZGVjLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMjI1LDcgKzIyNSwxNCBAQAogICB9CiAKICAgaWYgKHJlc2V0QW5hUW1mKSB7Ci0gICAgaW50IHFtZkVyciA9IHFtZkluaXRBbmFseXNpc0ZpbHRlckJhbmsgKAorICAgIFFNRl9GSUxURVJfQkFOSyBwcnZBbmFRbWY7CisgICAgaW50ICBxbWZFcnI7CisKKyAgICAvKiBTdG9yZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KKyAgICBGREttZW1jcHkoJnBydkFuYVFtZiwgJmhTYnJEZWMtPkFuYWx5c2lzY1FNRiwgc2l6ZW9mKFFNRl9GSUxURVJfQkFOSykpOworCisgICAgLyogUmVzZXQgYW5hbHlzaXMgUU1GICovCisgICAgcW1mRXJyID0gcW1mSW5pdEFuYWx5c2lzRmlsdGVyQmFuayAoCiAgICAgICAgICAgICZoU2JyRGVjLT5BbmFseXNpc2NRTUYsCiAgICAgICAgICAgICBoU2JyRGVjLT5hbmFRbWZTdGF0ZXMsCiAgICAgICAgICAgICBoU2JyRGVjLT5BbmFseXNpc2NRTUYubm9fY29sLApAQCAtMjM0LDEzICsyNDEsMjIgQEAKICAgICAgICAgICAgIGhTYnJEZWMtPkFuYWx5c2lzY1FNRi5ub19jaGFubmVscywKICAgICAgICAgICAgIGFuYVFtZkZsYWdzIHwgUU1GX0ZMQUdfS0VFUF9TVEFURVMKICAgICAgICAgICAgICk7CisKICAgICBpZiAocW1mRXJyICE9IDApIHsKLSAgICAgIEZES19BU1NFUlQoMCk7CisgICAgICAvKiBSZXN0b3JlIG9sZCBjb25maWd1cmF0aW9uIG9mIGFuYWx5c2lzIFFNRiAqLworICAgICAgRkRLbWVtY3B5KCZoU2JyRGVjLT5BbmFseXNpc2NRTUYsICZwcnZBbmFRbWYsIHNpemVvZihRTUZfRklMVEVSX0JBTkspKTsKICAgICB9CiAgIH0KIAogICBpZiAocmVzZXRTeW5RbWYpIHsKLSAgICBpbnQgcW1mRXJyID0gcW1mSW5pdFN5bnRoZXNpc0ZpbHRlckJhbmsgKAorICAgIFFNRl9GSUxURVJfQkFOSyBwcnZTeW5RbWY7CisgICAgaW50ICBxbWZFcnI7CisKKyAgICAvKiBTdG9yZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gKi8KKyAgICBGREttZW1jcHkoJnBydlN5blFtZiwgJmhTYnJEZWMtPlN5bnRoZXNpc1FNRiwgc2l6ZW9mKFFNRl9GSUxURVJfQkFOSykpOworCisgICAgLyogUmVzZXQgc3ludGhlc2lzIFFNRiAqLworICAgIHFtZkVyciA9IHFtZkluaXRTeW50aGVzaXNGaWx0ZXJCYW5rICgKICAgICAgICAgICAgJmhTYnJEZWMtPlN5bnRoZXNpc1FNRiwKICAgICAgICAgICAgIGhTYnJEZWMtPnBTeW5RbWZTdGF0ZXMsCiAgICAgICAgICAgICBoU2JyRGVjLT5TeW50aGVzaXNRTUYubm9fY29sLApAQCAtMjUxLDcgKzI2Nyw4IEBACiAgICAgICAgICAgICApOwogCiAgICAgaWYgKHFtZkVyciAhPSAwKSB7Ci0gICAgICBGREtfQVNTRVJUKDApOworICAgICAgLyogUmVzdG9yZSBvbGQgY29uZmlndXJhdGlvbiBvZiBzeW50aGVzaXMgUU1GICovCisgICAgICBGREttZW1jcHkoJmhTYnJEZWMtPlN5bnRoZXNpc1FNRiwgJnBydlN5blFtZiwgc2l6ZW9mKFFNRl9GSUxURVJfQkFOSykpOwogICAgIH0KICAgfQogfQpAQCAtMzIxLDcgKzMzOCw4IEBACiAgICAgICAgICAgSEFORExFX1NCUl9QUkVWX0ZSQU1FX0RBVEEgaFByZXZGcmFtZURhdGEsICAvKiE8IFNvbWUgY29udHJvbCBkYXRhIG9mIGxhc3QgZnJhbWUgKi8KICAgICAgICAgICBjb25zdCBpbnQgYXBwbHlQcm9jZXNzaW5nLCAgICAgICAgIC8qITwgRmxhZyBmb3IgU0JSIG9wZXJhdGlvbiAqLwogICAgICAgICAgIEhBTkRMRV9QU19ERUMgaF9wc19kLAotICAgICAgICAgIGNvbnN0IFVJTlQgZmxhZ3MKKyAgICAgICAgICBjb25zdCBVSU5UIGZsYWdzLAorICAgICAgICAgIGNvbnN0IGludCBjb2RlY0ZyYW1lU2l6ZQogICAgICAgICAgKQogewogICBpbnQgaSwgc2xvdCwgcmVzZXJ2ZTsKQEAgLTM0OCw2ICszNjYsMzMgQEAKICAgaWYgKGZsYWdzICYgU0JSREVDX0VMRF9HUklEKSB7CiAgICAgLyogQ2hvb3NlIHRoZSByaWdodCBsb3cgZGVsYXkgZmlsdGVyIGJhbmsgKi8KICAgICBjaGFuZ2VRbWZUeXBlKCBoU2JyRGVjLCAoZmxhZ3MgJiBTQlJERUNfTERfTVBTX1FNRikgPyAxIDogMCApOworCisgICAgLyogSWYgdGhlIExELU1QUyBRTUYgaXMgbm90IGF2YWlsYWJsZSBkZWxheSB0aGUgc2lnbmFsIGJ5ICg5Ni00OCpsZFNiclNhbXBsaW5nUmF0ZSkKKyAgICAgKiBzYW1wbGVzIGFjY29yZGluZyB0byBJU08vSUVDIDE0NDk2LTM6MjAwOS9GREFNIDI6MjAxMChFKSBjaGFwdGVyIDQuNS4yLjEzLiAqLworICAgIGlmICggKGZsYWdzICYgU0JSREVDX0xEX01QU19RTUYpCisgICAgICAmJiAoaFNickRlYy0+QW5hbHlzaXNjUU1GLmZsYWdzICYgUU1GX0ZMQUdfQ0xERkIpICkKKyAgICB7CisgICAgICBJTlRfUENNICpwRGx5QnVmID0gaFNickRlYy0+Y29yZURlbGF5QnVmOyAgLyogRExZQlVGICovCisgICAgICBpbnQgc21wbCwgZGVsYXkgPSA5NiA+PiAoIShmbGFncyAmIFNCUkRFQ19ET1dOU0FNUExFKSA/IDEgOiAwKTsKKyAgICAgIC8qIENyZWF0ZSBUTVBCVUYgKi8KKyAgICAgIENfQUFMTE9DX1NDUkFUQ0hfU1RBUlQocGNtVGVtcCwgSU5UX1BDTSwgKDk2KSk7CisgICAgICAvKiBDb3B5IGRlbGF5IHNhbXBsZXMgZnJvbSBJTkJVRiB0byBUTVBCVUYgKi8KKyAgICAgIGZvciAoc21wbCA9IDA7IHNtcGwgPCBkZWxheTsgc21wbCArPSAxKSB7CisgICAgICAgIHBjbVRlbXBbc21wbF0gPSB0aW1lSW5bKGNvZGVjRnJhbWVTaXplLWRlbGF5K3NtcGwpKnN0cmlkZUluXTsKKyAgICAgIH0KKyAgICAgIC8qIE1vdmUgaW5wdXQgc2lnbmFsIHJlbWFpbmRlciB0byB0aGUgdmVyeSBlbmQgb2YgSU5CVUYgKi8KKyAgICAgIGZvciAoc21wbCA9IChjb2RlY0ZyYW1lU2l6ZS1kZWxheS0xKSpzdHJpZGVJbjsgc21wbCA+PSAwOyBzbXBsIC09IHN0cmlkZUluKSB7CisgICAgICAgIHRpbWVJbltzbXBsK2RlbGF5XSA9IHRpbWVJbltzbXBsXTsKKyAgICAgIH0KKyAgICAgIC8qIENvcHkgZGVsYXllZCBzYW1wbGVzIGZyb20gbGFzdCBmcmFtZSBmcm9tIERMWUJVRiB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgSU5CVUYgKi8KKyAgICAgIGZvciAoc21wbCA9IDA7IHNtcGwgPCBkZWxheTsgc21wbCArPSAxKSB7CisgICAgICAgIHRpbWVJbltzbXBsKnN0cmlkZUluXSA9IHBEbHlCdWZbc21wbF07CisgICAgICB9CisgICAgICAvKiBDb3B5IFRNUEJVRiB0byBETFlCVUYgKi8KKyAgICAgIEZES21lbWNweShwRGx5QnVmLCBwY21UZW1wLCBkZWxheSpzaXplb2YoSU5UX1BDTSkpOworICAgICAgLyogRGVzdG9yeSBUTVBCVUYgKi8KKyAgICAgIENfQUFMTE9DX1NDUkFUQ0hfRU5EKHBjbVRlbXAsIElOVF9QQ00sICg5NikpOworICAgIH0KICAgfQogCiAgIC8qCkBAIC03NjEsNyArODA2LDcgQEAKICAgewogICAgIGludCBxbWZFcnI7CiAgICAgLyogQWRhcHRlZCBRTUYgYW5hbHlzaXMgcG9zdC10d2lkZGxlcyBmb3IgZG93bi1zYW1wbGVkIEhRIFNCUiAqLwotICAgIGNvbnN0IFVJTlQgZG93blNhbXBsZWRGbGFnID0gKGRvd25zYW1wbGVGYWM9PTIpID8gUU1GX0ZMQUdfRE9XTlNBTVBMRUQgOiAwOworICAgIGNvbnN0IFVJTlQgZG93blNhbXBsZWRGbGFnID0gKGZsYWdzICYgU0JSREVDX0RPV05TQU1QTEUpID8gUU1GX0ZMQUdfRE9XTlNBTVBMRUQgOiAwOwogCiAgICAgcW1mRXJyID0gcW1mSW5pdEFuYWx5c2lzRmlsdGVyQmFuayAoCiAgICAgICAgICAgICAgICAgICAgICZocy0+QW5hbHlzaXNjUU1GLApAQCAtODM2LDYgKzg4MSw5IEBACiAgICAgfQogICB9CiAKKyAgLyogQ2xlYXIgaW5wdXQgZGVsYXkgbGluZSAqLworICBGREttZW1jbGVhcihocy0+Y29yZURlbGF5QnVmLCAoOTYpKnNpemVvZihJTlRfUENNKSk7CisKICAgLyogYXNzaWduIHFtZiB0aW1lIHNsb3RzICovCiAgIGFzc2lnblRpbWVTbG90cyggJmhTYnJDaGFubmVsLT5TYnJEZWMsIGhIZWFkZXJEYXRhLT5udW1iZXJUaW1lU2xvdHMgKiBoSGVhZGVyRGF0YS0+dGltZVN0ZXAsIHFtZkZsYWdzICYgUU1GX0ZMQUdfTFApOwogCmRpZmYgLS1naXQgYS9saWJTQlJkZWMvc3JjL3Nicl9kZWMuaCBiL2xpYlNCUmRlYy9zcmMvc2JyX2RlYy5oCmluZGV4IDE3NWU3YjIuLmVkZGU2MzcgMTAwNjQ0Ci0tLSBhL2xpYlNCUmRlYy9zcmMvc2JyX2RlYy5oCisrKyBiL2xpYlNCUmRlYy9zcmMvc2JyX2RlYy5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMTgsNiArMTE4LDkgQEAKICAgRklYUF9EQkwgKiBXb3JrQnVmZmVyMTsKICAgRklYUF9EQkwgKiBXb3JrQnVmZmVyMjsKIAorICAvKiBEZWxheWVkIHRpbWUgaW5wdXQgc2lnbmFsIG5lZWRlZCB0byBhbGlnbiBDTERGRCB3aXRoIExELU1QUyBRTUYuICovCisgIElOVF9QQ00gICAgY29yZURlbGF5QnVmWyg5NildOworCiAgIC8qIFFNRiBmaWx0ZXIgc3RhdGVzICovCiAgIEZJWFBfUUFTICAgYW5hUW1mU3RhdGVzWygzMjApXTsKICAgRklYUF9RU1MgKiBwU3luUW1mU3RhdGVzOwpAQCAtMTgyLDcgKzE4NSw4IEBACiAgICAgICAgICBIQU5ETEVfU0JSX1BSRVZfRlJBTUVfREFUQSBoUHJldkZyYW1lRGF0YSwgIC8qITwgU29tZSBjb250cm9sIGRhdGEgb2YgbGFzdCBmcmFtZSAqLwogICAgICAgICAgY29uc3QgaW50IGFwcGx5UHJvY2Vzc2luZywgICAgICAgICAvKiE8IEZsYWcgZm9yIFNCUiBvcGVyYXRpb24gKi8KICAgICAgICAgIEhBTkRMRV9QU19ERUMgaF9wc19kLAotICAgICAgICAgY29uc3QgVUlOVCBmbGFncworICAgICAgICAgY29uc3QgVUlOVCBmbGFncywKKyAgICAgICAgIGNvbnN0IGludCBjb2RlY0ZyYW1lU2l6ZQogICAgICAgICApOwogCiAKZGlmZiAtLWdpdCBhL2xpYlNCUmRlYy9zcmMvc2JyX3JhbS5oIGIvbGliU0JSZGVjL3NyYy9zYnJfcmFtLmgKaW5kZXggZjEyNjMxZC4uN2FiNTA0NCAxMDA2NDQKLS0tIGEvbGliU0JSZGVjL3NyYy9zYnJfcmFtLmgKKysrIGIvbGliU0JSZGVjL3NyYy9zYnJfcmFtLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEzNSw2ICsxMzUsNyBAQAogICBVU0hPUlQgY29kZWNGcmFtZVNpemU7CiAgIFVDSEFSIHN5bkRvd25zYW1wbGVGYWM7CiAgIFVDSEFSIG51bURlbGF5RnJhbWVzOyAgICAgICAgLyogVGhlIGN1cnJlbnQgbnVtYmVyIG9mIGFkZGl0aW9uYWwgZGVsYXkgZnJhbWVzIHVzZWQgZm9yIHByb2Nlc3NpbmcuICovCisgIFVDSEFSIG51bUZsdXNoZWRGcmFtZXM7ICAgICAgLyogVGhlIHZhcmlhYmxlIGNvdW50cyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB3aGljaCBhcmUgZmx1c2hlZCBjb25zZWN1dGl2ZWx5LiAqLwogCiAgIFVJTlQgZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL2xpYlNCUmRlYy9zcmMvc2JyX3JvbS5jcHAgYi9saWJTQlJkZWMvc3JjL3Nicl9yb20uY3BwCmluZGV4IGU4NGMzY2QuLmM0OGNlMzUgMTAwNjQ0Ci0tLSBhL2xpYlNCUmRlYy9zcmMvc2JyX3JvbS5jcHAKKysrIGIvbGliU0JSZGVjL3NyYy9zYnJfcm9tLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTg5LDYgKzE4OSwxNSBAQAogICBGTDJGWENPTlNUX1NHTCgzLjBmIC8gNC4wZikKIH07CiAKKy8qISBDb25zdGFudHMgZm9yIGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgbGltaXRlciBiYW5kcyAqLworY29uc3QgRklYUF9EQkwgRkRLX3NickRlY29kZXJfc2JyX2xpbWl0ZXJCYW5kc1Blck9jdGF2ZURpdjRfREJMWzRdID0KK3sKKyAgRkwyRlhDT05TVF9EQkwoMS4wZiAvIDQuMGYpLAorICBGTDJGWENPTlNUX0RCTCgxLjJmIC8gNC4wZiksCisgIEZMMkZYQ09OU1RfREJMKDIuMGYgLyA0LjBmKSwKKyAgRkwyRlhDT05TVF9EQkwoMy4wZiAvIDQuMGYpCit9OworCiAvKiEgUmF0aW8gb2Ygb2xkIGdhaW5zIGFuZCBub2lzZSBsZXZlbHMgZm9yIHRoZSBmaXJzdCA0IHRpbWVzbG90cyBvZiBhbiBlbnZlbG9wZSAqLwogY29uc3QgRklYUF9TR0wgRkRLX3NickRlY29kZXJfc2JyX3Ntb290aEZpbHRlcls0XSA9IHsKICAgRkwyRlhDT05TVF9TR0woMC42NjY2NjY2NjY2NjY2NmYpLApkaWZmIC0tZ2l0IGEvbGliU0JSZGVjL3NyYy9zYnJfcm9tLmggYi9saWJTQlJkZWMvc3JjL3Nicl9yb20uaAppbmRleCBjMzE4ODcwLi4xZjgwMGJjIDEwMDY0NAotLS0gYS9saWJTQlJkZWMvc3JjL3Nicl9yb20uaAorKysgYi9saWJTQlJkZWMvc3JjL3Nicl9yb20uaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTI0LDYgKzEyNCw3IEBACiBleHRlcm4gY29uc3QgRklYUF9TR0wgRkRLX3NickRlY29kZXJfc2JyX2xpbUdhaW5zX21bNF07CiBleHRlcm4gY29uc3QgVUNIQVIgICAgRkRLX3NickRlY29kZXJfc2JyX2xpbUdhaW5zX2VbNF07CiBleHRlcm4gY29uc3QgRklYUF9TR0wgRkRLX3NickRlY29kZXJfc2JyX2xpbWl0ZXJCYW5kc1Blck9jdGF2ZURpdjRbNF07CitleHRlcm4gY29uc3QgRklYUF9EQkwgRkRLX3NickRlY29kZXJfc2JyX2xpbWl0ZXJCYW5kc1Blck9jdGF2ZURpdjRfREJMWzRdOwogZXh0ZXJuIGNvbnN0IEZJWFBfU0dMIEZES19zYnJEZWNvZGVyX3Nicl9zbW9vdGhGaWx0ZXJbNF07CiBleHRlcm4gY29uc3QgRklYUF9TR0wgRkRLX3NickRlY29kZXJfc2JyX3JhbmRvbVBoYXNlW1NCUl9ORl9OT19SQU5ET01fVkFMXVsyXTsKIGV4dGVybiBjb25zdCBGSVhQX1NHTCBoYXJtb25pY1BoYXNlWCBbMl1bNF07CmRpZmYgLS1naXQgYS9saWJTQlJkZWMvc3JjL3NicmRlY29kZXIuY3BwIGIvbGliU0JSZGVjL3NyYy9zYnJkZWNvZGVyLmNwcAppbmRleCA2MTllNGZkLi5mOWRlZDU0IDEwMDY0NAotLS0gYS9saWJTQlJkZWMvc3JjL3NicmRlY29kZXIuY3BwCisrKyBiL2xpYlNCUmRlYy9zcmMvc2JyZGVjb2Rlci5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEyOCw2ICsxMjgsNyBAQAogI2luY2x1ZGUgImxwcF90cmFuLmgiCiAjaW5jbHVkZSAidHJhbnNjZW5kZW50LmgiCiAKKyNpbmNsdWRlICJGREtfY3JjLmgiCiAKICNpbmNsdWRlICJzYnJkZWNfZHJjLmgiCiAKQEAgLTEzNyw3ICsxMzgsNyBAQAogLyogRGVjb2RlciBsaWJyYXJ5IGluZm8gKi8KICNkZWZpbmUgU0JSREVDT0RFUl9MSUJfVkwwIDIKICNkZWZpbmUgU0JSREVDT0RFUl9MSUJfVkwxIDIKLSNkZWZpbmUgU0JSREVDT0RFUl9MSUJfVkwyIDYKKyNkZWZpbmUgU0JSREVDT0RFUl9MSUJfVkwyIDEyCiAjZGVmaW5lIFNCUkRFQ09ERVJfTElCX1RJVExFICJTQlIgRGVjb2RlciIKICNpZmRlZiBfX0FORFJPSURfXwogI2RlZmluZSBTQlJERUNPREVSX0xJQl9CVUlMRF9EQVRFICIiCkBAIC0xOTQsNiArMTk1LDMzIEBACiAgIGhEc3QtPmZyZXFCYW5kRGF0YS5mcmVxQmFuZFRhYmxlWzFdID0gaERzdC0+ZnJlcUJhbmREYXRhLmZyZXFCYW5kVGFibGVIaTsKIH0KIAorc3RhdGljIGludCBjb21wYXJlU2JySGVhZGVyKCBjb25zdCBIQU5ETEVfU0JSX0hFQURFUl9EQVRBIGhIZHIxLCBjb25zdCBIQU5ETEVfU0JSX0hFQURFUl9EQVRBIGhIZHIyICkKK3sKKyAgaW50IHJlc3VsdCA9IDA7CisKKyAgLyogY29tcGFyZSBiYXNpYyBkYXRhICovCisgIHJlc3VsdCB8PSAoaEhkcjEtPnN5bmNTdGF0ZSAhPSBoSGRyMi0+c3luY1N0YXRlKSA/IDEgOiAwOworICByZXN1bHQgfD0gKGhIZHIxLT5zdGF0dXMgIT0gaEhkcjItPnN0YXR1cykgPyAxIDogMDsKKyAgcmVzdWx0IHw9IChoSGRyMS0+ZnJhbWVFcnJvckZsYWcgIT0gaEhkcjItPmZyYW1lRXJyb3JGbGFnKSA/IDEgOiAwOworICByZXN1bHQgfD0gKGhIZHIxLT5udW1iZXJUaW1lU2xvdHMgIT0gaEhkcjItPm51bWJlclRpbWVTbG90cykgPyAxIDogMDsKKyAgcmVzdWx0IHw9IChoSGRyMS0+bnVtYmVyT2ZBbmFseXNpc0JhbmRzICE9IGhIZHIyLT5udW1iZXJPZkFuYWx5c2lzQmFuZHMpID8gMSA6IDA7CisgIHJlc3VsdCB8PSAoaEhkcjEtPnRpbWVTdGVwICE9IGhIZHIyLT50aW1lU3RlcCkgPyAxIDogMDsKKyAgcmVzdWx0IHw9IChoSGRyMS0+c2JyUHJvY1NtcGxSYXRlICE9IGhIZHIyLT5zYnJQcm9jU21wbFJhdGUpID8gMSA6IDA7CisKKyAgLyogY29tcGFyZSBiaXRzdHJlYW0gZGF0YSAqLworICByZXN1bHQgfD0gRkRLbWVtY21wKCAmaEhkcjEtPmJzX2RhdGEsICZoSGRyMi0+YnNfZGF0YSwgc2l6ZW9mKFNCUl9IRUFERVJfREFUQV9CUykgKTsKKyAgcmVzdWx0IHw9IEZES21lbWNtcCggJmhIZHIxLT5ic19pbmZvLCAmaEhkcjItPmJzX2luZm8sIHNpemVvZihTQlJfSEVBREVSX0RBVEFfQlNfSU5GTykgKTsKKworICAvKiBjb21wYXJlIGZyZXF1ZW5jeSBiYW5kIGRhdGEgKi8KKyAgcmVzdWx0IHw9IEZES21lbWNtcCggJmhIZHIxLT5mcmVxQmFuZERhdGEsICZoSGRyMi0+ZnJlcUJhbmREYXRhLCAoOCtNQVhfTlVNX0xJTUlURVJTKzEpKnNpemVvZihVQ0hBUikgKTsKKyAgcmVzdWx0IHw9IEZES21lbWNtcCggaEhkcjEtPmZyZXFCYW5kRGF0YS5mcmVxQmFuZFRhYmxlTG8sIGhIZHIyLT5mcmVxQmFuZERhdGEuZnJlcUJhbmRUYWJsZUxvLCAoTUFYX0ZSRVFfQ09FRkZTLzIrMSkqc2l6ZW9mKFVDSEFSKSApOworICByZXN1bHQgfD0gRkRLbWVtY21wKCBoSGRyMS0+ZnJlcUJhbmREYXRhLmZyZXFCYW5kVGFibGVIaSwgaEhkcjItPmZyZXFCYW5kRGF0YS5mcmVxQmFuZFRhYmxlSGksIChNQVhfRlJFUV9DT0VGRlMrMSkqc2l6ZW9mKFVDSEFSKSApOworICByZXN1bHQgfD0gRkRLbWVtY21wKCBoSGRyMS0+ZnJlcUJhbmREYXRhLmZyZXFCYW5kVGFibGVOb2lzZSwgaEhkcjItPmZyZXFCYW5kRGF0YS5mcmVxQmFuZFRhYmxlTm9pc2UsIChNQVhfTk9JU0VfQ09FRkZTKzEpKnNpemVvZihVQ0hBUikgKTsKKyAgcmVzdWx0IHw9IEZES21lbWNtcCggaEhkcjEtPmZyZXFCYW5kRGF0YS52X2tfbWFzdGVyLCBoSGRyMi0+ZnJlcUJhbmREYXRhLnZfa19tYXN0ZXIsIChNQVhfRlJFUV9DT0VGRlMrMSkqc2l6ZW9mKFVDSEFSKSApOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKIAogLyohCiAgIFxicmllZiBSZXNldCBTQlIgZGVjb2Rlci4KQEAgLTMxOCw3ICszNDYsNiBAQAogICAgIGNhc2UgQU9UX1BTOgogICAgIGNhc2UgQU9UX0VSX0FBQ19TQ0FMOgogICAgIGNhc2UgQU9UX0RSTV9BQUM6Ci0gICAgY2FzZSBBT1RfRFJNX1NVUlJPVU5EOgogICAgICAgaWYgKENyZWF0ZVBzRGVjICggJnNlbGYtPmhQYXJhbWV0cmljU3RlcmVvRGVjLCBzYW1wbGVzUGVyRnJhbWUgKSkgewogICAgICAgICBzYnJFcnJvciA9IFNCUkRFQ19DUkVBVEVfRVJST1I7CiAgICAgICAgIGdvdG8gYmFpbDsKQEAgLTM5Miw2ICs0MTksNyBAQAogICAgIGNhc2UgQU9UX1BTOgogICAgIGNhc2UgQU9UX0VSX0FBQ19TQ0FMOgogICAgIGNhc2UgQU9UX0VSX0FBQ19FTEQ6CisgICAgY2FzZSBBT1RfRFJNX0FBQzoKICAgICAgIHJldHVybiAxOwogICAgIGRlZmF1bHQ6CiAgICAgICByZXR1cm4gMDsKQEAgLTQ2NCw2ICs0OTIsOCBAQAogCiAgIHNlbGYtPmZsYWdzID0gMDsKICAgc2VsZi0+ZmxhZ3MgfD0gKGNvcmVDb2RlYyA9PSBBT1RfRVJfQUFDX0VMRCkgPyBTQlJERUNfRUxEX0dSSUQgOiAwOworICBzZWxmLT5mbGFncyB8PSAoY29yZUNvZGVjID09IEFPVF9FUl9BQUNfU0NBTCkgPyBTQlJERUNfU1lOVEFYX1NDQUwgOiAwOworICBzZWxmLT5mbGFncyB8PSAoY29yZUNvZGVjID09IEFPVF9EUk1fQUFDKSAgICAgPyBTQlJERUNfU1lOVEFYX1NDQUx8U0JSREVDX1NZTlRBWF9EUk0gOiAwOwogCiAgIC8qIEluaXQgU0JSIGVsZW1lbnRzICovCiAgIHsKQEAgLTUwMyw3ICs1MzMsNiBAQAogICAgICAgICBjYXNlIEFPVF9QUzoKICAgICAgICAgY2FzZSBBT1RfRVJfQUFDX1NDQUw6CiAgICAgICAgIGNhc2UgQU9UX0RSTV9BQUM6Ci0gICAgICAgIGNhc2UgQU9UX0RSTV9TVVJST1VORDoKICAgICAgICAgICBlbENoYW5uZWxzID0gMjsKICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTkzMCwyNCArOTU5LDczIEBACiAgICAgICAgICkKIHsKICAgU0JSX0RFQ09ERVJfRUxFTUVOVCAgICpoU2JyRWxlbWVudDsKLSAgSEFORExFX1NCUl9IRUFERVJfREFUQSBoU2JySGVhZGVyOworICBIQU5ETEVfU0JSX0hFQURFUl9EQVRBIGhTYnJIZWFkZXIgPSBOVUxMOwogICBIQU5ETEVfU0JSX0NIQU5ORUwgICAgKnBTYnJDaGFubmVsOwogCiAgIFNCUl9GUkFNRV9EQVRBICpoRnJhbWVEYXRhTGVmdDsKICAgU0JSX0ZSQU1FX0RBVEEgKmhGcmFtZURhdGFSaWdodDsKIAogICBTQlJfRVJST1IgZXJyb3JTdGF0dXMgPSBTQlJERUNfT0s7Ci0gIFNCUl9TWU5DX1NUQVRFIGluaXRpYWxTeW5jU3RhdGU7CiAgIFNCUl9IRUFERVJfU1RBVFVTIGhlYWRlclN0YXR1cyA9IEhFQURFUl9OT1RfUFJFU0VOVDsKIAogICBJTlQgIHN0YXJ0UG9zOwogICBJTlQgIENSQ0xlbiA9IDA7CisgIEhBTkRMRV9GREtfQklUU1RSRUFNIGhCc09yaWdpbmFsID0gaEJzOworICBGREtfQ1JDSU5GTyAgY3JjSW5mbzsgICAgICAgICAvKiBzaGFsbCBiZSB1c2VkIGZvciBhbGwgb3RoZXIgQ1JDcyBpbiB0aGUgZnV0dXJlIChUQkQpICovCisgIElOVCAgICAgICAgICBjcmNSZWcgPSAwOworICBVU0hPUlQgICAgICAgZHJtU2JyQ3JjID0gMDsKIAogICBpbnQgIHN0ZXJlbzsKICAgaW50ICBmRG9EZWNvZGVTYnJEYXRhID0gMTsKIAogICBpbnQgbGFzdFNsb3QsIGxhc3RIZHJTbG90ID0gMCwgdGhpc0hkclNsb3Q7CiAKKyAgLyogUmV2ZXJzZSBiaXRzIG9mIERSTSBTQlIgcGF5bG9hZCAqLworICBpZiAoIChzZWxmLT5mbGFncyAmIFNCUkRFQ19TWU5UQVhfRFJNKSAmJiAqY291bnQgPiAwICkKKyAgeworICAgIFVDSEFSICpic0J1ZmZlckRybSA9IChVQ0hBUiopc2VsZi0+d29ya0J1ZmZlcjE7CisgICAgSEFORExFX0ZES19CSVRTVFJFQU0gaEJzQndkID0gKEhBTkRMRV9GREtfQklUU1RSRUFNKSAoYnNCdWZmZXJEcm0gKyAoNTEyKSk7CisgICAgaW50IGRhdGFCeXRlcywgZGF0YUJpdHM7CisKKyAgICBkYXRhQml0cyA9ICpjb3VudDsKKworICAgIGlmIChkYXRhQml0cyA+ICgoNTEyKSo4KSkgeworICAgICAgLyogZG8gbm90IGZsaXAgbW9yZSBkYXRhIHRoYW4gbmVlZGVkICovCisgICAgICBkYXRhQml0cyA9ICg1MTIpKjg7CisgICAgfQorCisgICAgZGF0YUJ5dGVzID0gKGRhdGFCaXRzKzcpPj4zOworCisgICAgaW50IGo7CisKKyAgICBpZiAoKGogPSAoaW50KUZES2dldFZhbGlkQml0cyhoQnMpKSAhPSA4KSB7CisgICAgICBGREtwdXNoQmlEaXJlY3Rpb25hbChoQnMsIChqLTgpKTsKKyAgICB9CisKKyAgICBqID0gMDsKKyAgICBmb3IgKCA7IGRhdGFCeXRlcyA+IDA7IGRhdGFCeXRlcy0tKQorICAgIHsKKyAgICAgIGludCBpOworICAgICAgVUNIQVIgdG1wQnl0ZTsKKyAgICAgIFVDSEFSIGJ1ZmZlciA9IDB4MDA7CisKKyAgICAgIHRtcEJ5dGUgPSAoVUNIQVIpIEZES3JlYWRCaXRzKGhCcywgOCk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIGludCBzaGlmdCA9IDIgKiBpICsgMTsKKyAgICAgICAgYnVmZmVyIHw9ICh0bXBCeXRlICYgKDB4MDg+PmkpKSA8PCBzaGlmdDsKKyAgICAgICAgYnVmZmVyIHw9ICh0bXBCeXRlICYgKDB4MTA8PGkpKSA+PiBzaGlmdDsKKyAgICAgIH0KKyAgICAgIGJzQnVmZmVyRHJtW2orK10gPSBidWZmZXI7CisgICAgICBGREtwdXNoQmFjayhoQnMsIDE2KTsKKyAgICB9CisKKyAgICBGREtpbml0Qml0U3RyZWFtKGhCc0J3ZCwgYnNCdWZmZXJEcm0sICg1MTIpLCBkYXRhQml0cywgQlNfUkVBREVSKTsKKworICAgIC8qIFVzZSByZXZlcnNlZCBkYXRhICovCisgICAgaEJzID0gaEJzQndkOworICAgIGJzUGF5TGVuID0gKmNvdW50OworICB9CisKICAgLyogUmVtZW1iZXIgc3RhcnQgcG9zaXRpb24gb2YgIFNCUiBlbGVtZW50ICovCiAgIHN0YXJ0UG9zID0gRkRLZ2V0VmFsaWRCaXRzKGhCcyk7CiAKQEAgLTk3Miw3ICsxMDUwLDYgQEAKICAgaEZyYW1lRGF0YUxlZnQgID0gJnNlbGYtPnBTYnJFbGVtZW50W2VsZW1lbnRJbmRleF0tPnBTYnJDaGFubmVsWzBdLT5mcmFtZURhdGFbaFNickVsZW1lbnQtPnVzZUZyYW1lU2xvdF07CiAgIGhGcmFtZURhdGFSaWdodCA9ICZzZWxmLT5wU2JyRWxlbWVudFtlbGVtZW50SW5kZXhdLT5wU2JyQ2hhbm5lbFsxXS0+ZnJhbWVEYXRhW2hTYnJFbGVtZW50LT51c2VGcmFtZVNsb3RdOwogCi0gIGluaXRpYWxTeW5jU3RhdGUgPSBoU2JySGVhZGVyLT5zeW5jU3RhdGU7CiAKICAgLyogcmVzZXQgUFMgZmxhZzsgd2lsbCBiZSBzZXQgYWZ0ZXIgUFMgd2FzIGZvdW5kICovCiAgIHNlbGYtPmZsYWdzICY9IH5TQlJERUNfUFNfREVDT0RFRDsKQEAgLTEwMDgsMTIgKzEwODUsMTkgQEAKICAgKi8KICAgaWYgKGZEb0RlY29kZVNickRhdGEpCiAgIHsKLSAgICBpZiAoY3JjRmxhZyA9PSAxKSB7CisgICAgaWYgKGNyY0ZsYWcpIHsKICAgICAgIHN3aXRjaCAoc2VsZi0+Y29yZUNvZGVjKSB7CiAgICAgICBjYXNlIEFPVF9FUl9BQUNfRUxEOgogICAgICAgICBGREtwdXNoRm9yIChoQnMsIDEwKTsKICAgICAgICAgLyogY2hlY2sgc2JyY3JjIGxhdGVyOiB3ZSBkb24ndCBrbm93IHRoZSBwYXlsb2FkIGxlbmd0aCBub3cgKi8KICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEFPVF9EUk1fQUFDOgorICAgICAgICBkcm1TYnJDcmMgPSAoVVNIT1JUKUZES3JlYWRCaXRzKGhCcywgOCk7CisgICAgICAgIC8qIFNldHVwIENSQyBkZWNvZGVyICovCisgICAgICAgIEZES2NyY0luaXQoJmNyY0luZm8sIDB4MDAxZCwgMHhGRkZGLCA4KTsKKyAgICAgICAgLyogU3RhcnQgQ1JDIHJlZ2lvbiAqLworICAgICAgICBjcmNSZWcgPSBGREtjcmNTdGFydFJlZygmY3JjSW5mbywgaEJzLCAwKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBDUkNMZW4gPSBic1BheUxlbiAtIDEwOyAgICAgICAgICAgICAgICAgICAgIC8qIGNoYW5nZTogMCA9PiBpICovCiAgICAgICAgIGlmIChDUkNMZW4gPCAwKSB7CkBAIC0xMDU4LDYgKzExNDIsNyBAQAogICAgICAgICBoU2JySGVhZGVyLT5zeW5jU3RhdGUgPSBTQlJfSEVBREVSOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgaFNickhlYWRlci0+c3luY1N0YXRlID0gU0JSX05PVF9JTklUSUFMSVpFRDsKKyAgICAgICAgaGVhZGVyU3RhdHVzID0gSEVBREVSX0VSUk9SOwogICAgICAgfQogICAgIH0KIApAQCAtMTEwNyw3ICsxMTkyLDcgQEAKICAgICAgICAgdmFsQml0cyA9IChJTlQpRkRLZ2V0VmFsaWRCaXRzKGhCcyk7CiAgICAgICB9CiAKLSAgICAgIGlmICggY3JjRmxhZyA9PSAxICkgeworICAgICAgaWYgKCBjcmNGbGFnICkgewogICAgICAgICBzd2l0Y2ggKHNlbGYtPmNvcmVDb2RlYykgewogICAgICAgICBjYXNlIEFPVF9FUl9BQUNfRUxEOgogICAgICAgICAgIHsKQEAgLTExMTksNiArMTIwNCwxNCBAQAogICAgICAgICAgICAgRkRLcHVzaEZvcihoQnMsIGNyY0xlbik7CiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFPVF9EUk1fQUFDOgorICAgICAgICAgIC8qIEVuZCBDUkMgcmVnaW9uICovCisgICAgICAgICAgRkRLY3JjRW5kUmVnKCZjcmNJbmZvLCBoQnMsIGNyY1JlZyk7CisgICAgICAgICAgLyogQ2hlY2sgQ1JDICovCisgICAgICAgICAgaWYgKChGREtjcmNHZXRDUkMoJmNyY0luZm8pXjB4RkYpICE9IGRybVNickNyYykgeworICAgICAgICAgICAgZkRvRGVjb2RlU2JyRGF0YSA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMTY5LDggKzEyNjIsMjUgQEAKICAgfQogCiBiYWlsOgotICBpZiAoZXJyb3JTdGF0dXMgPT0gU0JSREVDX09LKSB7Ci0gICAgaWYgKGhlYWRlclN0YXR1cyA9PSBIRUFERVJfTk9UX1BSRVNFTlQpIHsKKworICBpZiAoIHNlbGYtPmZsYWdzICYgU0JSREVDX1NZTlRBWF9EUk0gKQorICB7CisgICAgaEJzID0gaEJzT3JpZ2luYWw7CisgIH0KKworICBpZiAoIChlcnJvclN0YXR1cyA9PSBTQlJERUNfT0spCisgICAgfHwgKCAoZXJyb3JTdGF0dXMgPT0gU0JSREVDX1BBUlNFX0VSUk9SKQorICAgICAgJiYgKGhlYWRlclN0YXR1cyAhPSBIRUFERVJfRVJST1IpICkgKQorICB7CisgICAgaW50IHVzZU9sZEhkciA9ICggKGhlYWRlclN0YXR1cyA9PSBIRUFERVJfTk9UX1BSRVNFTlQpCisgICAgICAgICAgICAgICAgICAgfHwgKGhlYWRlclN0YXR1cyA9PSBIRUFERVJfRVJST1IpICkgPyAxIDogMDsKKworICAgIGlmICghdXNlT2xkSGRyICYmICh0aGlzSGRyU2xvdCAhPSBsYXN0SGRyU2xvdCkpIHsKKyAgICAgIHVzZU9sZEhkciB8PSAoIGNvbXBhcmVTYnJIZWFkZXIoIGhTYnJIZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZWxmLT5zYnJIZWFkZXJbZWxlbWVudEluZGV4XVtsYXN0SGRyU2xvdF0gKSA9PSAwICkgPyAxIDogMDsKKyAgICB9CisKKyAgICBpZiAodXNlT2xkSGRyICE9IDApIHsKICAgICAgIC8qIFVzZSB0aGUgb2xkIGhlYWRlciBmb3IgdGhpcyBmcmFtZSAqLwogICAgICAgaFNickVsZW1lbnQtPnVzZUhlYWRlclNsb3RbaFNickVsZW1lbnQtPnVzZUZyYW1lU2xvdF0gPSBsYXN0SGRyU2xvdDsKICAgICB9IGVsc2UgewpAQCAtMTIzMSwxMiArMTM0MSwyMSBAQAogICBpbnQgIG51bUVsZW1lbnRDaGFubmVscyA9IGhTYnJFbGVtZW50LT5uQ2hhbm5lbHM7IC8qIE51bWJlciBvZiBjaGFubmVscyBvZiB0aGUgY3VycmVudCBTQlIgZWxlbWVudCAqLwogCiAgIGlmIChzZWxmLT5mbGFncyAmIFNCUkRFQ19GTFVTSCkgewotICAgIC8qIE1vdmUgZnJhbWUgcG9pbnRlciB0byB0aGUgbmV4dCBzbG90IHdoaWNoIGlzIHVwIHRvIGJlIGRlY29kZWQvYXBwbGllZCBuZXh0ICovCi0gICAgaFNickVsZW1lbnQtPnVzZUZyYW1lU2xvdCA9IChoU2JyRWxlbWVudC0+dXNlRnJhbWVTbG90KzEpICUgKHNlbGYtPm51bURlbGF5RnJhbWVzKzEpOwotICAgIC8qIFVwZGF0ZSBoZWFkZXIgYW5kIGZyYW1lIGRhdGEgcG9pbnRlciBiZWNhdXNlIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0ICovCi0gICAgaFNickhlYWRlciA9ICZzZWxmLT5zYnJIZWFkZXJbZWxlbWVudEluZGV4XVtoU2JyRWxlbWVudC0+dXNlSGVhZGVyU2xvdFtoU2JyRWxlbWVudC0+dXNlRnJhbWVTbG90XV07Ci0gICAgaEZyYW1lRGF0YUxlZnQgID0gJmhTYnJFbGVtZW50LT5wU2JyQ2hhbm5lbFswXS0+ZnJhbWVEYXRhW2hTYnJFbGVtZW50LT51c2VGcmFtZVNsb3RdOwotICAgIGhGcmFtZURhdGFSaWdodCA9ICZoU2JyRWxlbWVudC0+cFNickNoYW5uZWxbMV0tPmZyYW1lRGF0YVtoU2JyRWxlbWVudC0+dXNlRnJhbWVTbG90XTsKKyAgICBpZiAoIHNlbGYtPm51bUZsdXNoZWRGcmFtZXMgPiBzZWxmLT5udW1EZWxheUZyYW1lcyApIHsKKyAgICAgIGludCBoZHJJZHg7CisgICAgICAvKiBObyB2YWxpZCBTQlIgcGF5bG9hZCBhdmFpbGFibGUsIGhlbmNlIHN3aXRjaCB0byB1cHNhbXBsaW5nIChpbiBhbGwgaGVhZGVycykgKi8KKyAgICAgIGZvciAoaGRySWR4ID0gMDsgaGRySWR4IDwgKCgxKSsxKTsgaGRySWR4ICs9IDEpIHsKKyAgICAgICAgc2VsZi0+c2JySGVhZGVyW2VsZW1lbnRJbmRleF1baGRySWR4XS5zeW5jU3RhdGUgPSBVUFNBTVBMSU5HOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIE1vdmUgZnJhbWUgcG9pbnRlciB0byB0aGUgbmV4dCBzbG90IHdoaWNoIGlzIHVwIHRvIGJlIGRlY29kZWQvYXBwbGllZCBuZXh0ICovCisgICAgICBoU2JyRWxlbWVudC0+dXNlRnJhbWVTbG90ID0gKGhTYnJFbGVtZW50LT51c2VGcmFtZVNsb3QrMSkgJSAoc2VsZi0+bnVtRGVsYXlGcmFtZXMrMSk7CisgICAgICAvKiBVcGRhdGUgaGVhZGVyIGFuZCBmcmFtZSBkYXRhIHBvaW50ZXIgYmVjYXVzZSB0aGV5IGhhdmUgYWxyZWFkeSBiZWVuIHNldCAqLworICAgICAgaFNickhlYWRlciA9ICZzZWxmLT5zYnJIZWFkZXJbZWxlbWVudEluZGV4XVtoU2JyRWxlbWVudC0+dXNlSGVhZGVyU2xvdFtoU2JyRWxlbWVudC0+dXNlRnJhbWVTbG90XV07CisgICAgICBoRnJhbWVEYXRhTGVmdCAgPSAmaFNickVsZW1lbnQtPnBTYnJDaGFubmVsWzBdLT5mcmFtZURhdGFbaFNickVsZW1lbnQtPnVzZUZyYW1lU2xvdF07CisgICAgICBoRnJhbWVEYXRhUmlnaHQgPSAmaFNickVsZW1lbnQtPnBTYnJDaGFubmVsWzFdLT5mcmFtZURhdGFbaFNickVsZW1lbnQtPnVzZUZyYW1lU2xvdF07CisgICAgfQogICB9CiAKICAgLyogVXBkYXRlIHRoZSBoZWFkZXIgZXJyb3IgZmxhZyAqLwpAQCAtMTM1Niw3ICsxNDc1LDggQEAKICAgICAgICAgICAgJnBTYnJDaGFubmVsWzBdLT5wcmV2RnJhbWVEYXRhLAogICAgICAgICAgICAgKGhTYnJIZWFkZXItPnN5bmNTdGF0ZSA9PSBTQlJfQUNUSVZFKSwKICAgICAgICAgICAgIGhfcHNfZCwKLSAgICAgICAgICAgIHNlbGYtPmZsYWdzCisgICAgICAgICAgICBzZWxmLT5mbGFncywKKyAgICAgICAgICAgIGNvZGVjRnJhbWVTaXplCiAgICAgICAgICAgKTsKIAogICBpZiAoc3RlcmVvKSB7CkBAIC0xMzczLDcgKzE0OTMsOCBAQAogICAgICAgICAgICAgICZwU2JyQ2hhbm5lbFsxXS0+cHJldkZyYW1lRGF0YSwKICAgICAgICAgICAgICAgKGhTYnJIZWFkZXItPnN5bmNTdGF0ZSA9PSBTQlJfQUNUSVZFKSwKICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgICAgc2VsZi0+ZmxhZ3MKKyAgICAgICAgICAgICAgc2VsZi0+ZmxhZ3MsCisgICAgICAgICAgICAgIGNvZGVjRnJhbWVTaXplCiAgICAgICAgICAgICApOwogICB9CiAKQEAgLTEzODksMjAgKzE1MTAsMjEgQEAKICAgICBpZiAoICEoc2VsZi0+ZmxhZ3MgJiBTQlJERUNfUFNfREVDT0RFRCkgKSB7CiAgICAgICAvKiBBIGRlY29kZXIgd2hpY2ggaXMgYWJsZSB0byBkZWNvZGUgUFMgaGFzIHRvIHByb2R1Y2UgYSBzdGVyZW8gb3V0cHV0IGV2ZW4gaWYgbm8gUFMgZGF0YSBpcyBhdmFpbGJsZS4gKi8KICAgICAgIC8qIFNvIGNvcHkgbGVmdCBjaGFubmVsIHRvIHJpZ2h0IGNoYW5uZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgaW50IGNvcHlGcmFtZVNpemUgPSBjb2RlY0ZyYW1lU2l6ZSAqIDIgLyBzZWxmLT5zeW5Eb3duc2FtcGxlRmFjOwogICAgICAgaWYgKGludGVybGVhdmVkKSB7CiAgICAgICAgIElOVF9QQ00gKnB0cjsKICAgICAgICAgSU5UIGk7CiAgICAgICAgIEZES19BU1NFUlQoc3RyaWRlT3V0ID09IDIpOwogCiAgICAgICAgIHB0ciA9IHRpbWVEYXRhOwotICAgICAgICBmb3IgKGkgPSBjb2RlY0ZyYW1lU2l6ZTsgaS0tOyApIAorICAgICAgICBmb3IgKGkgPSBjb3B5RnJhbWVTaXplPj4xOyBpLS07ICkKICAgICAgICAgewogICAgICAgICAgIElOVF9QQ00gdG1wOyAvKiBUaGlzIHRlbXBvcmFsIHZhcmlhYmxlIGlzIHJlcXVpcmVkIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgY2FuJ3QgZG8gKnB0cisrID0gKnB0cisrIGNvcnJlY3RseS4gKi8KICAgICAgICAgICB0bXAgPSAqcHRyKys7ICpwdHIrKyA9IHRtcDsKICAgICAgICAgICB0bXAgPSAqcHRyKys7ICpwdHIrKyA9IHRtcDsKICAgICAgICAgfQogICAgICAgfSBlbHNlIHsKLSAgICAgICAgRkRLbWVtY3B5KCB0aW1lRGF0YSsyKmNvZGVjRnJhbWVTaXplLCB0aW1lRGF0YSwgMipjb2RlY0ZyYW1lU2l6ZSpzaXplb2YoSU5UX1BDTSkgKTsKKyAgICAgICAgRkRLbWVtY3B5KCB0aW1lRGF0YStjb3B5RnJhbWVTaXplLCB0aW1lRGF0YSwgY29weUZyYW1lU2l6ZSpzaXplb2YoSU5UX1BDTSkgKTsKICAgICAgIH0KICAgICB9CiAgICAgKm51bU91dENoYW5uZWxzID0gMjsgIC8qIE91dHB1dCBtaW5pbXVtIHR3byBjaGFubmVscyB3aGVuIFBTIGlzIGVuYWJsZWQuICovCkBAIC0xNDY2LDE0ICsxNTg4LDIzIEBACiAgICAgc2VsZi0+ZmxhZ3MgJj0gflNCUkRFQ19QU19ERUNPREVEOwogICB9CiAKKyAgaWYgKCBzZWxmLT5mbGFncyAmIFNCUkRFQ19GTFVTSCApIHsKKyAgICAvKiBmbHVzaGluZyBpcyBzaWduYWxpemVkLCBoZW5jZSBpbmNyZW1lbnQgdGhlIGZsdXNoIGZyYW1lIGNvdW50ZXIgKi8KKyAgICBzZWxmLT5udW1GbHVzaGVkRnJhbWVzKys7CisgIH0KKyAgZWxzZSB7CisgICAgLyogbm8gZmx1c2hpbmcgaXMgc2lnbmFsaXplZCwgaGVuY2UgcmVzZXQgdGhlIGZsdXNoIGZyYW1lIGNvdW50ZXIgKi8KKyAgICBzZWxmLT5udW1GbHVzaGVkRnJhbWVzID0gMDsKKyAgfQorCiAgIC8qIExvb3Agb3ZlciBTQlIgZWxlbWVudHMgKi8KICAgZm9yIChzYnJFbGVtZW50TnVtID0gMDsgc2JyRWxlbWVudE51bTxzZWxmLT5udW1TYnJFbGVtZW50czsgc2JyRWxlbWVudE51bSsrKQogICB7CiAgICAgaW50IG51bUVsZW1lbnRDaGFuOwogCiAgICAgaWYgKHBzUG9zc2libGUgJiYgc2VsZi0+cFNickVsZW1lbnRbc2JyRWxlbWVudE51bV0tPnBTYnJDaGFubmVsWzFdID09IE5VTEwpIHsKLSAgICAgIGVycm9yU3RhdHVzID0gU0JSREVDX1VOU1VQUE9SVEVEX0NPTkZJRzsKLSAgICAgIGdvdG8gYmFpbDsKKyAgICAgIC8qIERpc2FibGUgUFMgYW5kIHRyeSBkZWNvZGluZyBTQlIgbW9uby4gKi8KKyAgICAgIHBzUG9zc2libGUgPSAwOwogICAgIH0KIAogICAgIG51bUVsZW1lbnRDaGFuID0gKHNlbGYtPnBTYnJFbGVtZW50W3NickVsZW1lbnROdW1dLT5lbGVtZW50SUQgPT0gSURfQ1BFKSA/IDIgOiAxOwpAQCAtMTU4MSw2ICsxNzEyLDcgQEAKICAgICB8IENBUEZfU0JSX0hRCiAgICAgfCBDQVBGX1NCUl9MUAogICAgIHwgQ0FQRl9TQlJfUFNfTVBFRworICAgIHwgQ0FQRl9TQlJfRFJNX0JTCiAgICAgfCBDQVBGX1NCUl9DT05DRUFMTUVOVAogICAgIHwgQ0FQRl9TQlJfRFJDCiAgICAgICA7CkBAIC0xNjA5LDYgKzE3NDEsOSBAQAogICAgICAgICAvKiBMb3cgZGVsYXkgU0JSOiAqLwogICAgICAgICB7CiAgICAgICAgICAgb3V0cHV0RGVsYXkgKz0gKGZsYWdzICYgU0JSREVDX0RPV05TQU1QTEUpID8gMzIgOiA2NDsgICAvKiBRTUYgc3ludGhlc2lzICovCisgICAgICAgICAgaWYgKGZsYWdzICYgU0JSREVDX0xEX01QU19RTUYpIHsKKyAgICAgICAgICAgIG91dHB1dERlbGF5ICs9IDMyOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgICAgZWxzZSBpZiAoIUlTX1VTQUMoc2VsZi0+Y29yZUNvZGVjKSkgewpkaWZmIC0tZ2l0IGEvbGliU0JSZW5jL2luY2x1ZGUvc2JyX2VuY29kZXIuaCBiL2xpYlNCUmVuYy9pbmNsdWRlL3Nicl9lbmNvZGVyLmgKaW5kZXggOTNkYzQ2ZC4uYWVjMDM5OCAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL2luY2x1ZGUvc2JyX2VuY29kZXIuaAorKysgYi9saWJTQlJlbmMvaW5jbHVkZS9zYnJfZW5jb2Rlci5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMzUsNiArMTM1LDEyIEBACiAgIFNCUl9TWU5UQVhfRFJNX0NSQyAgID0gMHgwMDA4CiB9OwogCit0eXBlZGVmIGVudW0KK3sKKyAgRlJFUV9SRVNfTE9XID0gMCwKKyAgRlJFUV9SRVNfSElHSAorfSBGUkVRX1JFUzsKKwogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgQ09ERUNfVFlQRSAgICAgICBjb3JlQ29kZXI7ICAgICAgICAvKiE8IExDIG9yIEVMRCAqLwpAQCAtMTY4LDggKzE3NCw5IEBACiAgIElOVCBkeW5Cd1N1cHBvcnRlZDsgICAgICAgICAvKiE8IEZsYWc6IHN1cHBvcnQgZm9yIGR5bmFtaWMgYmFuZHdpZHRoIGluIHRoaXMgY29tYmluYXRpb24uICovCiAgIElOVCBwYXJhbWV0cmljQ29kaW5nOyAgICAgICAvKiE8IEZsYWc6IHVzYWdlIG9mIHBhcmFtZXRyaWMgY29kaW5nIHRvb2wuICovCiAgIElOVCBkb3duU2FtcGxlRmFjdG9yOyAgICAgICAvKiE8IFNhbXBsaW5nIHJhdGUgcmVsYXRpb24gYmV0d2VlbiB0aGUgU0JSIGFuZCB0aGUgY29yZSBlbmNvZGVyLiAqLwotICBpbnQgZnJlcV9yZXNfZml4Zml4WzNdOyAgICAgLyohPCBGcmVxdWVuY3kgcmVzb2x1dGlvbiBvZiBlbnZlbG9wZXMgaW4gZnJhbWUgY2xhc3MgRklYRklYCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwPTEgRW52OyAxPTIgRW52OyAyPTQgRW52OyAqLworICBGUkVRX1JFUyBmcmVxX3Jlc19maXhmaXhbMl07LyohPCBGcmVxdWVuY3kgcmVzb2x1dGlvbiBvZiBlbnZlbG9wZXMgaW4gZnJhbWUgY2xhc3MgRklYRklYLCBmb3Igbm9uLXNwbGl0IGNhc2UgYW5kIHNwbGl0IGNhc2UgKi8KKyAgVUNIQVIgZlJlc1RyYW5zSXNMb3c7ICAgICAgIC8qITwgRnJlcXVlbmN5IHJlc29sdXRpb24gb2YgZW52ZWxvcGVzIGluIHRyYW5zaWVudCBmcmFtZXM6IGxvdyAoMCkgb3IgdmFyaWFibGUgKDEpICovCisKICAgLyoKICAgICAgY29yZSBjb2RlciBkZXBlbmRlbnQgdHVuaW5nIHBhcmFtZXRlcnMKICAgKi8KQEAgLTIyMSw2ICsyMjgsOCBAQAogICBJTlQgc2JyX2ludGVycG9sX2ZyZXE7ICAgICAgLyohPCBGbGFnOiB1c2UgaW50ZXJwb2xhdGlvbiBpbiBmcmVxLiBkaXJlY3Rpb24uICovCiAgIElOVCBzYnJfc21vb3RoaW5nX2xlbmd0aDsgICAvKiE8IEZsYWc6IGNob29zZSBsZW5ndGggNCBvciAwICg9b24sIG9mZikuICovCiAgIFVDSEFSIGluaXRfYW1wX3Jlc19GRjsKKyAgRklYUF9EQkwgdGhyZXNob2xkX0FtcFJlc19GRl9tOworICBTQ0hBUiB0aHJlc2hvbGRfQW1wUmVzX0ZGX2U7CiB9IHNickNvbmZpZ3VyYXRpb24sICpzYnJDb25maWd1cmF0aW9uUHRyIDsKIAogdHlwZWRlZiBzdHJ1Y3QgU0JSX0NPTkZJR19EQVRBCkBAIC0yMzcsNyArMjQ2LDcgQEAKICAgSU5UIG5vUW1mQmFuZHM7ICAgICAgICAgICAgICAgICAgICAgICAvKio8IE51bWJlciBvZiBRTUYgZnJlcXVlbmN5IGJhbmRzLiAqLwogICBJTlQgbm9RbWZTbG90czsgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIFFNRiBzbG90cy4gKi8KIAotICBVQ0hBUiAqZnJlcUJhbmRUYWJsZVsyXTsgICAgICAgICAgICAgIC8qKjwgRnJlcXVlbmN5IHRhYmxlIGZvciBsb3cgYW5kIGhpcmVzLCBvbmx5IE1BWF9GUkVRX0NPRUZGUy8yICsxIGNvZWVmcyBhY3R1YWxseSBuZWVkZWQgZm9yIGxvd3Jlcy4gKi8KKyAgVUNIQVIgKmZyZXFCYW5kVGFibGVbMl07ICAgICAgICAgICAgICAvKio8IEZyZXF1ZW5jeSB0YWJsZSBmb3IgbG93IGFuZCBoaXJlcywgb25seSBNQVhfRlJFUV9DT0VGRlMvMiArMSBjb2VmZnMgYWN0dWFsbHkgbmVlZGVkIGZvciBsb3dyZXMuICovCiAgIFVDSEFSICp2X2tfbWFzdGVyOyAgICAgICAgICAgICAgICAgICAgLyoqPCBNYXN0ZXIgQmFuZFRhYmxlIHdoZXJlIGZyZXFCYW5kVGFibGUgaXMgZGVyaXZlZCBmcm9tLiAqLwogCiAKQEAgLTI0OSw2ICsyNTgsOCBAQAogICBJTlQgeHBvc0N0cmxTd2l0Y2g7ICAgICAgICAgICAgICAgICAgIC8qKjwgRmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0byBzd2l0Y2ggeHBvcyBjdHJsIG9uIHRoZSBmbHkuICovCiAgIElOVCBzd2l0Y2hUcmFuc3Bvc2VyczsgICAgICAgICAgICAgICAgLyoqPCBGbGFnIGluZGljYXRlcyB3aGV0aGVyIHRvIHN3aXRjaCB4cG9zIG9uIHRoZSBmbHkgLiAgICAgKi8KICAgVUNIQVIgaW5pdEFtcFJlc0ZGOworICBGSVhQX0RCTCB0aHJlc2hvbGRBbXBSZXNGRl9tOworICBTQ0hBUiB0aHJlc2hvbGRBbXBSZXNGRl9lOwogfSBTQlJfQ09ORklHX0RBVEEsICpIQU5ETEVfU0JSX0NPTkZJR19EQVRBOwogCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL2JpdF9zYnIuY3BwIGIvbGliU0JSZW5jL3NyYy9iaXRfc2JyLmNwcAppbmRleCA5NjNhZWZmLi45MjAwZTAxIDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL2JpdF9zYnIuY3BwCisrKyBiL2xpYlNCUmVuYy9zcmMvYml0X3Nici5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTI4Myw5ICsyODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgICAgICBlbGVtZW50X2luZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBmU2VuZEhlYWRlcnMpCiB7Ci0gIGludCBiaXRzOwotCi0gIGJpdHMgPSBlbmNvZGVTYnJIZWFkZXJEYXRhICgmc2JyRW5jb2Rlci0+c2JyRWxlbWVudFtlbGVtZW50X2luZGV4XS0+c2JySGVhZGVyRGF0YSwgaEJzKTsKKyAgZW5jb2RlU2JySGVhZGVyRGF0YSAoJnNickVuY29kZXItPnNickVsZW1lbnRbZWxlbWVudF9pbmRleF0tPnNickhlYWRlckRhdGEsIGhCcyk7CiAgICAgCiAgIGlmIChmU2VuZEhlYWRlcnMgPT0gMCkgewogICAgIC8qIFByZXZlbnQgaGVhZGVyIGJlaW5nIGVtYmVkZGVkIGludG8gdGhlIFNCUiBwYXlsb2FkLiAqLwpkaWZmIC0tZ2l0IGEvbGliU0JSZW5jL3NyYy9iaXRfc2JyLmggYi9saWJTQlJlbmMvc3JjL2JpdF9zYnIuaAppbmRleCAxY2UyYzFlLi5kZTRhYzg5IDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL2JpdF9zYnIuaAorKysgYi9saWJTQlJlbmMvc3JjL2JpdF9zYnIuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTQxLDggKzE0MSw4IEBACiB7CiAKICAgSU5UIHNicl94cG9zX2N0cmw7Ci0gIElOVCBmcmVxX3Jlc19maXhmaXg7Ci0KKyAgRlJFUV9SRVMgZnJlcV9yZXNfZml4Zml4WzJdOworICBVQ0hBUiBmUmVzVHJhbnNJc0xvdzsKIAogICBJTlZGX01PREUgc2JyX2ludmZfbW9kZTsKICAgSU5WRl9NT0RFIHNicl9pbnZmX21vZGVfdmVjW01BWF9OVU1fTk9JU0VfVkFMVUVTXTsKQEAgLTIwNSw2ICsyMDUsOCBAQAogICBJTlQgYmFsYW5jZTsKICAgQU1QX1JFUyBpbml0X3Nicl9hbXBfcmVzOwogICBBTVBfUkVTIGN1cnJlbnRBbXBSZXNGRjsKKyAgRklYUF9EQkwgdG9uX0hGW1NCUl9HTE9CQUxfVE9OQUxJVFlfVkFMVUVTXTsgLyogdG9uYWxpdHkgaXMgc2NhbGVkIGJ5IDJeMTkvMC41MjQyODhmIChmcmFjdCBwYXJ0IG9mIFJFTEFYQVRJT04pICovCisgIEZJWFBfREJMIGdsb2JhbF90b25hbGl0eTsKIAogICAvKiBleHRlbmRlZCBkYXRhICovCiAgIElOVCBleHRlbmRlZF9kYXRhOwpkaWZmIC0tZ2l0IGEvbGliU0JSZW5jL3NyYy9lbnZfZXN0LmNwcCBiL2xpYlNCUmVuYy9zcmMvZW52X2VzdC5jcHAKaW5kZXggOTI5ZjIyOS4uNGZjZGE1MSAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9lbnZfZXN0LmNwcAorKysgYi9saWJTQlJlbmMvc3JjL2Vudl9lc3QuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMDMsNiArMTAzLDExNCBAQAogc3RhdGljIGNvbnN0IFVDSEFSIG1heEluZGV4WzJdID0gezksIDV9OwogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBGdW5jdGlvbm5hbWU6ICBGREtzYnJFbmNfR2V0VG9uYWxpdHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiEKKworICBcYnJpZWYgICAgICBDYWxjdWxhdGVzIGNvbXBsZXRlIGVuZXJneSBwZXIgYmFuZCBmcm9tIHRoZSBlbmVyZ3kgdmFsdWVzCisgICAgICAgICAgICAgIG9mIHRoZSBRTUYgc3Vic2FtcGxlcy4KKworICBcYnJpZWYgICAgICBxdW90YU1hdHJpeCAtIGNhbGN1bGF0ZWQgaW4gRkRLc2JyRW5jX0NhbGN1bGF0ZVRvbmFsaXR5UXVvdGFzKCkKKyAgXGJyaWVmICAgICAgbm9Fc3RQZXJGcmFtZSAtIG51bWJlciBvZiBlc3RpbWF0aW9ucyBwZXIgZnJhbWUKKyAgXGJyaWVmICAgICAgc3RhcnRJbmRleCAtIHN0YXJ0IGluZGV4IGZvciB0aGUgcXVvdGEgbWF0cml4CisgIFxicmllZiAgICAgIEVuZXJnaWVzIC0gZW5lcmd5IG1hdHJpeAorICBcYnJpZWYgICAgICBzdGFydEJhbmQgLSBzdGFydCBiYW5kCisgIFxicmllZiAgICAgIHN0b3BCYW5kIC0gbnVtYmVyIG9mIFFNRiBiYW5kcworICBcYnJpZWYgICAgICBudW1iZXJDb2xzIC0gbnVtYmVyIG9mIFFNRiBzdWJzYW1wbGVzCisKKyAgXHJldHVybiAgICAgbWVhbiB0b25hbGl0eSBvZiB0aGUgNSBiYW5kcyB3aXRoIHRoZSBoaWdoZXN0IGVuZXJneQorICAgICAgICAgICAgICBzY2FsZWQgYnkgMl4oUkVMQVhBVElPTl9TSElGVCsyKSpSRUxBWEFUSU9OX0ZSQUNUCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgRklYUF9EQkwgRkRLc2JyRW5jX0dldFRvbmFsaXR5KAorICAgICAgICBjb25zdCBGSVhQX0RCTCAqY29uc3QgKnF1b3RhTWF0cml4LAorICAgICAgICBjb25zdCBJTlQgICAgICAgICAgICAgIG5vRXN0UGVyRnJhbWUsCisgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgc3RhcnRJbmRleCwKKyAgICAgICAgY29uc3QgRklYUF9EQkwgKmNvbnN0ICpFbmVyZ2llcywKKyAgICAgICAgY29uc3QgVUNIQVIgICAgICAgICAgICBzdGFydEJhbmQsCisgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgc3RvcEJhbmQsCisgICAgICAgIGNvbnN0IElOVCAgICAgICAgICAgICAgbnVtYmVyQ29scworICAgICAgICApCit7CisgIFVDSEFSIGIsIGUsIGs7CisgIElOVCAgICAgIG5vX2VuTWF4QmFuZFtTQlJfTUFYX0VORVJHWV9WQUxVRVNdID0geyAtMSwgLTEsIC0xLCAtMSwgLTEgfTsKKyAgRklYUF9EQkwgZW5lcmd5TWF4W1NCUl9NQVhfRU5FUkdZX1ZBTFVFU10gPSB7IEZMMkZYQ09OU1RfREJMKDAuMGYpLCBGTDJGWENPTlNUX0RCTCgwLjBmKSwgRkwyRlhDT05TVF9EQkwoMC4wZiksIEZMMkZYQ09OU1RfREJMKDAuMGYpLCBGTDJGWENPTlNUX0RCTCgwLjBmKSB9OworICBGSVhQX0RCTCBlbmVyZ3lNYXhNaW4gPSBNQVhWQUxfREJMOyAvKiBtaW4uIGVuZXJneSBpbiBlbmVyZ3lNYXggYXJyYXkgKi8KKyAgVUNIQVIgICAgcG9zRW5lcmd5TWF4TWluID0gMDsgICAgICAgLyogbWluLiBlbmVyZ3kgaW4gZW5lcmd5TWF4IGFycmF5IHBvc2l0aW9uICovCisgIEZJWFBfREJMIHRvbmFsaXR5QmFuZFtTQlJfTUFYX0VORVJHWV9WQUxVRVNdID0geyBGTDJGWENPTlNUX0RCTCgwLjBmKSwgRkwyRlhDT05TVF9EQkwoMC4wZiksIEZMMkZYQ09OU1RfREJMKDAuMGYpLCBGTDJGWENPTlNUX0RCTCgwLjBmKSwgRkwyRlhDT05TVF9EQkwoMC4wZikgfTsKKyAgRklYUF9EQkwgZ2xvYmFsVG9uYWxpdHkgPSBGTDJGWENPTlNUX0RCTCgwLjBmKTsKKyAgRklYUF9EQkwgZW5lcmd5QmFuZFtRTUZfQ0hBTk5FTFNdOworICBJTlQgICAgICBtYXhORW5lcmd5VmFsdWVzOyAvKiBtYXguIG51bWJlciBvZiBtYXguIGVuZXJneSB2YWx1ZXMgKi8KKworICAvKioqIFN1bSB1cCBlbmVyZ2llcyBmb3IgZWFjaCBiYW5kICoqKi8KKyAgRkRLX0FTU0VSVChudW1iZXJDb2xzPT0xNXx8bnVtYmVyQ29scz09MTYpOworICAvKiBudW1iZXJDb2xzIGlzIGFsd2F5cyAxNSBvciAxNiBmb3IgRUxELiBJbiBjYXNlIG9mIDE2IGJhbmRzLCB0aGUKKyAgICAgIGVuZXJneUJhbmRzIGFyZSBpbml0aWFsaXplZCB3aXRoIHRoZSBbMTVddGggY29sdW1uLgorICAgICAgVGhlIHJlc3Qgb2YgdGhlIGNvbHVtbiBlbmVyZ2llcyBhcmUgYWRkZWQgaW4gdGhlIG5leHQgc3RlcC4gICAqLworICBpZiAobnVtYmVyQ29scz09MTUpIHsKKyAgICBmb3IgKGI9c3RhcnRCYW5kOyBiPHN0b3BCYW5kOyBiKyspIHsKKyAgICAgIGVuZXJneUJhbmRbYl09RkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgfQorICB9IGVsc2UgeworICAgIGZvciAoYj1zdGFydEJhbmQ7IGI8c3RvcEJhbmQ7IGIrKykgeworICAgICAgZW5lcmd5QmFuZFtiXT1FbmVyZ2llc1sxNV1bYl0+PjQ7CisgICAgfQorICB9CisKKyAgZm9yIChrPTA7IGs8MTU7IGsrKykgeworICAgIGZvciAoYj1zdGFydEJhbmQ7IGI8c3RvcEJhbmQ7IGIrKykgeworICAgICAgZW5lcmd5QmFuZFtiXSArPSBFbmVyZ2llc1trXVtiXT4+NDsKKyAgICB9CisgIH0KKworICAvKioqIERldGVybWluZSA1IGhpZ2hlc3QgYmFuZC1lbmVyZ2llcyAqKiovCisgIG1heE5FbmVyZ3lWYWx1ZXMgPSBmTWluKFNCUl9NQVhfRU5FUkdZX1ZBTFVFUywgc3RvcEJhbmQtc3RhcnRCYW5kKTsKKworICAvKiBHZXQgbWluLiB2YWx1ZSBpbiBlbmVyZ3lNYXggYXJyYXkgKi8KKyAgZW5lcmd5TWF4TWluID0gZW5lcmd5TWF4WzBdID0gZW5lcmd5QmFuZFtzdGFydEJhbmRdOworICBub19lbk1heEJhbmRbMF0gPSBzdGFydEJhbmQ7CisgIHBvc0VuZXJneU1heE1pbiA9IDA7CisgIGZvciAoaz0xOyBrPG1heE5FbmVyZ3lWYWx1ZXM7IGsrKykgeworICAgIGVuZXJneU1heFtrXSA9IGVuZXJneUJhbmRbc3RhcnRCYW5kK2tdOworICAgIG5vX2VuTWF4QmFuZFtrXSA9IHN0YXJ0QmFuZCtrOworICAgIGlmIChlbmVyZ3lNYXhNaW4gPiBlbmVyZ3lNYXhba10pIHsKKyAgICAgIGVuZXJneU1heE1pbiA9IGVuZXJneU1heFtrXTsKKyAgICAgIHBvc0VuZXJneU1heE1pbiA9IGs7CisgICAgfQorICB9CisKKyAgZm9yIChiPXN0YXJ0QmFuZCttYXhORW5lcmd5VmFsdWVzOyBiPHN0b3BCYW5kOyBiKyspIHsKKyAgICBpZiAoZW5lcmd5QmFuZFtiXSA+IGVuZXJneU1heE1pbikgeworICAgICAgZW5lcmd5TWF4W3Bvc0VuZXJneU1heE1pbl0gPSBlbmVyZ3lCYW5kW2JdOworICAgICAgbm9fZW5NYXhCYW5kW3Bvc0VuZXJneU1heE1pbl0gPSBiOworCisgICAgICAvKiBBZ2FpbiwgZ2V0IG1pbi4gdmFsdWUgaW4gZW5lcmd5TWF4IGFycmF5ICovCisgICAgICBlbmVyZ3lNYXhNaW4gPSBlbmVyZ3lNYXhbMF07CisgICAgICBwb3NFbmVyZ3lNYXhNaW4gPSAwOworICAgICAgZm9yIChrPTE7IGs8bWF4TkVuZXJneVZhbHVlczsgaysrKSB7CisgICAgICAgIGlmIChlbmVyZ3lNYXhNaW4gPiBlbmVyZ3lNYXhba10pIHsKKyAgICAgICAgICBlbmVyZ3lNYXhNaW4gPSBlbmVyZ3lNYXhba107CisgICAgICAgICAgcG9zRW5lcmd5TWF4TWluID0gazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICAvKioqIEVuZCBkZXRlcm1pbmUgNSBoaWdoZXN0IGJhbmQtZW5lcmdpZXMgKioqLworCisgIC8qIEdldCB0b25hbGl0eSB2YWx1ZXMgZm9yIDUgaGlnaGVzdCBlbmVyZ2llcyAqLworICBmb3IgKGU9MDsgZTxtYXhORW5lcmd5VmFsdWVzOyBlKyspIHsKKyAgICB0b25hbGl0eUJhbmRbZV09RkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgZm9yIChrPTA7IGs8bm9Fc3RQZXJGcmFtZTsgaysrKSB7CisgICAgICB0b25hbGl0eUJhbmRbZV0gKz0gcXVvdGFNYXRyaXhbc3RhcnRJbmRleCArIGtdW25vX2VuTWF4QmFuZFtlXV0gPj4gMTsKKyAgICB9CisgICAgZ2xvYmFsVG9uYWxpdHkgKz0gdG9uYWxpdHlCYW5kW2VdID4+IDI7IC8qIGhlYWRyb29tIG9mIDIrMSAobWF4LiA1IGFkZGl0aW9ucykgKi8KKyAgfQorCisgIHJldHVybiBnbG9iYWxUb25hbGl0eTsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIQogCkBAIC05MTksMTAgKzEwMjcsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoRW52Q2hhbi0+cW1mU2NhbGUpOwogCiAKKyAgaWYoaF9jb24tPnNiclN5bnRheEZsYWdzICYgU0JSX1NZTlRBWF9MT1dfREVMQVkpIHsKKyAgICBGSVhQX0RCTCB0b25hbGl0eSA9IEZES3NickVuY19HZXRUb25hbGl0eSAoCisgICAgICAgICAgaEVudkNoYW4tPlRvbkNvcnIucXVvdGFNYXRyaXgsCisgICAgICAgICAgaEVudkNoYW4tPlRvbkNvcnIubnVtYmVyT2ZFc3RpbWF0ZXNQZXJGcmFtZSwKKyAgICAgICAgICBoRW52Q2hhbi0+VG9uQ29yci5zdGFydEluZGV4TWF0cml4LAorICAgICAgICAgIHNickV4dHJFbnYtPllCdWZmZXIgKyBzYnJFeHRyRW52LT5ZQnVmZmVyV3JpdGVPZmZzZXQsCisgICAgICAgICAgaF9jb24tPmZyZXFCYW5kVGFibGVbSEldWzBdKzEsCisgICAgICAgICAgaF9jb24tPm5vUW1mQmFuZHMsCisgICAgICAgICAgc2JyRXh0ckVudi0+bm9fY29scworICAgICAgICApOworCisgICAgaEVudkNoYW4tPmVuY0VudkRhdGEudG9uX0hGWzFdID0gaEVudkNoYW4tPmVuY0VudkRhdGEudG9uX0hGWzBdOworICAgIGhFbnZDaGFuLT5lbmNFbnZEYXRhLnRvbl9IRlswXSA9IHRvbmFsaXR5OworCisgICAgLyogdG9uYWxpdHkgaXMgc2NhbGVkIGJ5IDJeMTkvMC41MjQyODhmIChmcmFjdCBwYXJ0IG9mIFJFTEFYQVRJT04pICovCisgICAgaEVudkNoYW4tPmVuY0VudkRhdGEuZ2xvYmFsX3RvbmFsaXR5ID0gKGhFbnZDaGFuLT5lbmNFbnZEYXRhLnRvbl9IRlswXT4+MSkgKyAoaEVudkNoYW4tPmVuY0VudkRhdGEudG9uX0hGWzFdPj4xKTsKKyAgfQorCisKIAogICAvKgogICAgIFRyYW5zaWVudCBkZXRlY3Rpb24gQ09FRkYgVHJhbnNmb3JtIE9LCiAgICovCisgIGlmKGhfY29uLT5zYnJTeW50YXhGbGFncyAmIFNCUl9TWU5UQVhfTE9XX0RFTEFZKQorICB7CisgICAgRkRLc2JyRW5jX2Zhc3RUcmFuc2llbnREZXRlY3QoCisgICAgICAgICAgICAmaEVudkNoYW4tPnNickZhc3RUcmFuc2llbnREZXRlY3RvciwKKyAgICAgICAgICAgICBzYnJFeHRyRW52LT5ZQnVmZmVyLAorICAgICAgICAgICAgIHNickV4dHJFbnYtPllCdWZmZXJTY2FsZSwKKyAgICAgICAgICAgICBzYnJFeHRyRW52LT5ZQnVmZmVyV3JpdGVPZmZzZXQsCisgICAgICAgICAgICAgZURhdGEtPnRyYW5zaWVudF9pbmZvCisgICAgICAgICAgICAgKTsKKworICB9CisgIGVsc2UKKyAgewogICBGREtzYnJFbmNfdHJhbnNpZW50RGV0ZWN0KCZoRW52Q2hhbi0+c2JyVHJhbnNpZW50RGV0ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNickV4dHJFbnYtPllCdWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNickV4dHJFbnYtPllCdWZmZXJTY2FsZSwKQEAgLTkzMSw2ICsxMDcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JyRXh0ckVudi0+WUJ1ZmZlclN6U2hpZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNickV4dHJFbnYtPnRpbWVfc3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEVudkNoYW4tPlNickVudkZyYW1lLmZyYW1lTWlkZGxlU2xvdCk7CisgIH0KIAogCiAKQEAgLTk1MSw3ICsxMDkyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JyRXh0ckVudi0+WUJ1ZmZlclN6U2hpZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhfY29uLT5uU2ZiWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJFeHRyRW52LT50aW1lX3N0ZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNickV4dHJFbnYtPm5vX2NvbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJFeHRyRW52LT5ub19jb2xzLAorICAgICAgICAgICAgICAgICAgICAgICAgICZoRW52Q2hhbi0+ZW5jRW52RGF0YS5nbG9iYWxfdG9uYWxpdHkpOwogCiAKIH0KQEAgLTExMjgsMTIgKzEyNzAsMjYgQEAKICAgICAgICAgJiYgKCBlZC0+bkVudmVsb3BlcyA9PSAxICkgKQogICAgewogCi0gICAgIGlmIChoRW52Q2hhbi0+ZW5jRW52RGF0YS5sZEdyaWQpCi0gICAgICAgaEVudkNoYW4tPmVuY0VudkRhdGEuY3VycmVudEFtcFJlc0ZGID0gKEFNUF9SRVMpaF9jb24tPmluaXRBbXBSZXNGRjsKLSAgICAgZWxzZQorICAgICBpZiAoaF9jb24tPnNiclN5bnRheEZsYWdzICYgU0JSX1NZTlRBWF9MT1dfREVMQVkpCisgICAgIHsKKyAgICAgICAvKiBOb3RlOiBnbG9iYWxfdG9uYWxpeV9mbG9hdF92YWx1ZSA9PSAoKGZsb2F0KWhFbnZDaGFuLT5lbmNFbnZEYXRhLmdsb2JhbF90b25hbGl0eS8oKElOVDY0KSgxKTw8KDMxLSgxOSsyKSkpLzAuNTI0Mjg4KigyLjAvMy4wKSkpOworICAgICAgICAgICAgICAgIHRocmVzaG9sZF9mbG9hdF92YWx1ZSA9PSAoKGZsb2F0KWhfY29uLT50aHJlc2hvbGRBbXBSZXNGRl9tLygoSU5UNjQpKDEpPDwoMzEtKGhfY29uLT50aHJlc2hvbGRBbXBSZXNGRl9lKSkpLzAuNTI0Mjg4KigyLjAvMy4wKSkpOyAqLworICAgICAgIC8qIGRlY2lzaW9uIG9mIFNCUl9BTVBfUkVTICovCisgICAgICAgaWYgKGZJc0xlc3NUaGFuKCAvKiBnbG9iYWxfdG9uYWxpdHkgPiB0aHJlc2hvbGQgPyAqLworICAgICAgICAgICAgIGhfY29uLT50aHJlc2hvbGRBbXBSZXNGRl9tLCBoX2Nvbi0+dGhyZXNob2xkQW1wUmVzRkZfZSwKKyAgICAgICAgICAgICBoRW52Q2hhbi0+ZW5jRW52RGF0YS5nbG9iYWxfdG9uYWxpdHksIFJFTEFYQVRJT05fU0hJRlQrMiApCisgICAgICAgICAgKQorICAgICAgIHsKKyAgICAgICAgIGhFbnZDaGFuLT5lbmNFbnZEYXRhLmN1cnJlbnRBbXBSZXNGRiA9IFNCUl9BTVBfUkVTXzFfNTsKKyAgICAgICB9CisgICAgICAgZWxzZSB7CisgICAgICAgICBoRW52Q2hhbi0+ZW5jRW52RGF0YS5jdXJyZW50QW1wUmVzRkYgPSBTQlJfQU1QX1JFU18zXzA7CisgICAgICAgfQorICAgICB9IGVsc2UgewogICAgICAgIGhFbnZDaGFuLT5lbmNFbnZEYXRhLmN1cnJlbnRBbXBSZXNGRiA9IFNCUl9BTVBfUkVTXzFfNTsKKyAgICAgfQogCi0gICAgIGlmICggaEVudkNoYW4tPmVuY0VudkRhdGEuY3VycmVudEFtcFJlc0ZGICE9IGhFbnZDaGFuLT5lbmNFbnZEYXRhLmluaXRfc2JyX2FtcF9yZXMpIHsKKyAgICAgIGlmICggaEVudkNoYW4tPmVuY0VudkRhdGEuY3VycmVudEFtcFJlc0ZGICE9IGhFbnZDaGFuLT5lbmNFbnZEYXRhLmluaXRfc2JyX2FtcF9yZXMpIHsKIAogICAgICAgICBGREtzYnJFbmNfSW5pdFNickh1ZmZtYW5UYWJsZXMoJmhFbnZDaGFuLT5lbmNFbnZEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhFbnZDaGFuLT5zYnJDb2RlRW52ZWxvcGUsCkBAIC0xMTcyLDcgKzEzMjgsMTIgQEAKICAgICB9CiAKICAgICAvKiBMb3cgZW5lcmd5IGluIGxvdyBiYW5kIGZpeCAqLwotICAgIGlmICggaEVudkNoYW4tPnNiclRyYW5zaWVudERldGVjdG9yLnByZXZMb3dCYW5kRW5lcmd5IDwgaEVudkNoYW4tPnNiclRyYW5zaWVudERldGVjdG9yLnByZXZIaWdoQmFuZEVuZXJneSAmJiBoRW52Q2hhbi0+c2JyVHJhbnNpZW50RGV0ZWN0b3IucHJldkhpZ2hCYW5kRW5lcmd5ID4gRkwyRlhfREJMKDAuMDMpKQorICAgIGlmICggaEVudkNoYW4tPnNiclRyYW5zaWVudERldGVjdG9yLnByZXZMb3dCYW5kRW5lcmd5IDwgaEVudkNoYW4tPnNiclRyYW5zaWVudERldGVjdG9yLnByZXZIaWdoQmFuZEVuZXJneQorICAgICAgJiYgaEVudkNoYW4tPnNiclRyYW5zaWVudERldGVjdG9yLnByZXZIaWdoQmFuZEVuZXJneSA+IEZMMkZYX0RCTCgwLjAzKQorICAgICAgLyogVGhlIGZpeCBuZWVkcyB0aGUgbm9uLWZhc3QgdHJhbnNpZW50IGRldGVjdG9yIHJ1bm5pbmcuCisgICAgICAgICBJdCBzZXRzIHByZXZMb3dCYW5kRW5lcmd5IGFuZCBwcmV2SGlnaEJhbmRFbmVyZ3kuICAgICAgKi8KKyAgICAgICYmICEoaF9jb24tPnNiclN5bnRheEZsYWdzICYgU0JSX1NZTlRBWF9MT1dfREVMQVkpCisgICAgICApCiAgICAgewogICAgICAgaW50IGk7CiAKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvZW52X2VzdC5oIGIvbGliU0JSZW5jL3NyYy9lbnZfZXN0LmgKaW5kZXggNWU2MzJhNC4uZTE3YTk3NCAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9lbnZfZXN0LmgKKysrIGIvbGliU0JSZW5jL3NyYy9lbnZfZXN0LmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEyNyw2ICsxMjcsNyBAQAogCiBzdHJ1Y3QgRU5WX0NIQU5ORUwKIHsKKyAgRkFTVF9UUkFOX0RFVEVDVE9SIHNickZhc3RUcmFuc2llbnREZXRlY3RvcjsKICAgU0JSX1RSQU5TSUVOVF9ERVRFQ1RPUiBzYnJUcmFuc2llbnREZXRlY3RvcjsKICAgU0JSX0NPREVfRU5WRUxPUEUgc2JyQ29kZUVudmVsb3BlOwogICBTQlJfQ09ERV9FTlZFTE9QRSBzYnJDb2RlTm9pc2VGbG9vcjsKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvZnJhbV9nZW4uY3BwIGIvbGliU0JSZW5jL3NyYy9mcmFtX2dlbi5jcHAKaW5kZXggODZjM2M4MS4uOWEzNTExMSAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9mcmFtX2dlbi5jcHAKKysrIGIvbGliU0JSZW5jL3NyYy9mcmFtX2dlbi5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTI2Niw3ICsyNjYsNyBAQAogCiBzdGF0aWMgdm9pZCBjdHJsU2lnbmFsMkZyYW1lSW5mbyAoSEFORExFX1NCUl9HUklEIGhTYnJHcmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9TQlJfRlJBTUVfSU5GTyBoRnJhbWVJbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBmcmVxX3Jlc19maXhmaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZSRVFfUkVTICpmcmVxX3Jlc19maXhmaXgpOwogCiAKIC8qIHRhYmxlIGZvciA4IHRpbWUgc2xvdCBpbmRleCAqLwpAQCAtMzQxLDggKzM0MSw5IEBACiBzdGF0aWMgdm9pZCBnZW5lcmF0ZUZpeEZpeE9ubHkgKCBIQU5ETEVfU0JSX0ZSQU1FX0lORk8gaFNickZyYW1lSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9TQlJfR1JJRCBoU2JyR3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cmFuUG9zSW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyVGltZVNsb3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJUaW1lU2xvdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiBmUmVzVHJhbnNJc0xvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKIAogCiAvKiEKQEAgLTQwMiwxMSArNDAzLDEwIEBACiAgIGNvbnN0IGludCAqdl90dW5pbmdGcmVxID0gdl90dW5pbmcgKyAzOwogCiAgIGhTYnJFbnZGcmFtZS0+dl90dW5pbmdTZWdtID0gdl90dW5pbmdTZWdtOwotICBJTlQgZnJlcV9yZXNfZml4Zml4ID0gaFNickVudkZyYW1lLT5mcmVxX3Jlc19maXhmaXg7CiAKICAgaWYgKGxkR3JpZCkgewogICAgIC8qIGluIGNhc2UgdGhlcmUgd2FzIGEgdHJhbnNpZW50IGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgcHJldmlvdXMgZnJhbWUsIHN0YXJ0IHdpdGggYSB0cmFuc2llbnQgZW52ZWxvcGUgKi8KLSAgICBpZih2X3RyYW5zaWVudF9pbmZvX3ByZVsxXSAmJiAobnVtYmVyVGltZVNsb3RzIC0gdl90cmFuc2llbnRfaW5mb19wcmVbMF0gPCBtaW5GcmFtZVRyYW5EaXN0YW5jZSkpeworICAgIGlmICggIXRyYW5GbGFnICYmIHZfdHJhbnNpZW50X2luZm9fcHJlWzFdICYmIChudW1iZXJUaW1lU2xvdHMgLSB2X3RyYW5zaWVudF9pbmZvX3ByZVswXSA8IG1pbkZyYW1lVHJhbkRpc3RhbmNlKSApewogICAgICAgdHJhbkZsYWcgPSAxOwogICAgICAgdHJhblBvcyAgPSAwOwogICAgIH0KQEAgLTUyOSw3ICs1MjksOCBAQAogICAgICAgZ2VuZXJhdGVGaXhGaXhPbmx5ICggJihoU2JyRW52RnJhbWUtPlNickZyYW1lSW5mbyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKGhTYnJFbnZGcmFtZS0+U2JyR3JpZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuUG9zSW50ZXJuYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJUaW1lU2xvdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlclRpbWVTbG90cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhTYnJFbnZGcmFtZS0+ZlJlc1RyYW5zSXNMb3cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKICAgICAgIHJldHVybiAmKGhTYnJFbnZGcmFtZS0+U2JyRnJhbWVJbmZvKTsKQEAgLTY3Nyw3ICs2NzgsNyBAQAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICBjdHJsU2lnbmFsMkZyYW1lSW5mbyAoJmhTYnJFbnZGcmFtZS0+U2JyR3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICZoU2JyRW52RnJhbWUtPlNickZyYW1lSW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZXFfcmVzX2ZpeGZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgaFNickVudkZyYW1lLT5mcmVxX3Jlc19maXhmaXgpOwogCiAgIHJldHVybiAmaFNickVudkZyYW1lLT5TYnJGcmFtZUluZm87CiB9CkBAIC02OTIsNyArNjkzLDggQEAKIHN0YXRpYyB2b2lkIGdlbmVyYXRlRml4Rml4T25seSAoIEhBTkRMRV9TQlJfRlJBTUVfSU5GTyBoU2JyRnJhbWVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFX1NCUl9HUklEIGhTYnJHcmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5Qb3NJbnRlcm5hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJUaW1lU2xvdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJUaW1lU2xvdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiBmUmVzVHJhbnNJc0xvdwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIHsKICAgaW50IG5FbnYsIGksIGs9MCwgdHJhbklkeDsKQEAgLTcyNyw4ICs3MjksMTIgQEAKICAgLyogYWRqdXN0IHNlZ21lbnQtZnJlcXVlbmN5LXJlc29sdXRpb24gYWNjb3JkaW5nIHRvIHRoZSBzZWdtZW50LWxlbmd0aCAqLwogICBmb3IgKGk9MDsgaTxuRW52OyBpKyspewogICAgIGsgPSBoU2JyRnJhbWVJbmZvLT5ib3JkZXJzW2krMV0gLSBoU2JyRnJhbWVJbmZvLT5ib3JkZXJzW2ldOwotICAgIGhTYnJGcmFtZUluZm8tPmZyZXFSZXNbaV0gPSBmcmVxUmVzVGFibGVba107Ci0gICAgaFNickdyaWQtPnZfZltpXSA9IGZyZXFSZXNUYWJsZVtrXTsKKyAgICBpZiAoIWZSZXNUcmFuc0lzTG93KQorICAgICAgaFNickZyYW1lSW5mby0+ZnJlcVJlc1tpXSA9IGZyZXFSZXNUYWJsZVtrXTsKKyAgICBlbHNlCisgICAgICBoU2JyRnJhbWVJbmZvLT5mcmVxUmVzW2ldID0gRlJFUV9SRVNfTE9XOworCisgICAgaFNickdyaWQtPnZfZltpXSA9IGhTYnJGcmFtZUluZm8tPmZyZXFSZXNbaV07CiAgIH0KIAogICBoU2JyRnJhbWVJbmZvLT5uRW52ZWxvcGVzID0gbkVudjsKQEAgLTc2NSwxNSArNzcxLDE2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkCi1GREtzYnJFbmNfaW5pdEZyYW1lSW5mb0dlbmVyYXRvciAoSEFORExFX1NCUl9FTlZFTE9QRV9GUkFNRSAgaFNickVudkZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYWxsb3dTcHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBudW1FbnZTdGF0aWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzdGF0aWNGcmFtaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgdGltZVNsb3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgZnJlcV9yZXNfZml4Zml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICxpbnQgbGRHcmlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICkKLQorRkRLc2JyRW5jX2luaXRGcmFtZUluZm9HZW5lcmF0b3IgKAorICAgICAgICAgICAgICBIQU5ETEVfU0JSX0VOVkVMT1BFX0ZSQU1FIGhTYnJFbnZGcmFtZSwKKyAgICAgICAgICAgICAgSU5UICAgICAgIGFsbG93U3ByZWFkLAorICAgICAgICAgICAgICBJTlQgICAgICAgbnVtRW52U3RhdGljLAorICAgICAgICAgICAgICBJTlQgICAgICAgc3RhdGljRnJhbWluZywKKyAgICAgICAgICAgICAgSU5UICAgICAgIHRpbWVTbG90cywKKyAgICAgICAgY29uc3QgRlJFUV9SRVMqIGZyZXFfcmVzX2ZpeGZpeAorICAgICAgICAgICAgICxVQ0hBUiAgICAgZlJlc1RyYW5zSXNMb3csCisgICAgICAgICAgICAgIElOVCAgICAgICBsZEdyaWQKKyAgICAgICAgKQogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGSCAwMC0wNi0yNiAqLwogCiAgIEZES21lbWNsZWFyKGhTYnJFbnZGcmFtZSxzaXplb2YoU0JSX0VOVkVMT1BFX0ZSQU1FICkpOwpAQCAtNzg2LDcgKzc5Myw5IEBACiAgIGhTYnJFbnZGcmFtZS0+YWxsb3dTcHJlYWQgPSBhbGxvd1NwcmVhZDsKICAgaFNickVudkZyYW1lLT5udW1FbnZTdGF0aWMgPSBudW1FbnZTdGF0aWM7CiAgIGhTYnJFbnZGcmFtZS0+c3RhdGljRnJhbWluZyA9IHN0YXRpY0ZyYW1pbmc7Ci0gIGhTYnJFbnZGcmFtZS0+ZnJlcV9yZXNfZml4Zml4ID0gZnJlcV9yZXNfZml4Zml4OworICBoU2JyRW52RnJhbWUtPmZyZXFfcmVzX2ZpeGZpeFswXSA9IGZyZXFfcmVzX2ZpeGZpeFswXTsKKyAgaFNickVudkZyYW1lLT5mcmVxX3Jlc19maXhmaXhbMV0gPSBmcmVxX3Jlc19maXhmaXhbMV07CisgIGhTYnJFbnZGcmFtZS0+ZlJlc1RyYW5zSXNMb3cgICAgID0gZlJlc1RyYW5zSXNMb3c7CiAKICAgaFNickVudkZyYW1lLT5sZW5ndGhfdl9ib3JkID0gMDsKICAgaFNickVudkZyYW1lLT5sZW5ndGhfdl9ib3JkRm9sbG93ID0gMDsKQEAgLTgwNCw2ICs4MTMsNyBAQAogICAgICAgaFNickVudkZyYW1lLT5kbWluID0gMjsKICAgICAgIGhTYnJFbnZGcmFtZS0+ZG1heCA9IDE2OwogICAgICAgaFNickVudkZyYW1lLT5mcmFtZU1pZGRsZVNsb3QgPSBGUkFNRV9NSURETEVfU0xPVF81MTJMRDsKKyAgICAgIGhTYnJFbnZGcmFtZS0+U2JyR3JpZC5idWZmZXJGcmFtZVN0YXJ0ID0gMDsKICAgfSBlbHNlCiAgIHN3aXRjaCh0aW1lU2xvdHMpewogICAgIGNhc2UgTlVNQkVSX1RJTUVfU0xPVFNfMTkyMDoKQEAgLTE4NjIsMTkgKzE4NzIsMjggQEAKICBGdW5jdGlvbm5hbWU6ICBjdHJsU2lnbmFsMkZyYW1lSW5mbwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotIERlc2NyaXB0aW9uOiBDYWxjdWxhdGVzIGZyYW1lX2luZm8gc3RydWN0IGZyb20gY29udHJvbCBzaWduYWwuCisgRGVzY3JpcHRpb246IENvbnZlcnQgImNsZWFyLXRleHQiIHNicl9ncmlkKCkgdG8gImZyYW1lIGluZm8iIHVzZWQgYnkgdGhlCisgICAgICAgICAgICAgIGVudmVsb3BlIGFuZCBub2lzZSBmbG9vciBlc3RpbWF0b3JzLgorICAgICAgICAgICAgICBUaGlzIGlzIGJhc2ljYWxseSAoZXhjZXB0IGZvciAibG93IGxldmVsIiBjYWxjdWxhdGlvbnMpIHRoZQorICAgICAgICAgICAgICBiaXRzdHJlYW0gZGVjb2RlciBkZWZpbmVkIGluIHRoZSBNUEVHLTQgc3RhbmRhcmQsIHN1YiBjbGF1c2UKKyAgICAgICAgICAgICAgNC42LjE4LjMuMywgVGltZSAvIEZyZXF1ZW5jeSBHcmlkLiAgU2VlIGlubGluZSBjb21tZW50cyBmb3IKKyAgICAgICAgICAgICAgZXhwbGFuYXRpb24gb2YgdGhlIHNob3J0ZW4gYW5kIG5vaXNlIGJvcmRlciBhbGdvcml0aG1zLgogCiAgQXJndW1lbnRzOiAgIGhTYnJHcmlkIC0gc291cmNlCiAgICAgICAgICAgICAgIGhTYnJGcmFtZUluZm8gLSBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICBmcmVxX3Jlc19maXhmaXggLSBmcmVxdWVuY3kgcmVzb2x1dGlvbiBmb3IgRklYRklYIGZyYW1lcwogCiAgUmV0dXJuOiAgICAgIHZvaWQ7IGhTYnJGcmFtZUluZm8gY29udGFpbnMgdGhlIHVwZGF0ZWQgRlJBTUVfSU5GTyBzdHJ1Y3QKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCi1jdHJsU2lnbmFsMkZyYW1lSW5mbyAoSEFORExFX1NCUl9HUklEIGhTYnJHcmlkLAotICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRV9TQlJfRlJBTUVfSU5GTyBoU2JyRnJhbWVJbmZvLAotICAgICAgICAgICAgICAgICAgICAgIElOVCBmcmVxX3Jlc19maXhmaXgpCitjdHJsU2lnbmFsMkZyYW1lSW5mbyAoCisgICAgICAgIEhBTkRMRV9TQlJfR1JJRCAgICAgICAgaFNickdyaWQsICAgICAgIC8qIGlucHV0IDogdGhlIGdyaWQgaGFuZGxlICAgICAgICovCisgICAgICAgIEhBTkRMRV9TQlJfRlJBTUVfSU5GTyAgaFNickZyYW1lSW5mbywgIC8qIG91dHB1dDogdGhlIGZyYW1lIGluZm8gaGFuZGxlICovCisgICAgICAgIEZSRVFfUkVTICAgICAgICAgICAgICAqZnJlcV9yZXNfZml4Zml4IC8qIGluL291dDogZnJlcXVlbmN5IHJlc29sdXRpb24gZm9yIEZJWEZJWCBmcmFtZXMgKi8KKyAgICAgICAgKQogeworICBJTlQgZnJhbWVTcGxpdCA9IDA7CiAgIElOVCBuRW52ID0gMCwgYm9yZGVyID0gMCwgaSwgaywgcCAvKj8qLzsKICAgSU5UICp2X3IgPSBoU2JyR3JpZC0+YnNfcmVsX2JvcmQ7CiAgIElOVCAqdl9mID0gaFNickdyaWQtPnZfZjsKQEAgLTE4ODcsMTcgKzE5MDYsMTAgQEAKICAgY2FzZSBGSVhGSVg6CiAgICAgY3JlYXRlRGVmRnJhbWVJbmZvKGhTYnJGcmFtZUluZm8sIGhTYnJHcmlkLT5ic19udW1fZW52LCBudW1iZXJUaW1lU2xvdHMpOwogCi0gICAgLyogQXQgdGhpcyBwb2ludCBhbGwgZnJlcXVlbmN5IHJlc29sdXRpb25zIGFyZSBzZXQgdG8gRlJFUV9SRVNfSElHSCwgc28KLSAgICAgKiBvbmx5IGlmIGZyZXFfcmVzX2ZpeGZpeCBpcyBzZXQgdG8gRlJFUV9SRVNfTE9XLCB0aGV5IGFsbCBoYXZlIHRvIGJlCi0gICAgICogY2hhbmdlZC4KLSAgICAgKiBzbmQgKi8KLSAgICBpZiAoZnJlcV9yZXNfZml4Zml4ID09IEZSRVFfUkVTX0xPVykgewotICAgICAgZm9yIChpID0gMDsgaSA8IGhTYnJGcmFtZUluZm8tPm5FbnZlbG9wZXM7IGkrKykgewotICAgICAgICBoU2JyRnJhbWVJbmZvLT5mcmVxUmVzW2ldID0gRlJFUV9SRVNfTE9XOwotICAgICAgfQorICAgIGZyYW1lU3BsaXQgPSAoaFNickZyYW1lSW5mby0+bkVudmVsb3BlcyA+IDEpOworICAgIGZvciAoaSA9IDA7IGkgPCBoU2JyRnJhbWVJbmZvLT5uRW52ZWxvcGVzOyBpKyspIHsKKyAgICAgIGhTYnJHcmlkLT52X2ZbaV0gPSBoU2JyRnJhbWVJbmZvLT5mcmVxUmVzW2ldID0gZnJlcV9yZXNfZml4Zml4W2ZyYW1lU3BsaXRdOwogICAgIH0KLSAgICAvKiBFTEQ6IHN0b3JlIGN1cnJlbnQgZnJlcXVlbmN5IHJlc29sdXRpb24gKi8KLSAgICBoU2JyR3JpZC0+dl9mWzBdID0gaFNickZyYW1lSW5mby0+ZnJlcVJlc1swXTsKICAgICBicmVhazsKIAogICBjYXNlIEZJWFZBUjoKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvZnJhbV9nZW4uaCBiL2xpYlNCUmVuYy9zcmMvZnJhbV9nZW4uaAppbmRleCAzNzY5MjY2Li4wMDQ3M2Q0IDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL2ZyYW1fZ2VuLmgKKysrIGIvbGliU0JSZW5jL3NyYy9mcmFtX2dlbi5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC04OSw2ICs4OSw3IEBACiAjZGVmaW5lIF9GUkFNX0dFTl9ICiAKICNpbmNsdWRlICJzYnJfZGVmLmgiIC8qIGZvciBNQVhfRU5WRUxPUEVTIGFuZCBNQVhfTk9JU0VfRU5WRUxPUEVTIGluIHN0cnVjdCBGUkFNRV9JTkZPIGFuZCBDT0RFQ19UWVBFICovCisjaW5jbHVkZSAic2JyX2VuY29kZXIuaCIgLyogZm9yIEZSRVFfUkVTICovCiAKICNkZWZpbmUgTUFYX0VOVkVMT1BFU19WQVJWQVIgTUFYX0VOVkVMT1BFUyAvKiE8IHdvcnN0IGNhc2UgbnVtYmVyIG9mIGVudmVsb3BlcyBpbiBhIFZBUlZBUiBmcmFtZSAqLwogI2RlZmluZSBNQVhfRU5WRUxPUEVTX0ZJWFZBUl9WQVJGSVggNCAvKiE8IHdvcnN0IGNhc2UgbnVtYmVyIG9mIGVudmVsb3BlcyBpbiBWQVJGSVggYW5kIEZJWFZBUiBmcmFtZXMgKi8KQEAgLTExNCw3ICsxMTUsNyBAQAogI2RlZmluZSBOVU1CRVJfVElNRV9TTE9UU18xOTIwICAxNQogCiAjZGVmaW5lIExEX1BSRVRSQU5fT0ZGICAgICAgICAgICAzCi0jZGVmaW5lIEZSQU1FX01JRERMRV9TTE9UXzUxMkxEICAwCisjZGVmaW5lIEZSQU1FX01JRERMRV9TTE9UXzUxMkxEICA0CiAjZGVmaW5lIE5VTUJFUl9USU1FX1NMT1RTXzUxMkxEICA4CiAjZGVmaW5lIFRSQU5TSUVOVF9PRkZTRVRfTEQgICAgICAwCiAKQEAgLTI0OCw5ICsyNDksMTAgQEAKICAgSU5UIGZyYW1lTWlkZGxlU2xvdDsgICAgICAvKiE8IHRyYW5zaWVudCBkZXRlY3RvciBvZmZzZXQgaW4gU0JSIHRpbWVzbG90cyAqLwogCiAgIC8qIGJhc2ljIHR1bmluZyBwYXJhbWV0ZXJzICovCi0gIElOVCBzdGF0aWNGcmFtaW5nOyAgICAgICAgLyohPCAxOiBydW4gc3RhdGljIGZyYW1pbmcgaW4gdGltZSwgaS5lLiBleGNsdXNpdmUgdXNlIG9mIGJzX2ZyYW1lX2NsYXNzID0gRklYRklYICovCi0gIElOVCBudW1FbnZTdGF0aWM7ICAgICAgICAgLyohPCBudW1iZXIgb2YgZW52ZWxvcGVzIHBlciBmcmFtZSBmb3Igc3RhdGljIGZyYW1pbmcgKi8KLSAgSU5UIGZyZXFfcmVzX2ZpeGZpeDsgICAgICAvKiE8IGVudmVsb3BlIGZyZXF1ZW5jeSByZXNvbHV0aW9uIHRvIHVzZSBmb3IgYnNfZnJhbWVfY2xhc3MgPSBGSVhGSVggKi8KKyAgSU5UIHN0YXRpY0ZyYW1pbmc7ICAgICAgICAgICAvKiE8IDE6IHJ1biBzdGF0aWMgZnJhbWluZyBpbiB0aW1lLCBpLmUuIGV4Y2x1c2l2ZSB1c2Ugb2YgYnNfZnJhbWVfY2xhc3MgPSBGSVhGSVggKi8KKyAgSU5UIG51bUVudlN0YXRpYzsgICAgICAgICAgICAvKiE8IG51bWJlciBvZiBlbnZlbG9wZXMgcGVyIGZyYW1lIGZvciBzdGF0aWMgZnJhbWluZyAqLworICBGUkVRX1JFUyBmcmVxX3Jlc19maXhmaXhbMl07IC8qITwgZW52ZWxvcGUgZnJlcXVlbmN5IHJlc29sdXRpb24gdG8gdXNlIGZvciBic19mcmFtZV9jbGFzcyA9IEZJWEZJWDsgc2luZ2xlIGVudiBhbmQgc3BsaXQgKi8KKyAgVUNIQVIgZlJlc1RyYW5zSXNMb3c7ICAgICAgICAvKiE8IGZyZXF1ZW5jeSByZXNvbHV0aW9uIGZvciB0cmFuc2llbnQgZnJhbWVzIC0gYWx3YXlzIGxvdyAoMCkgb3IgYWNjb3JkaW5nIHRvIHRhYmxlICgxKSAqLwogCiAgIC8qIGV4cGVydCB0dW5pbmcgcGFyYW1ldGVycyAqLwogICBjb25zdCBpbnQgKnZfdHVuaW5nU2VnbTsgIC8qITwgc2VnbWVudCBsZW5ndGhzIHRvIHVzZSBhcm91bmQgdHJhbnNpZW50ICovCkBAIC0yODYsMTQgKzI4OCwxNiBAQAogCiAKIHZvaWQKLUZES3NickVuY19pbml0RnJhbWVJbmZvR2VuZXJhdG9yIChIQU5ETEVfU0JSX0VOVkVMT1BFX0ZSQU1FICBoU2JyRW52RnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBhbGxvd1NwcmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG51bUVudlN0YXRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHN0YXRpY0ZyYW1pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB0aW1lU2xvdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBmcmVxX3Jlc19maXhmaXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLGludCBsZEdyaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKK0ZES3NickVuY19pbml0RnJhbWVJbmZvR2VuZXJhdG9yICgKKyAgICAgICAgICAgICAgSEFORExFX1NCUl9FTlZFTE9QRV9GUkFNRSBoU2JyRW52RnJhbWUsCisgICAgICAgICAgICAgIElOVCAgICAgICBhbGxvd1NwcmVhZCwKKyAgICAgICAgICAgICAgSU5UICAgICAgIG51bUVudlN0YXRpYywKKyAgICAgICAgICAgICAgSU5UICAgICAgIHN0YXRpY0ZyYW1pbmcsCisgICAgICAgICAgICAgIElOVCAgICAgICB0aW1lU2xvdHMsCisgICAgICAgIGNvbnN0IEZSRVFfUkVTKiBmcmVxX3Jlc19maXhmaXgKKyAgICAgICAgICAgICAsVUNIQVIgICAgIGZSZXNUcmFuc0lzTG93LAorICAgICAgICAgICAgICBJTlQgICAgICAgbGRHcmlkCisgICAgICAgICk7CiAKIEhBTkRMRV9TQlJfRlJBTUVfSU5GTwogRkRLc2JyRW5jX2ZyYW1lSW5mb0dlbmVyYXRvciAoSEFORExFX1NCUl9FTlZFTE9QRV9GUkFNRSBoU2JyRW52RnJhbWUsCmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL21oX2RldC5jcHAgYi9saWJTQlJlbmMvc3JjL21oX2RldC5jcHAKaW5kZXggNzNkMWI4Yi4uYmM4MGExNSAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9taF9kZXQuY3BwCisrKyBiL2xpYlNCUmVuYy9zcmMvbWhfZGV0LmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtNjYzLDEwICs2NjMsMjcgQEAKIH0KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiEKLSAgXGJyaWVmICAgICBEbyBkZXRlY3Rpb24gZm9yIG9uZSB0b25hbGl0eSBlc3RpbWF0ZS4KKyAgXGJyaWVmICAgICBEZXRlY3Rpb24gZm9yIG9uZSB0b25hbGl0eSBlc3RpbWF0ZS4KIAorICBUaGlzIGlzIHRoZSBhY3R1YWwgbWlzc2luZyBoYXJtb25pY3MgZGV0ZWN0aW9uLCB1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZQorICBwcmV2aW91cyBkZXRlY3Rpb24uCisKKyAgSWYgYSBtaXNzaW5nIGhhcm1vbmljIHdhcyBkZXRlY3RlZCAoaW4gYSBwcmV2aW91cyBmcmFtZSkgZHVlIHRvIHRvbyBoaWdoCisgIHRvbmFsaXR5IGRpZmZlcmVuY2VzLCBidXQgdGhlcmUgd2FzIG5vdCBlbm91Z2ggdG9uYWxpdHkgZGlmZmVyZW5jZSBpbiB0aGUKKyAgY3VycmVudCBmcmFtZSwgdGhlIGRldGVjdGlvbiBhbGdvcml0aG0gc3RpbGwgY29udGludWVzIHRvIHRyYWNlIHRoZSBzdHJvbmdlc3QKKyAgdG9uZSBpbiB0aGUgc2NhbGVmYWN0b3IgYmFuZCAoYXNzdW1pbmcgdGhhdCB0aGlzIGlzIHRoZSB0b25lIHRoYXQgaXMgZ29pbmcgdG8KKyAgYmUgcmVwbGFjZWQgaW4gdGhlIGRlY29kZXIpLiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgYWJydXB0IGVuZGluZ3Mgb2Ygc2luZXMKKyAgZmFkaW5nIG91dCAoZS5nLiBpbiB0aGUgZ2xvY2tlbnNwaWVsKS4KKworICBUaGUgZnVuY3Rpb24gYWxzbyB0cmllcyB0byBlc3RpbWF0ZSB3aGVyZSBvbmUgc2luZSBpcyBnb2luZyB0byBiZSByZXBsYWNlZAorICB3aXRoIG11bHRpcGxlIHNpbmVzIChkdWUgdG8gdGhlIHBhdGNoaW5nKS4gVGhpcyBpcyBkb25lIGJ5IGNvbXBhcmluZyB0aGUKKyAgdG9uYWxpdHkgZmxhdG5lc3MgbWVhc3VyZSBvZiB0aGUgb3JpZ2luYWwgYW5kIHRoZSBTQlIgc2lnbmFsLgorCisgIFRoZSBmdW5jdGlvbiBhbHNvIHRyaWVzIHRvIGVzdGltYXRlIChmb3IgdGhlIHNjYWxlZmFjdG9yIGJhbmRzIG9ubHkKKyAgY29udGFpbmluZyBvbmUgcW1mIHN1YmJhbmQpIHdoZW4gYSBzdHJvbmcgdG9uZSBpbiB0aGUgb3JpZ2luYWwgd2lsbCBiZQorICByZXBsYWNlZCBieSBhIHN0cm9uZyB0b25lIGluIHRoZSBhZGphY2VudCBRTUYgc3ViYmFuZC4KIAogICBccmV0dXJuICAgIG5vbmUuCiAKQEAgLTY5NCwxMCArNzExLDEwIEBACiAgIGZvcihpPTA7aTxuU2ZiO2krKyl7CiAKICAgICB0aHJlc1RlbXAgPSAoZ3VpZGVWZWN0b3JzLmd1aWRlVmVjdG9yRGlmZltpXSAhPSBGTDJGWENPTlNUX0RCTCgwLjBmKSkKLSAgICAgICAgICAgICAgICAgID8gZml4TWF4KGZNdWx0KG1oVGhyZXNoLmRlY2F5R3VpZGVEaWZmLGd1aWRlVmVjdG9ycy5ndWlkZVZlY3RvckRpZmZbaV0pLCBtaFRocmVzaC50aHJlc0hvbGREaWZmR3VpZGUpCisgICAgICAgICAgICAgICAgICA/IGZNYXgoZk11bHQobWhUaHJlc2guZGVjYXlHdWlkZURpZmYsZ3VpZGVWZWN0b3JzLmd1aWRlVmVjdG9yRGlmZltpXSksIG1oVGhyZXNoLnRocmVzSG9sZERpZmZHdWlkZSkKICAgICAgICAgICAgICAgICAgIDogbWhUaHJlc2gudGhyZXNIb2xkRGlmZjsKIAotICAgIHRocmVzVGVtcCA9IGZpeE1pbih0aHJlc1RlbXAsIG1oVGhyZXNoLnRocmVzSG9sZERpZmYpOworICAgIHRocmVzVGVtcCA9IGZNaW4odGhyZXNUZW1wLCBtaFRocmVzaC50aHJlc0hvbGREaWZmKTsKIAogICAgIGlmKHBEaWZmVmVjU2NmYltpXSA+IHRocmVzVGVtcCl7CiAgICAgICBwSGFybVZlY1tpXSA9IDE7CkBAIC04MTMsOCArODMwLDExIEBACiAKICAgaWYobmV3RGV0ZWN0aW9uQWxsb3dlZCl7CiAKKyAgICAvKiBTaW5jZSB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgdHJhbnNpZW50IHJlZ2lvbiBmb3IgZGV0ZWN0aW9uIChzaW5jZSB0aGUgdG9uYWxpdHkgdmFsdWVzCisgICAgICAgdGVuZCB0byBiZSBhIGJpdCB1bnJlbGlhYmxlIGZvciB0aGlzIHJlZ2lvbikgdGhlIGd1aWRlLXZhbHVlcyBhcmUgY29waWVkIHRvIHRoZSBjdXJyZW50CisgICAgICAgc3RhcnRpbmcgcG9pbnQuICovCiAgICAgaWYodG90Tm9Fc3QgPiAxKXsKLSAgICAgIHN0YXJ0ID0gZGV0ZWN0aW9uU3RhcnQ7CisgICAgICBzdGFydCA9IGRldGVjdGlvblN0YXJ0KzE7CiAKICAgICAgIGlmIChzdGFydCAhPSAwKSB7CiAgICAgICAgIEZES21lbWNweShndWlkZVZlY3RvcnNbc3RhcnRdLmd1aWRlVmVjdG9yRGlmZixndWlkZVZlY3RvcnNbMF0uZ3VpZGVWZWN0b3JEaWZmLG5TZmIqc2l6ZW9mKEZJWFBfREJMKSk7CmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL25mX2VzdC5jcHAgYi9saWJTQlJlbmMvc3JjL25mX2VzdC5jcHAKaW5kZXggN2EzYzAyMi4uYTRjNTU3NCAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9uZl9lc3QuY3BwCisrKyBiL2xpYlNCUmVuYy9zcmMvbmZfZXN0LmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMjY4LDggKzI2OCw5IEBACiAgIC8qCiAgICAqIEFkZCBhIG5vaXNlIGZsb29yIG9mZnNldCB0byBjb21wZW5zYXRlIGZvciBiaWFzIGluIHRoZSBkZXRlY3RvcgogICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gIGlmKCFtaXNzaW5nSGFybW9uaWNGbGFnKQotICAgICpub2lzZUxldmVsID0gZk11bHQoKm5vaXNlTGV2ZWwsIG5vaXNlRmxvb3JPZmZzZXQpPDwoTk9JU0VfRkxPT1JfT0ZGU0VUX1NDQUxJTkcpOworICBpZighbWlzc2luZ0hhcm1vbmljRmxhZykgeworICAgICpub2lzZUxldmVsID0gZml4TWluKGZNdWx0KCpub2lzZUxldmVsLCBub2lzZUZsb29yT2Zmc2V0KSwgKEZJWFBfREJMKU1BWFZBTF9EQkw+Pk5PSVNFX0ZMT09SX09GRlNFVF9TQ0FMSU5HKSA8PCBOT0lTRV9GTE9PUl9PRkZTRVRfU0NBTElORzsKKyAgfQogCiAgIC8qCiAgICAqIGNoZWNrIHRvIHNlZSB0aGF0IHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBhbGxvd2VkIGxldmVsCkBAIC0yOTcsNyArMjk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0hBUiAgICAqaW5kZXhWZWN0b3IsICAgICAgICAgICAgICAvKiE8IEluZGV4IHZlY3RvciB0byBvYnRhaW4gdGhlIHBhdGNoZWQgZGF0YS4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgbWlzc2luZ0hhcm1vbmljc0ZsYWcsICAgICAgICAgICAvKiE8IEZsYWcgaW5kaWNhdGluZyBpZiBhIHN0cm9uZyB0b25hbCBjb21wb25lbnQgd2lsbCBiZSBtaXNzaW5nLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzdGFydEluZGV4LCAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RhcnQgaW5kZXguICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUsICAgICAgLyohPCBUaGUgbnVtYmVyIG9mIHRvbmFsaXR5IGVzdGltYXRlcyBwZXIgZnJhbWUuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBudW1iZXJPZkVzdGltYXRlc1BlckZyYW1lLCAgICAgLyohPCBUaGUgbnVtYmVyIG9mIHRvbmFsaXR5IGVzdGltYXRlcyBwZXIgZnJhbWUuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyYW5zaWVudEZyYW1lLCAgICAgICAgICAgICAgICAgLyohPCBBIGZsYWcgaW5kaWNhdGluZyBpZiBhIHRyYW5zaWVudCBpcyBwcmVzZW50LiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgIElOVkZfTU9ERSogcEludkZpbHRMZXZlbHMsICAgICAgICAgIC8qITwgUG9pbnRlciB0byB0aGUgdmVjdG9yIGhvbGRpbmcgdGhlIGludmVyc2UgZmlsdGVyaW5nIGxldmVscy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIHNiclN5bnRheEZsYWdzCmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL25mX2VzdC5oIGIvbGliU0JSZW5jL3NyYy9uZl9lc3QuaAppbmRleCBkNDA3Mjc0Li5mMjZmNzRmIDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL25mX2VzdC5oCisrKyBiL2xpYlNCUmVuYy9zcmMvbmZfZXN0LmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTExOSw3ICsxMTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFNDSEFSKiBpbmRleFZlY3RvciwgICAgICAgICAgICAgICAgIC8qITwgSW5kZXggdmVjdG9yIHRvIG9idGFpbiB0aGUgcGF0Y2hlZCBkYXRhLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBtaXNzaW5nSGFybW9uaWNzRmxhZywgICAgICAgICAgIC8qITwgRmxhZyBpbmRpY2F0aW5nIGlmIGEgc3Ryb25nIHRvbmFsIGNvbXBvbmVudCB3aWxsIGJlIG1pc3NpbmcuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHN0YXJ0SW5kZXgsICAgICAgICAgICAgICAgICAgICAgLyohPCBTdGFydCBpbmRleC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyT2ZFc3RpbWF0ZXNQZXJGcmFtZSwgICAgICAvKiE8IFRoZSBudW1iZXIgb2YgdG9uYWxpdHkgZXN0aW1hdGVzIHBlciBmcmFtZS4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIG51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUsICAgICAvKiE8IFRoZSBudW1iZXIgb2YgdG9uYWxpdHkgZXN0aW1hdGVzIHBlciBmcmFtZS4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgdHJhbnNpZW50RnJhbWUsICAgICAgICAgICAgICAgICAvKiE8IEEgZmxhZyBpbmRpY2F0aW5nIGlmIGEgdHJhbnNpZW50IGlzIHByZXNlbnQuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WRl9NT0RFKiBwSW52RmlsdExldmVscywgICAgICAgICAgLyohPCBQb2ludGVyIHRvIHRoZSB2ZWN0b3IgaG9sZGluZyB0aGUgaW52ZXJzZSBmaWx0ZXJpbmcgbGV2ZWxzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgc2JyU3ludGF4RmxhZ3MKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvcHNfYml0ZW5jLmNwcCBiL2xpYlNCUmVuYy9zcmMvcHNfYml0ZW5jLmNwcAppbmRleCBiMWZlMTJlLi40MjBlYTE1IDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL3BzX2JpdGVuYy5jcHAKKysrIGIvbGliU0JSZW5jL3NyYy9wc19iaXRlbmMuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0yNjEsMjEgKzI2MSwyMyBAQAogICAweDAwMDAwMDAxLCAgMHgwMDAwMDAwMiwgIDB4MDAwMDAwMDEsICAweDAwMDAwMDA3LCAgMHgwMDAwMDAwNiwgIDAwMDAwMDAwMDAsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMwogfTsKIAotc3RhdGljIGNvbnN0IElOVCBwc0JhbmRzW10gPQorc3RhdGljIElOVCBnZXROb0JhbmRzKGNvbnN0IElOVCBtb2RlKQogewotICBQU19CQU5EU19DT0FSU0UsCi0gIFBTX0JBTkRTX01JRAotfTsKKyAgSU5UIG5vQmFuZHMgPSAwOwogCi1zdGF0aWMgSU5UIGdldE5vQmFuZHMoUFNfUkVTT0xVVElPTiBtb2RlKQotewotICBpZihtb2RlPj02KQotICAgIHJldHVybiAwOworICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIDA6IGNhc2UgMzogLyogY29hcnNlICovCisgICAgICBub0JhbmRzID0gUFNfQkFORFNfQ09BUlNFOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxOiBjYXNlIDQ6IC8qIG1pZCAqLworICAgICAgbm9CYW5kcyA9IFBTX0JBTkRTX01JRDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjogY2FzZSA1OiAvKiBmaW5lIG5vdCBzdXBwb3J0ZWQgKi8KKyAgICBkZWZhdWx0OiAgICAgICAgLyogY29hcnNlIGFzIGRlZmF1bHQgKi8KKyAgICAgIG5vQmFuZHMgPSBQU19CQU5EU19DT0FSU0U7CisgIH0KIAotICBpZihtb2RlPj0zKQotICAgIG1vZGUgPSAoUFNfUkVTT0xVVElPTikobW9kZS0zKTsKLQotICByZXR1cm4gcHNCYW5kc1ttb2RlXTsKKyAgcmV0dXJuIG5vQmFuZHM7CiB9CiAKIHN0YXRpYyBJTlQgZ2V0SUlEUmVzKElOVCBpaWRNb2RlKQpAQCAtNTI0LDcgKzUyNiw3IEBACiAgICAgICBiaXRDbnQgKz0gRkRLc2JyRW5jX0VuY29kZUlwZCggaEJpdEJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzT3V0LT5pcGRbZW52XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwZExhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROb0JhbmRzKChQU19SRVNPTFVUSU9OKXBzT3V0LT5paWRNb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vQmFuZHMocHNPdXQtPmlpZE1vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNPdXQtPmRlbHRhSVBEW2Vudl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3IpOwogCkBAIC01MzIsNyArNTM0LDcgQEAKICAgICAgIGJpdENudCArPSBGREtzYnJFbmNfRW5jb2RlT3BkKCBoQml0QnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNPdXQtPm9wZFtlbnZdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BkTGFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vQmFuZHMoKFBTX1JFU09MVVRJT04pcHNPdXQtPmlpZE1vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9CYW5kcyhwc091dC0+aWlkTW9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc091dC0+ZGVsdGFPUERbZW52XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvciApOwogICAgIH0KQEAgLTY2MSw3ICs2NjMsNyBAQAogICAgICAgICBiaXRDbnQgKz0gRkRLc2JyRW5jX0VuY29kZUlpZCggaEJpdEJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNPdXQtPmlpZFtlbnZdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaWRMYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXROb0JhbmRzKChQU19SRVNPTFVUSU9OKXBzT3V0LT5paWRNb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9CYW5kcyhwc091dC0+aWlkTW9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQU19JSURfUkVTT0xVVElPTilnZXRJSURSZXMocHNPdXQtPmlpZE1vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc091dC0+ZGVsdGFJSURbZW52XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICk7CkBAIC02NzcsNyArNjc5LDcgQEAKICAgICAgICAgYml0Q250ICs9IEZES3NickVuY19FbmNvZGVJY2MoIGhCaXRCdWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzT3V0LT5pY2NbZW52XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNjTGFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm9CYW5kcygoUFNfUkVTT0xVVElPTilwc091dC0+aWNjTW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldE5vQmFuZHMocHNPdXQtPmljY01vZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc091dC0+ZGVsdGFJQ0NbZW52XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKTsKIApkaWZmIC0tZ2l0IGEvbGliU0JSZW5jL3NyYy9wc19lbmNvZGUuY3BwIGIvbGliU0JSZW5jL3NyYy9wc19lbmNvZGUuY3BwCmluZGV4IDJhZTI3ODguLmZlYzM5ZTggMTAwNjQ0Ci0tLSBhL2xpYlNCUmVuYy9zcmMvcHNfZW5jb2RlLmNwcAorKysgYi9saWJTQlJlbmMvc3JjL3BzX2VuY29kZS5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTE0OSwyMSArMTQ5LDIxIEBACiAKIAogc3RhdGljIGNvbnN0IEZJWFBfREJMIGlpZFF1YW50X2Z4WzE1XSA9IHsKLSAgMHhjZTAwMDAwMCwgMHhkYzAwMDAwMCwgMHhlNDAwMDAwMCwgMHhlYzAwMDAwMCwgMHhmMjAwMDAwMCwgMHhmODAwMDAwMCwgMHhmYzAwMDAwMCwgMHgwMDAwMDAwMCwKLSAgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwgMHgwZTAwMDAwMCwgMHgxNDAwMDAwMCwgMHgxYzAwMDAwMCwgMHgyNDAwMDAwMCwgMHgzMjAwMDAwMAorICAoRklYUF9EQkwpMHhjZTAwMDAwMCwgKEZJWFBfREJMKTB4ZGMwMDAwMDAsIChGSVhQX0RCTCkweGU0MDAwMDAwLCAoRklYUF9EQkwpMHhlYzAwMDAwMCwgKEZJWFBfREJMKTB4ZjIwMDAwMDAsIChGSVhQX0RCTCkweGY4MDAwMDAwLCAoRklYUF9EQkwpMHhmYzAwMDAwMCwgKEZJWFBfREJMKTB4MDAwMDAwMDAsCisgIChGSVhQX0RCTCkweDA0MDAwMDAwLCAoRklYUF9EQkwpMHgwODAwMDAwMCwgKEZJWFBfREJMKTB4MGUwMDAwMDAsIChGSVhQX0RCTCkweDE0MDAwMDAwLCAoRklYUF9EQkwpMHgxYzAwMDAwMCwgKEZJWFBfREJMKTB4MjQwMDAwMDAsIChGSVhQX0RCTCkweDMyMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgRklYUF9EQkwgaWlkUXVhbnRGaW5lX2Z4WzMxXSA9IHsKLSAgMHg5YzAwMDAwMSwgMHhhNjAwMDAwMSwgMHhiMDAwMDAwMSwgMHhiYTAwMDAwMSwgMHhjNDAwMDAwMCwgMHhjZTAwMDAwMCwgMHhkNDAwMDAwMCwgMHhkYTAwMDAwMCwKLSAgMHhlMDAwMDAwMCwgMHhlNjAwMDAwMCwgMHhlYzAwMDAwMCwgMHhmMDAwMDAwMCwgMHhmNDAwMDAwMCwgMHhmODAwMDAwMCwgMHhmYzAwMDAwMCwgMHgwMDAwMDAwMCwKLSAgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwgMHgwYzAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxNDAwMDAwMCwgMHgxYTAwMDAwMCwgMHgyMDAwMDAwMCwgMHgyNjAwMDAwMCwKLSAgMHgyYzAwMDAwMCwgMHgzMjAwMDAwMCwgMHgzYzAwMDAwMCwgMHg0NWZmZmZmZiwgMHg0ZmZmZmZmZiwgMHg1OWZmZmZmZiwgMHg2M2ZmZmZmZgorICAoRklYUF9EQkwpMHg5YzAwMDAwMSwgKEZJWFBfREJMKTB4YTYwMDAwMDEsIChGSVhQX0RCTCkweGIwMDAwMDAxLCAoRklYUF9EQkwpMHhiYTAwMDAwMSwgKEZJWFBfREJMKTB4YzQwMDAwMDAsIChGSVhQX0RCTCkweGNlMDAwMDAwLCAoRklYUF9EQkwpMHhkNDAwMDAwMCwgKEZJWFBfREJMKTB4ZGEwMDAwMDAsCisgIChGSVhQX0RCTCkweGUwMDAwMDAwLCAoRklYUF9EQkwpMHhlNjAwMDAwMCwgKEZJWFBfREJMKTB4ZWMwMDAwMDAsIChGSVhQX0RCTCkweGYwMDAwMDAwLCAoRklYUF9EQkwpMHhmNDAwMDAwMCwgKEZJWFBfREJMKTB4ZjgwMDAwMDAsIChGSVhQX0RCTCkweGZjMDAwMDAwLCAoRklYUF9EQkwpMHgwMDAwMDAwMCwKKyAgKEZJWFBfREJMKTB4MDQwMDAwMDAsIChGSVhQX0RCTCkweDA4MDAwMDAwLCAoRklYUF9EQkwpMHgwYzAwMDAwMCwgKEZJWFBfREJMKTB4MTAwMDAwMDAsIChGSVhQX0RCTCkweDE0MDAwMDAwLCAoRklYUF9EQkwpMHgxYTAwMDAwMCwgKEZJWFBfREJMKTB4MjAwMDAwMDAsIChGSVhQX0RCTCkweDI2MDAwMDAwLAorICAoRklYUF9EQkwpMHgyYzAwMDAwMCwgKEZJWFBfREJMKTB4MzIwMDAwMDAsIChGSVhQX0RCTCkweDNjMDAwMDAwLCAoRklYUF9EQkwpMHg0NWZmZmZmZiwgKEZJWFBfREJMKTB4NGZmZmZmZmYsIChGSVhQX0RCTCkweDU5ZmZmZmZmLCAoRklYUF9EQkwpMHg2M2ZmZmZmZgogfTsKIAogCiAKIHN0YXRpYyBjb25zdCBGSVhQX0RCTCBpY2NRdWFudFs4XSA9IHsKLSAgMHg3ZmZmZmZmZiwgMHg3N2VmOWQ3ZiwgMHg2YmFiYzk3ZiwgMHg0Y2VhZjI3ZiwgMHgyZjBlZDNjMCwgMHgwMDAwMDAwMCwgMHhiNDliYTYwMSwgMHg4MDAwMDAwMAorICAoRklYUF9EQkwpMHg3ZmZmZmZmZiwgKEZJWFBfREJMKTB4NzdlZjlkN2YsIChGSVhQX0RCTCkweDZiYWJjOTdmLCAoRklYUF9EQkwpMHg0Y2VhZjI3ZiwgKEZJWFBfREJMKTB4MmYwZWQzYzAsIChGSVhQX0RCTCkweDAwMDAwMDAwLCAoRklYUF9EQkwpMHhiNDliYTYwMSwgKEZJWFBfREJMKTB4ODAwMDAwMDAKIH07CiAKIHN0YXRpYyBGREtfUFNFTkNfRVJST1IgSW5pdFBTRGF0YSgKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvc2JyX2RlZi5oIGIvbGliU0JSZW5jL3NyYy9zYnJfZGVmLmgKaW5kZXggOGI3Y2ZjNi4uODVhYzU4NyAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9zYnJfZGVmLmgKKysrIGIvbGliU0JSZW5jL3NyYy9zYnJfZGVmLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEyMiw2ICsxMjIsOCBAQAogLyoqKioqKioqKioqKiAgRGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqLwogI2RlZmluZSBTQlJfQ09NUF9NT0RFX0RFTFRBICAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBTQlJfQ09NUF9NT0RFX0NUUyAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTQlJfTUFYX0VORVJHWV9WQUxVRVMgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBTQlJfR0xPQkFMX1RPTkFMSVRZX1ZBTFVFUyAgICAgICAgICAgICAgMgogCiAjZGVmaW5lIE1BWF9OVU1fQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgICAyCiAKQEAgLTIzMiw2ICsyMzQsOCBAQAogI2RlZmluZSBGUkVRICAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgVElNRSAgICAgICAgICAgICAgICAgICAgICAxCiAKKy8qIHFtZiBkYXRhIHNjYWxpbmcgKi8KKyNkZWZpbmUgUU1GX1NDQUxFX09GRlNFVCAgICAgICAgICA3CiAKIC8qIGh1ZmZtYW4gdGFibGVzICovCiAjZGVmaW5lIENPREVfQk9PS19TQ0ZfTEFWMDAgICAgICAgICA2MApAQCAtMjY4LDEyICsyNzIsNCBAQAogfQogSU5WRl9NT0RFOwogCi10eXBlZGVmIGVudW0KLXsKLSAgRlJFUV9SRVNfTE9XID0gMCwKLSAgRlJFUV9SRVNfSElHSAotfQotRlJFUV9SRVM7Ci0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL3Nicl9lbmNvZGVyLmNwcCBiL2xpYlNCUmVuYy9zcmMvc2JyX2VuY29kZXIuY3BwCmluZGV4IDQ2NGMwMTMuLjkwYjE5Y2YgMTAwNjQ0Ci0tLSBhL2xpYlNCUmVuYy9zcmMvc2JyX2VuY29kZXIuY3BwCisrKyBiL2xpYlNCUmVuYy9zcmMvc2JyX2VuY29kZXIuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogI2RlZmluZSBTQlJFTkNPREVSX0xJQl9WTDAgMwogI2RlZmluZSBTQlJFTkNPREVSX0xJQl9WTDEgMwotI2RlZmluZSBTQlJFTkNPREVSX0xJQl9WTDIgNAorI2RlZmluZSBTQlJFTkNPREVSX0xJQl9WTDIgMTIKIAogCiAKQEAgLTE3MCw3ICsxNzAsNiBAQAogewogICBpbnQgaSwgYml0UmF0ZUNsb3Nlc3RMb3dlckluZGV4PS0xLCBiaXRSYXRlQ2xvc2VzdFVwcGVySW5kZXg9LTEsIGZvdW5kID0gMDsKICAgVUlOVCBiaXRSYXRlQ2xvc2VzdFVwcGVyID0gMCwgYml0UmF0ZUNsb3Nlc3RMb3dlcj1ESVNUQU5DRV9DRUlMX1ZBTFVFOwotICBpbnQgaXNmb3JUaGlzQ29kZWM9MDsKIAogICAjZGVmaW5lIGlzRm9yVGhpc0NvcmUoaSkgXAogICAgICggKCBzYnJUdW5pbmdUYWJsZVtpXS5jb3JlQ29kZXIgPT0gQ09ERUNfQUFDTEQgJiYgY29yZSA9PSBBT1RfRVJfQUFDX0VMRCApIHx8IFwKQEAgLTQxMyw2ICs0MTIsMjMgQEAKICAgY29uZmlnLT5jb2RlY1NldHRpbmdzLnRyYW5zRmFjICAgICAgICA9IHRyYW5zRmFjOwogICBjb25maWctPmNvZGVjU2V0dGluZ3Muc3RhbmRhcmRCaXRyYXRlID0gc3RhbmRhcmRCaXRyYXRlOwogCisgIGlmIChiaXRSYXRlIDwgMjgwMDApIHsKKyAgICBjb25maWctPnRocmVzaG9sZF9BbXBSZXNfRkZfbSA9IChGSVhQX0RCTClNQVhWQUxfREJMOworICAgIGNvbmZpZy0+dGhyZXNob2xkX0FtcFJlc19GRl9lID0gNzsKKyAgfQorICBlbHNlIGlmIChiaXRSYXRlID49IDI4MDAwICYmIGJpdFJhdGUgPD0gNDgwMDApIHsKKyAgICAvKiBUaGUgZmxvYXQgdGhyZXNob2xkIGlzIDc1CisgICAgICAgMC41MjQyODhmIGlzIGZyYWN0aW9uYWwgcGFydCBvZiBSRUxBWEFUSU9OLCB0aGUgcXVvdGFNYXRyaXggYW5kIHRoZXJlZm9yZSB0b25hbGl0eSBhcmUgc2NhbGVkIGJ5IHRoaXMKKyAgICAgICAyLzMgaXMgYmVjYXVzZSB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gZGl2aWRlcyB0aGUgdG9uYWxpdHkgdmFsdWVzIGJ5IDMsIGhlcmUgaXQncyBkaXZpZGVkIGJ5IDIKKyAgICAgICAxMjggY29tcGVuc2F0ZXMgdGhlIG5lY2Vzc2FyeSBzaGlmdGZhY3RvciBvZiA3ICovCisgICAgY29uZmlnLT50aHJlc2hvbGRfQW1wUmVzX0ZGX20gPSBGTDJGWENPTlNUX0RCTCg3NS4wZiowLjUyNDI4OGYvKDIuMGYvMy4wZikvMTI4LjBmKTsKKyAgICBjb25maWctPnRocmVzaG9sZF9BbXBSZXNfRkZfZSA9IDc7CisgIH0KKyAgZWxzZSBpZiAoYml0UmF0ZSA+IDQ4MDAwKSB7CisgICAgY29uZmlnLT50aHJlc2hvbGRfQW1wUmVzX0ZGX20gPSBGTDJGWENPTlNUX0RCTCgwKTsKKyAgICBjb25maWctPnRocmVzaG9sZF9BbXBSZXNfRkZfZSA9IDA7CisgIH0KKwogICBpZiAoYml0UmF0ZT09MCkgewogICAgIC8qIG1hcCB2YnIgcXVhbGl0eSB0byBiaXRyYXRlICovCiAgICAgaWYgKHZick1vZGUgPCAzMCkKQEAgLTQ2OCw2ICs0ODQsNTcgQEAKICAgICBjb25maWctPnN0ZXJlb01vZGUgICAgICA9IHNiclR1bmluZ1RhYmxlW2lkeF0uc3RlcmVvTW9kZSA7CiAgICAgY29uZmlnLT5mcmVxU2NhbGUgICAgICAgPSBzYnJUdW5pbmdUYWJsZVtpZHhdLmZyZXFTY2FsZSA7CiAKKyAgICBpZiAobnVtQ2hhbm5lbHMgPT0gMSkgeworICAgICAgLyogc3RlcmVvIGNhc2UgKi8KKyAgICAgIHN3aXRjaCAoY29yZSkgeworICAgICAgICBjYXNlIEFPVF9BQUNfTEM6CisgICAgICAgICAgaWYgKGJpdFJhdGUgPD0gKHVzZVNwZWVjaENvbmZpZz8yNDAwMFU6MjAwMDBVKSkgeworICAgICAgICAgICAgY29uZmlnLT5mcmVxX3Jlc19maXhmaXhbMF0gPSBGUkVRX1JFU19MT1c7IC8qIHNldCBsb3cgZnJlcXVlbmN5IHJlc29sdXRpb24gZm9yIG5vbi1zcGxpdCBmcmFtZXMgKi8KKyAgICAgICAgICAgIGNvbmZpZy0+ZnJlcV9yZXNfZml4Zml4WzFdID0gRlJFUV9SRVNfTE9XOyAvKiBzZXQgbG93IGZyZXF1ZW5jeSByZXNvbHV0aW9uIGZvciBzcGxpdCBmcmFtZXMgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU9UX0VSX0FBQ19FTEQ6CisgICAgICAgICAgaWYgKGJpdFJhdGUgPCAzNjAwMCkKKyAgICAgICAgICAgIGNvbmZpZy0+ZnJlcV9yZXNfZml4Zml4WzFdID0gRlJFUV9SRVNfTE9XOyAvKiBzZXQgbG93IGZyZXF1ZW5jeSByZXNvbHV0aW9uIGZvciBzcGxpdCBmcmFtZXMgKi8KKyAgICAgICAgICBpZiAoYml0UmF0ZSA8IDI2MDAwKSB7CisgICAgICAgICAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFswXSA9IEZSRVFfUkVTX0xPVzsgLyogc2V0IGxvdyBmcmVxdWVuY3kgcmVzb2x1dGlvbiBmb3Igbm9uLXNwbGl0IGZyYW1lcyAqLworICAgICAgICAgICAgY29uZmlnLT5mUmVzVHJhbnNJc0xvdyA9IDE7ICAgICAgICAgICAgICAgIC8qIGZvciB0cmFuc2llbnQgZnJhbWVzLCBzZXQgbG93IGZyZXF1ZW5jeSByZXNvbHV0aW9uICovCisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIHN0ZXJlbyBjYXNlICovCisgICAgICBzd2l0Y2ggKGNvcmUpIHsKKyAgICAgICAgY2FzZSBBT1RfQUFDX0xDOgorICAgICAgICAgIGlmIChiaXRSYXRlIDw9IDI4MDAwKSB7CisgICAgICAgICAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFswXSA9IEZSRVFfUkVTX0xPVzsgLyogc2V0IGxvdyBmcmVxdWVuY3kgcmVzb2x1dGlvbiBmb3Igbm9uLXNwbGl0IGZyYW1lcyAqLworICAgICAgICAgICAgY29uZmlnLT5mcmVxX3Jlc19maXhmaXhbMV0gPSBGUkVRX1JFU19MT1c7IC8qIHNldCBsb3cgZnJlcXVlbmN5IHJlc29sdXRpb24gZm9yIHNwbGl0IGZyYW1lcyAqLworICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBT1RfRVJfQUFDX0VMRDoKKyAgICAgICAgICBpZiAoYml0UmF0ZSA8IDcyMDAwKSB7CisgICAgICAgICAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFsxXSA9IEZSRVFfUkVTX0xPVzsgLyogc2V0IGxvdyBmcmVxdWVuY3kgcmVzb2x1dGlvbiBmb3Igc3BsaXQgZnJhbWVzICovCisgICAgICAgICAgfQorICAgICAgICAgIGlmIChiaXRSYXRlIDwgNTIwMDApIHsKKyAgICAgICAgICAgIGNvbmZpZy0+ZnJlcV9yZXNfZml4Zml4WzBdID0gRlJFUV9SRVNfTE9XOyAvKiBzZXQgbG93IGZyZXF1ZW5jeSByZXNvbHV0aW9uIGZvciBub24tc3BsaXQgZnJhbWVzICovCisgICAgICAgICAgICBjb25maWctPmZSZXNUcmFuc0lzTG93ID0gMTsgICAgICAgICAgICAgICAgLyogZm9yIHRyYW5zaWVudCBmcmFtZXMsIHNldCBsb3cgZnJlcXVlbmN5IHJlc29sdXRpb24gKi8KKyAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoYml0UmF0ZSA8PSAyODAwMCkgeworICAgICAgICAvKgorICAgICAgICAgIGFkZGl0aW9uYWxseSByZXN0cmljdCBmcmVxdWVuY3kgcmVzb2x1dGlvbiBpbiBGSVhGSVggZnJhbWVzCisgICAgICAgICAgdG8gZnVydGhlciByZWR1Y2UgU0JSIHBheWxvYWQgc2l6ZSAqLworICAgICAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFswXSA9IEZSRVFfUkVTX0xPVzsKKyAgICAgICAgY29uZmlnLT5mcmVxX3Jlc19maXhmaXhbMV0gPSBGUkVRX1JFU19MT1c7CisgICAgICB9CisgICAgfQorCiAgICAgLyogYWRqdXN0IHVzYWdlIG9mIHBhcmFtZXRyaWMgY29kaW5nIGRlcGVuZGVudCBvbiBiaXRyYXRlIGFuZCBzcGVlY2ggY29uZmlnIGZsYWcgKi8KICAgICBpZiAodXNlU3BlZWNoQ29uZmlnKQogICAgICAgY29uZmlnLT5wYXJhbWV0cmljQ29kaW5nICA9IDA7CkBAIC01MTYsNiArNTgzLDcgQEAKIEZES3NickVuY19Jbml0aWFsaXplU2JyRGVmYXVsdHMgKHNickNvbmZpZ3VyYXRpb25QdHIgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICAgICAgICAgICBkb3duU2FtcGxlRmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgICAgICAgICAgICAgICBjb2RlY0dyYW51bGVMZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGNvbnN0IElOVCAgICAgICAgICAgaXNMb3dEZWxheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogewogICAgIGlmICggKGRvd25TYW1wbGVGYWN0b3IgPCAxIHx8IGRvd25TYW1wbGVGYWN0b3IgPiAyKSB8fApAQCAtNTI2LDcgKzU5NCwxMSBAQAogICAgIGNvbmZpZy0+dXNlV2F2ZUNvZGluZyAgICAgICAgICA9IDA7CiAgICAgY29uZmlnLT5jcmNTYnIgICAgICAgICAgICAgICAgID0gMDsKICAgICBjb25maWctPmR5bkJ3U3VwcG9ydGVkICAgICAgICAgPSAxOwotICAgIGNvbmZpZy0+dHJhbl90aHIgICAgICAgICAgICAgICA9IDEzMDAwOworICAgIGlmIChpc0xvd0RlbGF5KQorICAgICAgY29uZmlnLT50cmFuX3RociAgICAgICAgICAgICA9IDYwMDA7CisgICAgZWxzZQorICAgICAgY29uZmlnLT50cmFuX3RociAgICAgICAgICAgICA9IDEzMDAwOworCiAgICAgY29uZmlnLT5wYXJhbWV0cmljQ29kaW5nICAgICAgID0gMTsKIAogICAgIGNvbmZpZy0+c2JyRnJhbWVTaXplICAgICAgICAgICA9IGNvZGVjR3JhbnVsZUxlbiAqIGRvd25TYW1wbGVGYWN0b3I7CkBAIC01NTksNyArNjMxLDkgQEAKICAgICBjb25maWctPm5vaXNlRmxvb3JPZmZzZXQgICAgICAgPSAwOwogICAgIGNvbmZpZy0+c3RhcnRGcmVxICAgICAgICAgICAgICA9IDU7IC8qICA1LjkgcmVzcGVjdGl2ZWx5ICA2LjAga0h6IGF0IGZzID0gNDQuMS80OCBrSHogKi8KICAgICBjb25maWctPnN0b3BGcmVxICAgICAgICAgICAgICAgPSA5OyAvKiAxNi4yIHJlc3BlY3RpdmVseSAxNi44IGtIeiBhdCBmcyA9IDQ0LjEvNDgga0h6ICovCi0KKyAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFswXSAgICAgPSBGUkVRX1JFU19ISUdIOyAgLyogbm9uLXNwbGl0IGNhc2UgKi8KKyAgICBjb25maWctPmZyZXFfcmVzX2ZpeGZpeFsxXSAgICAgPSBGUkVRX1JFU19ISUdIOyAgLyogc3BsaXQgY2FzZSAqLworICAgIGNvbmZpZy0+ZlJlc1RyYW5zSXNMb3cgPSAwOyAgLyogZm9yIHRyYW5zaWVudCBmcmFtZXMsIHNldCB2YXJpYWJsZSBmcmVxdWVuY3kgcmVzb2x1dGlvbiBhY2NvcmRpbmcgdG8gZnJlcVJlc1RhYmxlICovCiAKICAgICAvKiBoZWFkZXJfZXh0cmFfMSAqLwogICAgIGNvbmZpZy0+ZnJlcVNjYWxlICAgICAgID0gU0JSX0ZSRVFfU0NBTEVfREVGQVVMVDsKQEAgLTg1NCw3ICs5MjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgIGNsZWFyT3V0cHV0ICAgICAgICAgICAgICAvKiE8IERvIG5vdCBjb25zaWRlciBhbnkgaW5wdXQgc2lnbmFsICovCiAgICAgICAgICAgICAgICAgICAgICAgICApCiB7Ci0gIEhBTkRMRV9TQlJfRUxFTUVOVCBoU2JyRWxlbWVudCA9IGhFbnZFbmNvZGVyLT5zYnJFbGVtZW50W2lFbGVtZW50XTsKKyAgSEFORExFX1NCUl9FTEVNRU5UIGhTYnJFbGVtZW50ID0gTlVMTDsKICAgRkRLX0NSQ0lORk8gIGNyY0luZm87CiAgIElOVCAgICBjcmNSZWc7CiAgIElOVCAgICBjaDsKQEAgLTEyMDcsNyArMTI4MSwxMCBAQAogCiAgIEZES19BU1NFUlQocGFyYW1zLT5lID49IDApOwogCi0gIGhFbnYtPmVuY0VudkRhdGEuZnJlcV9yZXNfZml4Zml4ID0gMTsKKyAgaEVudi0+ZW5jRW52RGF0YS5mcmVxX3Jlc19maXhmaXhbMF0gPSBwYXJhbXMtPmZyZXFfcmVzX2ZpeGZpeFswXTsKKyAgaEVudi0+ZW5jRW52RGF0YS5mcmVxX3Jlc19maXhmaXhbMV0gPSBwYXJhbXMtPmZyZXFfcmVzX2ZpeGZpeFsxXTsKKyAgaEVudi0+ZW5jRW52RGF0YS5mUmVzVHJhbnNJc0xvdyAgICAgPSBwYXJhbXMtPmZSZXNUcmFuc0lzTG93OworCiAgIGhFbnYtPmZMZXZlbFByb3RlY3QgPSAwOwogCiAgIGhFbnYtPmVuY0VudkRhdGEubGRHcmlkID0gKHNickNvbmZpZ0RhdGEtPnNiclN5bnRheEZsYWdzICYgU0JSX1NZTlRBWF9MT1dfREVMQVkpID8gMSA6IDA7CkBAIC0xMzQ5LDExICsxNDI2LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMtPnN0YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVNsb3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhFbnYtPmVuY0VudkRhdGEuZnJlcV9yZXNfZml4Zml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLGhFbnYtPmVuY0VudkRhdGEubGRHcmlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEVudi0+ZW5jRW52RGF0YS5mcmVxX3Jlc19maXhmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaEVudi0+ZW5jRW52RGF0YS5mUmVzVHJhbnNJc0xvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoRW52LT5lbmNFbnZEYXRhLmxkR3JpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAKKyAgaWYoc2JyQ29uZmlnRGF0YS0+c2JyU3ludGF4RmxhZ3MgJiBTQlJfU1lOVEFYX0xPV19ERUxBWSkKKyAgeworICAgIElOVCBiYW5kd2lkdGhfcW1mX3Nsb3QgPSAoc2JyQ29uZmlnRGF0YS0+c2FtcGxlRnJlcT4+MSkgLyAoc2JyQ29uZmlnRGF0YS0+bm9RbWZCYW5kcyk7CisgICAgaWYoRkRLc2JyRW5jX0luaXRTYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3IoCisgICAgICAgICAgICAgICZoRW52LT5zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3IsCisgICAgICAgICAgICAgICBzYnJDb25maWdEYXRhLT5ub1FtZlNsb3RzLAorICAgICAgICAgICAgICAgYmFuZHdpZHRoX3FtZl9zbG90LAorICAgICAgICAgICAgICAgc2JyQ29uZmlnRGF0YS0+bm9RbWZCYW5kcywKKyAgICAgICAgICAgICAgIHNickNvbmZpZ0RhdGEtPmZyZXFCYW5kVGFibGVbMF1bMF0KKyAgICAgICAgICAgICAgICkpCisgICAgICByZXR1cm4oMSk7CisgIH0KKworICAvKiBUaGUgdHJhbnNpZW50IGRldGVjdG9yIGhhcyB0byBiZSBpbml0aWFsaXplZCBhbHNvIGlmIHRoZSBmYXN0IHRyYW5zaWVudAorICAgICBkZXRlY3RvciB3YXMgYWN0aXZlLCBiZWNhdXNlIHRoZSB2YWx1ZXMgZnJvbSB0aGUgdHJhbnNpZW50IGRldGVjdG9yCisgICAgIHN0cnVjdHVyZSBhcmUgdXNlZC4gKi8KICAgaWYoRkRLc2JyRW5jX0luaXRTYnJUcmFuc2llbnREZXRlY3RvciAoJmhFbnYtPnNiclRyYW5zaWVudERldGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JyQ29uZmlnRGF0YS0+c2JyU3ludGF4RmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJDb25maWdEYXRhLT5mcmFtZVNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJDb25maWdEYXRhLT5zYW1wbGVGcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLApAQCAtMTU1MywxMiArMTY0OCw2IEBACiAgIGhTYnJFbGVtZW50LT5zYnJDb25maWdEYXRhLnNiclN5bnRheEZsYWdzID0gMDsKIAogICBzd2l0Y2ggKGFvdCkgewotICBjYXNlIEFPVF9EUk1fTVBFR19QUzoKLSAgY2FzZSBBT1RfRFJNX1NCUjoKLSAgICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS5zYnJTeW50YXhGbGFncyB8PSBTQlJfU1lOVEFYX1NDQUxBQkxFOwotICAgIGhTYnJFbGVtZW50LT5zYnJDb25maWdEYXRhLnNiclN5bnRheEZsYWdzIHw9IFNCUl9TWU5UQVhfRFJNX0NSQzsKLSAgICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS5zYnJTeW50YXhGbGFncyB8PSBTQlJfU1lOVEFYX0NSQzsKLSAgICBicmVhazsKICAgY2FzZSBBT1RfRVJfQUFDX0VMRDoKICAgICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS5zYnJTeW50YXhGbGFncyB8PSBTQlJfU1lOVEFYX0xPV19ERUxBWTsKICAgICBicmVhazsKQEAgLTE2NjUsNiArMTc1NCw4IEBACiAgICAvKiBvdGhlciBzd2l0Y2hlcyAqLwogICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS51c2VXYXZlQ29kaW5nICAgICAgICAgICAgID0gcGFyYW1zLT51c2VXYXZlQ29kaW5nOwogICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS51c2VQYXJhbWV0cmljQ29kaW5nICAgICAgID0gcGFyYW1zLT5wYXJhbWV0cmljQ29kaW5nOworICBoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YS50aHJlc2hvbGRBbXBSZXNGRl9tICAgICAgID0gcGFyYW1zLT50aHJlc2hvbGRfQW1wUmVzX0ZGX207CisgIGhTYnJFbGVtZW50LT5zYnJDb25maWdEYXRhLnRocmVzaG9sZEFtcFJlc0ZGX2UgICAgICAgPSBwYXJhbXMtPnRocmVzaG9sZF9BbXBSZXNfRkZfZTsKIAogICAvKiBpbml0IGZyZXEgYmFuZCB0YWJsZSAqLwogICBpZih1cGRhdGVGcmVxQmFuZFRhYmxlKCZoU2JyRWxlbWVudC0+c2JyQ29uZmlnRGF0YSwKQEAgLTE4NDgsNyArMTkzOSw3IEBACiAKIAogCi0gICAgaWYgKCAoYW90PT1BT1RfUFMpIHx8IChhb3Q9PUFPVF9NUDJfUFMpIHx8IChhb3Q9PUFPVF9EQUJQTFVTX1BTKSB8fCAoYW90PT1BT1RfRFJNX01QRUdfUFMpICkgeworICAgIGlmICggKGFvdD09QU9UX1BTKSApIHsKICAgICAgICAgdXNlUHMgPSAxOwogICAgIH0KICAgICBpZiAoIChhb3Q9PUFPVF9FUl9BQUNfRUxEKSApIHsKQEAgLTIwMDYsNyArMjA5Nyw4IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoICEgRkRLc2JyRW5jX0luaXRpYWxpemVTYnJEZWZhdWx0cyAoICZzYnJDb25maWdbZWxdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkb3duU2FtcGxlRmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlRnJhbWVMZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZUZyYW1lTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MT1dERUxBWShhb3QpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgKQogICAgICAgICB7CiAgICAgICAgICAgZXJyb3IgPSAxOwpkaWZmIC0tZ2l0IGEvbGliU0JSZW5jL3NyYy9zYnJfcm9tLmNwcCBiL2xpYlNCUmVuYy9zcmMvc2JyX3JvbS5jcHAKaW5kZXggYTJiNjUyNy4uN2E1MTY2OCAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy9zYnJfcm9tLmNwcAorKysgYi9saWJTQlJlbmMvc3JjL3Nicl9yb20uY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC02ODQsNiArNjg0LDkgQEAKIAogICAvKiogQUFDIExPVyBERUxBWSBTRUNUSU9OICoqLwogCisgIC8qIDI0IGtIeiBkdWFsIHJhdGUgLSAxMmtIeiBzaW5nbGVyYXRlIGlzIG5vdCBhbGxvd2VkIChkZWFjdGl2YXRlZCBpbiBGREtzYnJFbmNfSXNTYnJTZXR0aW5nQXZhaWwoKSkgKi8KKyAgeyBDT0RFQ19BQUNMRCwgICA4MDAwLCAzMjAwMCwgIDEyMDAwLCAxLCAgMSwgMSwgMCwgMCwgIDEsIDAsIDYsIFNCUl9NT05PLCAzIH0sIC8qIG5vbWluYWw6ICA4IGtiaXQvcyAqLworCiAgIC8qKiogbW9ubyAqKiovCiAgIC8qIDE2LzMyIGtIeiBkdWFsIHJhdGUgbm90IHlldCB0dW5lZCAtPmFsYiBjb3BpZWQgZnJvbSBub24gTEQgdGFibGVzKi8KICAgeyBDT0RFQ19BQUNMRCwgIDE2MDAwLCAxODAwMCwgIDE2MDAwLCAxLCAgNCwgNSwgOSwgNywgIDEsIDAsIDYsIFNCUl9NT05PLCAzIH0sIC8qIG5vbWluYWw6IDE2IGtiaXQvcyB3cnI6IHR1bmVkICovCkBAIC03MDIsMTAgKzcwNSwxMCBAQAogICB7IENPREVDX0FBQ0xELCAgNTIwMDAsIDY0MDAxLCAgMjIwNTAsIDEsIDEzLDExLDExLDEwLCAgMiwgMCwgMywgU0JSX01PTk8sIDEgfSwgLyogbm9taW5hbDogNTYga2JpdC9zICovCiAKICAgLyogMjQvNDgga0h6IGR1YWwgcmF0ZSAqLwotICB7IENPREVDX0FBQ0xELCAgMjAwMDAsIDIyMDAwLCAgMjQwMDAsIDEsICA0LCAxLCA4LCA0LCAgMiwgMywgNiwgU0JSX01PTk8sIDIgfSwgLyogbm9taW5hbDogMjAga2JpdC9zICovCisgIHsgQ09ERUNfQUFDTEQsICAyMDAwMCwgMjIwMDAsICAyNDAwMCwgMSwgIDMsIDQsIDgsIDgsICAyLCAwLCA2LCBTQlJfTU9OTywgMiB9LCAvKiBub21pbmFsOiAyMCBrYml0L3MgKi8KICAgeyBDT0RFQ19BQUNMRCwgIDIyMDAwLCAyODAwMCwgIDI0MDAwLCAxLCAgMywgOCwgOCwgNywgIDIsIDAsIDMsIFNCUl9NT05PLCAyIH0sIC8qIG5vbWluYWw6IDI0IGtiaXQvcyAqLwogICB7IENPREVDX0FBQ0xELCAgMjgwMDAsIDM2MDAwLCAgMjQwMDAsIDEsICA0LCA4LCA4LCA3LCAgMiwgMCwgMywgU0JSX01PTk8sIDIgfSwgLyogbm9taW5hbDogMzIga2JpdC9zICovCi0gIHsgQ09ERUNfQUFDTEQsICAzNjAwMCwgNTYwMDAsICAyNDAwMCwgMSwgIDgsIDksIDksIDksICAyLCAwLCAzLCBTQlJfTU9OTywgMSB9LCAvKiBub21pbmFsOiA0MCBrYml0L3MgKi8KKyAgeyBDT0RFQ19BQUNMRCwgIDM2MDAwLCA1NjAwMCwgIDI0MDAwLCAxLCAgOCwgOSwgOSwgOCwgIDIsIDAsIDMsIFNCUl9NT05PLCAxIH0sIC8qIG5vbWluYWw6IDQwIGtiaXQvcyAqLwogICB7IENPREVDX0FBQ0xELCAgNTYwMDAsIDY0MDAxLCAgMjQwMDAsIDEsIDEzLDExLDExLDEwLCAgMiwgMCwgMywgU0JSX01PTk8sIDEgfSwgLyogbm9taW5hbDogNjQga2JpdC9zICovCiAKICAgLyogMzIvNjQga0h6IGR1YWwgcmF0ZSAqLyAgLyogcGxhY2VibyBzZXR0aW5ncyAqLyAgLypqZ3I6IG5ldywgY29weSBmcm9tIENPREVDX0FBQyAqLwpAQCAtNzIyLDcgKzcyNSw3IEBACiAgIHsgQ09ERUNfQUFDTEQsIDEwMDAwMCwxNjAwMDEsICA0NDEwMCwgMSwgMTMsMTMsMTEsMTEsICAyLCAwLCAzLCBTQlJfTU9OTywgMSB9LCAvKiBub21pbmFsOiAxMjggKi8KIAogICAvKiA0OC85NiBrSHogZHVhbCByYXRlICovICAvKiAzMiBhbmQgNDBrYnBzIGxpbmUgdHVuZWQgZm9yIGR1YWwtcmF0ZSBTQlIgKi8KLSAgeyBDT0RFQ19BQUNMRCwgIDM2MDAwLCA2MDAwMCwgIDQ4MDAwLCAxLCAgOCwgNywgNiwgOSwgIDIsIDAsIDMsIFNCUl9NT05PLCAyIH0sIC8qIG5vbWluYWw6IDQwICovCisgIHsgQ09ERUNfQUFDTEQsICAzNjAwMCwgNjAwMDAsICA0ODAwMCwgMSwgIDQsIDcsIDQsIDQsICAyLCAwLCAzLCBTQlJfTU9OTywgMyB9LCAvKiBub21pbmFsOiA0MCAqLwogICB7IENPREVDX0FBQ0xELCAgNjAwMDAsIDcyMDAwLCAgNDgwMDAsIDEsICA5LCA5LDEwLDEwLCAgMiwgMCwgMywgU0JSX01PTk8sIDEgfSwgLyogbm9taW5hbDogNjQgKi8KICAgeyBDT0RFQ19BQUNMRCwgIDcyMDAwLDEwMDAwMCwgIDQ4MDAwLCAxLCAxMSwxMSwxMSwxMSwgIDIsIDAsIDMsIFNCUl9NT05PLCAxIH0sIC8qIG5vbWluYWw6IDgwICovCiAgIHsgQ09ERUNfQUFDTEQsIDEwMDAwMCwxNjAwMDEsICA0ODAwMCwgMSwgMTMsMTMsMTEsMTEsICAyLCAwLCAzLCBTQlJfTU9OTywgMSB9LCAvKiBub21pbmFsOiAxMjggKi8KZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvdG9uX2NvcnIuY3BwIGIvbGliU0JSZW5jL3NyYy90b25fY29yci5jcHAKaW5kZXggMjI0ZGExMS4uYWY1YWZiYSAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy90b25fY29yci5jcHAKKysrIGIvbGliU0JSZW5jL3NyYy90b25fY29yci5jcHAKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTY4Miw3ICs2ODIsNyBAQAogCiAgIC8qCiAgIFJlc2V0IHRoZSBwYXRjaGluZyBhbmQgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcXVvdGEgbWF0cml4LgotICBBc3NpbmcgcGFyYW1ldGVycyBmb3IgdGhlIExQQyBhbmFseXNpcy4KKyAgQXNzdW1pbmcgcGFyYW1ldGVycyBmb3IgdGhlIExQQyBhbmFseXNpcy4KICAgKi8KICAgaWYgKHNickNmZy0+c2JyU3ludGF4RmxhZ3MgJiBTQlJfU1lOVEFYX0xPV19ERUxBWSkgewogICAgIHN3aXRjaCAodGltZVNsb3RzKSB7CkBAIC02OTAsNyArNjkwLDcgQEAKICAgICAgIGhUb25Db3JyLT5scGNMZW5ndGhbMF0gICAgICAgICAgICAgID0gOCAtIExQQ19PUkRFUjsKICAgICAgIGhUb25Db3JyLT5scGNMZW5ndGhbMV0gICAgICAgICAgICAgID0gNyAtIExQQ19PUkRFUjsKICAgICAgIGhUb25Db3JyLT5udW1iZXJPZkVzdGltYXRlcyAgICAgICAgID0gTk9fT0ZfRVNUSU1BVEVTX0xEOwotICAgICAgaFRvbkNvcnItPm51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUgPSBzYnJDZmctPm5vUW1mU2xvdHMgLyA3OworICAgICAgaFRvbkNvcnItPm51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUgPSAyOyAvKiBzYnJDZmctPm5vUW1mU2xvdHMgLyA3ICovCiAgICAgICBoVG9uQ29yci0+ZnJhbWVTdGFydEluZGV4SW52ZkVzdCAgICA9IDA7CiAgICAgICBoVG9uQ29yci0+dHJhbnNpZW50UG9zT2Zmc2V0ICAgICAgICA9IEZSQU1FX01JRERMRV9TTE9UXzUxMkxEOwogICAgICAgYnJlYWs7CkBAIC02OTgsNyArNjk4LDcgQEAKICAgICAgIGhUb25Db3JyLT5scGNMZW5ndGhbMF0gICAgICAgICAgICAgID0gOCAtIExQQ19PUkRFUjsKICAgICAgIGhUb25Db3JyLT5scGNMZW5ndGhbMV0gICAgICAgICAgICAgID0gOCAtIExQQ19PUkRFUjsKICAgICAgIGhUb25Db3JyLT5udW1iZXJPZkVzdGltYXRlcyAgICAgICAgID0gTk9fT0ZfRVNUSU1BVEVTX0xEOwotICAgICAgaFRvbkNvcnItPm51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUgPSBzYnJDZmctPm5vUW1mU2xvdHMgLyA4OworICAgICAgaFRvbkNvcnItPm51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWUgPSAyOyAvKiBzYnJDZmctPm5vUW1mU2xvdHMgLyA4ICovCiAgICAgICBoVG9uQ29yci0+ZnJhbWVTdGFydEluZGV4SW52ZkVzdCAgICA9IDA7CiAgICAgICBoVG9uQ29yci0+dHJhbnNpZW50UG9zT2Zmc2V0ICAgICAgICA9IEZSQU1FX01JRERMRV9TTE9UXzUxMkxEOwogICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL3Rvbl9jb3JyLmggYi9saWJTQlJlbmMvc3JjL3Rvbl9jb3JyLmgKaW5kZXggOGM4NDI1Yy4uNTA0YWIwMyAxMDA2NDQKLS0tIGEvbGliU0JSZW5jL3NyYy90b25fY29yci5oCisrKyBiL2xpYlNCUmVuYy9zcmMvdG9uX2NvcnIuaApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtMTE4LDcgKzExOCw3IEBACiAgIElOVCBidWZmZXJMZW5ndGg7ICAgICAgICAgICAgICAgLyohPCBMZW5ndGggb2YgdGhlIHIgYW5kIGkgYnVmZmVycy4gKi8KICAgSU5UIHN0ZXBTaXplOyAgICAgICAgICAgICAgICAgICAvKiE8IFN0cmlkZSBmb3IgdGhlIGxwYyBlc3RpbWF0ZS4gKi8KICAgSU5UIG51bWJlck9mRXN0aW1hdGVzOyAgICAgICAgICAvKiE8IFRoZSB0b3RhbCBudW1iZXIgb2YgZXN0aWFtdGVzLCBhdmFpbGFibGUgaW4gdGhlIHF1b3RhTWF0cml4LiovCi0gIElOVCBudW1iZXJPZkVzdGltYXRlc1BlckZyYW1lOyAgLyohPCBUaGUgbnVtYmVyIG9mIGVzdGltYXRlcyBwZXIgZnJhbWUgYXZhaWxhYmxlIGluIHRoZSBxdW90YU1hdHJpeC4qLworICBVSU5UIG51bWJlck9mRXN0aW1hdGVzUGVyRnJhbWU7IC8qITwgVGhlIG51bWJlciBvZiBlc3RpbWF0ZXMgcGVyIGZyYW1lIGF2YWlsYWJsZSBpbiB0aGUgcXVvdGFNYXRyaXguKi8KICAgSU5UIGxwY0xlbmd0aFsyXTsgICAgICAgICAgICAgICAvKiE8IFNlZ21lbnQgbGVuZ3RoIHVzZWQgZm9yIHNlY29uZCBvcmRlciBMUEMgYW5hbHlzaXMuKi8KICAgSU5UIG5leHRTYW1wbGU7ICAgICAgICAgICAgICAgICAvKiE8IFdoZXJlIHRvIHN0YXJ0IHRoZSBMUEMgYW5hbHlzaXMgb2YgdGhlIGN1cnJlbnQgZnJhbWUuKi8KICAgSU5UIG1vdmU7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEhvdyBtYW55IGVzdGltYXRlcyB0byBtb3ZlIGluIHRoZSBxdW90YU1hdHJpeCwgd2hlbiBidWZmZXJpbmcuICovCmRpZmYgLS1naXQgYS9saWJTQlJlbmMvc3JjL3RyYW5fZGV0LmNwcCBiL2xpYlNCUmVuYy9zcmMvdHJhbl9kZXQuY3BwCmluZGV4IDFlMGE1OWYuLjMzZWE2MGUgMTAwNjQ0Ci0tLSBhL2xpYlNCUmVuYy9zcmMvdHJhbl9kZXQuY3BwCisrKyBiL2xpYlNCUmVuYy9zcmMvdHJhbl9kZXQuY3BwCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC04OSw3ICs4OSw3IEBACiAKICNpbmNsdWRlICJnZW5lcmljU3Rkcy5oIgogCi0jZGVmaW5lIE5PUk1fUU1GX0VORVJHWSA1LjY4NDM0MTg4NjA4MDgwMTQ4Njk2ODk5NDE0MDYyNWUtMTQgLyogMl4tNDQgKi8KKyNkZWZpbmUgTk9STV9RTUZfRU5FUkdZIDkuMzEzMjI1NzQ2MTU0NzlFLTEwIC8qIDJeLTMwICovCiAKIC8qIHN0YXRpYyBGSVhQX0RCTCBBQlNfVEhSRVMgPSBmaXhNYXgoIEZMMkZYQ09OU1RfREJMKDEuMjhlNSAqICBOT1JNX1FNRl9FTkVSR1kpLCAoRklYUF9EQkwpMSkgIE1pbmltdW0gdGhyZXNob2xkIGZvciBkZXRlY3RpbmcgY2hhbmdlcyAqLwogI2RlZmluZSBBQlNfVEhSRVMgKChGSVhQX0RCTCkxNikKQEAgLTEwNiwyMiArMTA2LDMwIEBACiAKICBccmV0dXJuICBjYWxjdWxhdGVkIHZhbHVlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBOUkdfU0hJRlQgIDMgLyogZm9yIGVuZXJneSBzdW1tYXRpb24gKi8KKwogc3RhdGljIEZJWFBfREJMIHNwZWN0cmFsQ2hhbmdlKEZJWFBfREJMIEVuZXJnaWVzW05VTUJFUl9USU1FX1NMT1RTXzIzMDRdW01BWF9GUkVRX0NPRUZGU10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICpzY2FsZUVuZXJnaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMIEVuZXJneVRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBuU2ZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzdG9wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBZQnVmZmVyV3JpdGVPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHN0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICpyZXN1bHRfZSkKIHsKICAgSU5UIGksajsKICAgSU5UIGxlbjEsbGVuMjsKLSAgRklYUF9EQkwgZGVsdGEsdG1wMCx0bXAxLHRtcDI7Ci0gIEZJWFBfREJMIGFjY3UxLGFjY3UyLGRlbHRhX3N1bSxyZXN1bHQ7CisgIFNDSEFSIGVuZXJnaWVzX2VfZGlmZltOVU1CRVJfVElNRV9TTE9UU18yMzA0XSwgZW5lcmdpZXNfZSwgZW5lcmd5VG90YWxfZT0xOSwgZW5lcmdpZXNfZV9hZGQ7CisgIFNDSEFSIHByZXZFbmVyZ2llc19lX2RpZmYsIG5ld0VuZXJnaWVzX2VfZGlmZjsKKyAgRklYUF9EQkwgdG1wMCx0bXAxOworICBGSVhQX0RCTCBhY2N1MSxhY2N1MixhY2N1MV9pbml0LGFjY3UyX2luaXQ7CisgIEZJWFBfREJMIGRlbHRhLCBkZWx0YV9zdW07CisgIElOVCBhY2N1X2UsIHRtcF9lOwogCi0gIEZES19BU1NFUlQoc2NhbGVFbmVyZ2llc1swXSA+PSAwKTsKKyAgZGVsdGFfc3VtID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CisgICpyZXN1bHRfZSA9IDA7CiAKLSAgLyogZXF1YWwgZm9yIGFhYyAod291bGQgYmUgbm90IGVxdWFsIGZvciBtcDMpICovCiAgIGxlbjEgPSBib3JkZXItc3RhcnQ7CiAgIGxlbjIgPSBzdG9wLWJvcmRlcjsKIApAQCAtMTMwLDQzICsxMzgsOTEgQEAKICAgcG9zX3dlaWdodCA9IEZMMkZYQ09OU1RfREJMKDAuNWYpIC0gKGxlbjEqR2V0SW52SW50KGxlbjErbGVuMikpOwogICBwb3Nfd2VpZ2h0ID0gLypGTDJGWENPTlNUX0RCTCgxLjApKi8gKEZJWFBfREJMKU1BWFZBTF9EQkwgLSAoZk11bHQocG9zX3dlaWdodCwgcG9zX3dlaWdodCk8PDIpOwogCi0gIGRlbHRhX3N1bSA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOworICAvKioqIENhbGMgc2NhbGluZyBmb3IgZW5lcmdpZXMgKioqLworICBGREtfQVNTRVJUKHNjYWxlRW5lcmdpZXNbMF0gPj0gMCk7CisgIEZES19BU1NFUlQoc2NhbGVFbmVyZ2llc1sxXSA+PSAwKTsKKworICBlbmVyZ2llc19lID0gMTkgLSBGREttaW4oc2NhbGVFbmVyZ2llc1swXSwgc2NhbGVFbmVyZ2llc1sxXSk7CisKKyAgLyogbGltaXQgc2hpZnQgZm9yIGVuZXJneSBhY2N1bXVsYXRpb24sIGVuZXJnaWVzX2UgY2FuIGJlIC0xMCBtaW4uICovCisgIGlmIChlbmVyZ2llc19lIDwgLTEwKSB7CisgICAgIGVuZXJnaWVzX2VfYWRkID0gLTEwIC0gZW5lcmdpZXNfZTsKKyAgICAgZW5lcmdpZXNfZSA9IC0xMDsKKyAgfSBlbHNlIGlmIChlbmVyZ2llc19lID4gMTcpIHsKKyAgICAgZW5lcmdpZXNfZV9hZGQgPSBlbmVyZ2llc19lIC0gMTc7CisgICAgIGVuZXJnaWVzX2UgPSAxNzsKKyAgfSBlbHNlIHsKKyAgICAgZW5lcmdpZXNfZV9hZGQgPSAwOworICB9CisKKyAgLyogY29tcGVuc2F0ZSBzY2FsaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gc2NhbGVFbmVyZ2llc1swXSBhbmQgc2NhbGVFbmVyZ2llc1sxXSAgKi8KKyAgcHJldkVuZXJnaWVzX2VfZGlmZiA9IHNjYWxlRW5lcmdpZXNbMF0gLSBGREttaW4oc2NhbGVFbmVyZ2llc1swXSwgc2NhbGVFbmVyZ2llc1sxXSkgKyBlbmVyZ2llc19lX2FkZCArIE5SR19TSElGVDsKKyAgbmV3RW5lcmdpZXNfZV9kaWZmICA9IHNjYWxlRW5lcmdpZXNbMV0gLSBGREttaW4oc2NhbGVFbmVyZ2llc1swXSwgc2NhbGVFbmVyZ2llc1sxXSkgKyBlbmVyZ2llc19lX2FkZCArIE5SR19TSElGVDsKKworICBwcmV2RW5lcmdpZXNfZV9kaWZmID0gZk1pbihwcmV2RW5lcmdpZXNfZV9kaWZmLCBERlJBQ1RfQklUUy0xKTsKKyAgbmV3RW5lcmdpZXNfZV9kaWZmICA9IGZNaW4obmV3RW5lcmdpZXNfZV9kaWZmLCAgREZSQUNUX0JJVFMtMSk7CisKKyAgZm9yIChpPXN0YXJ0OyBpPFlCdWZmZXJXcml0ZU9mZnNldDsgaSsrKSB7CisgICAgZW5lcmdpZXNfZV9kaWZmW2ldID0gcHJldkVuZXJnaWVzX2VfZGlmZjsKKyAgfQorICBmb3IgKGk9WUJ1ZmZlcldyaXRlT2Zmc2V0OyBpPHN0b3A7IGkrKykgeworICAgIGVuZXJnaWVzX2VfZGlmZltpXSA9IG5ld0VuZXJnaWVzX2VfZGlmZjsKKyAgfQogCiAgIC8qIFN1bSB1cCBlbmVyZ2llcyBvZiBhbGwgUU1GLXRpbWVzbG90cyBmb3IgYm90aCBoYWxmcyAqLworICBGREtfQVNTRVJUKGxlbjE8PTgpOyAvKiBvdGhlcndpc2UgYW4gb3ZlcmZsb3cgaXMgcG9zc2libGUgKi8KKyAgRkRLX0FTU0VSVChsZW4yPD04KTsgLyogb3RoZXJ3aXNlIGFuIG92ZXJmbG93IGlzIHBvc3NpYmxlICovCisgIC8qIGluaXQgd2l0aCBzb21lIGVuZXJneSB0byBwcmV2ZW50IGRpdmlzaW9uIGJ5IHplcm8KKyAgICAgIGFuZCB0byBwcmV2ZW50IHNwbGl0dGluZyBmb3IgdmVyeSBsb3cgbGV2ZWxzICovCisgIGFjY3UxX2luaXQgPSBzY2FsZVZhbHVlKChGTDJGWENPTlNUX0RCTCgoMS4wZTYqTk9STV9RTUZfRU5FUkdZKSkpLC1lbmVyZ2llc19lKTsKKyAgYWNjdTJfaW5pdCA9IHNjYWxlVmFsdWUoKEZMMkZYQ09OU1RfREJMKCgxLjBlNipOT1JNX1FNRl9FTkVSR1kpKSksLWVuZXJnaWVzX2UpOworICBhY2N1MV9pbml0ID0gZk11bHQoYWNjdTFfaW5pdCwgKEZJWFBfREJMKWxlbjE8PCgoREZSQUNUX0JJVFMtMSktTlJHX1NISUZULTEpKTw8MTsKKyAgYWNjdTJfaW5pdCA9IGZNdWx0KGFjY3UyX2luaXQsIChGSVhQX0RCTClsZW4yPDwoKERGUkFDVF9CSVRTLTEpLU5SR19TSElGVC0xKSk8PDE7CisKICAgZm9yIChqPTA7IGo8blNmYjsgaisrKSB7Ci0gICAgI2RlZmluZSBOUkdfU0NBTEUgIDMKLSAgICAvKiBpbml0IHdpdGggc29tZSBlbmVyZ3kgdG8gcHJldmVudCBkaXZpc2lvbiBieSB6ZXJvCi0gICAgICAgYW5kIHRvIHByZXZlbnQgc3BsaXR0aW5nIGZvciB2ZXJ5IGxvdyBsZXZlbHMgKi8KLSAgICBhY2N1MSA9ICgoRkwyRlhDT05TVF9EQkwoKDEuMGU2Kk5PUk1fUU1GX0VORVJHWSo4LjAvMzIpKSkgPDwgZml4TWluKHNjYWxlRW5lcmdpZXNbMF0sMjUpKT4+TlJHX1NDQUxFOyAgLyogY29tcGxleCBpbml0IGZvciBjb21wYXJlIHdpdGggb3JpZ2luYWwgdmVyc2lvbiAqLwotICAgIGFjY3UyID0gKChGTDJGWENPTlNUX0RCTCgoMS4wZTYqTk9STV9RTUZfRU5FUkdZKjguMC8zMikpKSA8PCBmaXhNaW4oc2NhbGVFbmVyZ2llc1swXSwyNSkpPj5OUkdfU0NBTEU7ICAvKiBjYW4gYmUgc2ltcGxpZmllZCBpbiBkc3AgaW1wbGVtZW50YXRpb24gKi8KKworICAgIGFjY3UxID0gYWNjdTFfaW5pdDsKKyAgICBhY2N1MiA9IGFjY3UyX2luaXQ7CisgICAgYWNjdV9lID0gZW5lcmdpZXNfZSszOwogCiAgICAgLyogU3VtIHVwIGVuZXJnaWVzIGluIGZpcnN0IGhhbGYgKi8KICAgICBmb3IgKGk9c3RhcnQ7IGk8Ym9yZGVyOyBpKyspIHsKLSAgICAgIGFjY3UxICs9IChFbmVyZ2llc1tpXVtqXT4+TlJHX1NDQUxFKTsKKyAgICAgIGFjY3UxICs9IHNjYWxlVmFsdWUoRW5lcmdpZXNbaV1bal0sIC1lbmVyZ2llc19lX2RpZmZbaV0pOwogICAgIH0KIAogICAgIC8qIFN1bSB1cCBlbmVyZ2llcyBpbiBzZWNvbmQgaGFsZiAqLwogICAgIGZvciAoaT1ib3JkZXI7IGk8c3RvcDsgaSsrKSB7Ci0gICAgICBhY2N1MiArPSAoRW5lcmdpZXNbaV1bal0+Pk5SR19TQ0FMRSk7CisgICAgICBhY2N1MiArPSBzY2FsZVZhbHVlKEVuZXJnaWVzW2ldW2pdLCAtZW5lcmdpZXNfZV9kaWZmW2ldKTsKICAgICB9CiAKICAgICAvKiBFbmVyZ3kgY2hhbmdlIGluIGN1cnJlbnQgYmFuZCAqLwotICAgIHRtcDAgPSBDYWxjTGREYXRhKGFjY3UyKTsKLSAgICB0bXAxID0gQ2FsY0xkRGF0YShhY2N1MSk7Ci0gICAgdG1wMiA9ICh0bXAwIC0gdG1wMSArIENhbGNMZERhdGEobGVuMSktQ2FsY0xkRGF0YShsZW4yKSk7Ci0gICAgZGVsdGEgPSBmaXhwX2FicyhmTXVsdCh0bXAyLCBGTDJGWENPTlNUX0RCTCgwLjY5MzE0NzE4MDZmKSkpOworICAgICNkZWZpbmUgTE4yIEZMMkZYQ09OU1RfREJMKDAuNjkzMTQ3MTgwNmYpIC8qIGxuKDIpICovCisgICAgdG1wMCA9IGZMb2cyKGFjY3UyLCBhY2N1X2UpIC0gZkxvZzIoYWNjdTEsIGFjY3VfZSk7CisgICAgdG1wMSA9IGZMb2cyKChGSVhQX0RCTClsZW4xLCAzMSkgLSBmTG9nMigoRklYUF9EQkwpbGVuMiwgMzEpOworICAgIGRlbHRhID0gZk11bHQoTE4yLCAodG1wMCArIHRtcDEpKTsKKyAgICBkZWx0YSA9IChGSVhQX0RCTClGREthYnMoIGRlbHRhICk7CiAKICAgICAvKiBXZWlnaHRpbmcgd2l0aCBhbXBsaXR1ZGUgcmF0aW8gb2YgdGhpcyBiYW5kICovCi0gICAgcmVzdWx0ID0gKEVuZXJneVRvdGFsID09IEZMMkZYQ09OU1RfREJMKDAuMGYpKQotICAgICAgICAgICAgPyBGTDJGWENPTlNUX0RCTCgwLmYpCi0gICAgICAgICAgICA6IEZES3NickVuY19MU0lfZGl2aWRlX3NjYWxlX2ZyYWN0KCAoYWNjdTErYWNjdTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRW5lcmd5VG90YWw+Pk5SR19TQ0FMRSkrKEZJWFBfREJMKTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGSVhQX0RCTClNQVhWQUxfREJMID4+IGZpeE1pbihzY2FsZUVuZXJnaWVzWzBdLChERlJBQ1RfQklUUy0xKSkgKTsKKyAgICBhY2N1X2UrKzsKKyAgICBhY2N1MT4+PTE7CisgICAgYWNjdTI+Pj0xOworICAgIGlmIChhY2N1X2UgJiAxKSB7CisgICAgICBhY2N1X2UrKzsKKyAgICAgIGFjY3UxPj49MTsKKyAgICAgIGFjY3UyPj49MTsKKyAgICB9CiAKLSAgICBkZWx0YV9zdW0gKz0gKEZJWFBfREJMKShmTXVsdChzcXJ0Rml4cChyZXN1bHQpLCBkZWx0YSkpOworICAgIGRlbHRhX3N1bSArPSBmTXVsdChzcXJ0Rml4cChhY2N1MSthY2N1MiksIGRlbHRhKTsKKyAgICAqcmVzdWx0X2UgPSAoKGFjY3VfZT4+MSkgKyBMRF9EQVRBX1NISUZUKTsKICAgfQogCisgIGVuZXJneVRvdGFsX2UrPTE7IC8qIGZvciBhIGRlZmluZWQgc3F1YXJlIHJlc3VsdCBleHBvbmVudCwgdGhlIGV4cG9uZW50IGhhcyB0byBiZSBldmVuICovCisgIEVuZXJneVRvdGFsPDw9MTsKKyAgZGVsdGFfc3VtID0gZk11bHQoZGVsdGFfc3VtLCBpbnZTcXJ0Tm9ybTIoRW5lcmd5VG90YWwsICZ0bXBfZSkpOworICAqcmVzdWx0X2UgPSAqcmVzdWx0X2UgKyAodG1wX2UtKGVuZXJneVRvdGFsX2U+PjEpKTsKKwogICByZXR1cm4gZk11bHQoZGVsdGFfc3VtLCBwb3Nfd2VpZ2h0KTsKKwogfQogCiAKQEAgLTE3NSw5ICsyMzEsMTIgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgXGJyaWVmICAgQ2FsY3VsYXRlcyB0b3RhbCBsb3diYW5kIGVuZXJneQogCi0gVGhlIHJldHVybiB2YWx1ZSBucmdUb3RhbCBpcyBzY2FsZWQgYnkgdGhlIGZhY3RvciAoMS8zMi4wKQorIFRoZSBpbnB1dCB2YWx1ZXMgRW5lcmdpZXNbMF0gKGxvdy1iYW5kKSBhcmUgc2NhbGVkIGJ5IHRoZSBmYWN0b3IKKyAyXigxNC0qc2NhbGVFbmVyZ2llc1swXSkKKyBUaGUgaW5wdXQgdmFsdWVzIEVuZXJnaWVzWzFdIChoaWdoLWJhbmQpIGFyZSBzY2FsZWQgYnkgdGhlIGZhY3RvcgorIDJeKDE0LSpzY2FsZUVuZXJnaWVzWzFdKQogCi0gXHJldHVybiAgdG90YWwgZW5lcmd5IGluIHRoZSBsb3diYW5kCisgXHJldHVybiAgdG90YWwgZW5lcmd5IGluIHRoZSBsb3diYW5kLCBzY2FsZWQgYnkgdGhlIGZhY3RvciAyXjE5CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIEZJWFBfREJMIGFkZExvd2JhbmRFbmVyZ2llcyhGSVhQX0RCTCAqKkVuZXJnaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgKnNjYWxlRW5lcmdpZXMsCkBAIC0xOTQsNiArMjUzLDcgQEAKICAgaW50IHRzLGs7CiAKICAgLyogU3VtIHVwIGxvd2JhbmQgZW5lcmd5IGZyb20gb25lIGZyYW1lIGF0IG9mZnNldCB0cmFuX29mZiAqLworICAvKiBmcmVxQmFuZFRhYmxlW0xPUkVTXSBoYXMgTUFYX0ZSRVFfQ09FRkZTLzIgKzEgY29lZWZzIG1heC4gKi8KICAgZm9yICh0cz10cmFuX29mZmRpdjI7IHRzPFlCdWZmZXJXcml0ZU9mZnNldDsgdHMrKykgewogICAgIGZvciAoayA9IDA7IGsgPCBmcmVxQmFuZFRhYmxlWzBdOyBrKyspIHsKICAgICAgIGFjY3UxICs9IEVuZXJnaWVzW3RzXVtrXSA+PiA2OwpAQCAtMjAxLDEyICsyNjEsMTIgQEAKICAgfQogICBmb3IgKDsgdHM8dHJhbl9vZmZkaXYyKyhzbG90cz4+bnJnU3pTaGlmdCk7IHRzKyspIHsKICAgICBmb3IgKGsgPSAwOyBrIDwgZnJlcUJhbmRUYWJsZVswXTsgaysrKSB7Ci0gICAgICBhY2N1MiArPSBFbmVyZ2llc1t0c11ba10gPj4gNjsKKyAgICAgIGFjY3UyICs9IEVuZXJnaWVzW3RzXVtrXSA+PiA5OwogICAgIH0KICAgfQogCi0gIG5yZ1RvdGFsID0gKCAoYWNjdTEgPj4gZml4TWluKHNjYWxlRW5lcmdpZXNbMF0sKERGUkFDVF9CSVRTLTEpKSkKLSAgICAgICAgICAgKyAgIChhY2N1MiA+PiBmaXhNaW4oc2NhbGVFbmVyZ2llc1sxXSwoREZSQUNUX0JJVFMtMSkpKSApIDw8ICgyKTsKKyAgbnJnVG90YWwgPSAoIHNjYWxlVmFsdWVTYXR1cmF0ZShhY2N1MSwgMS1zY2FsZUVuZXJnaWVzWzBdKSApCisgICAgICAgICAgICsgKCBzY2FsZVZhbHVlU2F0dXJhdGUoYWNjdTIsIDQtc2NhbGVFbmVyZ2llc1sxXSkgKTsKIAogICByZXR1cm4obnJnVG90YWwpOwogfQpAQCAtMjIyLDIxICsyODIsMjMgQEAKICBpcyAxIFNCUi1iYW5kLiBUaGVyZWZvcmUgdGhlIGRhdGEgdG8gYmUgZmVkIGludG8gdGhlIHNwZWN0cmFsQ2hhbmdlCiAgZnVuY3Rpb24gaXMgcmVkdWNlZC4KIAotIFRoZSB2YWx1ZXMgRW5lcmdpZXNNIGFyZSBzY2FsZWQgYnkgdGhlIGZhY3RvciAoMS8zMi4wKSBhbmQgc2NhbGVFbmVyZ2llc1swXQotIFRoZSByZXR1cm4gdmFsdWUgbnJnVG90YWwgaXMgc2NhbGVkIGJ5IHRoZSBmYWN0b3IgKDEvMzIuMCkKKyBUaGUgdmFsdWVzIEVuZXJnaWVzTSBhcmUgc2NhbGVkIGJ5IHRoZSBmYWN0b3IgKDJeMTktc2NhbGVFbmVyZ2llc1swXSkgZm9yCisgc2xvdHM8WUJ1ZmZlcldyaXRlT2Zmc2V0IGFuZCBieSB0aGUgZmFjdG9yICgyXjE5LXNjYWxlRW5lcmdpZXNbMV0pIGZvcgorIHNsb3RzPj1ZQnVmZmVyV3JpdGVPZmZzZXQuCiAKLSBccmV0dXJuICB0b3RhbCBlbmVyZ3kgaW4gdGhlIGhpZ2hiYW5kCisgXHJldHVybiAgdG90YWwgZW5lcmd5IGluIHRoZSBoaWdoYmFuZCwgc2NhbGVkIGJ5IGZhY3RvciAyXjE5CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgRklYUF9EQkwgYWRkSGlnaGJhbmRFbmVyZ2llcyhGSVhQX0RCTCAqKlJFU1RSSUNUIEVuZXJnaWVzLCAvKiE8IGlucHV0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgKnNjYWxlRW5lcmdpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgIFlCdWZmZXJXcml0ZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICAgRW5lcmdpZXNNW05VTUJFUl9USU1FX1NMT1RTXzIzMDRdW01BWF9GUkVRX0NPRUZGU10sIC8qITwgQ29tYmluZWQgb3V0cHV0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiAgICAgKlJFU1RSSUNUIGZyZXFCYW5kVGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgIG5TZmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICAgICAgIHNiclNsb3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgICAgICB0aW1lU3RlcCkKIHsKLSAgSU5UIGksaixrLHNsb3RJbixzbG90T3V0LHNjYWxlOworICBJTlQgaSxqLGssc2xvdEluLHNsb3RPdXQsc2NhbGVbMl07CiAgIElOVCBsaSx1aTsKICAgRklYUF9EQkwgbnJnVG90YWw7CiAgIEZJWFBfREJMIGFjY3UgPSBGTDJGWENPTlNUX0RCTCgwLjBmKTsKQEAgLTI0NSw3ICszMDcsNyBAQAogICAgICBjb21iaW5lIFFNRi1iYW5kcyB0byBTQlItYmFuZHMsCiAgICAgIGNvbWJpbmUgTGVmdCBhbmQgUmlnaHQgY2hhbm5lbCAqLwogICBmb3IgKHNsb3RPdXQ9MDsgc2xvdE91dDxzYnJTbG90czsgc2xvdE91dCsrKSB7Ci0gICAgc2xvdEluID0gMipzbG90T3V0OworICAgIHNsb3RJbiA9IHRpbWVTdGVwKnNsb3RPdXQ7CiAKICAgICBmb3IgKGo9MDsgajxuU2ZiOyBqKyspIHsKICAgICAgIGFjY3UgPSBGTDJGWENPTlNUX0RCTCgwLjBmKTsKQEAgLTI2MiwxOSArMzI0LDI5IEBACiAgICAgfQogICB9CiAKLSAgc2NhbGUgPSBmaXhNaW4oOCxzY2FsZUVuZXJnaWVzWzBdKTsgICAgICAvKiBzY2FsZSBlbmVyZ2llcyBkb3duIGJlZm9yZSBhZGQgdXAgKi8KKyAgLyogc2NhbGUgZW5lcmdpZXMgZG93biBiZWZvcmUgYWRkIHVwICovCisgIHNjYWxlWzBdID0gZml4TWluKDgsc2NhbGVFbmVyZ2llc1swXSk7CisgIHNjYWxlWzFdID0gZml4TWluKDgsc2NhbGVFbmVyZ2llc1sxXSk7CiAKLSAgaWYgKChzY2FsZUVuZXJnaWVzWzBdLTEpID4gKERGUkFDVF9CSVRTLTEpICkKKyAgaWYgKChzY2FsZUVuZXJnaWVzWzBdLXNjYWxlWzBdKSA+IChERlJBQ1RfQklUUy0xKSB8fCAoc2NhbGVFbmVyZ2llc1sxXS1zY2FsZVswXSkgPiAoREZSQUNUX0JJVFMtMSkpCiAgICAgbnJnVG90YWwgPSBGTDJGWENPTlNUX0RCTCgwLjBmKTsKICAgZWxzZSB7CiAgICAgLyogTm93IGFkZCBhbGwgZW5lcmdpZXMgKi8KICAgICBhY2N1ID0gRkwyRlhDT05TVF9EQkwoMC4wZik7Ci0gICAgZm9yIChzbG90T3V0PTA7IHNsb3RPdXQ8c2JyU2xvdHM7IHNsb3RPdXQrKykgeworCisgICAgZm9yIChzbG90T3V0PTA7IHNsb3RPdXQ8WUJ1ZmZlcldyaXRlT2Zmc2V0OyBzbG90T3V0KyspIHsKICAgICAgIGZvciAoaj0wOyBqPG5TZmI7IGorKykgewotICAgICAgICBhY2N1ICs9IChFbmVyZ2llc01bc2xvdE91dF1bal0gPj4gc2NhbGUpOworICAgICAgICBhY2N1ICs9IChFbmVyZ2llc01bc2xvdE91dF1bal0gPj4gc2NhbGVbMF0pOwogICAgICAgfQogICAgIH0KLSAgICBucmdUb3RhbCA9IGFjY3UgPj4gKHNjYWxlRW5lcmdpZXNbMF0tc2NhbGUpOworICAgIG5yZ1RvdGFsID0gYWNjdSA+PiAoc2NhbGVFbmVyZ2llc1swXS1zY2FsZVswXSk7CisKKyAgICBmb3IgKHNsb3RPdXQ9WUJ1ZmZlcldyaXRlT2Zmc2V0OyBzbG90T3V0PHNiclNsb3RzOyBzbG90T3V0KyspIHsKKyAgICAgIGZvciAoaj0wOyBqPG5TZmI7IGorKykgeworICAgICAgICBhY2N1ICs9IChFbmVyZ2llc01bc2xvdE91dF1bal0gPj4gc2NhbGVbMF0pOworICAgICAgfQorICAgIH0KKyAgICBucmdUb3RhbCA9IGFjY3UgPj4gKHNjYWxlRW5lcmdpZXNbMV0tc2NhbGVbMV0pOwogICB9CiAKICAgcmV0dXJuKG5yZ1RvdGFsKTsKQEAgLTI5OSwxOCArMzcxLDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgWUJ1ZmZlclN6U2hpZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgblNmYiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lU3RlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBub19jb2xzKQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vX2NvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBGSVhQX0RCTCogdG9uYWxpdHkpCiB7CiAgIGlmICh0cmFuX3ZlY3RvclsxXT09MCkgLyogbm8gdHJhbnNpZW50IHdhcyBkZXRlY3RlZCAqLwogICB7CiAgICAgRklYUF9EQkwgZGVsdGE7Ci0gICAgRklYUF9EQkwgRW5lcmdpZXNNW05VTUJFUl9USU1FX1NMT1RTXzIzMDRdW01BWF9GUkVRX0NPRUZGU107CisgICAgSU5UIGRlbHRhX2U7CisgICAgRklYUF9EQkwgKCpFbmVyZ2llc00pW01BWF9GUkVRX0NPRUZGU107CiAgICAgRklYUF9EQkwgRW5lcmd5VG90YWwsbmV3TG93YmFuZEVuZXJneSxuZXdIaWdoYmFuZEVuZXJneTsKICAgICBJTlQgYm9yZGVyOwogICAgIElOVCBzYnJTbG90cyA9IGZNdWx0SShHZXRJbnZJbnQodGltZVN0ZXApLG5vX2NvbHMpOworICAgIENfQUxMT0NfU0NSQVRDSF9TVEFSVChfRW5lcmdpZXNNLCBGSVhQX0RCTCwgTlVNQkVSX1RJTUVfU0xPVFNfMjMwNCpNQVhfRlJFUV9DT0VGRlMpCiAKICAgICBGREtfQVNTRVJUKCBzYnJTbG90cyAqIHRpbWVTdGVwID09IG5vX2NvbHMgKTsKIAorICAgIEVuZXJnaWVzTSA9IChGSVhQX0RCTCgqKVtNQVhfRlJFUV9DT0VGRlNdKV9FbmVyZ2llc007CisKICAgICAvKgogICAgICAgR2V0IExvd2JhbmQtZW5lcmd5IG92ZXIgYSByYW5nZSBvZiAyIGZyYW1lcyAoTG9vayBoYWxmIGEgZnJhbWUgYmFjayBhbmQgYWhlYWQpLgogICAgICovCkBAIC0zMjQsMTYgKzQwMSwxMyBAQAogCiAgICAgbmV3SGlnaGJhbmRFbmVyZ3kgPSBhZGRIaWdoYmFuZEVuZXJnaWVzKEVuZXJnaWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZUVuZXJnaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZQnVmZmVyV3JpdGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZXJnaWVzTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlcUJhbmRUYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblNmYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JyU2xvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTdGVwKTsKIAotICAgIGlmICggaF9zYnJUcmFuc2llbnREZXRlY3Rvci0+ZnJhbWVTaGlmdCAhPSAwICkgewotICAgICAgaWYgKHRyYW5fdmVjdG9yWzFdPT0wKQotICAgICAgICB0cmFuX3ZlY3RvclswXSA9IDA7Ci0gICAgfSBlbHNlCiAgICAgewogICAgICAgLyogcHJldkxvd0JhbmRFbmVyZ3k6IENvcnJlc3BvbmRzIHRvIDEgZnJhbWUsIHN0YXJ0aW5nIHdpdGggaGFsZiBhIGZyYW1lIGxvb2stYmVoaW5kCiAgICAgICAgICBuZXdMb3diYW5kRW5lcmd5OiAgQ29ycmVzcG9uZHMgdG8gMSBmcmFtZSwgc3RhcnRpbmcgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY3VycmVudCBmcmFtZSAqLwpAQCAtMzQzLDIzICs0MTcsMzkgQEAKICAgICAgICAgIG9mIGEgRklYRklYLWZyYW1lIHdpdGggMiBlbnZlbG9wZXMuICovCiAgICAgICBib3JkZXIgPSAoc2JyU2xvdHMrMSkgPj4gMTsKIAorICAgICAgaWYgKCAoSU5UKUVuZXJneVRvdGFsJjB4ZmZmZmZmZTAgJiYgKHNjYWxlRW5lcmdpZXNbMF08MzIgfHwgc2NhbGVFbmVyZ2llc1sxXTwzMikgKSAvKiBpLmUuID4gMzEgKi8gewogICAgICAgZGVsdGEgPSBzcGVjdHJhbENoYW5nZShFbmVyZ2llc00sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlRW5lcmdpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZXJneVRvdGFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuU2ZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiclNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUJ1ZmZlcldyaXRlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJTbG90cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVsdGEgPSBGTDJGWENPTlNUX0RCTCgwLjBmKTsKKyAgICAgICAgZGVsdGFfZSA9IDA7CiAKLSAgICAgIGlmIChkZWx0YSA+IChoX3NiclRyYW5zaWVudERldGVjdG9yLT5zcGxpdF90aHIgPj4gTERfREFUQV9TSElGVCkpIC8qIGRlbHRhIHNjYWxlZCBieSAxLzY0ICovCisgICAgICAgIC8qIHNldCB0b25hbGl0eSB0byAwIHdoZW4gZW5lcmd5IGlzIHZlcnkgbG93LCBzaW5jZSB0aGUgYW1wbGl0dWRlCisgICAgICAgICAgIHJlc29sdXRpb24gc2hvdWxkIHRoZW4gYmUgbG93IGFzIHdlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICp0b25hbGl0eSA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOworICAgICAgfQorCisKKyAgICAgIGlmICggZklzTGVzc1RoYW4oaF9zYnJUcmFuc2llbnREZXRlY3Rvci0+c3BsaXRfdGhyX20sIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3ItPnNwbGl0X3Rocl9lLCBkZWx0YSwgZGVsdGFfZSkgKSB7CiAgICAgICAgIHRyYW5fdmVjdG9yWzBdID0gMTsgLyogU2V0IGZsYWcgZm9yIHNwbGl0dGluZyAqLwotICAgICAgZWxzZQorICAgICAgfSBlbHNlIHsKICAgICAgICAgdHJhbl92ZWN0b3JbMF0gPSAwOworICAgICAgfQorCiAgICAgfQogCiAgICAgLyogVXBkYXRlIHByZXZMb3dCYW5kRW5lcmd5ICovCiAgICAgaF9zYnJUcmFuc2llbnREZXRlY3Rvci0+cHJldkxvd0JhbmRFbmVyZ3kgPSBuZXdMb3diYW5kRW5lcmd5OwogICAgIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3ItPnByZXZIaWdoQmFuZEVuZXJneSA9IG5ld0hpZ2hiYW5kRW5lcmd5OworICAgIENfQUxMT0NfU0NSQVRDSF9FTkQoX0VuZXJnaWVzTSwgRklYUF9EQkwsIE5VTUJFUl9USU1FX1NMT1RTXzIzMDQqTUFYX0ZSRVFfQ09FRkZTKQogICB9CiB9CiAKQEAgLTYzNiw2ICs3MjYsNyBAQAogCiBpbnQKIEZES3NickVuY19Jbml0U2JyVHJhbnNpZW50RGV0ZWN0b3IoSEFORExFX1NCUl9UUkFOU0lFTlRfREVURUNUT1IgaF9zYnJUcmFuc2llbnREZXRlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCAgc2JyU3ludGF4RmxhZ3MsIC8qIFNCUiBzeW50YXggZmxhZ3MgZGVyaXZlZCBmcm9tIEFPVC4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgZnJhbWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgICBzYW1wbGVGcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnJDb25maWd1cmF0aW9uUHRyIHBhcmFtcywKQEAgLTY0OSw4ICs3NDAsOCBAQAogewogICAgIElOVCB0b3RhbEJpdHJhdGUgPSBwYXJhbXMtPmNvZGVjU2V0dGluZ3Muc3RhbmRhcmRCaXRyYXRlICogcGFyYW1zLT5jb2RlY1NldHRpbmdzLm5DaGFubmVsczsKICAgICBJTlQgY29kZWNCaXRyYXRlID0gcGFyYW1zLT5jb2RlY1NldHRpbmdzLmJpdFJhdGU7Ci0gICAgRklYUF9EQkwgYml0cmF0ZUZhY3Rvcl9maXgsIGZyYW1lZHVyX2ZpeDsKLSAgICBJTlQgc2NhbGVfMCwgc2NhbGVfMTsKKyAgICBGSVhQX0RCTCBiaXRyYXRlRmFjdG9yX20sIGZyYW1lZHVyX2ZpeDsKKyAgICBJTlQgYml0cmF0ZUZhY3Rvcl9lLCB0bXBfZTsKIAogICAgIEZES21lbWNsZWFyKGhfc2JyVHJhbnNpZW50RGV0ZWN0b3Isc2l6ZW9mKFNCUl9UUkFOU0lFTlRfREVURUNUT1IpKTsKIApAQCAtNjU4LDExICs3NDksMTIgQEAKICAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT50cmFuX29mZiA9IHRyYW5fb2ZmOwogCiAgICAgaWYoY29kZWNCaXRyYXRlKSB7Ci0gICAgICBiaXRyYXRlRmFjdG9yX2ZpeCA9IGZEaXZOb3JtKChGSVhQX0RCTCl0b3RhbEJpdHJhdGUsIChGSVhQX0RCTCkoY29kZWNCaXRyYXRlPDwyKSwmc2NhbGVfMCk7CisgICAgICBiaXRyYXRlRmFjdG9yX20gPSBmRGl2Tm9ybSgoRklYUF9EQkwpdG90YWxCaXRyYXRlLCAoRklYUF9EQkwpKGNvZGVjQml0cmF0ZTw8MiksJmJpdHJhdGVGYWN0b3JfZSk7CisgICAgICBiaXRyYXRlRmFjdG9yX2UgKz0gMjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICBiaXRyYXRlRmFjdG9yX2ZpeCA9IEZMMkZYQ09OU1RfREJMKDEuMC80LjApOwotICAgICAgc2NhbGVfMCA9IDA7CisgICAgICBiaXRyYXRlRmFjdG9yX20gPSBGTDJGWENPTlNUX0RCTCgxLjAvNC4wKTsKKyAgICAgIGJpdHJhdGVGYWN0b3JfZSA9IDI7CiAgICAgfQogCiAgICAgZnJhbWVkdXJfZml4ID0gZkRpdk5vcm0oZnJhbWVTaXplLCBzYW1wbGVGcmVxKTsKQEAgLTY3NCw5ICs3NjYsMTMgQEAKICAgICBGSVhQX0RCTCB0bXAgPSBmcmFtZWR1cl9maXggLSBGTDJGWENPTlNUX0RCTCgwLjAxMCk7CiAKICAgICB0bXAgPSBmaXhNYXgodG1wLCBGTDJGWENPTlNUX0RCTCgwLjAwMDEpKTsKLSAgICB0bXAgPSBmRGl2Tm9ybShGTDJGWENPTlNUX0RCTCgwLjAwMDA3NSksIGZQb3cyKHRtcCksICZzY2FsZV8xKTsKKyAgICB0bXAgPSBmRGl2Tm9ybShGTDJGWENPTlNUX0RCTCgwLjAwMDA3NSksIGZQb3cyKHRtcCksICZ0bXBfZSk7CiAKLSAgICBzY2FsZV8xID0gLShzY2FsZV8xICsgc2NhbGVfMCArIDIpOworICAgIGJpdHJhdGVGYWN0b3JfZSA9ICh0bXBfZSArIGJpdHJhdGVGYWN0b3JfZSk7CisKKyAgaWYoc2JyU3ludGF4RmxhZ3MgJiBTQlJfU1lOVEFYX0xPV19ERUxBWSkgeworICAgIGJpdHJhdGVGYWN0b3JfZS0tOyAvKiBkaXZpZGUgYnkgMiAqLworICB9CiAKICAgICBGREtfQVNTRVJUKG5vX2NvbHMgPD0gUU1GX01BWF9USU1FX1NMT1RTKTsKICAgICBGREtfQVNTRVJUKG5vX3Jvd3MgPD0gUU1GX0NIQU5ORUxTKTsKQEAgLTY4NCwxNCArNzgwLDggQEAKICAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT5ub19jb2xzID0gbm9fY29sczsKICAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT50cmFuX3RociA9IChGSVhQX0RCTCkoKHBhcmFtcy0+dHJhbl90aHIgPDwgKDMyLTI0LTEpKSAvIG5vX3Jvd3MpOwogICAgIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3ItPnRyYW5fZmMgPSB0cmFuX2ZjOwotCi0gICAgaWYgKHNjYWxlXzE+PTApIHsKLSAgICAgIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3ItPnNwbGl0X3RociA9IGZNdWx0KHRtcCwgYml0cmF0ZUZhY3Rvcl9maXgpID4+IHNjYWxlXzE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgaF9zYnJUcmFuc2llbnREZXRlY3Rvci0+c3BsaXRfdGhyID0gZk11bHQodG1wLCBiaXRyYXRlRmFjdG9yX2ZpeCkgPDwgKC1zY2FsZV8xKTsKLSAgICB9Ci0KKyAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT5zcGxpdF90aHJfbSA9IGZNdWx0KHRtcCwgYml0cmF0ZUZhY3Rvcl9tKTsKKyAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT5zcGxpdF90aHJfZSA9IGJpdHJhdGVGYWN0b3JfZTsKICAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT5ub19yb3dzID0gbm9fcm93czsKICAgICBoX3NiclRyYW5zaWVudERldGVjdG9yLT5tb2RlID0gcGFyYW1zLT50cmFuX2RldF9tb2RlOwogICAgIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3ItPnByZXZMb3dCYW5kRW5lcmd5ID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CkBAIC02OTksMyArNzg5LDI4MSBAQAogICAgIHJldHVybiAoMCk7CiB9CiAKKworI2RlZmluZSBFTkVSR1lfU0NBTElOR19TSVpFIDMyCisKK0lOVCBGREtzYnJFbmNfSW5pdFNickZhc3RUcmFuc2llbnREZXRlY3RvcigKKyAgICAgICAgSEFORExFX0ZBU1RfVFJBTl9ERVQgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3IsCisgICAgICAgIGNvbnN0IElOVCB0aW1lX3Nsb3RzX3Blcl9mcmFtZSwKKyAgICAgICAgY29uc3QgSU5UIGJhbmR3aWR0aF9xbWZfc2xvdCwKKyAgICAgICAgY29uc3QgSU5UIG5vX3FtZl9jaGFubmVscywKKyAgICAgICAgY29uc3QgSU5UIHNicl9xbWZfMXN0X2JhbmQKKyAgICAgICAgKQoreworCisgIGludCBpLCBlOworICBpbnQgYnVmZl9zaXplOworICBGSVhQX0RCTCBteUV4cDsKKyAgRklYUF9EQkwgbXlFeHBTbG90OworCisgIGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5sb29rYWhlYWQgPSBUUkFOX0RFVF9MT09LQUhFQUQ7CisgIGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5uVGltZVNsb3RzID0gdGltZV9zbG90c19wZXJfZnJhbWU7CisKKyAgYnVmZl9zaXplID0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPm5UaW1lU2xvdHMgKyBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+bG9va2FoZWFkOworCisgIGZvcihpPTA7IGk8IGJ1ZmZfc2l6ZTsgaSsrKSB7CisgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmRlbHRhX2VuZXJneVtpXSA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOworICAgIGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5lbmVyZ3lfdGltZVNsb3RzW2ldID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmxvd3Bhc3NfZW5lcmd5W2ldID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnRyYW5zaWVudENhbmRpZGF0ZXNbaV0gPSAwOworICB9CisKKyAgRkRLX0FTU0VSVChiYW5kd2lkdGhfcW1mX3Nsb3QgPiAwLmYpOworICBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+c3RvcEJhbmQgID0gZk1pbihUUkFOX0RFVF9TVE9QX0ZSRVEvYmFuZHdpZHRoX3FtZl9zbG90LCBub19xbWZfY2hhbm5lbHMpOworICBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+c3RhcnRCYW5kID0gZk1pbihzYnJfcW1mXzFzdF9iYW5kLCBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+c3RvcEJhbmQgLSBUUkFOX0RFVF9NSU5fUU1GQkFORFMpOworCisgIEZES19BU1NFUlQoaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0YXJ0QmFuZCA8IG5vX3FtZl9jaGFubmVscyk7CisgIEZES19BU1NFUlQoaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0YXJ0QmFuZCA8IGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5zdG9wQmFuZCk7CisgIEZES19BU1NFUlQoaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0YXJ0QmFuZCA+IDEpOworICBGREtfQVNTRVJUKGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5zdG9wQmFuZCA+IDEpOworCisgIC8qIHRoZSBlbmVyZ3kgd2VpZ2h0aW5nIGFuZCBhZGRpbmcgdXAgaGFzIGEgaGVhZHJvb20gb2YgNiBCaXRzLAorICAgICBzbyB1cCB0byA2NCBiYW5kcyBjYW4gYmUgYWRkZWQgd2l0aG91dCBwb3RlbnRpYWwgb3ZlcmZsb3cuICovCisgIEZES19BU1NFUlQoaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0b3BCYW5kIC0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0YXJ0QmFuZCA8PSA2NCk7CisKKyAgLyogUU1GX0hQX2RCX1NMT1BFX0ZJWCBzYXlzIHRoYXQgd2Ugd2FudCBhIDIwIGRCIHBlciAxNiBrSHogSFAgZmlsdGVyLgorICAgICBUaGUgZm9sbG93aW5nIGxpbmVzIG1hcCB0aGlzIHRvIHRoZSBRTUYgYmFuZHdpZHRoLiAqLworICAjZGVmaW5lIEVYUF9FIDcgLyogUU1GX0NIQU5ORUxTICg9NjQpIG11bHRpcGxpY2F0aW9ucyBtYXgsIG1heC4gYWxsb3dlZCBzdW0gaXMgMC41ICovCisgIG15RXhwID0gZk11bHROb3JtKFFNRl9IUF9kQmRfU0xPUEVfRklYLCAoRklYUF9EQkwpYmFuZHdpZHRoX3FtZl9zbG90LCAmZSk7CisgIG15RXhwID0gc2NhbGVWYWx1ZVNhdHVyYXRlKG15RXhwLCBlKzArREZSQUNUX0JJVFMtMS1FWFBfRSk7CisgIG15RXhwU2xvdCA9IG15RXhwOworCisgIGZvcihpPTA7IGk8UU1GX0NIQU5ORUxTOyBpKyspeworICAgIC8qIENhbGN1bGF0ZSBkQmYgb3ZlciBhbGwgcW1mIGJhbmRzOgorICAgICAgIGRCZiA9ICgxMF4oMC4wMDIyNjZmLzEwKmJ3KHNsb3QpKSleKGJhbmQpID0KKyAgICAgICAgICAgPSAyXihsb2cyKDEwKSowLjAwMjI2NmYvMTAqYncoc2xvdCkqYmFuZCkgPQorICAgICAgICAgICA9IDJeKDAuMDAwNzUyNzVmKmJ3KHNsb3QpKmJhbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgRklYUF9EQkwgZEJmX207ICAgICAgICAvKiBkQmYgbWFudGlzc2EgICAgICAgICovCisgICAgSU5UIGRCZl9lOyAgICAgICAgICAgICAvKiBkQmYgZXhwb25lbnQgICAgICAgICovCisgICAgSU5UIHRtcDsKKworICAgIElOVCBkQmZfaW50OyAgICAgICAgICAgLyogZEJmIGludGVnZXIgcGFydCAgICAqLworICAgIEZJWFBfREJMIGRCZl9mcmFjdDsgICAgLyogZEJmIGZyYWN0aW9uYWwgcGFydCAqLworCisgICAgLyogbXlFeHAqKGkrMSkgPSBteUV4cF9pbnQgLSBteUV4cF9mcmFjdAorICAgICAgIG15RXhwKihpKzEpIGlzIHNwbGl0IHVwIGhlcmUgZm9yIGJldHRlciBhY2N1cmFjeSBvZiBDYWxjSW52TGREYXRhKCksCisgICAgICAgZm9yIGl0cyByZXN1bHQgY2FuIGJlIHNwbGl0IHVwIGludG8gYW4gaW50ZWdlciBhbmQgYSBmcmFjdGlvbmFsIHBhcnQgKi8KKworICAgIC8qIFJvdW5kIHVwIHRvIG5leHQgaW50ZWdlciAqLworICAgIEZJWFBfREJMIG15RXhwX2ludCAgID0gKG15RXhwU2xvdCAmIChGSVhQX0RCTCkweGZlMDAwMDAwKSArIChGSVhQX0RCTCkweDAyMDAwMDAwOworCisgICAgLyogVGhpcyBpcyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHRoYXQgbmVlZHMgdG8gYmUgc3Vic3RyYWN0ZWQgKi8KKyAgICBGSVhQX0RCTCBteUV4cF9mcmFjdCA9IG15RXhwX2ludCAtIG15RXhwU2xvdDsKKworICAgIC8qIENhbGMgaW50ZWdlciBwYXJ0ICovCisgICAgZEJmX2ludCAgID0gQ2FsY0ludkxkRGF0YShteUV4cF9pbnQpOworICAgIC8qIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgcmUtc2NhbGVkLiBUaGUgbGQobXlFeHBfaW50KSBoYWQgYmVlbiBzY2FsZWQgYnkgRVhQX0UsCisgICAgICAgdGhlIENhbGNJbnZMZERhdGEgZXhwZWN0cyB0aGUgb3BlcmFuZCB0byBiZSBzY2FsZWQgYnkgTERfREFUQV9TSElGVC4KKyAgICAgICBUaGVyZWZvcmUsIHRoZSBjb3JyZWN0bHkgc2NhbGVkIHJlc3VsdCBpcyBkQmZfaW50XigyXihFWFBfRS1MRF9EQVRBX1NISUZUKSksCisgICAgICAgd2hpY2ggaXMgZEJmX2ludF4yICovCisgICAgZEJmX2ludCAgKj0gZEJmX2ludDsKKworICAgIC8qIENhbGMgZnJhY3Rpb25hbCBwYXJ0ICovCisgICAgZEJmX2ZyYWN0ID0gQ2FsY0ludkxkRGF0YSgtbXlFeHBfZnJhY3QpOworICAgIC8qIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgcmUtc2NhbGVkLiBUaGUgbGQobXlFeHBfZnJhY3QpIGhhZCBiZWVuIHNjYWxlZCBieSBFWFBfRSwKKyAgICAgICB0aGUgQ2FsY0ludkxkRGF0YSBleHBlY3RzIHRoZSBvcGVyYW5kIHRvIGJlIHNjYWxlZCBieSBMRF9EQVRBX1NISUZULgorICAgICAgIFRoZXJlZm9yZSwgdGhlIGNvcnJlY3RseSBzY2FsZWQgcmVzdWx0IGlzIGRCZl9mcmFjdF4oMl4oRVhQX0UtTERfREFUQV9TSElGVCkpLAorICAgICAgIHdoaWNoIGlzIGRCZl9mcmFjdF4yICovCisgICAgZEJmX2ZyYWN0ID0gZk11bHROb3JtKGRCZl9mcmFjdCwgZEJmX2ZyYWN0LCAmdG1wKTsKKworICAgIC8qIEdldCB3b3JzdCBjYXNlIHNjYWxpbmcgb2YgbXVsdGlwbGljYXRpb24gcmVzdWx0ICovCisgICAgZEJmX2UgPSAoREZSQUNUX0JJVFMtMSAtIHRtcCkgLSBDb3VudExlYWRpbmdCaXRzKGRCZl9pbnQpOworCisgICAgLyogTm93IG11bHRpcGx5IGludGVnZXIgd2l0aCBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHJlc3VsdCwgdGh1cyByZXN1bHRpbmcKKyAgICAgICBpbiB0aGUgb3ZlcmFsbCBhY2N1cmF0ZSBmcmFjdGlvbmFsIHJlc3VsdCAqLworICAgIGRCZl9tID0gZk11bHROb3JtKGRCZl9pbnQsIGRCZl9mcmFjdCwgJmUpOworICAgIGRCZl9tID0gc2NhbGVWYWx1ZVNhdHVyYXRlKGRCZl9tLCBlK0RGUkFDVF9CSVRTLTErdG1wLWRCZl9lKTsKKyAgICBteUV4cFNsb3QgKz0gbXlFeHA7CisKKyAgICAvKiBLZWVwIHRoZSByZXN1bHRzICovCisgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmRCZl9tW2ldID0gZEJmX207CisgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmRCZl9lW2ldID0gZEJmX2U7CisKKyAgfQorCisgIC8qIE1ha2Ugc3VyZSB0aGF0IGRCZiBpcyBncmVhdGVyIHRoYW4gMS4wIChiZWNhdXNlIGl0IHNob3VsZCBiZSBhIGhpZ2hwYXNzKSAqLworICAvKiAuLi4gKi8KKworICByZXR1cm4gMDsKK30KKwordm9pZCBGREtzYnJFbmNfZmFzdFRyYW5zaWVudERldGVjdCgKKyAgICAgICAgY29uc3QgSEFORExFX0ZBU1RfVFJBTl9ERVQgICAgICAgICAgaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3IsCisgICAgICAgIGNvbnN0IEZJWFBfREJMICAgICAgICAgICAgICAqY29uc3QgKkVuZXJnaWVzLAorICAgICAgICBjb25zdCBpbnQgICAgICAgICAgICAgICAgICAgKmNvbnN0ICBzY2FsZUVuZXJnaWVzLAorICAgICAgICBjb25zdCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICBZQnVmZmVyV3JpdGVPZmZzZXQsCisgICAgICAgICAgICAgIFVDSEFSICAgICAgICAgICAgICAgICAqY29uc3QgIHRyYW5fdmVjdG9yCisgICAgICAgICkKK3sKKyAgaW50IHRpbWVTbG90LCBiYW5kOworCisgIEZJWFBfREJMIG1heF9kZWx0YV9lbmVyZ3k7ICAgLyogaGVscGVyIHRvIHN0b3JlIG1heGltdW0gZW5lcmd5IHJhdGlvICAgICAgICAgICovCisgIGludCBtYXhfZGVsdGFfZW5lcmd5X3NjYWxlOyAgLyogaGVscGVyIHRvIHN0b3JlIHNjYWxlIG9mIG1heGltdW0gZW5lcmd5IHJhdGlvICovCisgIGludCBpbmRfbWF4ICAgICAgICAgICAgID0gMDsgLyogaGVscGVyIHRvIHN0b3JlIGluZGV4IG9mIG1heGltdW0gZW5lcmd5IHJhdGlvICovCisgIGludCBpc1RyYW5zaWVudEluRnJhbWUgID0gMDsKKworICBjb25zdCBpbnQgblRpbWVTbG90cyAgICAgICAgID0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPm5UaW1lU2xvdHM7CisgIGNvbnN0IGludCBsb29rYWhlYWQgICAgICAgICAgPSBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+bG9va2FoZWFkOworICBjb25zdCBpbnQgc3RhcnRCYW5kICAgICAgICAgID0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnN0YXJ0QmFuZDsKKyAgY29uc3QgaW50IHN0b3BCYW5kICAgICAgICAgICA9IGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5zdG9wQmFuZDsKKworICBpbnQgKiB0cmFuc2llbnRDYW5kaWRhdGVzICAgID0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPnRyYW5zaWVudENhbmRpZGF0ZXM7CisKKyAgRklYUF9EQkwgKiBlbmVyZ3lfdGltZVNsb3RzICA9IGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5lbmVyZ3lfdGltZVNsb3RzOworICBpbnQgKiBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlID0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmVuZXJneV90aW1lU2xvdHNfc2NhbGU7CisKKyAgRklYUF9EQkwgKiBkZWx0YV9lbmVyZ3kgICAgICA9IGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLT5kZWx0YV9lbmVyZ3k7CisgIGludCAqIGRlbHRhX2VuZXJneV9zY2FsZSAgICAgPSBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+ZGVsdGFfZW5lcmd5X3NjYWxlOworCisgIGNvbnN0IEZJWFBfREJMIHRociAgICAgICAgICAgPSBUUkFOX0RFVF9USFJTSExEOworICBjb25zdCBJTlQgICAgICB0aHJfc2NhbGUgICAgID0gVFJBTl9ERVRfVEhSU0hMRF9TQ0FMRTsKKworICAvKnJlc2V0IHRyYW5zaWVudCBpbmZvKi8KKyAgdHJhbl92ZWN0b3JbMl0gPSAwOworCisgIC8qIHJlc2V0IHRyYW5zaWVudCBjYW5kaWRhdGVzICovCisgIEZES21lbWNsZWFyKHRyYW5zaWVudENhbmRpZGF0ZXMrbG9va2FoZWFkLCBuVGltZVNsb3RzKnNpemVvZihpbnQpKTsKKworICBmb3IodGltZVNsb3QgPSBsb29rYWhlYWQ7IHRpbWVTbG90IDwgblRpbWVTbG90cyArIGxvb2thaGVhZDsgdGltZVNsb3QrKykgeworICAgIGludCBpLCBub3JtOworICAgIEZJWFBfREJMIHRtcEUgICAgICAgICAgID0gRkwyRlhDT05TVF9EQkwoMC4wZik7CisgICAgaW50IGhlYWRyb29tRW5TbG90ICAgICAgPSBERlJBQ1RfQklUUy0xOworCisgICAgRklYUF9EQkwgc21hbGxOUkcgPSBGTDJGWENPTlNUX0RCTCgxZS0yZik7CisgICAgRklYUF9EQkwgZGVub21pbmF0b3I7CisgICAgSU5UIGRlbm9taW5hdG9yX3NjYWxlOworCisgICAgLyogZGV0ZXJtaW5lIG1pbmltdW0gaGVhZHJvb20gb2YgZW5lcmd5IHZhbHVlcyBmb3IgdGhpcyB0aW1lc2xvdCAqLworICAgIGZvcihiYW5kID0gc3RhcnRCYW5kOyBiYW5kIDwgc3RvcEJhbmQ7IGJhbmQrKykgeworICAgICAgaW50IHRtcF9oZWFkcm9vbSA9IGZOb3JteihFbmVyZ2llc1t0aW1lU2xvdF1bYmFuZF0pLTE7CisgICAgICBpZih0bXBfaGVhZHJvb20gPCBoZWFkcm9vbUVuU2xvdCl7CisgICAgICAgIGhlYWRyb29tRW5TbG90ID0gdG1wX2hlYWRyb29tOworICAgICAgfQorICAgIH0KKworICAgIGZvcihpID0gMCwgYmFuZCA9IHN0YXJ0QmFuZDsgYmFuZCA8IHN0b3BCYW5kOyBiYW5kKyssIGkrKykgeworICAgICAgLyogZW5lcmd5IGlzIHdlaWdodGVkIGJ5IHdlaWdodGluZ2ZhY3RvciBzdG9yZWQgaW4gZEJmX20gYXJyYXkgKi8KKyAgICAgIC8qIGRCZl9tIGluZGV4IHJ1bnMgZnJvbSAwIHRvIHN0b3BCYW5kLXN0YXJ0YmFuZCAgICAgICAgICAgICAgICovCisgICAgICAvKiBlbmVyZ3kgc2hpZnRlZCBieSBjYWxjdWxhdGVkIGhlYWRyb29tIGZvciBtYXhpbXVtIHByZWNpc2lvbiAqLworICAgICAgRklYUF9EQkwgd2VpZ2h0ZWRFbmVyZ3kgPSBmTXVsdChFbmVyZ2llc1t0aW1lU2xvdF1bYmFuZF08PGhlYWRyb29tRW5TbG90LCBoX3NickZhc3RUcmFuc2llbnREZXRlY3Rvci0+ZEJmX21baV0pOworCisgICAgICAvKiBlbmVyZ3kgaXMgYWRkZWQgdXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgLyogc2hpZnQgYnkgNiB0byBoYXZlIGEgaGVhZHJvb20gZm9yIG1heGltdW0gNjQgYWRkaXRpb25zICAgICAgICAgICAgKi8KKyAgICAgIC8qIHNoaWZ0IGJ5IGRCZl9lIHRvIGhhbmRsZSB3ZWlnaHRpbmcgZmFjdG9yIGRlcGVuZGVudCBzY2FsZSBmYWN0b3JzICovCisgICAgICB0bXBFICs9IHdlaWdodGVkRW5lcmd5ID4+ICg2ICsgKDEwIC0gaF9zYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3ItPmRCZl9lW2ldKSk7CisgICAgfQorCisgICAgLyogc3RvcmUgY2FsY3VsYXRlZCBlbmVyZ3kgZm9yIHRpbWVzbG90ICovCisgICAgZW5lcmd5X3RpbWVTbG90c1t0aW1lU2xvdF0gPSB0bXBFOworCisgICAgLyogY2FsY3VsYXRlIG92ZXJhbGwgc2NhbGUgZmFjdG9yIGZvciBlbmVyZ3kgb2YgdGhpcyB0aW1lc2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qID0gICBvcmlnaW5hbCBzY2FsZSBmYWN0b3Igb2YgZW5lcmdpZXMgKC1zY2FsZUVuZXJnaWVzWzBdKzIqUU1GX1NDQUxFX09GRlNFVCBvciAtc2NhbGVFbmVyZ2llc1sxXSsyKlFNRl9TQ0FMRV9PRkZTRVQgICAgKi8KKyAgICAvKiAgICAgZGVwZW5kaW5nIG9uIFlCdWZmZXJXcml0ZU9mZnNldCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogICArIHdlaWdodGluZyBmYWN0b3Igc2NhbGUgICAgICAgICAgICAoMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qICAgKyBhZGRpbmcgdXAgc2NhbGUgZmFjdG9yICAgICAgICAgICAgKCA2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgIC0gaGVhZHJvb20gb2YgZW5lcmd5IHZhbHVlICAgICAgICAgIChoZWFkcm9vbUVuU2xvdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaWYodGltZVNsb3QgPCBZQnVmZmVyV3JpdGVPZmZzZXQpeworICAgICAgZW5lcmd5X3RpbWVTbG90c19zY2FsZVt0aW1lU2xvdF0gPSAoLXNjYWxlRW5lcmdpZXNbMF0rMipRTUZfU0NBTEVfT0ZGU0VUKSArICgxMCs2KSAtIGhlYWRyb29tRW5TbG90OworICAgIH0gZWxzZSB7CisgICAgICBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90XSA9ICgtc2NhbGVFbmVyZ2llc1sxXSsyKlFNRl9TQ0FMRV9PRkZTRVQpICsgKDEwKzYpIC0gaGVhZHJvb21FblNsb3Q7CisgICAgfQorCisgICAgLyogQWRkIGEgc21hbGwgZW5lcmd5IHRvIHRoZSBkZW5vbWluYXRvciwgdGh1cyBtYWtpbmcgdGhlIHRyYW5zaWVudAorICAgICAgIGRldGVjdGlvbiBlbmVyZ3ktZGVwZW5kZW50LiBMb3VkIHRyYW5zaWVudHMgYXJlIGJlaW5nIGRldGVjdGVkLAorICAgICAgIHNpbGVudCBvbmVzIG5vdC4gKi8KKworICAgIC8qIG1ha2Ugc3VyZSB0aGF0IHNtYWxsTlJHIGRvZXMgbm90IG92ZXJmbG93ICovCisgICAgaWYgKCAtZW5lcmd5X3RpbWVTbG90c19zY2FsZVt0aW1lU2xvdC0xXSArIDEgPiA1ICkKKyAgICB7CisgICAgICBkZW5vbWluYXRvciA9IHNtYWxsTlJHOworICAgICAgZGVub21pbmF0b3Jfc2NhbGUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAvKiBMZWF2ZSBhbiBhZGRpdGlvbmFsIGhlYWRyb29tIG9mIDEgYml0IGZvciB0aGlzIGFkZGl0aW9uLiAqLworICAgICAgc21hbGxOUkcgPSBzY2FsZVZhbHVlKHNtYWxsTlJHLCAtKGVuZXJneV90aW1lU2xvdHNfc2NhbGVbdGltZVNsb3QtMV0gKyAxKSk7CisgICAgICBkZW5vbWluYXRvciA9IChlbmVyZ3lfdGltZVNsb3RzW3RpbWVTbG90LTFdPj4xKSArIHNtYWxsTlJHOworICAgICAgZGVub21pbmF0b3Jfc2NhbGUgPSBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90LTFdKzE7CisgICAgfQorCisgICAgZGVsdGFfZW5lcmd5W3RpbWVTbG90XSA9IGZEaXZOb3JtKGVuZXJneV90aW1lU2xvdHNbdGltZVNsb3RdLCBkZW5vbWluYXRvciwgJm5vcm0pOworICAgIGRlbHRhX2VuZXJneV9zY2FsZVt0aW1lU2xvdF0gPSBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90XSAtIGRlbm9taW5hdG9yX3NjYWxlICsgbm9ybTsKKyAgfQorCisgIC8qZ2V0IHRyYW5zaWVudCBjYW5kaWRhdGVzKi8KKyAgLyogRm9yIGV2ZXJ5IHRpbWVzbG90LCBjaGVjayBpZiBkZWx0YShFKSBleGNlZWRzIHRoZSB0aHJlc2hvbGQuIElmIGl0IGRpZCwKKyAgICAgaXQgY291bGQgcG90ZW50aWFsbHkgYmUgbWFya2VkIGFzIGEgdHJhbnNpZW50IGNhbmRpZGF0ZS4gSG93ZXZlciwgdGhlIDIKKyAgICAgc2xvdHMgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSBtdXN0IG5vdCBiZSB0cmFuc2llbnRzIHdpdGggYW4gZW5lcmd5IGhpZ2hlcgorICAgICB0aGFuIDEuNCpFKGN1cnJlbnQpLiBJZiBib3RoIGFyZW4ndCB0cmFuc2llbnRzIG9yIGlmIHRoZSBlbmVyZ3kgb2YgdGhlCisgICAgIGN1cnJlbnQgdGltZXNvbG90IGlzIG1vcmUgdGhhbiAxLjQgdGltZXMgaGlnaGVyIHRoYW4gdGhlIGVuZXJneSBpbiB0aGUKKyAgICAgbGFzdCBvciB0aGUgb25lIGJlZm9yZSB0aGUgbGFzdCBzbG90LCBpdCBpcyBtYXJrZWQgYXMgYSB0cmFuc2llbnQuKi8KKworICBGREtfQVNTRVJUKGxvb2thaGVhZCA+PSAyKTsKKyAgZm9yKHRpbWVTbG90ID0gbG9va2FoZWFkOyB0aW1lU2xvdCA8IG5UaW1lU2xvdHMgKyBsb29rYWhlYWQ7IHRpbWVTbG90KyspIHsKKyAgICBGSVhQX0RCTCBlbmVyZ3lfY3VyX3Nsb3Rfd2VpZ2h0ZWQgPSBmTXVsdChlbmVyZ3lfdGltZVNsb3RzW3RpbWVTbG90XSxGTDJGWENPTlNUX0RCTCgxLjBmLzEuNGYpKTsKKyAgICBpZiggIWZJc0xlc3NUaGFuKGRlbHRhX2VuZXJneVt0aW1lU2xvdF0sIGRlbHRhX2VuZXJneV9zY2FsZVt0aW1lU2xvdF0sIHRociwgdGhyX3NjYWxlKSAmJgorICAgICAgICAoICgodHJhbnNpZW50Q2FuZGlkYXRlc1t0aW1lU2xvdC0yXT09MCkgJiYgKHRyYW5zaWVudENhbmRpZGF0ZXNbdGltZVNsb3QtMV09PTApKSB8fAorICAgICAgICAgICFmSXNMZXNzVGhhbihlbmVyZ3lfY3VyX3Nsb3Rfd2VpZ2h0ZWQsIGVuZXJneV90aW1lU2xvdHNfc2NhbGVbdGltZVNsb3RdLCBlbmVyZ3lfdGltZVNsb3RzW3RpbWVTbG90LTFdLCBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90LTFdICkgfHwKKyAgICAgICAgICAhZklzTGVzc1RoYW4oZW5lcmd5X2N1cl9zbG90X3dlaWdodGVkLCBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90XSwgZW5lcmd5X3RpbWVTbG90c1t0aW1lU2xvdC0yXSwgZW5lcmd5X3RpbWVTbG90c19zY2FsZVt0aW1lU2xvdC0yXSApCisgICAgICAgICkKKyAgICAgICkKK3sKKyAgICAgIC8qIGluIGNhc2Ugb2Ygc3Ryb25nIHRyYW5zaWVudHMsIHN1YnNlcXVlbnQKKyAgICAgICAqIHFtZiBzbG90cyBtaWdodCBiZSByZWNvZ25pemVkIGFzIHRyYW5zaWVudHMuICovCisgICAgICB0cmFuc2llbnRDYW5kaWRhdGVzW3RpbWVTbG90XSA9IDE7CisgICAgfQorICB9CisKKyAgLypnZXQgdHJhbnNpZW50IHdpdGggbWF4IGVuZXJneSovCisgIG1heF9kZWx0YV9lbmVyZ3kgICA9IEZMMkZYQ09OU1RfREJMKDAuMGYpOworICBtYXhfZGVsdGFfZW5lcmd5X3NjYWxlID0gMDsKKyAgaW5kX21heCA9IDA7CisgIGlzVHJhbnNpZW50SW5GcmFtZSA9IDA7CisgIGZvcih0aW1lU2xvdCA9IDA7IHRpbWVTbG90IDwgblRpbWVTbG90czsgdGltZVNsb3QrKykgeworICAgIGludCBzY2FsZSA9IGZNYXgoZGVsdGFfZW5lcmd5X3NjYWxlW3RpbWVTbG90XSwgbWF4X2RlbHRhX2VuZXJneV9zY2FsZSk7CisgICAgaWYodHJhbnNpZW50Q2FuZGlkYXRlc1t0aW1lU2xvdF0gJiYgKCAoZGVsdGFfZW5lcmd5W3RpbWVTbG90XSA+PiAoc2NhbGUgLSBkZWx0YV9lbmVyZ3lfc2NhbGVbdGltZVNsb3RdKSkgPiAobWF4X2RlbHRhX2VuZXJneSA+PiAoc2NhbGUgLSBtYXhfZGVsdGFfZW5lcmd5X3NjYWxlKSkgKSApIHsKKyAgICAgIG1heF9kZWx0YV9lbmVyZ3kgICA9IGRlbHRhX2VuZXJneVt0aW1lU2xvdF07CisgICAgICBtYXhfZGVsdGFfZW5lcmd5X3NjYWxlID0gc2NhbGU7CisgICAgICBpbmRfbWF4ICAgICAgICAgICAgPSB0aW1lU2xvdDsKKyAgICAgIGlzVHJhbnNpZW50SW5GcmFtZSA9IDE7CisgICAgfQorICB9CisKKyAgLypmcm9tIGFsbCB0cmFuc2llbnQgY2FuZGlkYXRlcyB0YWtlIHRoZSBvbmUgd2l0aCB0aGUgYmlnZ2VzdCBlbmVyZ3kqLworICBpZihpc1RyYW5zaWVudEluRnJhbWUpIHsKKyAgICB0cmFuX3ZlY3RvclswXSA9IGluZF9tYXg7CisgICAgdHJhbl92ZWN0b3JbMV0gPSAxOworICB9IGVsc2UgeworICAgIC8qcmVzZXQgdHJhbnNpZW50IGluZm8qLworICAgIHRyYW5fdmVjdG9yWzBdID0gdHJhbl92ZWN0b3JbMV0gPSAwOworICB9CisKKyAgLypjaGVjayBmb3IgdHJhbnNpZW50cyBpbiBsb29rYWhlYWQqLworICBmb3IodGltZVNsb3QgPSBuVGltZVNsb3RzOyB0aW1lU2xvdCA8IG5UaW1lU2xvdHMgKyBsb29rYWhlYWQ7IHRpbWVTbG90KyspIHsKKyAgICBpZih0cmFuc2llbnRDYW5kaWRhdGVzW3RpbWVTbG90XSkgeworICAgICAgdHJhbl92ZWN0b3JbMl0gPSAxOworICAgIH0KKyAgfQorCisgIC8qdXBkYXRlIGJ1ZmZlcnMqLworICBmb3IodGltZVNsb3QgPSAwOyB0aW1lU2xvdCA8IGxvb2thaGVhZDsgdGltZVNsb3QrKykgeworICAgIHRyYW5zaWVudENhbmRpZGF0ZXNbdGltZVNsb3RdID0gdHJhbnNpZW50Q2FuZGlkYXRlc1tuVGltZVNsb3RzICsgdGltZVNsb3RdOworCisgICAgLyogZml4cG9pbnQgc3R1ZmYgKi8KKyAgICBlbmVyZ3lfdGltZVNsb3RzW3RpbWVTbG90XSAgICA9IGVuZXJneV90aW1lU2xvdHNbblRpbWVTbG90cyArIHRpbWVTbG90XTsKKyAgICBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW3RpbWVTbG90XSAgPSBlbmVyZ3lfdGltZVNsb3RzX3NjYWxlW25UaW1lU2xvdHMgKyB0aW1lU2xvdF07CisKKyAgICBkZWx0YV9lbmVyZ3lbdGltZVNsb3RdICAgICA9IGRlbHRhX2VuZXJneVtuVGltZVNsb3RzICsgdGltZVNsb3RdOworICAgIGRlbHRhX2VuZXJneV9zY2FsZVt0aW1lU2xvdF0gICA9IGRlbHRhX2VuZXJneV9zY2FsZVtuVGltZVNsb3RzICsgdGltZVNsb3RdOworICB9Cit9CisKZGlmZiAtLWdpdCBhL2xpYlNCUmVuYy9zcmMvdHJhbl9kZXQuaCBiL2xpYlNCUmVuYy9zcmMvdHJhbl9kZXQuaAppbmRleCA5NWI1ZDJlLi42ZmUxMDIzIDEwMDY0NAotLS0gYS9saWJTQlJlbmMvc3JjL3RyYW5fZGV0LmgKKysrIGIvbGliU0JSZW5jL3NyYy90cmFuX2RldC5oCkBAIC0yLDcgKzIsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAogCi2pIENvcHlyaWdodCAgMTk5NSAtIDIwMTMgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KK6kgQ29weXJpZ2h0ICAxOTk1IC0gMjAxNSBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgogICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgMS4gICAgSU5UUk9EVUNUSU9OCkBAIC05Niw3ICs5Niw4IEBACiAgIEZJWFBfREJMICB0cmFuc2llbnRzW1FNRl9NQVhfVElNRV9TTE9UUysoUU1GX01BWF9USU1FX1NMT1RTLzIpXTsKICAgRklYUF9EQkwgIHRocmVzaG9sZHNbUU1GX0NIQU5ORUxTXTsKICAgRklYUF9EQkwgIHRyYW5fdGhyOyAgICAgICAgICAgICAgLyogTWFzdGVyIHRocmVzaG9sZCBmb3IgdHJhbnNpZW50IHNpZ25hbHMgKi8KLSAgRklYUF9EQkwgIHNwbGl0X3RocjsgICAgICAgICAgICAgLyogVGhyZXNob2xkIGZvciBzcGxpdHRpbmcgRklYRklYLWZyYW1lcyBpbnRvIDIgZW52ICovCisgIEZJWFBfREJMICBzcGxpdF90aHJfbTsgICAgICAgICAgIC8qIFRocmVzaG9sZCBmb3Igc3BsaXR0aW5nIEZJWEZJWC1mcmFtZXMgaW50byAyIGVudiAqLworICBJTlQgICAgICAgc3BsaXRfdGhyX2U7ICAgICAgICAgICAvKiBTY2FsZSBmb3Igc3BsaXR0aW5nIHRocmVzaG9sZCAqLwogICBGSVhQX0RCTCAgcHJldkxvd0JhbmRFbmVyZ3k7ICAgICAvKiBFbmVyZ3kgb2YgbG93IGJhbmQgKi8KICAgRklYUF9EQkwgIHByZXZIaWdoQmFuZEVuZXJneTsgICAgLyogRW5lcmd5IG9mIGhpZ2ggYmFuZCAqLwogICBJTlQgICAgdHJhbl9mYzsgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgbG93YmFuZCBzdWJiYW5kcyB0byBkaXNjYXJkICAqLwpAQCAtMTEyLDYgKzExMyw1NyBAQAogCiB0eXBlZGVmIFNCUl9UUkFOU0lFTlRfREVURUNUT1IgKkhBTkRMRV9TQlJfVFJBTlNJRU5UX0RFVEVDVE9SOwogCisjZGVmaW5lIFRSQU5fREVUX0xPT0tBSEVBRCAyCisjZGVmaW5lIFRSQU5fREVUX1NUQVJUX0ZSRVEgNDUwMCAgLypzdGFydCBmcmVxdWVuY3kgZm9yIHRyYW5zaWVudCBkZXRlY3Rpb24qLworI2RlZmluZSBUUkFOX0RFVF9TVE9QX0ZSRVEgIDEzNTAwIC8qc3RvcCBmcmVxdWVuY3kgZm9yIHRyYW5zaWVudCBkZXRlY3Rpb24qLworI2RlZmluZSBUUkFOX0RFVF9NSU5fUU1GQkFORFMgNCAvKiBtaW5pbXVtIHFtZiBiYW5kcyBmb3IgdHJhbnNpZW50IGRldGVjdGlvbiAqLworI2RlZmluZSBRTUZfSFBfZEJkX1NMT1BFX0ZJWCBGTDJGWENPTlNUX0RCTCgwLjAwMDc1Mjc1ZikgLyogMC4wMDIyNjZmLzEwICogbG9nMigxMCkgKi8KKyNkZWZpbmUgVFJBTl9ERVRfVEhSU0hMRCBGTDJGWENPTlNUX0RCTCgzLjJmLzQuZikKKyNkZWZpbmUgVFJBTl9ERVRfVEhSU0hMRF9TQ0FMRSAoMikKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgSU5UIHRyYW5zaWVudENhbmRpZGF0ZXNbUU1GX01BWF9USU1FX1NMT1RTICsgVFJBTl9ERVRfTE9PS0FIRUFEXTsKKyAgSU5UIG5UaW1lU2xvdHM7CisgIElOVCBsb29rYWhlYWQ7CisgIElOVCBzdGFydEJhbmQ7CisgIElOVCBzdG9wQmFuZDsKKworICBGSVhQX0RCTCBkQmZfbVtRTUZfQ0hBTk5FTFNdOworICBJTlQgICAgICBkQmZfZVtRTUZfQ0hBTk5FTFNdOworCisgIEZJWFBfREJMIGVuZXJneV90aW1lU2xvdHNbUU1GX01BWF9USU1FX1NMT1RTICsgVFJBTl9ERVRfTE9PS0FIRUFEXTsKKyAgSU5UICAgICAgZW5lcmd5X3RpbWVTbG90c19zY2FsZVtRTUZfTUFYX1RJTUVfU0xPVFMgKyBUUkFOX0RFVF9MT09LQUhFQURdOworCisgIEZJWFBfREJMIGRlbHRhX2VuZXJneVtRTUZfTUFYX1RJTUVfU0xPVFMgKyBUUkFOX0RFVF9MT09LQUhFQURdOworICBJTlQgICAgICBkZWx0YV9lbmVyZ3lfc2NhbGVbUU1GX01BWF9USU1FX1NMT1RTICsgVFJBTl9ERVRfTE9PS0FIRUFEXTsKKworICBGSVhQX0RCTCBsb3dwYXNzX2VuZXJneVtRTUZfTUFYX1RJTUVfU0xPVFMgKyBUUkFOX0RFVF9MT09LQUhFQURdOworICBJTlQgICAgICBsb3dwYXNzX2VuZXJneV9zY2FsZVtRTUZfTUFYX1RJTUVfU0xPVFMgKyBUUkFOX0RFVF9MT09LQUhFQURdOworI2lmIGRlZmluZWQgKEZURF9MT0cpCisgIEZES0ZJTEUgKmZ0ZF9sb2c7CisjZW5kaWYKK30KK0ZBU1RfVFJBTl9ERVRFQ1RPUjsKK3R5cGVkZWYgRkFTVF9UUkFOX0RFVEVDVE9SICpIQU5ETEVfRkFTVF9UUkFOX0RFVDsKKworCitJTlQgRkRLc2JyRW5jX0luaXRTYnJGYXN0VHJhbnNpZW50RGV0ZWN0b3IoCisgICAgICAgIEhBTkRMRV9GQVNUX1RSQU5fREVUIGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLAorICAgICAgICBjb25zdCBJTlQgdGltZV9zbG90c19wZXJfZnJhbWUsCisgICAgICAgIGNvbnN0IElOVCBiYW5kd2lkdGhfcW1mX3Nsb3QsCisgICAgICAgIGNvbnN0IElOVCBub19xbWZfY2hhbm5lbHMsCisgICAgICAgIGNvbnN0IElOVCBzYnJfcW1mXzFzdF9iYW5kCisgICAgICAgICk7CisKK3ZvaWQgRkRLc2JyRW5jX2Zhc3RUcmFuc2llbnREZXRlY3QoCisgICAgICAgIGNvbnN0IEhBTkRMRV9GQVNUX1RSQU5fREVUICAgICAgICAgIGhfc2JyRmFzdFRyYW5zaWVudERldGVjdG9yLAorICAgICAgICBjb25zdCBGSVhQX0RCTCAgICAgICAgICAgICAgKmNvbnN0ICpFbmVyZ2llcywKKyAgICAgICAgY29uc3QgaW50ICAgICAgICAgICAgICAgICAgICpjb25zdCAgc2NhbGVFbmVyZ2llcywKKyAgICAgICAgY29uc3QgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgWUJ1ZmZlcldyaXRlT2Zmc2V0LAorICAgICAgICAgICAgICBVQ0hBUiAgICAgICAgICAgICAgICAgKmNvbnN0ICB0cmFuX3ZlY3RvcgorICAgICAgICApOworCiB2b2lkCiBGREtzYnJFbmNfdHJhbnNpZW50RGV0ZWN0KEhBTkRMRV9TQlJfVFJBTlNJRU5UX0RFVEVDVE9SIGhfc2JyVHJhbnNpZW50RGV0ZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMICoqRW5lcmdpZXMsCkBAIC0xMjQsNiArMTc2LDcgQEAKIAogaW50CiBGREtzYnJFbmNfSW5pdFNiclRyYW5zaWVudERldGVjdG9yIChIQU5ETEVfU0JSX1RSQU5TSUVOVF9ERVRFQ1RPUiBoX3NiclRyYW5zaWVudERldGVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgIHNiclN5bnRheEZsYWdzLCAvKiBTQlIgc3ludGF4IGZsYWdzIGRlcml2ZWQgZnJvbSBBT1QuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICAgZnJhbWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAgIHNhbXBsZUZyZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JyQ29uZmlndXJhdGlvblB0ciBwYXJhbXMsCkBAIC0xNDUsNiArMTk4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBZQnVmZmVyU3pTaGlmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuU2ZiLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVTdGVwLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5vX2NvbHMpOwotCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbm9fY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgIEZJWFBfREJMKiB0b25hbGl0eSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYlNZUy9pbmNsdWRlL0ZES19hdWRpby5oIGIvbGliU1lTL2luY2x1ZGUvRkRLX2F1ZGlvLmgKaW5kZXggMDY2MGY0Yy4uOThkZWQzYiAxMDA2NDQKLS0tIGEvbGliU1lTL2luY2x1ZGUvRkRLX2F1ZGlvLmgKKysrIGIvbGliU1lTL2luY2x1ZGUvRkRLX2F1ZGlvLmgKQEAgLTIsNyArMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU29mdHdhcmUgTGljZW5zZSBmb3IgVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkCiAKLakgQ29weXJpZ2h0ICAxOTk1IC0gMjAxMyBGcmF1bmhvZmVyLUdlc2VsbHNjaGFmdCB6dXIgRvZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDE1IEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKICAxLiAgICBJTlRST0RVQ1RJT04KQEAgLTEzNCwxMyArMTM0LDcgQEAKIAogICBUVF9NUDRfTE9BUyAgICAgICAgICA9IDEwLCAvKio8IEF1ZGlvIFN5bmMgU3RyZWFtLiAgICAgICAgICovCiAKLSAgVFRfRFJNICAgICAgICAgICAgICAgPSAxMiwgLyoqPCBEaWdpdGFsIFJhZGlvIE1vbmRpYWwgKERSTTMwL0RSTSspIGJpdHN0cmVhbSBmb3JtYXQuICovCi0KLSAgVFRfTVAxX0wxICAgICAgICAgICAgPSAxNiwgLyoqPCBNUEVHIDEgQXVkaW8gTGF5ZXIgMSBhdWRpbyBiaXRzdHJlYW0uICovCi0gIFRUX01QMV9MMiAgICAgICAgICAgID0gMTcsIC8qKjwgTVBFRyAxIEF1ZGlvIExheWVyIDIgYXVkaW8gYml0c3RyZWFtLiAqLwotICBUVF9NUDFfTDMgICAgICAgICAgICA9IDE4LCAvKio8IE1QRUcgMSBBdWRpbyBMYXllciAzIGF1ZGlvIGJpdHN0cmVhbS4gKi8KLQotICBUVF9SU1ZENTAgICAgICAgICAgICA9IDUwIC8qKjwgKi8KKyAgVFRfRFJNICAgICAgICAgICAgICAgPSAxMiAgLyoqPCBEaWdpdGFsIFJhZGlvIE1vbmRpYWwgKERSTTMwL0RSTSspIGJpdHN0cmVhbSBmb3JtYXQuICovCiAKIH0gVFJBTlNQT1JUX1RZUEU7CiAKQEAgLTIwMywzOCArMTk3LDIyIEBACiAgIEFPVF9TQU9DICAgICAgICAgICAgID0gNDMsIC8qKjwgU0FPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICAgQU9UX0xEX01QRUdTICAgICAgICAgPSA0NCwgLyoqPCBMb3cgRGVsYXkgTVBFRyBTdXJyb3VuZCAgICAgICAgICAgICAgICAgICAqLwogCi0gIEFPVF9SU1ZENTAgICAgICAgICAgID0gNTAsICAvKio8IEludGVyaW0gQU9UIGZvciBSc3ZkNTAgICAgICAgICAgICAgICAgICAgKi8KLQogICAvKiBQc2V1ZG8gQU9UcyAqLwotICBBT1RfTVAyX0FBQ19NQUlOICAgICA9IDEyOCwgLyoqPCBWaXJ0dWFsIEFPVCBNUDIgTWFpbiBwcm9maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgQU9UX01QMl9BQUNfTEMgICAgICAgPSAxMjksIC8qKjwgVmlydHVhbCBBT1QgTVAyIExvdyBDb21wbGV4aXR5IHByb2ZpbGUgICAgICAgICAgICAgICAgICovCi0gIEFPVF9NUDJfQUFDX1NTUiAgICAgID0gMTMwLCAvKio8IFZpcnR1YWwgQU9UIE1QMiBTY2FsYWJsZSBTYW1wbGluZyBSYXRlIHByb2ZpbGUgICAgICAgICAqLwotCi0gIEFPVF9NUDJfU0JSICAgICAgICAgID0gMTMyLCAvKio8IFZpcnR1YWwgQU9UIE1QMiBMb3cgQ29tcGxleGl0eSBQcm9maWxlIHdpdGggU0JSICAgICAgICAqLwotCi0gIEFPVF9EQUIgICAgICAgICAgICAgID0gMTM0LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgKExheWVyMiB3aXRoIHNjYWxlZmFjdG9yIENSQykgICAgICAqLwotICBBT1RfREFCUExVU19BQUNfTEMgICA9IDEzNSwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgREFCIHBsdXMgQUFDLUxDICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgQU9UX0RBQlBMVVNfU0JSICAgICAgPSAxMzYsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERBQiBwbHVzIEhFLUFBQyAgICAgICAgICAgICAgICAgICAgICAgICovCi0gIEFPVF9EQUJQTFVTX1BTICAgICAgID0gMTM3LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEQUIgcGx1cyBIRS1BQUMgdjIgICAgICAgICAgICAgICAgICAgICAqLwotCi0gIEFPVF9QTEFJTl9NUDEgICAgICAgID0gMTQwLCAvKio8IFZpcnR1YWwgQU9UIGZvciBwbGFpbiBtcDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICBBT1RfUExBSU5fTVAyICAgICAgICA9IDE0MSwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgcGxhaW4gbXAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgQU9UX1BMQUlOX01QMyAgICAgICAgPSAxNDIsIC8qKjwgVmlydHVhbCBBT1QgZm9yIHBsYWluIG1wMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KICAgQU9UX0RSTV9BQUMgICAgICAgICAgPSAxNDMsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSAoRVItQUFDLVNDQUwgd2l0aG91dCBTQlIpICAgICAgICAgICovCiAgIEFPVF9EUk1fU0JSICAgICAgICAgID0gMTQ0LCAvKio8IFZpcnR1YWwgQU9UIGZvciBEUk0gKEVSLUFBQy1TQ0FMIHdpdGggU0JSKSAgICAgICAgICAgICAqLwotICBBT1RfRFJNX01QRUdfUFMgICAgICA9IDE0NSwgLyoqPCBWaXJ0dWFsIEFPVCBmb3IgRFJNIChFUi1BQUMtU0NBTCB3aXRoIFNCUiBhbmQgTVBFRy1QUykgKi8KLSAgQU9UX0RSTV9TVVJST1VORCAgICAgPSAxNDYsIC8qKjwgVmlydHVhbCBBT1QgZm9yIERSTSBTdXJyb3VuZCAoRVItQUFDLVNDQUwgKCtTQlIpICtNUFMpICovCi0KLSAgQU9UX01QMl9QUyAgICAgICAgICAgPSAxNTYsIC8qKjwgVmlydHVhbCBBT1QgTVAyIExvdyBDb21wbGV4aXR5IFByb2ZpbGUgd2l0aCBTQlIgYW5kIFBTICovCi0KLSAgQU9UX01QRUdTX1JFU0lEVUFMUyAgPSAyNTYgIC8qKjwgVmlydHVhbCBBT1QgZm9yIE1QRUcgU3Vycm91bmQgcmVzaWR1YWxzICAgICAgICAgICAgICAgICovCisgIEFPVF9EUk1fTVBFR19QUyAgICAgID0gMTQ1ICAvKio8IFZpcnR1YWwgQU9UIGZvciBEUk0gKEVSLUFBQy1TQ0FMIHdpdGggU0JSIGFuZCBNUEVHLVBTKSAqLwogCiB9IEFVRElPX09CSkVDVF9UWVBFOwogCisjZGVmaW5lIENBTl9ET19QUyhhb3QpIFwKKyAgKChhb3QpID09IEFPVF9BQUNfTEMgXAorfHwgKGFvdCkgPT0gQU9UX1NCUiBcCit8fCAoYW90KSA9PSBBT1RfUFMgXAorfHwgKGFvdCkgPT0gQU9UX0VSX0JTQUMgXAorfHwgKGFvdCkgPT0gQU9UX0RSTV9BQUMpCisKICNkZWZpbmUgSVNfVVNBQyhhb3QpIFwKLSAgKChhb3QpID09IEFPVF9VU0FDIFwKLXx8IChhb3QpID09IEFPVF9SU1ZENTApCisgICgoYW90KSA9PSBBT1RfVVNBQykKIAogI2RlZmluZSBJU19MT1dERUxBWShhb3QpIFwKICAgKChhb3QpID09IEFPVF9FUl9BQUNfTEQgXApkaWZmIC0tZ2l0IGEvbGliU1lTL3NyYy9nZW5lcmljU3Rkcy5jcHAgYi9saWJTWVMvc3JjL2dlbmVyaWNTdGRzLmNwcAppbmRleCA0N2Q2MmZjLi44OWM0MjJjIDEwMDY0NAotLS0gYS9saWJTWVMvc3JjL2dlbmVyaWNTdGRzLmNwcAorKysgYi9saWJTWVMvc3JjL2dlbmVyaWNTdGRzLmNwcApAQCAtMiw3ICsyLDcgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb2Z0d2FyZSBMaWNlbnNlIGZvciBUaGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQKIAotqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiupIENvcHlyaWdodCAgMTk5NSAtIDIwMTUgRnJhdW5ob2Zlci1HZXNlbGxzY2hhZnQgenVyIEb2cmRlcnVuZyBkZXIgYW5nZXdhbmR0ZW4gRm9yc2NodW5nIGUuVi4KICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogIDEuICAgIElOVFJPRFVDVElPTgpAQCAtOTIsMTQgKzkyLDE0IEBACiAKICNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKIAotI2luY2x1ZGUgImdlbmVyaWNTdGRzLmgiCi0KICNpbmNsdWRlIDxtYXRoLmg+CiAKKyNpbmNsdWRlICJnZW5lcmljU3Rkcy5oIgorCiAvKiBsaWJyYXJ5IGluZm8gKi8KICNkZWZpbmUgU1lTX0xJQl9WTDAgMQogI2RlZmluZSBTWVNfTElCX1ZMMSAzCi0jZGVmaW5lIFNZU19MSUJfVkwyIDYKKyNkZWZpbmUgU1lTX0xJQl9WTDIgOAogI2RlZmluZSBTWVNfTElCX1RJVExFICJTeXN0ZW0gSW50ZWdyYXRpb24gTGlicmFyeSIKICNpZmRlZiBfX0FORFJPSURfXwogI2RlZmluZSBTWVNfTElCX0JVSUxEX0RBVEUgIiIK