From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?RGFuIEhvcsOhayA8ZGFuQGRhbm55LmN6Pg==?= To: git-commits@fedoraproject.org Subject: [rpms/firefox] f43: add ppc64le JIT Date: Fri, 26 Jun 2026 10:18:35 GMT Message-ID: <178246911592.1.14087325334921031232.rpms-firefox-e99f0d4925ac@fedoraproject.org> List-ID: X-Git-Repo: rpms/firefox X-Git-Branch: f43 X-Git-Rev: e99f0d4925ac596ad75f2ae084620d36c44a85c2 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZmlyZWZveApCcmFu Y2ggOiBmNDMKQ29tbWl0IDogZTk5ZjBkNDkyNWFjNTk2YWQ3NWYyYWUwODQ2MjBkMzZjNDRhODVj MgpBdXRob3IgOiBEYW4gSG9yw6FrIDxkYW5AZGFubnkuY3o+CkRhdGUgICA6IDIwMjYtMDYtMTZU MTM6MTA6MzQrMDA6MDAKU3RhdHMgIDogKzQyMDg2Ly0wIGluIDQgZmlsZShzKQpVUkwgICAgOiBo dHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2ZpcmVmb3gvYy9lOTlmMGQ0OTI1YWM1 OTZhZDc1ZjJhZTA4NDYyMGQzNmM0NGE4NWMyP2JyYW5jaD1mNDMKCkxvZzoKYWRkIHBwYzY0bGUg SklUCgotLS0KZGlmZiAtLWdpdCBhLzAwMDEtQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLVNLSUEu cGF0Y2ggYi8wMDAxLUFkZC1WU1gtaW5zdHJ1Y3Rpb25zLWZvci1TS0lBLnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2EwZDgKLS0tIC9kZXYvbnVsbAorKysgYi8w MDAxLUFkZC1WU1gtaW5zdHJ1Y3Rpb25zLWZvci1TS0lBLnBhdGNoCkBAIC0wLDAgKzEsMTM0NyBA QAorRnJvbSBhNDdjOTkxZGJiZmI3MDkxMzQ3MzdhNTRlOGJiZTdlMGIxYmNlODAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP1RydW5nPTIwTD1DMz1BQT89IDw4QHRs ZS5pZC5hdT4KK0RhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTU6MjM6MTAgKzEwMDAKK1N1YmplY3Q6 IFtQQVRDSCAxLzNdIEFkZCBWU1ggaW5zdHJ1Y3Rpb25zIGZvciBTS0lBCisKK0FkYXB0ZWQgZnJv bSB3b3JrIGRvbmUgYnkgUmFwdG9yIEVuZ2luZWVyaW5nIGZvciBjaHJvbWl1bSdzIHZlbmRvcmVk CitTS0lBCisKK0NvLWF1dGhvcmVkLWJ5OiBUaW1vdGh5IFBlYXJzb24gPHRwZWFyc29uQHJhcHRv cmVuZ2luZWVyaW5nLmNvbT4KKy0tLQorIGdmeC9za2lhL3NraWEvc3JjL2Jhc2UvU2tWeC5oICAg ICAgICAgICAgICAgICB8ICA1OCArKystCisgZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRS b3dfRDMyLmNwcCAgICAgIHwgIDk4ICsrKysrKworIGdmeC9za2lhL3NraWEvc3JjL2NvcmUvU2tC bGl0dGVyX0FSR0IzMi5jcHAgICB8IDI2OCArKysrKysrKysrKysrKysrCisgLi4uL3NraWEvc3Jj L29wdHMvU2tCaXRtYXBQcm9jU3RhdGVfb3B0cy5oICAgIHwgMTY0ICsrKysrKysrKysKKyBnZngv c2tpYS9za2lhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzLmggICAgICAgfCAgNDggKysrCisgLi4u L3NraWEvc3JjL29wdHMvU2tSYXN0ZXJQaXBlbGluZV9vcHRzLmggICAgIHwgMjM3ICsrKysrKysr KysrKysrCisgZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5jICAgIHwg Mjg5ICsrKysrKysrKysrKysrKysrKworIDcgZmlsZXMgY2hhbmdlZCwgMTE2MCBpbnNlcnRpb25z KCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvYmFz ZS9Ta1Z4LmggYi9nZngvc2tpYS9za2lhL3NyYy9iYXNlL1NrVnguaAoraW5kZXggZjg3Y2E0NGQ0 YWYwLi5lZDgwYzkxZmQzOGUgMTAwNjQ0CistLS0gYS9nZngvc2tpYS9za2lhL3NyYy9iYXNlL1Nr VnguaAorKysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvYmFzZS9Ta1Z4LmgKK0BAIC01Miw2ICs1Miw4 IEBACisgICAgICAgICAjaW5jbHVkZSA8YXJtX25lb24uaD4KKyAgICAgI2VsaWYgZGVmaW5lZChf X3dhc21fc2ltZDEyOF9fKQorICAgICAgICAgI2luY2x1ZGUgPHdhc21fc2ltZDEyOC5oPgorKyAg ICAjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgICAg ICNpbmNsdWRlIDxhbHRpdmVjLmg+CisgICAgICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwgPj0gU0tf Q1BVX0xTWF9MRVZFTF9MQVNYCisgICAgICAgICAjaW5jbHVkZSA8bGFzeGludHJpbi5oPgorICAg ICAgICAgI2luY2x1ZGUgPGxzeGludHJpbi5oPgorQEAgLTUwOSw2ICs1MTEsMTQgQEAgU0lOVCBW ZWM8TixUPiBpZl90aGVuX2Vsc2UoY29uc3QgVmVjPE4sTTxUPj4mIGNvbmQsIGNvbnN0IFZlYzxO LFQ+JiB0LCBjb25zdCBWZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2tfYml0X2Nhc3Q8dWludDh4MTZfdD4oZSkpKTsKKyAgICAgfQorICNlbmRpZgor KyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZT WF9fKQorKyAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9mKFQpID09IDE2KSB7CisrICAgICAgICBy ZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4sVD4+KAorKyAgICAgICAgICAgICAgICB2ZWNfc2VsKHNr X2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIGNoYXI+KGUpLAorKyAgICAgICAgICAgICAgICAg ICAgICAgIHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIGNoYXI+KHQpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgIHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIGNoYXI+KGNvbmQp KSk7CisrICAgIH0KKysjZW5kaWYKKyAjaWYgU0tWWF9VU0VfU0lNRCAmJiBTS19DUFVfTFNYX0xF VkVMID49IFNLX0NQVV9MU1hfTEVWRUxfTEFTWAorICAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9m KFQpID09IDMyKSB7CisgICAgICAgICByZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4sVD4+KF9fbGFz eF94dmJpdHNlbF92KHNrX2JpdF9jYXN0PF9fbTI1Nmk+KGUpLAorQEAgLTU3OSw2ICs1ODksMTEg QEAgU0lOVCBib29sIGFueShjb25zdCBWZWM8TixUPiYgeCkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza19iaXRfY2FzdDxfX20x MjhpPih4KSkpOworICAgICAgICAgcmV0dXJuIHJldHZbMF0gIT0gMGIwMDAwOworICAgICB9Cisr I2VuZGlmCisrI2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZp bmVkKF9fVlNYX18pCisrICAgIGlmIGNvbnN0ZXhwciAoTipzaXplb2YoVCkgPT0gMTYpIHsKKysg ICAgICAgIHJldHVybiB2ZWNfYW55X25lKHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIGlu dD4oeCksIHZlY19zcGxhdHMoMHUpKTsKKysgICAgfQorICNlbmRpZgorICAgICByZXR1cm4gYW55 KHgubG8pCisgICAgICAgICB8fCBhbnkoeC5oaSk7CitAQCAtNjIyLDYgKzYzNywxMSBAQCBTSU5U IGJvb2wgYWxsKGNvbnN0IFZlYzxOLFQ+JiB4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrX2JpdF9jYXN0PF9fbTEyOGk+KHgp KSk7CisgICAgICAgICByZXR1cm4gcmV0dlswXSA9PSAwYjExMTE7CisgICAgIH0KKysjZW5kaWYK KysjaWYgU0tWWF9VU0VfU0lNRCAmJiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmluZWQoX19W U1hfXykKKysgICAgaWYgY29uc3RleHByIChOKnNpemVvZihUKSA9PSAxNikgeworKyAgICAgICAg cmV0dXJuIHZlY19hbGxfbmUoc2tfYml0X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgaW50Pih4KSwg dmVjX3NwbGF0cygwdSkpOworKyAgICB9CisgI2VuZGlmCisgICAgIHJldHVybiBhbGwoeC5sbykK KyAgICAgICAgICYmIGFsbCh4LmhpKTsKK0BAIC02NDcsOCArNjY3LDIyIEBAIFNJVCAgVCBtYXgo Y29uc3QgVmVjPDEsVD4mIHgpIHsgcmV0dXJuIHgudmFsOyB9CisgU0lOVCBUIG1pbihjb25zdCBW ZWM8TixUPiYgeCkgeyByZXR1cm4gc3RkOjptaW4obWluKHgubG8pLCBtaW4oeC5oaSkpOyB9Cisg U0lOVCBUIG1heChjb25zdCBWZWM8TixUPiYgeCkgeyByZXR1cm4gc3RkOjptYXgobWF4KHgubG8p LCBtYXgoeC5oaSkpOyB9CisgCistU0lOVCBWZWM8TixUPiBtaW4oY29uc3QgVmVjPE4sVD4mIHgs IGNvbnN0IFZlYzxOLFQ+JiB5KSB7IHJldHVybiBuYWl2ZV9pZl90aGVuX2Vsc2UoeSA8IHgsIHks IHgpOyB9CistU0lOVCBWZWM8TixUPiBtYXgoY29uc3QgVmVjPE4sVD4mIHgsIGNvbnN0IFZlYzxO LFQ+JiB5KSB7IHJldHVybiBuYWl2ZV9pZl90aGVuX2Vsc2UoeCA8IHksIHksIHgpOyB9CisrU0lO VCBWZWM8TixUPiBtaW4oY29uc3QgVmVjPE4sVD4mIHgsIGNvbnN0IFZlYzxOLFQ+JiB5KSB7Cisr I2lmIFNLVlhfVVNFX1NJTUQgJiYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNY X18pCisrICAgIGlmIGNvbnN0ZXhwciAoTipzaXplb2YoVCkgPT0gMTYpIHsKKysgICAgICAgIHJl dHVybiBza19iaXRfY2FzdDxWZWM8TixUPj4odmVjX21pbih0b192ZXh0KHgpLCB0b192ZXh0KHkp KSk7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0dXJuIG5haXZlX2lmX3RoZW5fZWxzZSh5IDwg eCwgeSwgeCk7CisrfQorK1NJTlQgVmVjPE4sVD4gbWF4KGNvbnN0IFZlYzxOLFQ+JiB4LCBjb25z dCBWZWM8TixUPiYgeSkgeworKyNpZiBTS1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQ QykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICBpZiBjb25zdGV4cHIgKE4qc2l6ZW9mKFQpID09 IDE2KSB7CisrICAgICAgICByZXR1cm4gc2tfYml0X2Nhc3Q8VmVjPE4sVD4+KHZlY19tYXgodG9f dmV4dCh4KSwgdG9fdmV4dCh5KSkpOworKyAgICB9CisrI2VuZGlmCisrICAgIHJldHVybiBuYWl2 ZV9pZl90aGVuX2Vsc2UoeCA8IHksIHksIHgpOworK30KKyAKKyBTSU5UVSBWZWM8TixUPiBtaW4o Y29uc3QgVmVjPE4sVD4mIHgsIFUgeSkgeyByZXR1cm4gbWluKHgsIFZlYzxOLFQ+KHkpKTsgfQor IFNJTlRVIFZlYzxOLFQ+IG1heChjb25zdCBWZWM8TixUPiYgeCwgVSB5KSB7IHJldHVybiBtYXgo eCwgVmVjPE4sVD4oeSkpOyB9CitAQCAtOTYwLDYgKzk5NCwyNiBAQCBTSU4gVmVjPE4sdWludDE2 X3Q+IG11bGhpKGNvbnN0IFZlYzxOLHVpbnQxNl90PiYgeCwKKyAgICAgfSBlbHNlIHsgLy8gTiA+ IDgKKyAgICAgICAgIHJldHVybiBqb2luKG11bGhpKHgubG8sIHkubG8pLCBtdWxoaSh4LmhpLCB5 LmhpKSk7CisgICAgIH0KKysjZWxpZiBTS1ZYX1VTRV9TSU1EICYmIGRlZmluZWQoU0tfQ1BVX1BQ QykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICBpZiBjb25zdGV4cHIgKE4gPT0gOCkgeworKyAg ICAgICAgLy8gdTE2KnUxNiAtPiB1MzIgZXZlbi9vZGQgcHJvZHVjdHMgKHZtdWxldWgvdm11bG91 aCksIHRoZW4gZ2F0aGVyIHRoZQorKyAgICAgICAgLy8gaGlnaCAxNiBiaXRzIG9mIGVhY2ggYmFj ayBpbnRvIHNlcXVlbnRpYWwgbGFuZXMuIFNhbWUgaWRpb20gYXMgdGhlCisrICAgICAgICAvLyBW U1ggc2NhbGUoKSBpbiBTa1N3aXp6bGVyX29wdHMuCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCB4cyA9IHNrX2JpdF9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0Pih4KTsKKysg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHlzID0gc2tfYml0X2Nhc3Q8X192ZWN0b3Ig dW5zaWduZWQgc2hvcnQ+KHkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGV2ZW4g PSB2ZWNfdm11bGV1aCh4cywgeXMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IG9k ZCAgPSB2ZWNfdm11bG91aCh4cywgeXMpOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWdu ZWQgY2hhciBoaSA9IHsKKysgICAgICAgICAgICAweDAyLDB4MDMsIDB4MTIsMHgxMywgIDB4MDYs MHgwNywgMHgxNiwweDE3LAorKyAgICAgICAgICAgIDB4MEEsMHgwQiwgMHgxQSwweDFCLCAgMHgw RSwweDBGLCAweDFFLDB4MUYKKysgICAgICAgIH07CisrICAgICAgICByZXR1cm4gc2tfYml0X2Nh c3Q8VmVjPDgsdWludDE2X3Q+PigKKysgICAgICAgICAgICB2ZWNfcGVybSgoX192ZWN0b3IgdW5z aWduZWQgY2hhcilldmVuLCAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilvZGQsIGhpKSk7CisrICAg IH0gZWxzZSBpZiBjb25zdGV4cHIgKE4gPCA4KSB7CisrICAgICAgICByZXR1cm4gbXVsaGkoam9p bih4LHgpLCBqb2luKHkseSkpLmxvOworKyAgICB9IGVsc2UgeyAvLyBOID4gOAorKyAgICAgICAg cmV0dXJuIGpvaW4obXVsaGkoeC5sbywgeS5sbyksIG11bGhpKHguaGksIHkuaGkpKTsKKysgICAg fQorICNlbHNlCisgICAgIHJldHVybiBza3Z4OjpjYXN0PHVpbnQxNl90PihtdWxsKHgsIHkpID4+ IDE2KTsKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9jb3JlL1NrQmxp dFJvd19EMzIuY3BwIGIvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXRSb3dfRDMyLmNwcAor aW5kZXggYmNiZjJlNjZiZDQ2Li45MjBkNmE5YjIzNjYgMTAwNjQ0CistLS0gYS9nZngvc2tpYS9z a2lhL3NyYy9jb3JlL1NrQmxpdFJvd19EMzIuY3BwCisrKysgYi9nZngvc2tpYS9za2lhL3NyYy9j b3JlL1NrQmxpdFJvd19EMzIuY3BwCitAQCAtNTE3LDYgKzUxNywxMDQgQEAgc3RhdGljIHZvaWQg YmxpdF9yb3dfczMyX29wYXF1ZShTa1BNQ29sb3IqIGRzdCwKKyAgICAgICAgIH0KKyAgICAgfQor IAorKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICAj aW5jbHVkZSA8YWx0aXZlYy5oPgorKworKyAgICAvLyBkc3QgKyAoKChzcmMgLSBkc3QpICogc3Jj X3NjYWxlKSA+PiA4KSwgc3BsYXllZCBpbnRvIDE2LWJpdCBsYW5lczsgdGhlCisrICAgIC8vIHZl Y18qIHRyYW5zY3JpcHRpb24gb2YgU2tQTUxlcnBfU1NFMi4KKysgICAgc3RhdGljIGlubGluZSBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIFNrUE1MZXJwX1ZTWChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGRzdCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzcmNfc2NhbGUpIHsKKysg ICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGludCBtYXNrID0gdmVjX3NwbGF0cygweDAw RkYwMEZGdSk7CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBlaWdodCA9 IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgc3JjX3JiID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19hbmQoKF9fdmVj dG9yIHVuc2lnbmVkIGludClzcmMsIG1hc2spOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg c2hvcnQgc3JjX2FnID0gdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmMsIGVpZ2h0 KTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRzdF9yYiA9IChfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCl2ZWNfYW5kKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpZHN0LCBtYXNrKTsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRzdF9hZyA9IHZlY19zcigoX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQpZHN0LCBlaWdodCk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCBzID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpc3JjX3NjYWxlKTsKKysgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRpZmZfcmIgPSB2ZWNfbXVsKHZlY19zdWIoc3Jj X3JiLCBkc3RfcmIpLCBzKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRpZmZf YWcgPSB2ZWNfbXVsKHZlY19zdWIoc3JjX2FnLCBkc3RfYWcpLCBzKTsKKysgICAgICAgIGRpZmZf cmIgPSB2ZWNfc3IoZGlmZl9yYiwgZWlnaHQpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg aW50IGRpZmYgPSB2ZWNfb3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludClkaWZmX3JiLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX2FuZGMoKF9fdmVjdG9y IHVuc2lnbmVkIGludClkaWZmX2FnLCBtYXNrKSk7CisrICAgICAgICByZXR1cm4gdmVjX2FkZChk c3QsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWRpZmYpOworKyAgICB9CisrCisrICAgIHN0YXRp YyB2b2lkIGJsaXRfcm93X3MzMl9ibGVuZChTa1BNQ29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9y KiBzcmMsIGludCBjb3VudCwgVThDUFUgYWxwaGEpIHsKKysgICAgICAgIFNrQVNTRVJUKGFscGhh IDw9IDI1NSk7CisrICAgICAgICB1bnNpZ25lZCBzcmNfc2NhbGUgPSBTa0FscGhhMjU1VG8yNTYo YWxwaGEpOworKyAgICAgICAgd2hpbGUgKGNvdW50ID49IDQpIHsKKysgICAgICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyIHMgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXNy Yyk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBkID0gdmVjX3hsKDAsIChj b25zdCB1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAgICAgIHZlY194c3QoU2tQTUxlcnBf VlNYKHMsIGQsIHNyY19zY2FsZSksIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAg ICAgIHNyYyArPSA0OyBkc3QgKz0gNDsgY291bnQgLT0gNDsKKysgICAgICAgIH0KKysgICAgICAg IHdoaWxlIChjb3VudCAtLT4gMCkgeworKyAgICAgICAgICAgICpkc3QgPSBTa1BNTGVycCgqc3Jj LCAqZHN0LCBzcmNfc2NhbGUpOworKyAgICAgICAgICAgIHNyYysrOworKyAgICAgICAgICAgIGRz dCsrOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIC8vIFRoZSB2ZWNfKiB0cmFuc2NyaXB0 aW9uIG9mIFNrQmxlbmRBUkdCMzJfU1NFMjogc2NhbGUgc3JjIGJ5IGFhIGFuZCBkc3QgYnkKKysg ICAgLy8gU2tBbHBoYU11bEludjI1NihzcmNBLCBhYSksIHRoZW4gYWRkIHRoZSBzcGxheWVkIGhh bHZlcy4KKysgICAgc3RhdGljIGlubGluZSBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIFNrQmxlbmRB UkdCMzJfVlNYKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgY2hhciBkc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhYSkgeworKyAgICAgICAgdW5zaWduZWQgYWxwaGEg PSBTa0FscGhhMjU1VG8yNTYoYWEpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg c3JjX3NjYWxlID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpYWxwaGEpOworKyAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgaW50IG1hc2sgPSB2ZWNfc3BsYXRzKDB4MDBGRjAwRkZ1 KTsKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGVpZ2h0ID0gdmVjX3Nw bGF0cygodW5zaWduZWQgc2hvcnQpOCk7CisrCisrICAgICAgICAvLyBkc3Rfc2NhbGUgPSBTa0Fs cGhhTXVsSW52MjU2KFNrR2V0UGFja2VkQTMyKHNyYyksIGFscGhhKSwgcGVyIDMyLWJpdCBsYW5l LgorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHNyY0EgPSB2ZWNfc3IoKF9fdmVjdG9y IHVuc2lnbmVkIGludClzcmMsIHZlY19zcGxhdHMoMjR1KSk7CisrICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBpbnQgZHMgPSAoX192ZWN0b3IgdW5zaWduZWQgaW50KXZlY19tdWwoKF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0KXNyY0EsIHNyY19zY2FsZSk7CisrICAgICAgICBkcyA9IHZlY19zdWIo dmVjX3NwbGF0cygodW5zaWduZWQgaW50KTB4RkZGRiksIGRzKTsKKysgICAgICAgIGRzID0gdmVj X2FkZChkcywgdmVjX3NyKGRzLCB2ZWNfc3BsYXRzKDh1KSkpOworKyAgICAgICAgZHMgPSB2ZWNf c3IoZHMsIHZlY19zcGxhdHMoOHUpKTsKKysgICAgICAgIC8vIER1cGxpY2F0ZSB0aGUgbG93IDE2 LWJpdCB3b3JkIG9mIGVhY2ggMzItYml0IGxhbmUgaW50byBib3RoIGhhbHZlcworKyAgICAgICAg Ly8gKHRoZSBTU0Ugc2h1ZmZsZWxvL3NodWZmbGVoaSBfTU1fU0hVRkZMRSgyLDIsMCwwKSkuCisr ICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGR1cCA9IChfX3ZlY3RvciB1bnNp Z25lZCBjaGFyKXsKKysgICAgICAgICAgICAwLDEsMCwxLCA0LDUsNCw1LCA4LDksOCw5LCAxMiwx MywxMiwxMworKyAgICAgICAgfTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGRz dF9zY2FsZSA9CisrICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJt KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilkcywgZHVwKTsKKysK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNyY19yYiA9IChfX3ZlY3RvciB1bnNp Z25lZCBzaG9ydCl2ZWNfYW5kKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpc3JjLCBtYXNrKTsKKysg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHNyY19hZyA9IHZlY19zcigoX192ZWN0b3Ig dW5zaWduZWQgc2hvcnQpc3JjLCBlaWdodCk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCBkc3RfcmIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX2FuZCgoX192ZWN0b3Ig dW5zaWduZWQgaW50KWRzdCwgbWFzayk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBkc3RfYWcgPSB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWRzdCwgZWlnaHQpOwor KworKyAgICAgICAgc3JjX3JiID0gdmVjX211bChzcmNfcmIsIHNyY19zY2FsZSk7CisrICAgICAg ICBzcmNfYWcgPSB2ZWNfbXVsKHNyY19hZywgc3JjX3NjYWxlKTsKKysgICAgICAgIGRzdF9yYiA9 IHZlY19tdWwoZHN0X3JiLCBkc3Rfc2NhbGUpOworKyAgICAgICAgZHN0X2FnID0gdmVjX211bChk c3RfYWcsIGRzdF9zY2FsZSk7CisrCisrICAgICAgICBkc3RfcmIgPSB2ZWNfYWRkKHNyY19yYiwg ZHN0X3JiKTsKKysgICAgICAgIGRzdF9hZyA9IHZlY19hZGQoc3JjX2FnLCBkc3RfYWcpOworKwor KyAgICAgICAgZHN0X3JiID0gdmVjX3NyKGRzdF9yYiwgZWlnaHQpOworKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgaW50IG91dCA9IHZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdF9y YiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX2FuZGMo KF9fdmVjdG9yIHVuc2lnbmVkIGludClkc3RfYWcsIG1hc2spKTsKKysgICAgICAgIHJldHVybiAo X192ZWN0b3IgdW5zaWduZWQgY2hhcilvdXQ7CisrICAgIH0KKysKKysgICAgc3RhdGljIHZvaWQg YmxpdF9yb3dfczMyYV9ibGVuZChTa1BNQ29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMs IGludCBjb3VudCwgVThDUFUgYWxwaGEpIHsKKysgICAgICAgIFNrQVNTRVJUKGFscGhhIDw9IDI1 NSk7CisrICAgICAgICB3aGlsZSAoY291bnQgPj0gNCkgeworKyAgICAgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIgcyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsK KysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGQgPSB2ZWNfeGwoMCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICAgICAgdmVjX3hzdChTa0JsZW5kQVJHQjMy X1ZTWChzLCBkLCBhbHBoYSksIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAgICAg IHNyYyArPSA0OyBkc3QgKz0gNDsgY291bnQgLT0gNDsKKysgICAgICAgIH0KKysgICAgICAgIHdo aWxlIChjb3VudCAtLT4gMCkgeworKyAgICAgICAgICAgICpkc3QgPSBTa0JsZW5kQVJHQjMyKCpz cmMsICpkc3QsIGFscGhhKTsKKysgICAgICAgICAgICBzcmMrKzsKKysgICAgICAgICAgICBkc3Qr KzsKKysgICAgICAgIH0KKysgICAgfQorKworICNlbHNlCisgICAgIHN0YXRpYyB2b2lkIGJsaXRf cm93X3MzMl9ibGVuZChTa1BNQ29sb3IqIGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCBj b3VudCwgVThDUFUgYWxwaGEpIHsKKyAgICAgICAgIFNrQVNTRVJUKGFscGhhIDw9IDI1NSk7Citk aWZmIC0tZ2l0IGEvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcCBi L2dmeC9za2lhL3NraWEvc3JjL2NvcmUvU2tCbGl0dGVyX0FSR0IzMi5jcHAKK2luZGV4IGE3NTM4 MDI3Yjg1ZC4uOTY2OTQzMTI5MmI2IDEwMDY0NAorLS0tIGEvZ2Z4L3NraWEvc2tpYS9zcmMvY29y ZS9Ta0JsaXR0ZXJfQVJHQjMyLmNwcAorKysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvY29yZS9Ta0Js aXR0ZXJfQVJHQjMyLmNwcAorQEAgLTQ4MCw2ICs0ODAsMjc0IEBAIHN0YXRpYyBpbmxpbmUgU2tQ TUNvbG9yIGJsZW5kX2xjZDE2X29wYXF1ZShpbnQgc3JjUiwgaW50IHNyY0csIGludCBzcmNCLAor ICAgICAgICAgfQorICAgICB9CisgCisrI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZp bmVkKF9fVlNYX18pCisrICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+CisrCisrICAgIC8vIE5hdGl2 ZSBWU1gvQWx0aVZlYyBwb3J0IG9mIHRoZSBTU0UyIExDRC1zdWJwaXhlbCBibGVuZCBibG9jayBi ZWxvdy4KKysgICAgLy8gU2FtZSBhbGdvcml0aG0g4oCUIG9ubHkgdGhlIGludHJpbnNpY3MgY2hh bmdlLiBUcmFuc2xhdGlvbnMgZm9sbG93IHRoZQorKyAgICAvLyBHQ0MgcHBjX3dyYXBwZXJzIHBh dHRlcm4gKHZlY19tZXJnZWgvbCwgdmVjX3BhY2tzdSwgZXRjLikuCisrCisrICAgIC8vIFRoZSBm b2xsb3dpbmcgKGxlZnQpIHNoaWZ0cyBjYXVzZSB0aGUgdG9wIDUgYml0cyBvZiB0aGUgbWFzayBj b21wb25lbnRzIHRvCisrICAgIC8vIGxpbmUgdXAgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBjb21w b25lbnRzIGluIGFuIFNrUE1Db2xvci4KKysgICAgLy8gTm90ZSB0aGF0IHRoZSBtYXNrJ3MgUkdC MTYgb3JkZXIgbWF5IGRpZmZlciBmcm9tIHRoZSBTa1BNQ29sb3Igb3JkZXIuCisrICAgICNkZWZp bmUgU0tfUjE2eDVfUjMyeDVfU0hJRlQgKFNLX1IzMl9TSElGVCAtIFNLX1IxNl9TSElGVCAtIFNL X1IxNl9CSVRTICsgNSkKKysgICAgI2RlZmluZSBTS19HMTZ4NV9HMzJ4NV9TSElGVCAoU0tfRzMy X1NISUZUIC0gU0tfRzE2X1NISUZUIC0gU0tfRzE2X0JJVFMgKyA1KQorKyAgICAjZGVmaW5lIFNL X0IxNng1X0IzMng1X1NISUZUIChTS19CMzJfU0hJRlQgLSBTS19CMTZfU0hJRlQgLSBTS19CMTZf QklUUyArIDUpCisrCisrICAgIC8vIEVhY2ggbWFjcm8gbXVzdCBhbHdheXMgcmV0dXJuIF9fdmVj dG9yIHVuc2lnbmVkIGludCBzbyB0aGUgc3Vycm91bmRpbmcKKysgICAgLy8gdmVjX2FuZCBnZXRz IG1hdGNoaW5nIGVsZW1lbnQgdHlwZXMuIFRoZSBwYXNzLXRocm91Z2ggY2FzZSAoU0hJRlQgPT0g MCkKKysgICAgLy8gc3RpbGwgbmVlZHMgYW4gZXhwbGljaXQgcmVpbnRlcnByZXQtY2FzdCBzaW5j ZSBgbWFza2AgaXMgX192ZWN0b3IKKysgICAgLy8gdW5zaWduZWQgY2hhciBpbiBvdXIgZnVuY3Rp b24gc2lnbmF0dXJlLgorKyAgICAjaWYgU0tfUjE2eDVfUjMyeDVfU0hJRlQgPT0gMAorKyAgICAg ICAgI2RlZmluZSBTa1BhY2tlZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSAoKF9fdmVjdG9y IHVuc2lnbmVkIGludCkoeCkpCisrICAgICNlbGlmIFNLX1IxNng1X1IzMng1X1NISUZUID4gMAor KyAgICAgICAgI2RlZmluZSBTa1BhY2tlZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSBcCisr ICAgICAgICAgICAgdmVjX3NsKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBpbnQpU0tfUjE2eDVfUjMyeDVfU0hJRlQpKQorKyAgICAjZWxzZQorKyAgICAg ICAgI2RlZmluZSBTa1BhY2tlZFIxNng1VG9Vbm1hc2tlZFIzMng1X1ZTWCh4KSBcCisrICAgICAg ICAgICAgdmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpLCB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBpbnQpKC1TS19SMTZ4NV9SMzJ4NV9TSElGVCkpKQorKyAgICAjZW5kaWYKKysKKysgICAg I2lmIFNLX0cxNng1X0czMng1X1NISUZUID09IDAKKysgICAgICAgICNkZWZpbmUgU2tQYWNrZWRH MTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1goeCkgKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKHgpKQor KyAgICAjZWxpZiBTS19HMTZ4NV9HMzJ4NV9TSElGVCA+IDAKKysgICAgICAgICNkZWZpbmUgU2tQ YWNrZWRHMTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1goeCkgXAorKyAgICAgICAgICAgIHZlY19zbCgo X192ZWN0b3IgdW5zaWduZWQgaW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KVNLX0cx Nng1X0czMng1X1NISUZUKSkKKysgICAgI2Vsc2UKKysgICAgICAgICNkZWZpbmUgU2tQYWNrZWRH MTZ4NVRvVW5tYXNrZWRHMzJ4NV9WU1goeCkgXAorKyAgICAgICAgICAgIHZlY19zcigoX192ZWN0 b3IgdW5zaWduZWQgaW50KSh4KSwgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgtU0tfRzE2eDVf RzMyeDVfU0hJRlQpKSkKKysgICAgI2VuZGlmCisrCisrICAgICNpZiBTS19CMTZ4NV9CMzJ4NV9T SElGVCA9PSAwCisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVf VlNYKHgpICgoX192ZWN0b3IgdW5zaWduZWQgaW50KSh4KSkKKysgICAgI2VsaWYgU0tfQjE2eDVf QjMyeDVfU0hJRlQgPiAwCisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2Vk QjMyeDVfVlNYKHgpIFwKKysgICAgICAgICAgICB2ZWNfc2woKF9fdmVjdG9yIHVuc2lnbmVkIGlu dCkoeCksIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludClTS19CMTZ4NV9CMzJ4NV9TSElGVCkpCisr ICAgICNlbHNlCisrICAgICAgICAjZGVmaW5lIFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVf VlNYKHgpIFwKKysgICAgICAgICAgICB2ZWNfc3IoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkoeCks IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoLVNLX0IxNng1X0IzMng1X1NISUZUKSkpCisrICAg ICNlbmRpZgorKworKyAgICBzdGF0aWMgX192ZWN0b3IgdW5zaWduZWQgY2hhciBibGVuZF9sY2Qx Nl92c3goX192ZWN0b3IgdW5zaWduZWQgY2hhciYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIGRz dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBtYXNrLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIHNyY0EpIHsK KysgICAgICAgIC8vIEdldCB0aGUgUixHLEIgb2YgZWFjaCAxNmJpdCBtYXNrIHBpeGVsLCBhbGwg YWxpZ25lZCB0byA1LWJpdCBwb3NpdGlvbnMuCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgciA9IHZlY19hbmQoU2tQYWNrZWRSMTZ4NVRvVW5tYXNrZWRSMzJ4NV9WU1gobWFzayksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5z aWduZWQgaW50KSgweDFGIDw8IFNLX1IzMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIGludCBnID0gdmVjX2FuZChTa1BhY2tlZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWCht YXNrKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tfRzMyX1NISUZUKSkpOworKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgaW50IGIgPSB2ZWNfYW5kKFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMy eDVfVlNYKG1hc2spLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgxRiA8PCBTS19CMzJfU0hJRlQpKSk7CisrCisr ICAgICAgICAvLyBhIG5lZWRzIHRvIGJlIGVpdGhlciB0aGUgbWluIG9yIHRoZSBtYXggb2YgdGhl IExDRCBjb3ZlcmFnZXMsIGRlcGVuZGluZyBvbiBzcmNBIDwgZHN0QS4KKysgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGludCByQSA9IHZlY19zbChyLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQp KFNLX0EzMl9TSElGVCAtIFNLX1IzMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIGludCBnQSA9IHZlY19zbChnLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9T SElGVCAtIFNLX0czMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBi QSA9IHZlY19zbChiLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNL X0IzMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYU1pbiA9IHZl Y19taW4odmVjX21pbigoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyQSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpZ0EpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhciliQSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNp Z25lZCBjaGFyIGFNYXggPSB2ZWNfbWF4KHZlY19tYXgoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIp ckEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdBKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYkEpOworKyAg ICAgICAgLy8gc3JjQSBoYXMgYmVlbiBiaWFzZWQgdG8gWzAtMjU2XTsgY29tcGFyZSBzcmNBIGFn YWluc3QgKGRzdEErMSkuCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgZHN0QSA9IHZl Y19hbmQodmVjX2FkZCgoX192ZWN0b3IgdW5zaWduZWQgaW50KWRzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2ln bmVkIGludCkoMSA8PCBTS19BMzJfU0hJRlQpKSksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KVNLX0EzMl9NQVNL KSk7CisrICAgICAgICBfX3ZlY3RvciBfX2Jvb2wgaW50IGFMVCA9IHZlY19jbXBsdCgoX192ZWN0 b3Igc2lnbmVkIGludClzcmNBLCAoX192ZWN0b3Igc2lnbmVkIGludClkc3RBKTsKKysgICAgICAg IC8vIGEgPSAoYU1pbiAmIGFMVCkgfCAoYU1heCAmIH5hTFQpCisrICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIGEgPSB2ZWNfb3IodmVjX2FuZChhTWluLCAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcilhTFQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl Y19hbmRjKGFNYXgsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWFMVCkpOworKworKyAgICAgICAg Ly8gUGFjayB0aGUgNCAxNi1iaXQgbWFzayBwaXhlbHMgaW50byA0IDMyLWJpdCBwaXhlbHMgKG0w QSwgbTBSLCBtMEcsIG0wQiwgLi4uKS4KKysgICAgICAgIG1hc2sgPSB2ZWNfb3IodmVjX29yKGEs IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXIpLAorKyAgICAgICAgICAgICAgICAgICAgICB2ZWNf b3IoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZywgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpYikp OworKworKyAgICAgICAgLy8gSW50ZXJsZWF2ZSBpbnRvIDE2LWJpdCB3b3Jkcy4KKysgICAgICAg IGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBjaGFyKTApOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFza0xvID0gKF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWgobWFzaywgemVyb3MpOworKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFza0hpID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0 KXZlY19tZXJnZWwobWFzaywgemVyb3MpOworKworKyAgICAgICAgLy8gVXBzY2FsZSAwLi4zMSAt PiAwLi4zMiBieSBhZGRpbmcgKG1hc2sgPj4gNCkuCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1 bnNpZ25lZCBzaG9ydCB2NCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTQpOworKyAgICAg ICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25l ZCBzaG9ydCk4KTsKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY1ID0g dmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNSk7CisrICAgICAgICBtYXNrTG8gPSB2ZWNfYWRk KG1hc2tMbywgdmVjX3NyKG1hc2tMbywgdjQpKTsKKysgICAgICAgIG1hc2tIaSA9IHZlY19hZGQo bWFza0hpLCB2ZWNfc3IobWFza0hpLCB2NCkpOworKworKyAgICAgICAgLy8gTXVsdGlwbHkgYnkg c3JjQSBwZXIgMTYtYml0IGxhbmUuCisrICAgICAgICBtYXNrTG8gPSB2ZWNfbXVsKG1hc2tMbywg KF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNyY0EpOworKyAgICAgICAgbWFza0hpID0gdmVjX211 bChtYXNrSGksIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClzcmNBKTsKKysgICAgICAgIC8vIERp dmlkZSBieSAyNTYgKHJpZ2h0LXNoaWZ0IDgpLgorKyAgICAgICAgbWFza0xvID0gdmVjX3NyKG1h c2tMbywgdjgpOworKyAgICAgICAgbWFza0hpID0gdmVjX3NyKG1hc2tIaSwgdjgpOworKworKyAg ICAgICAgLy8gVW5wYWNrIGRzdCBpbnRvIDE2LWJpdCB3b3Jkcy4KKysgICAgICAgIF9fdmVjdG9y IHNpZ25lZCBzaG9ydCBkc3RMbyA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlaChk c3QsIHplcm9zKTsKKysgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBkc3RIaSA9IChfX3Zl Y3RvciBzaWduZWQgc2hvcnQpdmVjX21lcmdlbChkc3QsIHplcm9zKTsKKysgICAgICAgIC8vIG1h c2sgPSAoc3JjIC0gZHN0KSAqIG1hc2sKKysgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBz cmNTID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydClzcmM7CisrICAgICAgICBfX3ZlY3RvciBzaWdu ZWQgc2hvcnQgbUxvUyA9IHZlY19tdWwoKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCltYXNrTG8sIHZl Y19zdWIoc3JjUywgZHN0TG8pKTsKKysgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBtSGlT ID0gdmVjX211bCgoX192ZWN0b3Igc2lnbmVkIHNob3J0KW1hc2tIaSwgdmVjX3N1YihzcmNTLCBk c3RIaSkpOworKyAgICAgICAgLy8gYXJpdGhtZXRpYyBzaGlmdCByaWdodCBieSA1CisrICAgICAg ICBtTG9TID0gdmVjX3NyYShtTG9TLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdjUpOworKyAg ICAgICAgbUhpUyA9IHZlY19zcmEobUhpUywgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXY1KTsK KysgICAgICAgIC8vIHJlc3VsdCA9IGRzdCArICgoc3JjIC0gZHN0KSAqIG1hc2sgPj4gNSkKKysg ICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCByZXNMbyA9IHZlY19hZGQoZHN0TG8sIG1Mb1Mp OworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHJlc0hpID0gdmVjX2FkZChkc3RIaSwg bUhpUyk7CisrICAgICAgICAvLyBQYWNrIDE2LWJpdCBzaWduZWQgLT4gOC1iaXQgdW5zaWduZWQg d2l0aCBzYXR1cmF0aW9uLgorKyAgICAgICAgcmV0dXJuIHZlY19wYWNrc3UocmVzTG8sIHJlc0hp KTsKKysgICAgfQorKworKyAgICBzdGF0aWMgX192ZWN0b3IgdW5zaWduZWQgY2hhciBibGVuZF9s Y2QxNl9vcGFxdWVfdnN4KF9fdmVjdG9yIHVuc2lnbmVkIGNoYXImIHNyYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciYgZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyJiBtYXNrKSB7Cisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgciA9IHZlY19hbmQoU2tQYWNrZWRSMTZ4NVRv VW5tYXNrZWRSMzJ4NV9WU1gobWFzayksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KSgweDFGIDw8IFNLX1IzMl9TSElG VCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBnID0gdmVjX2FuZChTa1BhY2tl ZEcxNng1VG9Vbm1hc2tlZEczMng1X1ZTWChtYXNrKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKDB4MUYgPDwgU0tf RzMyX1NISUZUKSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGIgPSB2ZWNfYW5k KFNrUGFja2VkQjE2eDVUb1VubWFza2VkQjMyeDVfVlNYKG1hc2spLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkoMHgx RiA8PCBTS19CMzJfU0hJRlQpKSk7CisrCisrICAgICAgICAvLyBPcGFxdWUgc3JjOiBhID0gbWF4 KHIsIGcsIGIpIHNoaWZ0ZWQgdG8gYWxwaGEgbGFuZS4KKysgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIGludCByQSA9IHZlY19zbChyLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9T SElGVCAtIFNLX1IzMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBn QSA9IHZlY19zbChnLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNL X0czMl9TSElGVCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBiQSA9IHZlY19z bChiLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpKFNLX0EzMl9TSElGVCAtIFNLX0IzMl9TSElG VCkpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYSA9IHZlY19tYXgodmVjX21h eCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilyQSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ0EpLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5z aWduZWQgY2hhciliQSk7CisrCisrICAgICAgICBtYXNrID0gdmVjX29yKHZlY19vcihhLCAoX192 ZWN0b3IgdW5zaWduZWQgY2hhcilyKSwKKysgICAgICAgICAgICAgICAgICAgICAgdmVjX29yKChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKWcsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWIpKTsKKysK KysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBjaGFyKTApOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFz a0xvID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWgobWFzaywgemVyb3MpOwor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgbWFza0hpID0gKF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0KXZlY19tZXJnZWwobWFzaywgemVyb3MpOworKworKyAgICAgICAgY29uc3QgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk0KTsK KysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHY1ID0gdmVjX3NwbGF0cygo dW5zaWduZWQgc2hvcnQpNSk7CisrICAgICAgICBtYXNrTG8gPSB2ZWNfYWRkKG1hc2tMbywgdmVj X3NyKG1hc2tMbywgdjQpKTsKKysgICAgICAgIG1hc2tIaSA9IHZlY19hZGQobWFza0hpLCB2ZWNf c3IobWFza0hpLCB2NCkpOworKworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IGRzdExv ID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VoKGRzdCwgemVyb3MpOworKyAgICAg ICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IGRzdEhpID0gKF9fdmVjdG9yIHNpZ25lZCBzaG9ydCl2 ZWNfbWVyZ2VsKGRzdCwgemVyb3MpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHNy Y1MgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXNyYzsKKysgICAgICAgIF9fdmVjdG9yIHNpZ25l ZCBzaG9ydCBtTG9TID0gdmVjX211bCgoX192ZWN0b3Igc2lnbmVkIHNob3J0KW1hc2tMbywgdmVj X3N1YihzcmNTLCBkc3RMbykpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IG1IaVMg PSB2ZWNfbXVsKChfX3ZlY3RvciBzaWduZWQgc2hvcnQpbWFza0hpLCB2ZWNfc3ViKHNyY1MsIGRz dEhpKSk7CisrICAgICAgICBtTG9TID0gdmVjX3NyYShtTG9TLCAoX192ZWN0b3IgdW5zaWduZWQg c2hvcnQpdjUpOworKyAgICAgICAgbUhpUyA9IHZlY19zcmEobUhpUywgKF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0KXY1KTsKKysgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCByZXNMbyA9IHZl Y19hZGQoZHN0TG8sIG1Mb1MpOworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IHJlc0hp ID0gdmVjX2FkZChkc3RIaSwgbUhpUyk7CisrICAgICAgICByZXR1cm4gdmVjX3BhY2tzdShyZXNM bywgcmVzSGkpOworKyAgICB9CisrCisrICAgIHZvaWQgYmxpdF9yb3dfbGNkMTYoU2tQTUNvbG9y IGRzdFtdLCBjb25zdCB1aW50MTZfdCBtYXNrW10sIFNrQ29sb3Igc3JjLAorKyAgICAgICAgICAg ICAgICAgICAgICAgIGludCB3aWR0aCwgU2tQTUNvbG9yKSB7CisrICAgICAgICBpZiAod2lkdGgg PD0gMCkgeworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIGludCBz cmNBID0gU2tDb2xvckdldEEoc3JjKTsKKysgICAgICAgIGludCBzcmNSID0gU2tDb2xvckdldFIo c3JjKTsKKysgICAgICAgIGludCBzcmNHID0gU2tDb2xvckdldEcoc3JjKTsKKysgICAgICAgIGlu dCBzcmNCID0gU2tDb2xvckdldEIoc3JjKTsKKysgICAgICAgIHNyY0EgPSBTa0FscGhhMjU1VG8y NTYoc3JjQSk7CisrCisrICAgICAgICBpZiAod2lkdGggPj0gNCkgeworKyAgICAgICAgICAgIFNr QVNTRVJUKFNrSXNBbGlnbjQoKHVpbnRwdHJfdCkgZHN0KSk7CisrICAgICAgICAgICAgd2hpbGUg KCFTa0lzQWxpZ24xNigodWludHB0cl90KSBkc3QpKSB7CisrICAgICAgICAgICAgICAgICpkc3Qg PSBibGVuZF9sY2QxNihzcmNBLCBzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFzayk7CisrICAg ICAgICAgICAgICAgIG1hc2srKzsgZHN0Kys7IHdpZHRoLS07CisrICAgICAgICAgICAgfQorKwor KyAgICAgICAgICAgIC8vIFJlcGxpY2F0ZSBzb3VyY2UgYWNyb3NzIDQgbGFuZXMsIHRoZW4gdW5w YWNrIGxvdyBoYWxmIHRvIGludGVybGVhdmVkIDE2LWJpdC4KKysgICAgICAgICAgICB1aW50MzJf dCBzcmNQTSA9IFNrUGFja0FSR0IzMigweEZGLCBzcmNSLCBzcmNHLCBzcmNCKTsKKysgICAgICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc3JjX3YzMiA9IHZlY19zcGxhdHMoc3JjUE0pOwor KyAgICAgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3MgPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgc3JjX3YgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXNyY192MzIsIHpl cm9zKTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHNyY0FfdiA9IChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKXZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KXNyY0EpOworKwor KyAgICAgICAgICAgIHdoaWxlICh3aWR0aCA+PSA0KSB7CisrICAgICAgICAgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgZHN0X3YgPSB2ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIq KWRzdCk7CisrICAgICAgICAgICAgICAgIC8vIExvYWQgOCBieXRlcyAoNHggdWludDE2IG1hc2sp IGludG8gbG93IGhhbGYgb2YgdmVjdG9yLgorKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtbG87 CisrICAgICAgICAgICAgICAgIG1lbWNweSgmbWxvLCBtYXNrLCBzaXplb2YobWxvKSk7CisrICAg ICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXNrX2xvdyA9CisrICAg ICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKXttbG8sIDB9Owor KyAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIG1hc2tfdiA9IChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKW1hc2tfbG93OworKworKyAgICAgICAgICAgICAgICAvLyBDaGVjayBp ZiBhbGwgbWFzayB2YWx1ZXMgYXJlIHplcm8gKHNraXAgYmxlbmRpbmcgaWYgc28pLgorKyAgICAg ICAgICAgICAgICBpZiAoIXZlY19hbGxfZXEoKF9fdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZylt YXNrX3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3BsYXRzKCh1bnNp Z25lZCBsb25nIGxvbmcpMCkpKSB7CisrICAgICAgICAgICAgICAgICAgICAvLyBVbnBhY2sgbG93 IDggYnl0ZXMgb2YgbWFzayAoNHggdWludDE2KSBpbnRvIDR4IHVpbnQzMiAod2l0aCB6ZXJvcyku CisrICAgICAgICAgICAgICAgICAgICAvLyBaZXJvLWV4dGVuZCB0aGUgNCB1aW50MTYgbWFza3Mg dG8gNCB1aW50MzIgKDE2LWJpdC1ncmFudWxhcml0eQorKyAgICAgICAgICAgICAgICAgICAgLy8g bWVyZ2UsIG1hdGNoaW5nIFNTRTIncyBfbW1fdW5wYWNrbG9fZXBpMTYpOyBhIGNoYXItZ3JhbnVs YXJpdHkKKysgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIHdvdWxkIGJ5dGUtc3RyZXRjaCB0 aGUgUkdCNTY1IHZhbHVlIGFuZCBtaXNwbGFjZSB0aGUgc2hpZnRzLgorKyAgICAgICAgICAgICAg ICAgICAgbWFza192ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlaCgoX192ZWN0 b3IgdW5zaWduZWQgc2hvcnQpbWFza192LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCl6ZXJvcyk7CisrICAgICAgICAgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHJl c3VsdCA9CisrICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRfbGNkMTZfdnN4KHNyY192LCBk c3RfdiwgbWFza192LCBzcmNBX3YpOworKyAgICAgICAgICAgICAgICAgICAgdmVjX3hzdChyZXN1 bHQsIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAg ICAgICAgICAgIGRzdCArPSA0OyBtYXNrICs9IDQ7IHdpZHRoIC09IDQ7CisrICAgICAgICAgICAg fQorKyAgICAgICAgfQorKworKyAgICAgICAgd2hpbGUgKHdpZHRoID4gMCkgeworKyAgICAgICAg ICAgICpkc3QgPSBibGVuZF9sY2QxNihzcmNBLCBzcmNSLCBzcmNHLCBzcmNCLCAqZHN0LCAqbWFz ayk7CisrICAgICAgICAgICAgbWFzaysrOyBkc3QrKzsgd2lkdGgtLTsKKysgICAgICAgIH0KKysg ICAgfQorKworKyAgICB2b2lkIGJsaXRfcm93X2xjZDE2X29wYXF1ZShTa1BNQ29sb3IgZHN0W10s IGNvbnN0IHVpbnQxNl90IG1hc2tbXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U2tDb2xvciBzcmMsIGludCB3aWR0aCwgU2tQTUNvbG9yIG9wYXF1ZURzdCkgeworKyAgICAgICAg aWYgKHdpZHRoIDw9IDApIHsKKysgICAgICAgICAgICByZXR1cm47CisrICAgICAgICB9CisrICAg ICAgICBpbnQgc3JjUiA9IFNrQ29sb3JHZXRSKHNyYyk7CisrICAgICAgICBpbnQgc3JjRyA9IFNr Q29sb3JHZXRHKHNyYyk7CisrICAgICAgICBpbnQgc3JjQiA9IFNrQ29sb3JHZXRCKHNyYyk7Cisr CisrICAgICAgICBpZiAod2lkdGggPj0gNCkgeworKyAgICAgICAgICAgIFNrQVNTRVJUKFNrSXNB bGlnbjQoKHVpbnRwdHJfdCkgZHN0KSk7CisrICAgICAgICAgICAgd2hpbGUgKCFTa0lzQWxpZ24x NigodWludHB0cl90KSBkc3QpKSB7CisrICAgICAgICAgICAgICAgICpkc3QgPSBibGVuZF9sY2Qx Nl9vcGFxdWUoc3JjUiwgc3JjRywgc3JjQiwgKmRzdCwgKm1hc2ssIG9wYXF1ZURzdCk7CisrICAg ICAgICAgICAgICAgIG1hc2srKzsgZHN0Kys7IHdpZHRoLS07CisrICAgICAgICAgICAgfQorKwor KyAgICAgICAgICAgIHVpbnQzMl90IHNyY1BNID0gU2tQYWNrQVJHQjMyKDB4RkYsIHNyY1IsIHNy Y0csIHNyY0IpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGludCBzcmNfdjMyID0g dmVjX3NwbGF0cyhzcmNQTSk7CisrICAgICAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQg Y2hhciB6ZXJvcyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICAgICAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciBzcmNfdiA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpc3JjX3YzMiwgemVyb3MpOworKworKyAgICAgICAgICAgIHdoaWxlICh3aWR0aCA+ PSA0KSB7CisrICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0X3YgPSB2 ZWNfeGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICAgICAgICAgIHVp bnQ2NF90IG1sbzsKKysgICAgICAgICAgICAgICAgbWVtY3B5KCZtbG8sIG1hc2ssIHNpemVvZiht bG8pKTsKKysgICAgICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nIG1hc2tf bG93ID0KKysgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBsb25nIGxvbmcp e21sbywgMH07CisrICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbWFza192 ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpbWFza19sb3c7CisrCisrICAgICAgICAgICAgICAg IGlmICghdmVjX2FsbF9lcSgoX192ZWN0b3IgdW5zaWduZWQgbG9uZyBsb25nKW1hc2tfdiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcg bG9uZykwKSkpIHsKKysgICAgICAgICAgICAgICAgICAgIC8vIFplcm8tZXh0ZW5kIHRoZSA0IHVp bnQxNiBtYXNrcyB0byA0IHVpbnQzMiAoMTYtYml0LWdyYW51bGFyaXR5CisrICAgICAgICAgICAg ICAgICAgICAvLyBtZXJnZSwgbWF0Y2hpbmcgU1NFMidzIF9tbV91bnBhY2tsb19lcGkxNik7IGEg Y2hhci1ncmFudWxhcml0eQorKyAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2Ugd291bGQgYnl0 ZS1zdHJldGNoIHRoZSBSR0I1NjUgdmFsdWUgYW5kIG1pc3BsYWNlIHRoZSBzaGlmdHMuCisrICAg ICAgICAgICAgICAgICAgICBtYXNrX3YgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVy Z2VoKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCltYXNrX3YsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0KXplcm9zKTsKKysgICAgICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgcmVzdWx0ID0KKysgICAgICAgICAgICAgICAgICAgICAgICBibGVuZF9sY2QxNl9v cGFxdWVfdnN4KHNyY192LCBkc3RfdiwgbWFza192KTsKKysgICAgICAgICAgICAgICAgICAgIHZl Y194c3QocmVzdWx0LCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsKKysgICAgICAgICAgICAgICAg fQorKyAgICAgICAgICAgICAgICBkc3QgKz0gNDsgbWFzayArPSA0OyB3aWR0aCAtPSA0OworKyAg ICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIHdoaWxlICh3aWR0aCA+IDApIHsK KysgICAgICAgICAgICAqZHN0ID0gYmxlbmRfbGNkMTZfb3BhcXVlKHNyY1IsIHNyY0csIHNyY0Is ICpkc3QsICptYXNrLCBvcGFxdWVEc3QpOworKyAgICAgICAgICAgIG1hc2srKzsgZHN0Kys7IHdp ZHRoLS07CisrICAgICAgICB9CisrICAgIH0KKysKKyAjZWxpZiBkZWZpbmVkKFNLX0FSTV9IQVNf TkVPTikKKyAgICAgI2luY2x1ZGUgPGFybV9uZW9uLmg+CisgCitkaWZmIC0tZ2l0IGEvZ2Z4L3Nr aWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFByb2NTdGF0ZV9vcHRzLmggYi9nZngvc2tpYS9za2lh L3NyYy9vcHRzL1NrQml0bWFwUHJvY1N0YXRlX29wdHMuaAoraW5kZXggNmQwMWEyZjQ0NThmLi44 N2IxNjBlZDdhMWUgMTAwNjQ0CistLS0gYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQml0bWFw UHJvY1N0YXRlX29wdHMuaAorKysrIGIvZ2Z4L3NraWEvc2tpYS9zcmMvb3B0cy9Ta0JpdG1hcFBy b2NTdGF0ZV9vcHRzLmgKK0BAIC0yOSw2ICsyOSw4IEBACisgICAgICNpbmNsdWRlIDxsYXN4aW50 cmluLmg+CisgI2VsaWYgU0tfQ1BVX0xTWF9MRVZFTCA+PSBTS19DUFVfTFNYX0xFVkVMX0xTWAor ICAgICAjaW5jbHVkZSA8bHN4aW50cmluLmg+CisrI2VsaWYgZGVmaW5lZChTS19DUFVfUFBDKSAm JiBkZWZpbmVkKF9fVlNYX18pCisrICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+CisgI2VuZGlmCisg CisgbmFtZXNwYWNlIFNLX09QVFNfTlMgeworQEAgLTI2MCw2ICsyNjIsMTY4IEBAIHN0YXRpYyB2 b2lkIGRlY29kZV9wYWNrZWRfY29vcmRpbmF0ZXNfYW5kX3dlaWdodChVMzIgcGFja2VkLCBPdXQq IHYwLCBPdXQqIHYxLCBPCisgICAgICAgICB9CisgICAgIH0KKyAKKysjZWxpZiBkZWZpbmVkKFNL X0NQVV9QUEMpICYmIGRlZmluZWQoX19WU1hfXykKKysKKysgICAgLy8gSGVscGVyOiBzY2FsYXIg dWludDMyX3QgLT4gMTYtYnl0ZSB2ZWN0b3Igd2l0aCB4IGluIGxvdyAzMiBiaXRzLCB6ZXJvIGVs c2V3aGVyZS4KKysgICAgLy8gRXF1aXZhbGVudCBvZiB4ODYncyBfbW1fY3Z0c2kzMl9zaTEyOC4K KysgICAgc3RhdGljIGlubGluZSBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHZzeF9jdnRfdTMyX3Rv X3ZlYyh1aW50MzJfdCB4KSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgdiA9IChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpe3gsIDAsIDAsIDB9OworKyAgICAgICAgcmV0dXJuIChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKXY7CisrICAgIH0KKysKKysgICAgLy8gSGVscGVyOiBQUEM2NCBW U1ggZXF1aXZhbGVudCBvZiB4ODYncyBfbW1fbWFkZHVic19lcGkxNi4gTXVsdGlwbGllcyBwYWly cyBvZgorKyAgICAvLyAodW5zaWduZWQgYnl0ZSwgc2lnbmVkIGJ5dGUpIGFuZCBhZGRzIGFkamFj ZW50IHBhaXJzIHRvIHByb2R1Y2UgMTYtYml0IHNpZ25lZAorKyAgICAvLyB2YWx1ZXMsIHNhdHVy YXRpbmcgdG8gaW50MTYuIEltcGxlbWVudGF0aW9uIHRyYW5zY3JpYmVzIHRoZSBHQ0MgcHBjX3dy YXBwZXJzCisrICAgIC8vIHRtbWludHJpbi5oIHNlcXVlbmNlIGZvciBlbmRpYW5uZXNzIGNvcnJl Y3RuZXNzIG9uIExFIFBQQzY0LgorKyAgICBzdGF0aWMgaW5saW5lIF9fdmVjdG9yIHNpZ25lZCBz aG9ydCB2c3hfbWFkZHVic19lcGkxNihfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIEEsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192 ZWN0b3Igc2lnbmVkIGNoYXIgQikgeworKyAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IF9f ZmYgPSB2ZWNfc3BsYXRzKChzaWduZWQgc2hvcnQpMHgwMEZGKTsKKysgICAgICAgIF9fdmVjdG9y IHNpZ25lZCBzaG9ydCBfX0MgPSB2ZWNfYW5kKHZlY191bnBhY2toKChfX3ZlY3RvciBzaWduZWQg Y2hhcilBKSwgX19mZik7CisrICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgX19EID0gdmVj X2FuZCh2ZWNfdW5wYWNrbCgoX192ZWN0b3Igc2lnbmVkIGNoYXIpQSksIF9fZmYpOworKyAgICAg ICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IF9fRSA9IHZlY191bnBhY2toKEIpOworKyAgICAgICAg X192ZWN0b3Igc2lnbmVkIHNob3J0IF9fRiA9IHZlY191bnBhY2tsKEIpOworKyAgICAgICAgX19D ID0gdmVjX211bChfX0MsIF9fRSk7CisrICAgICAgICBfX0QgPSB2ZWNfbXVsKF9fRCwgX19GKTsK KysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgX19vZGRzICA9IChfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyKXsKKysgICAgICAgICAgICAwLDEsIDQsNSwgOCw5LCAxMiwxMywgIDE2 LDE3LCAyMCwyMSwgMjQsMjUsIDI4LDI5CisrICAgICAgICB9OworKyAgICAgICAgY29uc3QgX192 ZWN0b3IgdW5zaWduZWQgY2hhciBfX2V2ZW5zID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpewor KyAgICAgICAgICAgIDIsMywgNiw3LCAxMCwxMSwgMTQsMTUsICAxOCwxOSwgMjIsMjMsIDI2LDI3 LCAzMCwzMQorKyAgICAgICAgfTsKKysgICAgICAgIF9fRSA9IChfX3ZlY3RvciBzaWduZWQgc2hv cnQpdmVjX3Blcm0oKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpX19DLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgY2hhcilf X0QsIF9fb2Rkcyk7CisrICAgICAgICBfX0YgPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0KXZlY19w ZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKV9fQywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpX19ELCBfX2V2 ZW5zKTsKKysgICAgICAgIHJldHVybiB2ZWNfYWRkcyhfX0UsIF9fRik7CisrICAgIH0KKysKKysg ICAgLypub3Qgc3RhdGljKi8gaW5saW5lCisrICAgIHZvaWQgUzMyX2FscGhhX0QzMl9maWx0ZXJf RFgoY29uc3QgU2tCaXRtYXBQcm9jU3RhdGUmIHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdWludDMyX3QqIHh5LCBpbnQgY291bnQsIHVpbnQzMl90KiBjb2xvcnMp IHsKKysgICAgICAgIFNrQVNTRVJUKGNvdW50ID4gMCAmJiBjb2xvcnMgIT0gbnVsbHB0cik7Cisr ICAgICAgICBTa0FTU0VSVChzLmZCaWxlcnApOworKyAgICAgICAgU2tBU1NFUlQoa04zMl9Ta0Nv bG9yVHlwZSA9PSBzLmZQaXhtYXAuY29sb3JUeXBlKCkpOworKyAgICAgICAgU2tBU1NFUlQocy5m QWxwaGFTY2FsZSA8PSAyNTYpOworKworKyAgICAgICAgLy8gaW50ZXJwb2xhdGVfaW5feCgpIGlz IHRoZSBjcnV4IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgaW50ZXJwb2xhdGluZyBpbiBYCisrICAg ICAgICAvLyBmb3IgdXAgdG8gdHdvIG91dHB1dCBwaXhlbHMgKEEgYW5kIEIpIHVzaW5nIHZzeF9t YWRkdWJzX2VwaTE2KCkuCisrICAgICAgICBhdXRvIGludGVycG9sYXRlX2luX3ggPSBbXSh1aW50 MzJfdCBBMCwgdWludDMyX3QgQTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBCMCwgdWludDMyX3QgQjEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0cykgeworKyAg ICAgICAgICAgIC8vIF9tbV91bnBhY2tsb19lcGk4KF9tbV9jdnRzaTMyX3NpMTI4KEEwKSwgX21t X2N2dHNpMzJfc2kxMjgoQTEpKQorKyAgICAgICAgICAgIC8vID0gdmVjX21lcmdlaCBvbiB1Y2hh ciwgc2luY2UgdGhlIGlucHV0IHZlY3RvcnMgaGF2ZSBvbmx5IHRoZSBsb3cgMzIgYml0cyBzZXQu CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBpbnRlcmxhY2VkX0EgPSB2ZWNf bWVyZ2VoKHZzeF9jdnRfdTMyX3RvX3ZlYyhBMCksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c3hfY3Z0X3UzMl90b192ZWMo QTEpKTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGludGVybGFjZWRfQiA9 IHZlY19tZXJnZWgodnN4X2N2dF91MzJfdG9fdmVjKEIwKSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzeF9jdnRfdTMyX3Rv X3ZlYyhCMSkpOworKyAgICAgICAgICAgIC8vIF9tbV91bnBhY2tsb19lcGk2NCA9IHZlY19tZXJn ZWggb24gbG9uZyBsb25nLgorKyAgICAgICAgICAgIF9fdmVjdG9yIGxvbmcgbG9uZyBsbzY0ID0g dmVjX21lcmdlaCgoX192ZWN0b3IgbG9uZyBsb25nKWludGVybGFjZWRfQSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIGxvbmcgbG9u ZylpbnRlcmxhY2VkX0IpOworKyAgICAgICAgICAgIHJldHVybiB2c3hfbWFkZHVic19lcGkxNigo X192ZWN0b3IgdW5zaWduZWQgY2hhcilsbzY0LCBpbnRlcmxhY2VkX3hfd2VpZ2h0cyk7CisrICAg ICAgICB9OworKworKyAgICAgICAgLy8gSW50ZXJwb2xhdGUge0EwLi5BM30gLS0+IG91dHB1dCBw aXhlbCBBLCBhbmQge0IwLi5CM30gLS0+IG91dHB1dCBwaXhlbCBCLgorKyAgICAgICAgLy8gUmV0 dXJucyB0d28gcGl4ZWxzLCB3aXRoIGVhY2ggY29sb3IgY2hhbm5lbCBpbiBhIDE2LWJpdCBsYW5l IG9mIHRoZSByZXN1bHQuCisrICAgICAgICBhdXRvIGludGVycG9sYXRlX2luX3hfYW5kX3kgPSBb Jl0odWludDMyX3QgQTAsIHVpbnQzMl90IEExLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IEEyLCB1aW50MzJfdCBBMywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBCMCwgdWludDMyX3QgQjEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQjIsIHVp bnQzMl90IEIzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f dmVjdG9yIHNpZ25lZCBjaGFyIGludGVybGFjZWRfeF93ZWlnaHRzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3eSkgeworKyAgICAgICAgICAgIF9fdmVj dG9yIHNpZ25lZCBzaG9ydCB0b3AgPSBpbnRlcnBvbGF0ZV9pbl94KEEwLEExLCBCMCxCMSwgaW50 ZXJsYWNlZF94X3dlaWdodHMpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBi b3QgPSBpbnRlcnBvbGF0ZV9pbl94KEEyLEEzLCBCMixCMywgaW50ZXJsYWNlZF94X3dlaWdodHMp OworKworKyAgICAgICAgICAgIC8vIDE2KnRvcCArIChib3QtdG9wKSp3eSwgbWlycm9yaW5nIHRo ZSBTU0UyIGZvcm0gKHNhdmVzIG9uZSBtdWx0aXBseSB2cy4gdGhlCisrICAgICAgICAgICAgLy8g c3RyYWlnaHRmb3J3YXJkIHRvcCooMTYtd3kpICsgYm90Knd5KS4KKysgICAgICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCB2NCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTQpOwor KyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCB3eV92ID0gdmVjX3NwbGF0cygoc2ln bmVkIHNob3J0KXd5KTsKKysgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgc2hvcnQgcHggPSB2 ZWNfYWRkKHZlY19zbCh0b3AsIHY0KSwgdmVjX211bCh2ZWNfc3ViKGJvdCwgdG9wKSwgd3lfdikp OworKworKyAgICAgICAgICAgIC8vIFNjYWxlIGRvd24gYnkgdG90YWwgbWF4IHdlaWdodCAxNngx NiA9IDI1Ni4KKysgICAgICAgICAgICBweCA9IChfX3ZlY3RvciBzaWduZWQgc2hvcnQpdmVjX3Ny KChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClweCwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQp OCkpOworKworKyAgICAgICAgICAgIC8vIFNjYWxlIGJ5IGFscGhhIGlmIG5lZWRlZC4KKysgICAg ICAgICAgICBpZiAocy5mQWxwaGFTY2FsZSA8IDI1NikgeworKyAgICAgICAgICAgICAgICBfX3Zl Y3RvciBzaWduZWQgc2hvcnQgc2NhbGVfdiA9IHZlY19zcGxhdHMoKHNpZ25lZCBzaG9ydClzLmZB bHBoYVNjYWxlKTsKKysgICAgICAgICAgICAgICAgcHggPSAoX192ZWN0b3Igc2lnbmVkIHNob3J0 KXZlY19zcigoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX211bChweCwgc2NhbGVfdiksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3Nw bGF0cygodW5zaWduZWQgc2hvcnQpOCkpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBy ZXR1cm4gcHg7CisrICAgICAgICB9OworKworKyAgICAgICAgLy8gV2UncmUgaW4gX0RYIG1vZGUg aGVyZSwgc28gd2UncmUgb25seSB2YXJ5aW5nIGluIFguCisrICAgICAgICAvLyBUaGF0IG1lYW5z IHRoZSBmaXJzdCBlbnRyeSBvZiB4eSBpcyBvdXIgY29uc3RhbnQgcGFpciBvZiBZIGNvb3JkaW5h dGVzIGFuZCB3ZWlnaHQgaW4gWS4KKysgICAgICAgIGludCB5MCwgeTEsIHd5OworKyAgICAgICAg ZGVjb2RlX3BhY2tlZF9jb29yZGluYXRlc19hbmRfd2VpZ2h0KCp4eSsrLCAmeTAsICZ5MSwgJnd5 KTsKKysKKysgICAgICAgIGF1dG8gcm93MCA9IChjb25zdCB1aW50MzJfdCopKChjb25zdCB1aW50 OF90KilzLmZQaXhtYXAuYWRkcigpICsgeTAgKiBzLmZQaXhtYXAucm93Qnl0ZXMoKSksCisrICAg ICAgICAgICAgIHJvdzEgPSAoY29uc3QgdWludDMyX3QqKSgoY29uc3QgdWludDhfdCopcy5mUGl4 bWFwLmFkZHIoKSArIHkxICogcy5mUGl4bWFwLnJvd0J5dGVzKCkpOworKworKyAgICAgICAgd2hp bGUgKGNvdW50ID49IDQpIHsKKysgICAgICAgICAgICAvLyBXZSBjYW4gcmVhbGx5IGdldCBnb2lu ZywgbG9hZGluZyA0IFgtcGFpcnMgYXQgYSB0aW1lIHRvIHByb2R1Y2UgNCBvdXRwdXQgcGl4ZWxz LgorKyAgICAgICAgICAgIGludCB4MFs0XSwKKysgICAgICAgICAgICAgICAgeDFbNF07CisrICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHd4OworKworKyAgICAgICAgICAgIC8vIGRl Y29kZV9wYWNrZWRfY29vcmRpbmF0ZXNfYW5kX3dlaWdodCgpLCA0eC4KKysgICAgICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBpbnQgcGFja2VkID0gKF9fdmVjdG9yIHVuc2lnbmVkIGludCl2ZWNf eGwoMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKXh5KTsKKysgICAgICAgICAgICBfX3ZlY3RvciB1 bnNpZ25lZCBpbnQgeDBfdiA9IHZlY19zcihwYWNrZWQsIHZlY19zcGxhdHMoMTh1KSk7CisrICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IHgxX3YgPSB2ZWNfYW5kKHBhY2tlZCwgdmVj X3NwbGF0cygweDNmZmZ1KSk7CisrICAgICAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWdu ZWQgY2hhcil4MF92LCAwLCAodW5zaWduZWQgY2hhciopeDApOworKyAgICAgICAgICAgIHZlY194 c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeDFfdiwgMCwgKHVuc2lnbmVkIGNoYXIqKXgxKTsK KysgICAgICAgICAgICB3eCA9IHZlY19hbmQodmVjX3NyKHBhY2tlZCwgdmVjX3NwbGF0cygxNHUp KSwgdmVjX3NwbGF0cygweGZ1KSk7ICAvLyBbMCwxNV0KKysKKysgICAgICAgICAgICAvLyBTcGxh dCBlYWNoIHggd2VpZ2h0IDR4IChmb3IgZWFjaCBjb2xvciBjaGFubmVsKSBhcyB3ciBmb3IgcGl4 ZWxzIG9uIHRoZSByaWdodCBhdCB4MSwKKysgICAgICAgICAgICAvLyBhbmQgc2l4dGVlbiBtaW51 cyB0aGF0IGFzIHdsIGZvciBwaXhlbHMgb24gdGhlIGxlZnQgYXQgeDAuCisrICAgICAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciB3cl9tYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIpeworKyAgICAgICAgICAgICAgICAwLDAsMCwwLCA0LDQsNCw0LCA4LDgsOCw4LCAxMiwx MiwxMiwxMgorKyAgICAgICAgICAgIH07CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg Y2hhciB3ciA9IHZlY19wZXJtKChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXd4LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpd3gsIHdyX21hc2spOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgd2wgPSB2ZWNfc3ViKHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMTYpLCB3cik7CisrCisr ICAgICAgICAgICAgLy8gSW50ZXJsYWNlIHdsIGFuZCB3ciBmb3IgdnN4X21hZGR1YnNfZXBpMTYo KS4KKysgICAgICAgICAgICBfX3ZlY3RvciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0 c19BQiA9IChfX3ZlY3RvciBzaWduZWQgY2hhcil2ZWNfbWVyZ2VoKHdsLCB3cik7CisrICAgICAg ICAgICAgX192ZWN0b3Igc2lnbmVkIGNoYXIgaW50ZXJsYWNlZF94X3dlaWdodHNfQ0QgPSAoX192 ZWN0b3Igc2lnbmVkIGNoYXIpdmVjX21lcmdlbCh3bCwgd3IpOworKworKyAgICAgICAgICAgIGVu dW0geyBBLEIsQyxEIH07CisrCisrICAgICAgICAgICAgX192ZWN0b3Igc2lnbmVkIHNob3J0IEFC ID0gaW50ZXJwb2xhdGVfaW5feF9hbmRfeSgKKysgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBb QV1dLCByb3cwW3gxW0FdXSwgcm93MVt4MFtBXV0sIHJvdzFbeDFbQV1dLAorKyAgICAgICAgICAg ICAgICAgICAgcm93MFt4MFtCXV0sIHJvdzBbeDFbQl1dLCByb3cxW3gwW0JdXSwgcm93MVt4MVtC XV0sCisrICAgICAgICAgICAgICAgICAgICBpbnRlcmxhY2VkX3hfd2VpZ2h0c19BQiwgd3kpOwor KyAgICAgICAgICAgIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBDRCA9IGludGVycG9sYXRlX2luX3hf YW5kX3koCisrICAgICAgICAgICAgICAgICAgICByb3cwW3gwW0NdXSwgcm93MFt4MVtDXV0sIHJv dzFbeDBbQ11dLCByb3cxW3gxW0NdXSwKKysgICAgICAgICAgICAgICAgICAgIHJvdzBbeDBbRF1d LCByb3cwW3gxW0RdXSwgcm93MVt4MFtEXV0sIHJvdzFbeDFbRF1dLAorKyAgICAgICAgICAgICAg ICAgICAgaW50ZXJsYWNlZF94X3dlaWdodHNfQ0QsIHd5KTsKKysKKysgICAgICAgICAgICAvLyBQ YWNrIDE2LWJpdCBzaWduZWQgLT4gOC1iaXQgdW5zaWduZWQgd2l0aCBzYXR1cmF0aW9uLCB3cml0 ZSA0IHBpeGVscy4KKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHBhY2tlZF9v dXQgPSB2ZWNfcGFja3N1KEFCLCBDRCk7CisrICAgICAgICAgICAgdmVjX3hzdChwYWNrZWRfb3V0 LCAwLCAodW5zaWduZWQgY2hhciopY29sb3JzKTsKKysgICAgICAgICAgICB4eSAgICAgKz0gNDsK KysgICAgICAgICAgICBjb2xvcnMgKz0gNDsKKysgICAgICAgICAgICBjb3VudCAgLT0gNDsKKysg ICAgICAgIH0KKysKKysgICAgICAgIHdoaWxlIChjb3VudCAtLT4gMCkgeworKyAgICAgICAgICAg IC8vIFNhbWUgZmxvdyBhcyB0aGUgY291bnQgPj0gNCBsb29wLCBidXQgd3JpdGluZyBvbmUgcGl4 ZWwuCisrICAgICAgICAgICAgaW50IHgwLCB4MSwgd3g7CisrICAgICAgICAgICAgZGVjb2RlX3Bh Y2tlZF9jb29yZGluYXRlc19hbmRfd2VpZ2h0KCp4eSsrLCAmeDAsICZ4MSwgJnd4KTsKKysKKysg ICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHdyID0gdmVjX3NwbGF0cygodW5zaWdu ZWQgY2hhcil3eCk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB3bCA9IHZl Y19zdWIodmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxNiksIHdyKTsKKysgICAgICAgICAgICBf X3ZlY3RvciBzaWduZWQgY2hhciBpbnRlcmxhY2VkX3hfd2VpZ2h0cyA9IChfX3ZlY3RvciBzaWdu ZWQgY2hhcil2ZWNfbWVyZ2VoKHdsLCB3cik7CisrCisrICAgICAgICAgICAgX192ZWN0b3Igc2ln bmVkIHNob3J0IEF2ID0gaW50ZXJwb2xhdGVfaW5feF9hbmRfeSgKKysgICAgICAgICAgICAgICAg ICAgIHJvdzBbeDBdLCByb3cwW3gxXSwgcm93MVt4MF0sIHJvdzFbeDFdLAorKyAgICAgICAgICAg ICAgICAgICAgMCwgMCwgMCwgMCwKKysgICAgICAgICAgICAgICAgICAgIGludGVybGFjZWRfeF93 ZWlnaHRzLCB3eSk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBwYWNrZWRf b3V0ID0gdmVjX3BhY2tzdShBdiwKKysgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciBzaWdu ZWQgc2hvcnQpKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezB9KTsKKysgICAgICAgICAgICAqY29s b3JzKysgPSAoKF9fdmVjdG9yIHVuc2lnbmVkIGludClwYWNrZWRfb3V0KVswXTsKKysgICAgICAg IH0KKysgICAgfQorKworICNlbGlmIFNLX0NQVV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZF TF9MQVNYCisgICAgIC8qbm90IHN0YXRpYyovIGlubGluZQorICAgICB2b2lkIFMzMl9hbHBoYV9E MzJfZmlsdGVyX0RYKGNvbnN0IFNrQml0bWFwUHJvY1N0YXRlJiBzLAorZGlmZiAtLWdpdCBhL2dm eC9za2lhL3NraWEvc3JjL29wdHMvU2tCbGl0Um93X29wdHMuaCBiL2dmeC9za2lhL3NraWEvc3Jj L29wdHMvU2tCbGl0Um93X29wdHMuaAoraW5kZXggZDFkZTU2ODFhNzJlLi5kMDM5MDhhMDNhMzIg MTAwNjQ0CistLS0gYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrQmxpdFJvd19vcHRzLmgKKysr KyBiL2dmeC9za2lhL3NraWEvc3JjL29wdHMvU2tCbGl0Um93X29wdHMuaAorQEAgLTY4LDYgKzY4 LDQzIEBACisgICAgIH0KKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBk ZWZpbmVkKF9fVlNYX18pCisrICAgICNpbmNsdWRlIDxhbHRpdmVjLmg+CisrCisrICAgIC8vIE5h dGl2ZSBWU1gvQWx0aVZlYyBwb3J0IG9mIFNrUE1TcmNPdmVyX1NTRTIuCisrICAgIC8vIFNhbWUg YWxnb3JpdGhtOiBzcmMgKyBkc3QqKDI1Ni1zcmNBbHBoYSkvMjU2LgorKyAgICBzdGF0aWMgaW5s aW5lIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgU2tQTVNyY092ZXJfVlNYKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZHN0KSB7CisrICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBpbnQgc3JjX3UzMiA9IChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpc3Jj OworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50IGRzdF91MzIgPSAoX192ZWN0b3IgdW5z aWduZWQgaW50KWRzdDsKKysKKysgICAgICAgIC8vIHNjYWxlID0gMjU2IC0gKHNyYyA+PiAyNCkg IChwZXIgMzItYml0IGxhbmUpCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBpbnQgc2NhbGUg PSB2ZWNfc3ViKHZlY19zcGxhdHMoKHVuc2lnbmVkIGludCkyNTYpLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfc3Ioc3JjX3UzMiwgdmVjX3NwbGF0 cygyNHUpKSk7CisrICAgICAgICAvLyBzY2FsZV94MiA9IChzY2FsZSA8PCAxNikgfCBzY2FsZSAg LS0gc3BsYXQgdGhlIHNjYWxlIGludG8gYm90aCAxNi1iaXQgaGFsdmVzCisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBpbnQgc2NhbGVfeDIgPSB2ZWNfb3IodmVjX3NsKHNjYWxlLCB2ZWNfc3Bs YXRzKDE2dSkpLCBzY2FsZSk7CisrCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgcmJfbWFzayA9IHZlY19zcGxhdHMoMHgwMEZGMDBGRnUpOworKworKyAgICAgICAgLy8gcmIg PSAoZHN0ICYgMHgwMEZGMDBGRikgKiBzY2FsZV94MiA+PiA4ICAgKFIgYW5kIEIgY2hhbm5lbHMg aW4gMTYtYml0IGxhbmVzKQorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcmIgPSAo X192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX2FuZChyYl9tYXNrLCBkc3RfdTMyKTsKKysgICAg ICAgIHJiID0gdmVjX211bChyYiwgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXNjYWxlX3gyKTsK KysgICAgICAgIHJiID0gdmVjX3NyKHJiLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KSk7 CisrCisrICAgICAgICAvLyBnYSA9IChkc3QgPj4gOCkgKiBzY2FsZV94MiAgdGhlbiBtYXNrIG91 dCB0aGUgcmIgY2hhbm5lbHMKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdhID0g dmVjX3NyKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClkc3RfdTMyLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQp OCkpOworKyAgICAgICAgZ2EgPSB2ZWNfbXVsKGdhLCAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQp c2NhbGVfeDIpOworKyAgICAgICAgLy8gYW5kYyhnYSwgcmJfbWFzaykgPSBnYSAmIH5yYl9tYXNr ICAtLSBrZWVwIG9ubHkgRyBhbmQgQSBjaGFubmVscyBpbiAxNi1iaXQgbGFuZXMKKysgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIGludCBnYV91MzIgPSB2ZWNfYW5kYygoX192ZWN0b3IgdW5zaWdu ZWQgaW50KWdhLCByYl9tYXNrKTsKKysKKysgICAgICAgIC8vIHJlc3VsdCA9IHNyYyArIGFkZHNf ZXB1OChyYiB8IGdhKQorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBtZXJnZWQgPQor KyAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZlY19vcigoX192ZWN0b3IgdW5z aWduZWQgaW50KXJiLCBnYV91MzIpOworKyAgICAgICAgcmV0dXJuIHZlY19hZGRzKHNyYywgbWVy Z2VkKTsKKysgICAgfQorKyNlbmRpZgorKworICNpZiBTS19DUFVfU1NFX0xFVkVMID49IFNLX0NQ VV9TU0VfTEVWRUxfU1NFMgorICAgICAjaW5jbHVkZSA8aW1taW50cmluLmg+CisgCitAQCAtMTc2 LDYgKzIxMywxNyBAQCBpbmxpbmUgdm9pZCBibGl0X3Jvd19zMzJhX29wYXF1ZShTa1BNQ29sb3Iq IGRzdCwgY29uc3QgU2tQTUNvbG9yKiBzcmMsIGludCBsZW4sCisgICAgIH0KKyAjZW5kaWYKKyAK KysjaWYgZGVmaW5lZChTS19DUFVfUFBDKSAmJiBkZWZpbmVkKF9fVlNYX18pCisrICAgIHdoaWxl IChsZW4gPj0gNCkgeworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciB2c3JjID0gdmVj X3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilzcmMpOworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciB2ZHN0ID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilkc3QpOwor KyAgICAgICAgdmVjX3hzdChTa1BNU3JjT3Zlcl9WU1godnNyYywgdmRzdCksIDAsICh1bnNpZ25l ZCBjaGFyKilkc3QpOworKyAgICAgICAgc3JjICs9IDQ7CisrICAgICAgICBkc3QgKz0gNDsKKysg ICAgICAgIGxlbiAtPSA0OworKyAgICB9CisrI2VuZGlmCisrCisgI2lmIFNLX0NQVV9TU0VfTEVW RUwgPj0gU0tfQ1BVX1NTRV9MRVZFTF9TU0UyCisgICAgIHdoaWxlIChsZW4gPj0gNCkgeworICAg ICAgICAgX21tX3N0b3JldV9zaTEyOCgoX19tMTI4aSopZHN0LCBTa1BNU3JjT3Zlcl9TU0UyKF9t bV9sb2FkdV9zaTEyOCgoY29uc3QgX19tMTI4aSopc3JjKSwKK2RpZmYgLS1naXQgYS9nZngvc2tp YS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxpbmVfb3B0cy5oIGIvZ2Z4L3NraWEvc2tpYS9z cmMvb3B0cy9Ta1Jhc3RlclBpcGVsaW5lX29wdHMuaAoraW5kZXggNjk1YjcxNDM0ZjhjLi5lMmFm MGI5NGYzOTIgMTAwNjQ0CistLS0gYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlw ZWxpbmVfb3B0cy5oCisrKysgYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrUmFzdGVyUGlwZWxp bmVfb3B0cy5oCitAQCAtODcsNiArODcsOCBAQCB1c2luZyBOb0N0eCA9IGNvbnN0IHZvaWQqOwor ICAgICAjZGVmaW5lIFNLUlBfQ1BVX1NDQUxBUgorICNlbGlmIGRlZmluZWQoU0tfQVJNX0hBU19O RU9OKQorICAgICAjZGVmaW5lIFNLUlBfQ1BVX05FT04KKysjZWxpZiBkZWZpbmVkKFNLX0NQVV9Q UEMpICYmIGRlZmluZWQoX19WU1hfXykKKysgICAgI2RlZmluZSBTS1JQX0NQVV9WU1gKKyAjZWxp ZiBTS19DUFVfU1NFX0xFVkVMID49IFNLX0NQVV9TU0VfTEVWRUxfU0tYCisgICAgICNkZWZpbmUg U0tSUF9DUFVfU0tYCisgI2VsaWYgU0tfQ1BVX1NTRV9MRVZFTCA+PSBTS19DUFVfU1NFX0xFVkVM X0FWWDIKK0BAIC0xMDksNiArMTExLDggQEAgdXNpbmcgTm9DdHggPSBjb25zdCB2b2lkKjsKKyAg ICAgI2luY2x1ZGUgPG1hdGguaD4KKyAjZWxpZiBkZWZpbmVkKFNLUlBfQ1BVX05FT04pCisgICAg ICNpbmNsdWRlIDxhcm1fbmVvbi5oPgorKyNlbGlmIGRlZmluZWQoU0tSUF9DUFVfVlNYKQorKyAg ICAjaW5jbHVkZSA8YWx0aXZlYy5oPgorICNlbGlmIGRlZmluZWQoU0tSUF9DUFVfTEFTWCkKKyAg ICAgI2luY2x1ZGUgPGxhc3hpbnRyaW4uaD4KKyAgICAgI2luY2x1ZGUgPGxzeGludHJpbi5oPgor QEAgLTMzNyw2ICszNDEsMjM5IEBAIG5hbWVzcGFjZSBTS19PUFRTX05TIHsKKyAgICAgICAgIHZz dDRxX2YzMihwdHIsIChmbG9hdDMyeDR4NF90e3tyLGcsYixhfX0pKTsKKyAgICAgfQorIAorKyNl bGlmIGRlZmluZWQoU0tSUF9DUFVfVlNYKQorKyAgICAvLyBSZXVzZSB0aGUgZmlsZS1zY29wZSBW ZWM8TixUPiBkZWZpbmVkIGFib3ZlLiBJdCBhbHJlYWR5IGhhbmRsZXMgdGhlCisrICAgIC8vIEdD Qy12cy1DbGFuZyBkaXZlcmdlbmNlIChleHRfdmVjdG9yX3R5cGUgb24gQ2xhbmc7IHZlY3Rvcl9z aXplIHZpYQorKyAgICAvLyBWZWNIZWxwZXIgb24gR0NDKSBhbmQgcHJvZHVjZXMgdGhlIHJpZ2h0 IHZlY3Rvci1yZWdpc3Rlci1wYXNzaW5nIEFCSQorKyAgICAvLyBvbiBQUEM2NC4gVGhlIHZlY18q IGludHJpbnNpY3MgaW4gPGFsdGl2ZWMuaD4gYWNjZXB0IGVpdGhlciBmb3JtLgorKyAgICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gdXNpbmcgViA9IFZlYzw0LCBUPjsKKysgICAgdXNpbmcgRiAgID0g VjxmbG9hdCAgID47CisrICAgIHVzaW5nIEkzMiA9IFY8IGludDMyX3Q+OworKyAgICB1c2luZyBV NjQgPSBWPHVpbnQ2NF90PjsKKysgICAgdXNpbmcgVTMyID0gVjx1aW50MzJfdD47CisrICAgIHVz aW5nIFUxNiA9IFY8dWludDE2X3Q+OworKyAgICB1c2luZyBVOCAgPSBWPHVpbnQ4X3QgPjsKKysK KysgICAgLy8gV2UgcG9seWZpbGwgYSBmZXcgcm91dGluZXMgdGhhdCBDbGFuZyBkb2Vzbid0IGJ1 aWxkIGludG8gZXh0X3ZlY3Rvcl90eXBlcy4KKysgICAgU0kgRiAgIG1pbihGIGEsIEYgYikgICAg IHsgcmV0dXJuIHZlY19taW4oYSxiKTsgfQorKyAgICBTSSBJMzIgbWluKEkzMiBhLCBJMzIgYikg eyByZXR1cm4gdmVjX21pbihhLGIpOyB9CisrICAgIFNJIFUzMiBtaW4oVTMyIGEsIFUzMiBiKSB7 IHJldHVybiB2ZWNfbWluKGEsYik7IH0KKysgICAgU0kgRiAgIG1heChGIGEsIEYgYikgICAgIHsg cmV0dXJuIHZlY19tYXgoYSxiKTsgfQorKyAgICBTSSBJMzIgbWF4KEkzMiBhLCBJMzIgYikgeyBy ZXR1cm4gdmVjX21heChhLGIpOyB9CisrICAgIFNJIFUzMiBtYXgoVTMyIGEsIFUzMiBiKSB7IHJl dHVybiB2ZWNfbWF4KGEsYik7IH0KKysKKysgICAgU0kgRiAgIGFic18gIChGIHYpICAgeyByZXR1 cm4gdmVjX2Ficyh2KTsgfQorKyAgICBTSSBJMzIgYWJzXyAgKEkzMiB2KSB7IHJldHVybiB2ZWNf YWJzKHYpOyB9CisrICAgIFNJIEYgICByY3BfYXBwcm94KEYgdikgeyByZXR1cm4gdmVjX3JlKHYp OyB9CisrICAgIFNJIEYgICByY3BfcHJlY2lzZSAoRiB2KSB7IEYgZSA9IHJjcF9hcHByb3godik7 IHJldHVybiBlICogKDIuMGYgLSB2ICogZSk7IH0KKysgICAgU0kgRiAgIHJzcXJ0X2FwcHJveCAo RiB2KSAgIHsgcmV0dXJuIHZlY19yc3FydGUodik7IH0KKysKKysgICAgU0kgVTE2IHBhY2soVTMy IHYpICAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVjdG9yKHYsIFUxNik7IH0KKysg ICAgU0kgVTggIHBhY2soVTE2IHYpICAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9jb252ZXJ0dmVj dG9yKHYsICBVOCk7IH0KKysKKysgICAgU0kgRiBpZl90aGVuX2Vsc2UoSTMyIGMsIEYgdCwgRiBl KSB7CisrICAgICAgICByZXR1cm4gdmVjX29yKChfX3ZlY3RvciBmbG9hdCl2ZWNfYW5kKChfX3Zl Y3RvciBmbG9hdCljLCAoX192ZWN0b3IgZmxvYXQpdCksIChfX3ZlY3RvciBmbG9hdCl2ZWNfYW5k YygoX192ZWN0b3IgZmxvYXQpZSwgKF9fdmVjdG9yIGZsb2F0KWMpKTsKKysgICAgfQorKyAgICBT SSBJMzIgaWZfdGhlbl9lbHNlKEkzMiBjLCBJMzIgdCwgSTMyIGUpIHsKKysgICAgICAgIHJldHVy biAoSTMyKXZlY19vcigoX192ZWN0b3IgdW5zaWduZWQgaW50KXZlY19hbmQoKF9fdmVjdG9yIHVu c2lnbmVkIGludCljLCAoX192ZWN0b3IgdW5zaWduZWQgaW50KXQpLCAoX192ZWN0b3IgdW5zaWdu ZWQgaW50KXZlY19hbmRjKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpZSwgKF9fdmVjdG9yIHVuc2ln bmVkIGludCljKSk7CisrICAgIH0KKysKKysgICAgLy8gSW4gYm90aCBBbHRpVmVjIGFuZCBTU0Ug dGhlcmUgaXMgbm8gaG9yaXpvbnRhbCBlbGVtZW50IGNvbXBhcmUsIHVubGlrZSBBUk0uICBGYWxs IGJhY2sgdG8gc2NhbGFyIG9wZXJhdGlvbnMgaGVyZS4uLgorKyAgICBTSSBib29sIGFueShJMzIg YykgeworKyAgICAgICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMCkgIT0gMCkgcmV0dXJuIDE7 CisrICAgICAgICBpZiAodmVjX2V4dHJhY3QoKFUzMiljLCAxKSAhPSAwKSByZXR1cm4gMTsKKysg ICAgICAgIGlmICh2ZWNfZXh0cmFjdCgoVTMyKWMsIDIpICE9IDApIHJldHVybiAxOworKyAgICAg ICAgaWYgKHZlY19leHRyYWN0KChVMzIpYywgMykgIT0gMCkgcmV0dXJuIDE7CisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgfQorKyAgICBTSSBib29sIGFsbChJMzIgYykgeworKyAgICAgICAgaWYg KHZlY19leHRyYWN0KChVMzIpYywgMCkgPT0gMCkgcmV0dXJuIDA7CisrICAgICAgICBpZiAodmVj X2V4dHJhY3QoKFUzMiljLCAxKSA9PSAwKSByZXR1cm4gMDsKKysgICAgICAgIGlmICh2ZWNfZXh0 cmFjdCgoVTMyKWMsIDIpID09IDApIHJldHVybiAwOworKyAgICAgICAgaWYgKHZlY19leHRyYWN0 KChVMzIpYywgMykgPT0gMCkgcmV0dXJuIDA7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQor KworKyAgICBTSSBGICAgICBtYWQoRiBmLCBGIG0sIEYgYSkgeyByZXR1cm4gdmVjX21hZGQoZixt LGEpOyB9CisrICAgIFNJIEYgICAgbm1hZChGIGYsIEYgbSwgRiBhKSB7IHJldHVybiB2ZWNfbm1z dWIoZixtLGEpOyB9CisrICAgIFNJIEYgIGZsb29yXyhGIHYpIHsgcmV0dXJuIHZlY19mbG9vcih2 KTsgfQorKyAgICBTSSBGICAgY2VpbF8oRiB2KSB7IHJldHVybiB2ZWNfY2VpbCh2KTsgfQorKyAg ICBTSSBGICAgc3FydF8oRiB2KSB7IHJldHVybiB2ZWNfc3FydCh2KTsgfQorKyAgICBTSSBJMzIg aXJvdW5kKEYgdikgeyByZXR1cm4gdmVjX2N0cygoX192ZWN0b3IgZmxvYXQpdmVjX3JpbnQodiks IDApOyB9CisrICAgIFNJIFUzMiByb3VuZChGIHYpICB7IHJldHVybiB2ZWNfY3R1KChfX3ZlY3Rv ciBmbG9hdCl2ZWNfcmludCh2KSwgMCk7IH0KKysgICAgU0kgVTMyIHJvdW5kKEYgdiwgRiBzY2Fs ZSkgeyByZXR1cm4gKFUzMil2ZWNfY3RzKChfX3ZlY3RvciBmbG9hdCl2ZWNfcmludCh2KnNjYWxl KSwgMCk7IH0KKysKKysgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrICAgIFNJIFY8VD4gZ2F0 aGVyKGNvbnN0IFQqIHAsIFUzMiBpeCkgeworKyAgICAgICAgcmV0dXJuIFY8VD57cFtpeFswXV0s IHBbaXhbMV1dLCBwW2l4WzJdXSwgcFtpeFszXV19OworKyAgICB9CisrICAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgorKyAgICBTSSBWPFQ+IGdhdGhlcl91bmFsaWduZWQoY29uc3QgVCogcHRyLCBV MzIgaXgpIHsKKysgICAgICAgIC8vIFRoaXMgdGVsbHMgdGhlIGNvbXBpbGVyIHB0ciBtaWdodCBu b3QgYmUgYWxpZ25lZCBhcHByb3ByaWF0ZWx5LCBzbworKyAgICAgICAgLy8gaXQgZ2VuZXJhdGVz IGJldHRlciBhc3NlbWJseS4KKysgICAgICAgIHR5cGVkZWYgVCBfX2F0dHJpYnV0ZV9fICgoYWxp Z25lZCAoMSkpKSB1bmFsaWduZWRfcHRyOworKyAgICAgICAgY29uc3QgdW5hbGlnbmVkX3B0ciog dXB0ciA9IHN0YXRpY19jYXN0PGNvbnN0IHVuYWxpZ25lZF9wdHIqPihwdHIpOworKyAgICAgICAg cmV0dXJuIFY8VD57dXB0cltpeFswXV0sIHVwdHJbaXhbMV1dLCB1cHRyW2l4WzJdXSwgdXB0cltp eFszXV19OworKyAgICB9CisrICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWLCB0eXBlbmFtZSBTPgor KyAgICBTSSB2b2lkIHNjYXR0ZXJfbWFza2VkKFYgc3JjLCBTKiBkc3QsIFUzMiBpeCwgSTMyIG1h c2spIHsKKysgICAgICAgIFYgYmVmb3JlID0gZ2F0aGVyKGRzdCwgaXgpOworKyAgICAgICAgViBh ZnRlciA9IGlmX3RoZW5fZWxzZShtYXNrLCBzcmMsIGJlZm9yZSk7CisrICAgICAgICBkc3RbaXhb MF1dID0gYWZ0ZXJbMF07CisrICAgICAgICBkc3RbaXhbMV1dID0gYWZ0ZXJbMV07CisrICAgICAg ICBkc3RbaXhbMl1dID0gYWZ0ZXJbMl07CisrICAgICAgICBkc3RbaXhbM11dID0gYWZ0ZXJbM107 CisrICAgIH0KKysKKysgICAgLy8gTmF0aXZlIFZTWC9BbHRpVmVjIHBvcnRzIG9mIHRoZSBsb2Fk Mi9zdG9yZTIvbG9hZDMvbG9hZDQvc3RvcmU0IGhlbHBlcnMuCisrICAgIC8vIEVhY2ggdXNlcyB2 ZWNfeGwvdmVjX3hzdCBmb3IgdW5hbGlnbmVkIDE2LWJ5dGUgbG9hZHMvc3RvcmVzLCB2ZWNfbWVy Z2VoLworKyAgICAvLyB2ZWNfbWVyZ2VsIGZvciBTU0Utc3R5bGUgZXBpMTYvZXBpMzIvcHMgdW5w YWNrIG9wcywgYW5kIHZlY19wZXJtIHdpdGggYQorKyAgICAvLyBieXRlLW1hc2sgZm9yIHRoZSBT U0Ugc2h1ZmZsZWxvL3NodWZmbGVoaS9zaHVmZmxlL3NybGlfc2kxMjggb3BzLiBUaGUKKysgICAg Ly8gUFBDNjQgTEUgcmVnaXN0ZXItdG8tbWVtb3J5IGJ5dGUgb3JkZXIgbWF0Y2hlcyB4ODYgTEUs IHNvIHRoZSBieXRlLW1hc2sKKysgICAgLy8gcGF0dGVybnMgYXJlIGlkZW50aWNhbCB0byB0aGUg Y29ycmVzcG9uZGluZyBfbW1fc2V0cl9lcGk4IGZvcm1zLgorKworKyAgICBTSSB2b2lkIGxvYWQy KGNvbnN0IHVpbnQxNl90KiBwdHIsIFUxNiogciwgVTE2KiBnKSB7CisrICAgICAgICAvLyBMb2Fk IDggdWludDE2OiByMCBnMCByMSBnMSByMiBnMiByMyBnMyAoaW4gTEUgbWVtb3J5IG9yZGVyKS4K KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdiA9IHZlY194bCgwLCAoY29uc3QgdW5z aWduZWQgY2hhciopcHRyKTsKKysgICAgICAgIC8vIEV4dHJhY3QgZXZlcnktb3RoZXIgMTYtYml0 IHZhbHVlIHZpYSB2ZWNfcGVybSAoaGlnaCBoYWxmIG9mIHJlc3VsdCBpcyB1bnVzZWQKKysgICAg ICAgIC8vIGJ1dCB3cml0dGVuOyBza191bmFsaWduZWRfbG9hZCBiZWxvdyBwaWNrcyB1cCB0aGUg bG93IDggYnl0ZXMpLgorKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciByX21h c2sgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7CisrICAgICAgICAgICAgMCwxLCA0LDUsIDgs OSwgMTIsMTMsICAwLDAsMCwwLDAsMCwwLDAKKysgICAgICAgIH07CisrICAgICAgICBjb25zdCBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdfbWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsK KysgICAgICAgICAgICAyLDMsIDYsNywgMTAsMTEsIDE0LDE1LCAgMCwwLDAsMCwwLDAsMCwwCisr ICAgICAgICB9OworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBSX3YgPSB2ZWNfcGVy bSh2LCB2LCByX21hc2spOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBHX3YgPSB2 ZWNfcGVybSh2LCB2LCBnX21hc2spOworKyAgICAgICAgKnIgPSBza191bmFsaWduZWRfbG9hZDxV MTY+KCZSX3YpOworKyAgICAgICAgKmcgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZHX3YpOwor KyAgICB9CisrCisrICAgIFNJIHZvaWQgc3RvcmUyKHVpbnQxNl90KiBwdHIsIFUxNiByLCBVMTYg ZykgeworKyAgICAgICAgLy8gSW50ZXJsZWF2ZTogcmcgPSByMCBnMCByMSBnMSByMiBnMiByMyBn My4KKysgICAgICAgIC8vIHIgYW5kIGcgYXJlIDgtYnl0ZSB2ZWN0b3JzOyB3aWRlbiB0byAxNiBh bmQgdmVjX21lcmdlaCBvbiB1c2hvcnQgdGFrZXMKKysgICAgICAgIC8vIHRoZSBsb3cgNCBsYW5l cyBvZiBlYWNoLgorKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgcncgPSB3aWRlbl9j YXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0PihyKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2ln bmVkIHNob3J0IGd3ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydD4oZyk7Cisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCByZyA9IHZlY19tZXJnZWgocncsIGd3KTsK KysgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpcmcsIDAsICh1bnNpZ25l ZCBjaGFyKilwdHIpOworKyAgICB9CisrCisrICAgIFNJIHZvaWQgbG9hZDMoY29uc3QgdWludDE2 X3QqIHB0ciwgVTE2KiByLCBVMTYqIGcsIFUxNiogYikgeworKyAgICAgICAgLy8gNCBwaXhlbHMg eCAzIGNoYW5uZWxzIHggMiBieXRlcyA9IDI0IGJ5dGVzLiBUd28gMTYtYnl0ZSBsb2FkcyB3aXRo IG92ZXJsYXAKKysgICAgICAgIC8vIGF2b2lkIHJlYWRpbmcgcGFzdCB0aGUgMjQtYnl0ZSBzb3Vy Y2UuCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHYwMSA9IHZlY194bCgwLCAoY29u c3QgdW5zaWduZWQgY2hhciopKHB0ciArIDApKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IGNoYXIgdjIzX3JhdyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHB0ciArIDQp KTsKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVybyA9IHZlY19zcGxh dHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICAgICAgICAvLyB2MjMgPSB2MjNfcmF3ID4+IDQgYnl0 ZXMgKGRyb3BzIHRoZSBvdmVybGFwcGluZyBwaXhlbC0xIHRyYWlsaW5nIFIpLgorKyAgICAgICAg Y29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBzaGlmdDQgPSAoX192ZWN0b3IgdW5zaWduZWQg Y2hhcil7CisrICAgICAgICAgICAgNCw1LDYsNywgOCw5LDEwLDExLCAxMiwxMywxNCwxNSwgMTYs MTYsMTYsMTYKKysgICAgICAgIH07CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHYy MyA9IHZlY19wZXJtKHYyM19yYXcsIHplcm8sIHNoaWZ0NCk7CisrICAgICAgICAvLyBfTiBob2xk cyBSLEcsQiBmb3IgcGl4ZWwgTiBpbiBpdHMgbG93ZXIgMyBsYW5lcy4gc2hpZnQ2IGFkdmFuY2Vz IHRvIHRoZSBuZXh0IHBpeGVsLgorKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hh ciBzaGlmdDYgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7CisrICAgICAgICAgICAgNiw3LDgs OSwgMTAsMTEsMTIsMTMsIDE0LDE1LCAxNiwxNiwgMTYsMTYsIDE2LDE2CisrICAgICAgICB9Owor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBfMCA9IHYwMTsKKysgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgXzEgPSB2ZWNfcGVybSh2MDEsIHplcm8sIHNoaWZ0Nik7CisrICAg ICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIF8yID0gdjIzOworKyAgICAgICAgX192ZWN0b3Ig dW5zaWduZWQgY2hhciBfMyA9IHZlY19wZXJtKHYyMywgemVybywgc2hpZnQ2KTsKKysgICAgICAg IC8vIERlLWludGVybGFjZSB0byBSLEcsQiBwZXIgdGhlIFNTRSBmbG93LgorKyAgICAgICAgX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQgXzAyID0gdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQg c2hvcnQpXzAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzIpOworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgXzEzID0gdmVjX21lcmdlaCgoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzEs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX192 ZWN0b3IgdW5zaWduZWQgc2hvcnQpXzMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgUl92ID0gdmVjX21lcmdlaChfMDIsIF8xMyk7CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIHNoaWZ0OCA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKKysgICAgICAg ICAgICA4LDksMTAsMTEsIDEyLDEzLDE0LDE1LCAxNiwxNiwxNiwxNiwgMTYsMTYsMTYsMTYKKysg ICAgICAgIH07CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIEdfdiA9IHZlY19wZXJt KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKVJfdiwgemVybywgc2hpZnQ4KTsKKysgICAgICAgIF9f dmVjdG9yIHVuc2lnbmVkIHNob3J0IEJfdiA9IHZlY19tZXJnZWwoXzAyLCBfMTMpOworKyAgICAg ICAgKnIgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KCZSX3YpOworKyAgICAgICAgKmcgPSBza191 bmFsaWduZWRfbG9hZDxVMTY+KCZHX3YpOworKyAgICAgICAgKmIgPSBza191bmFsaWduZWRfbG9h ZDxVMTY+KCZCX3YpOworKyAgICB9CisrCisrICAgIFNJIHZvaWQgbG9hZDQoY29uc3QgdWludDE2 X3QqIHB0ciwgVTE2KiByLCBVMTYqIGcsIFUxNiogYiwgVTE2KiBhKSB7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCB2MDEgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpCisrICAg ICAgICAgICAgdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKilwdHIpOyAgICAgICAgICAg IC8vIHIwIGcwIGIwIGEwIHIxIGcxIGIxIGExCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCB2MjMgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpCisrICAgICAgICAgICAgdmVjX3hs KDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKikocHRyICsgOCkpOyAgICAgIC8vIHIyIGcyIGIyIGEy IHIzIGczIGIzIGEzCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBfMDIgPSB2ZWNf bWVyZ2VoKHYwMSwgdjIzKTsgIC8vIHIwIHIyIGcwIGcyIGIwIGIyIGEwIGEyCisrICAgICAgICBf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBfMTMgPSB2ZWNfbWVyZ2VsKHYwMSwgdjIzKTsgIC8vIHIx IHIzIGcxIGczIGIxIGIzIGExIGEzCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBy ZyAgPSB2ZWNfbWVyZ2VoKF8wMiwgXzEzKTsgIC8vIHIwIHIxIHIyIHIzIGcwIGcxIGcyIGczCisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiYSAgPSB2ZWNfbWVyZ2VsKF8wMiwgXzEz KTsgIC8vIGIwIGIxIGIyIGIzIGEwIGExIGEyIGEzCisrICAgICAgICAqciA9IHNrX3VuYWxpZ25l ZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQxNl90KikmcmcgKyAwKTsKKysgICAgICAgICpnID0gc2tf dW5hbGlnbmVkX2xvYWQ8VTE2PigoY29uc3QgdWludDE2X3QqKSZyZyArIDQpOworKyAgICAgICAg KmIgPSBza191bmFsaWduZWRfbG9hZDxVMTY+KChjb25zdCB1aW50MTZfdCopJmJhICsgMCk7Cisr ICAgICAgICAqYSA9IHNrX3VuYWxpZ25lZF9sb2FkPFUxNj4oKGNvbnN0IHVpbnQxNl90KikmYmEg KyA0KTsKKysgICAgfQorKworKyAgICBTSSB2b2lkIHN0b3JlNCh1aW50MTZfdCogcHRyLCBVMTYg ciwgVTE2IGcsIFUxNiBiLCBVMTYgYSkgeworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgcncgPSB3aWRlbl9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0PihyKTsKKysgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGd3ID0gd2lkZW5fY2FzdDxfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydD4oZyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBidyA9IHdpZGVu X2Nhc3Q8X192ZWN0b3IgdW5zaWduZWQgc2hvcnQ+KGIpOworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgYXcgPSB3aWRlbl9jYXN0PF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0PihhKTsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHJnID0gdmVjX21lcmdlaChydywgZ3cp OyAgLy8gcjAgZzAgcjEgZzEgcjIgZzIgcjMgZzMKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0IGJhID0gdmVjX21lcmdlaChidywgYXcpOyAgLy8gYjAgYTAgYjEgYTEgYjIgYTIgYjMg YTMKKysgICAgICAgIC8vIE5vdyBpbnRlcmxlYXZlIDMyLWJpdCBsYW5lcyAoZWFjaCByZyBwYWly ID0gMSBsYW5lLCBlYWNoIGJhIHBhaXIgPSAxIGxhbmUpLgorKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgaW50IHJnYmFfbG8gPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpcmcs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChf X3ZlY3RvciB1bnNpZ25lZCBpbnQpYmEpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgaW50 IHJnYmFfaGkgPSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpcmcsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1 bnNpZ25lZCBpbnQpYmEpOworKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hh cilyZ2JhX2xvLCAwLCAodW5zaWduZWQgY2hhciopcHRyKTsKKysgICAgICAgIHZlY194c3QoKF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIpcmdiYV9oaSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyA4 KSk7CisrICAgIH0KKysKKysgICAgU0kgdm9pZCBsb2FkMihjb25zdCBmbG9hdCogcHRyLCBGKiBy LCBGKiBnKSB7CisrICAgICAgICBfX3ZlY3RvciBmbG9hdCBfMDEgPSB2ZWNfeGwoMCwgcHRyKTsg ICAgICAgICAgLy8gcjAgZzAgcjEgZzEKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IF8yMyA9IHZl Y194bCgwLCBwdHIgKyA0KTsgICAgICAvLyByMiBnMiByMyBnMworKyAgICAgICAgLy8gciA9IGxh bmVzIHtfMDFbMF0sIF8wMVsyXSwgXzIzWzBdLCBfMjNbMl19OyBnID0ge18wMVsxXSwgXzAxWzNd LCBfMjNbMV0sIF8yM1szXX0uCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFy IHJfbWFzayA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsKKysgICAgICAgICAgICAwLDEsMiwz LCA4LDksMTAsMTEsIDE2LDE3LDE4LDE5LCAyNCwyNSwyNiwyNworKyAgICAgICAgfTsKKysgICAg ICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgZ19tYXNrID0gKF9fdmVjdG9yIHVuc2ln bmVkIGNoYXIpeworKyAgICAgICAgICAgIDQsNSw2LDcsIDEyLDEzLDE0LDE1LCAyMCwyMSwyMiwy MywgMjgsMjksMzAsMzEKKysgICAgICAgIH07CisrICAgICAgICAqciA9IChGKXZlY19wZXJtKChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKV8wMSwgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzIzLCBy X21hc2spOworKyAgICAgICAgKmcgPSAoRil2ZWNfcGVybSgoX192ZWN0b3IgdW5zaWduZWQgY2hh cilfMDEsIChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKV8yMywgZ19tYXNrKTsKKysgICAgfQorKwor KyAgICBTSSB2b2lkIHN0b3JlMihmbG9hdCogcHRyLCBGIHIsIEYgZykgeworKyAgICAgICAgX192 ZWN0b3IgZmxvYXQgXzAxID0gdmVjX21lcmdlaCgoX192ZWN0b3IgZmxvYXQpciwgKF9fdmVjdG9y IGZsb2F0KWcpOyAgIC8vIHIwIGcwIHIxIGcxCisrICAgICAgICBfX3ZlY3RvciBmbG9hdCBfMjMg PSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciBmbG9hdClyLCAoX192ZWN0b3IgZmxvYXQpZyk7ICAgLy8g cjIgZzIgcjMgZzMKKysgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpXzAx LCAwLCAodW5zaWduZWQgY2hhciopcHRyKTsKKysgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIpXzIzLCAwLCAodW5zaWduZWQgY2hhciopKHB0ciArIDQpKTsKKysgICAgfQor KworKyAgICBTSSB2b2lkIGxvYWQ0KGNvbnN0IGZsb2F0KiBwdHIsIEYqIHIsIEYqIGcsIEYqIGIs IEYqIGEpIHsKKysgICAgICAgIC8vIDR4NCBmbG9hdCBtYXRyaXggdHJhbnNwb3NlOiByb3dzIC0+ IGNvbHVtbnMuCisrICAgICAgICBfX3ZlY3RvciBmbG9hdCByb3cwID0gdmVjX3hsKDAsIHB0ciAr ICAwKTsKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IHJvdzEgPSB2ZWNfeGwoMCwgcHRyICsgIDQp OworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgcm93MiA9IHZlY194bCgwLCBwdHIgKyAgOCk7Cisr ICAgICAgICBfX3ZlY3RvciBmbG9hdCByb3czID0gdmVjX3hsKDAsIHB0ciArIDEyKTsKKysgICAg ICAgIF9fdmVjdG9yIGZsb2F0IFQwID0gdmVjX21lcmdlaChyb3cwLCByb3cyKTsgIC8vIHtyb3cw WzBdLCByb3cyWzBdLCByb3cwWzFdLCByb3cyWzFdfQorKyAgICAgICAgX192ZWN0b3IgZmxvYXQg VDEgPSB2ZWNfbWVyZ2VoKHJvdzEsIHJvdzMpOworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDIg PSB2ZWNfbWVyZ2VsKHJvdzAsIHJvdzIpOworKyAgICAgICAgX192ZWN0b3IgZmxvYXQgVDMgPSB2 ZWNfbWVyZ2VsKHJvdzEsIHJvdzMpOworKyAgICAgICAgKnIgPSAoRil2ZWNfbWVyZ2VoKFQwLCBU MSk7ICAvLyB7cm93MFswXSwgcm93MVswXSwgcm93MlswXSwgcm93M1swXX0KKysgICAgICAgICpn ID0gKEYpdmVjX21lcmdlbChUMCwgVDEpOworKyAgICAgICAgKmIgPSAoRil2ZWNfbWVyZ2VoKFQy LCBUMyk7CisrICAgICAgICAqYSA9IChGKXZlY19tZXJnZWwoVDIsIFQzKTsKKysgICAgfQorKwor KyAgICBTSSB2b2lkIHN0b3JlNChmbG9hdCogcHRyLCBGIHIsIEYgZywgRiBiLCBGIGEpIHsKKysg ICAgICAgIC8vIDR4NCBmbG9hdCBtYXRyaXggdHJhbnNwb3NlLCB0aGVuIHN0b3JlIHJvd3MuCisr ICAgICAgICBfX3ZlY3RvciBmbG9hdCBUMCA9IHZlY19tZXJnZWgoKF9fdmVjdG9yIGZsb2F0KXIs IChfX3ZlY3RvciBmbG9hdCliKTsKKysgICAgICAgIF9fdmVjdG9yIGZsb2F0IFQxID0gdmVjX21l cmdlaCgoX192ZWN0b3IgZmxvYXQpZywgKF9fdmVjdG9yIGZsb2F0KWEpOworKyAgICAgICAgX192 ZWN0b3IgZmxvYXQgVDIgPSB2ZWNfbWVyZ2VsKChfX3ZlY3RvciBmbG9hdClyLCAoX192ZWN0b3Ig ZmxvYXQpYik7CisrICAgICAgICBfX3ZlY3RvciBmbG9hdCBUMyA9IHZlY19tZXJnZWwoKF9fdmVj dG9yIGZsb2F0KWcsIChfX3ZlY3RvciBmbG9hdClhKTsKKysgICAgICAgIHZlY194c3QoKF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlaChUMCwgVDEpLCAwLCAodW5zaWduZWQgY2hhciop KHB0ciArICAwKSk7CisrICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZl Y19tZXJnZWwoVDAsIFQxKSwgMCwgKHVuc2lnbmVkIGNoYXIqKShwdHIgKyAgNCkpOworKyAgICAg ICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcil2ZWNfbWVyZ2VoKFQyLCBUMyksIDAs ICh1bnNpZ25lZCBjaGFyKikocHRyICsgIDgpKTsKKysgICAgICAgIHZlY194c3QoKF9fdmVjdG9y IHVuc2lnbmVkIGNoYXIpdmVjX21lcmdlbChUMiwgVDMpLCAwLCAodW5zaWduZWQgY2hhciopKHB0 ciArIDEyKSk7CisrICAgIH0KKysKKyAjZWxpZiBkZWZpbmVkKFNLUlBfQ1BVX1NLWCkKKyAgICAg dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHVzaW5nIFYgPSBWZWM8MTYsIFQ+OworICAgICB1c2luZyBG ICAgPSBWPGZsb2F0ICAgPjsKK2RpZmYgLS1naXQgYS9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1Nr U3dpenpsZXJfb3B0cy5pbmMgYi9nZngvc2tpYS9za2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0 cy5pbmMKK2luZGV4IDY3MWRiM2YwNWY2MS4uYzU3ODIzOGE5ZTU4IDEwMDY0NAorLS0tIGEvZ2Z4 L3NraWEvc2tpYS9zcmMvb3B0cy9Ta1N3aXp6bGVyX29wdHMuaW5jCisrKysgYi9nZngvc2tpYS9z a2lhL3NyYy9vcHRzL1NrU3dpenpsZXJfb3B0cy5pbmMKK0BAIC04NCw2ICs4NCwyOSBAQCBTSSBm bG9hdCByZWNpcHJvY2FsX2FscGhhKGZsb2F0IGEpIHsKKyAgICAgYXV0byBxID0gRjR7MS4wZn0g LyB2QTsKKyAgICAgcmV0dXJuIF9tbV9hbmRfcHMoc2tfYml0X2Nhc3Q8X19tMTI4Pih2QSAhPSBG NHswLjBmfSksIHEpWzBdOworIH0KKysjZWxpZiBkZWZpbmVkKFNLX0NQVV9QUEMpICYmIGRlZmlu ZWQoX19WU1hfXykKKysvLyAtLSBWU1ggLS0gSGFyZGVuIGFnYWluc3QgdGltaW5nIGF0dGFja3Mu CisrLy8gdmVjX3NwbGF0cyAvIHZlY19kaXYgLyB2ZWNfY21wZ3QgLyB2ZWNfYW5kIGVhY2ggbWFw IHRvIGEgc2luZ2xlIFZTWCBvcCBvbgorKy8vIGJvdGggR0NDIGFuZCBDbGFuZy4gdmVjX2NtcGd0 KHZBLCAwKSBpcyBleGFjdCBmb3IgdGhlIG5vbi1uZWdhdGl2ZS1hbHBoYQorKy8vIGNvbnRyYWN0 ICgwIDw9IGEpIGFuZCBhdm9pZHMgQ2xhbmcncyBzdGF0aWNfY2FzdDxmbG9hdD4odmVjdG9yKSBl eHRlbnNpb24KKysvLyB0aGF0IEdDQyBkb2VzIG5vdCBzdXBwb3J0LgorK1NLX05PX1NBTklUSVpF KCJmbG9hdC1kaXZpZGUtYnktemVybyIpCisrU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYV90aW1l c18yNTUoZmxvYXQgYSkgeworKyAgICBTa0FTU0VSVCgwIDw9IGEgJiYgYSA8PSAyNTUpOworKyAg ICBfX3ZlY3RvciBmbG9hdCB2QSA9IHZlY19zcGxhdHMoYSk7CisrICAgIF9fdmVjdG9yIGZsb2F0 IHEgPSB2ZWNfZGl2KHZlY19zcGxhdHMoMjU1LjBmKSwgdkEpOworKyAgICBfX3ZlY3RvciBmbG9h dCB2TWFzayA9IChfX3ZlY3RvciBmbG9hdCl2ZWNfY21wZ3QodkEsIHZlY19zcGxhdHMoMC4wZikp OworKyAgICByZXR1cm4gdmVjX2FuZCh2TWFzaywgcSlbMF07CisrfQorKworK1NLX05PX1NBTklU SVpFKCJmbG9hdC1kaXZpZGUtYnktemVybyIpCisrU0kgZmxvYXQgcmVjaXByb2NhbF9hbHBoYShm bG9hdCBhKSB7CisrICAgIFNrQVNTRVJUKDAgPD0gYSAmJiBhIDw9IDEpOworKyAgICBfX3ZlY3Rv ciBmbG9hdCB2QSA9IHZlY19zcGxhdHMoYSk7CisrICAgIF9fdmVjdG9yIGZsb2F0IHEgPSB2ZWNf ZGl2KHZlY19zcGxhdHMoMS4wZiksIHZBKTsKKysgICAgX192ZWN0b3IgZmxvYXQgdk1hc2sgPSAo X192ZWN0b3IgZmxvYXQpdmVjX2NtcGd0KHZBLCB2ZWNfc3BsYXRzKDAuMGYpKTsKKysgICAgcmV0 dXJuIHZlY19hbmQodk1hc2ssIHEpWzBdOworK30KKyAjZWxzZQorIC8vIC0tIFBvcnRhYmxlIC0t ICpOb3QqIGhhcmRlbmVkIGFnYWluc3QgdGltaW5nIGF0dGFja3MKKyBTSSBmbG9hdCByZWNpcHJv Y2FsX2FscGhhX3RpbWVzXzI1NShmbG9hdCBhKSB7CitAQCAtMTA4NSw2ICsxMTA4LDIwOCBAQCB2 b2lkIHJnYkFfdG9fQkdSQSh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQg Y291bnQpIHsKKyAgICAgcmdiQV90b19CR1JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7Cisg fQorIAorKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKy8v IC0tIFZTWCAtLSBOYXRpdmUgUG93ZXIgVlNYL0FsdGlWZWMgcG9ydHMgb2YgdGhlIFNTU0UzIHN3 aXp6bGVycyBiZWxvdy4KKysvLyBFYWNoIF9tbV8qIG9wZXJhdGlvbiBpcyByZXBsYWNlZCBieSB0 aGUgY29ycmVzcG9uZGluZyB2ZWNfKiBzZXF1ZW5jZSBwZXIKKysvLyB0aGUgR0NDIHBwY193cmFw cGVycyB0cmFuc2xhdGlvbiBwYXR0ZXJuICh2ZWNfbWVyZ2VoL2wsIHZlY19wZXJtLCBhbmQgdGhl CisrLy8gdmVjX3ZtdWxldWgvdm11bG91aCArIHBlcm11dGUgaWRpb20gZm9yIF9tbV9tdWxoaV9l cHUxNikuIFRoZSBwZXJtdXRlCisrLy8gbWFza3MgZm9yIGJ5dGUtc2h1ZmZsZXMgdXNlIHRoZSBz YW1lIGJ5dGUtb3JkZXIgbGF5b3V0IGFzIHRoZSBTU0UKKysvLyBfbW1fc2V0cl9lcGk4IGZvcm1z IGJlY2F1c2UgUFBDNjQgTEUgcmVnaXN0ZXItdG8tbWVtb3J5IGJ5dGUgb3JkZXIgaXMgdGhlCisr Ly8gc2FtZSBhcyB4ODYgTEUuCisrCisrLy8gU2NhbGU6ICgoeCp5KSArIDEyOCkgKiAyNTcgPj4g MTYsIHBlciAxNi1iaXQgbGFuZSAobWF0Y2hlcyB0aGUgU1NTRTMgZm9ybSkuCisrc3RhdGljIGlu bGluZSBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBzY2FsZShfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCB4LCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB5KSB7CisrICAgIGNvbnN0IF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IHYxMjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxMjgpOworKyAg ICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2MjU3ID0gdmVjX3NwbGF0cygodW5zaWdu ZWQgc2hvcnQpMjU3KTsKKysgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgc3VtbSA9IChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCkoKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KSh4ICogeSkgKyB2 MTI4KTsKKysgICAgLy8gX21tX211bGhpX2VwdTE2IGVxdWl2YWxlbnQ6IDE2eDE2IC0+IGhpZ2gg MTYgYml0cywgdmlhIG11bGUrbXVsbytwZXJtdXRlLgorKyAgICBfX3ZlY3RvciB1bnNpZ25lZCBp bnQgZXZlbiA9IHZlY192bXVsZXVoKHN1bW0sIHYyNTcpOworKyAgICBfX3ZlY3RvciB1bnNpZ25l ZCBpbnQgb2RkICA9IHZlY192bXVsb3VoKHN1bW0sIHYyNTcpOworKyAgICBjb25zdCBfX3ZlY3Rv ciB1bnNpZ25lZCBjaGFyIHhmb3JtID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeworKyAgICAg ICAgMHgwMiwgMHgwMywgMHgxMiwgMHgxMywgIDB4MDYsIDB4MDcsIDB4MTYsIDB4MTcsCisrICAg ICAgICAweDBBLCAweDBCLCAweDFBLCAweDFCLCAgMHgwRSwgMHgwRiwgMHgxRSwgMHgxRgorKyAg ICB9OworKyAgICByZXR1cm4gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19wZXJtKChfX3Zl Y3RvciB1bnNpZ25lZCBjaGFyKWV2ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpb2RkLCB4Zm9ybSk7CisrfQor KworK3N0YXRpYyB2b2lkIHByZW11bF9zaG91bGRfc3dhcFJCKGJvb2wga1N3YXBSQiwgdWludDMy X3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgIGF1dG8gcHJl bXVsOCA9IFs9XShfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKiBsbywgX192ZWN0b3IgdW5zaWduZWQg Y2hhciogaGkpIHsKKysgICAgICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgemVyb3Mg PSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7MH07CisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyIHBsYW5hciA9IGtTd2FwUkIKKysgICAgICAgICAgICA/IChfX3ZlY3RvciB1 bnNpZ25lZCBjaGFyKXsyLDYsMTAsMTQsIDEsNSw5LDEzLCAwLDQsOCwxMiwgMyw3LDExLDE1fQor KyAgICAgICAgICAgIDogKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezAsNCw4LDEyLCAxLDUsOSwx MywgMiw2LDEwLDE0LCAzLDcsMTEsMTV9OworKworKyAgICAgICAgLy8gU3dpenpsZSBlYWNoIDE2 LWJ5dGUgY2h1bmsgaW50byA4LWJpdCBwbGFuYXIgbGF5b3V0LgorKyAgICAgICAgKmxvID0gdmVj X3Blcm0oKmxvLCAqbG8sIHBsYW5hcik7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnJycmdn Z2cgYmJiYmFhYWEKKysgICAgICAgICpoaSA9IHZlY19wZXJtKCpoaSwgKmhpLCBwbGFuYXIpOyAg ICAgICAgICAgICAgICAgICAgICAgIC8vIFJSUlJHR0dHIEJCQkJBQUFBCisrCisrICAgICAgICAv LyBJbnRlcmxlYXZlIHRoZSB0d28gaGFsdmVzIGF0IDMyLWJpdCBncmFudWxhcml0eS4KKysgICAg ICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmcgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hhcikK KysgICAgICAgICAgICB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBpbnQpKmxvLCAoX192 ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7ICAvLyBycnJyUlJSUiBnZ2dnR0dHRworKyAgICAgICAg X192ZWN0b3IgdW5zaWduZWQgY2hhciBiYSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKQorKyAg ICAgICAgICAgIHZlY19tZXJnZWwoKF9fdmVjdG9yIHVuc2lnbmVkIGludCkqbG8sIChfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQpKmhpKTsgIC8vIGJiYmJCQkJCIGFhYWFBQUFBCisrCisrICAgICAgICAv LyBVbnBhY2sgdG8gMTYtYml0IHBsYW5hci4KKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0IHIgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlaChyZywgemVyb3MpOwor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZyA9IChfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCl2ZWNfbWVyZ2VsKHJnLCB6ZXJvcyk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCBiID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KXZlY19tZXJnZWgoYmEsIHplcm9zKTsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGEgPSAoX192ZWN0b3IgdW5zaWduZWQg c2hvcnQpdmVjX21lcmdlbChiYSwgemVyb3MpOworKworKyAgICAgICAgLy8gUHJlbXVsdGlwbHkg ZWFjaCBjb2xvdXIgY2hhbm5lbCBieSBhbHBoYS4KKysgICAgICAgIHIgPSBzY2FsZShyLCBhKTsK KysgICAgICAgIGcgPSBzY2FsZShnLCBhKTsKKysgICAgICAgIGIgPSBzY2FsZShiLCBhKTsKKysK KysgICAgICAgIC8vIFJlcGFjayBpbnRvIGludGVybGFjZWQgcGl4ZWxzLgorKyAgICAgICAgY29u c3QgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9y dCk4KTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHJnMiA9IHZlY19vcihyLCB2 ZWNfc2woZywgdjgpKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGJhMiA9IHZl Y19vcihiLCB2ZWNfc2woYSwgdjgpKTsKKysgICAgICAgICpsbyA9IChfX3ZlY3RvciB1bnNpZ25l ZCBjaGFyKXZlY19tZXJnZWgocmcyLCBiYTIpOworKyAgICAgICAgKmhpID0gKF9fdmVjdG9yIHVu c2lnbmVkIGNoYXIpdmVjX21lcmdlbChyZzIsIGJhMik7CisrICAgIH07CisrCisrICAgIHdoaWxl IChjb3VudCA+PSA4KSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGxvID0gdmVj X3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKikoc3JjICsgMCkpOworKyAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBoaSA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopKHNy YyArIDQpKTsKKysgICAgICAgIHByZW11bDgoJmxvLCAmaGkpOworKyAgICAgICAgdmVjX3hzdChs bywgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAwKSk7CisrICAgICAgICB2ZWNfeHN0KGhpLCAw LCAodW5zaWduZWQgY2hhciopKGRzdCArIDQpKTsKKysgICAgICAgIHNyYyArPSA4OyBkc3QgKz0g ODsgY291bnQgLT0gODsKKysgICAgfQorKworKyAgICBpZiAoY291bnQgPj0gNCkgeworKyAgICAg ICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBsbyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQg Y2hhciopc3JjKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgaGkgPSAoX192ZWN0 b3IgdW5zaWduZWQgY2hhcil7MH07CisrICAgICAgICBwcmVtdWw4KCZsbywgJmhpKTsKKysgICAg ICAgIHZlY194c3QobG8sIDAsICh1bnNpZ25lZCBjaGFyKilkc3QpOworKyAgICAgICAgc3JjICs9 IDQ7IGRzdCArPSA0OyBjb3VudCAtPSA0OworKyAgICB9CisrCisrICAgIGF1dG8gcHJvYyA9IGtT d2FwUkIgPyBSR0JBX3RvX2JnckFfcG9ydGFibGUgOiBSR0JBX3RvX3JnYkFfcG9ydGFibGU7Cisr ICAgIHByb2MoZHN0LCBzcmMsIGNvdW50KTsKKyt9CisrCisrdm9pZCBSR0JBX3RvX3JnYkEodWlu dDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgIHByZW11 bF9zaG91bGRfc3dhcFJCKGZhbHNlLCBkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIFJH QkFfdG9fYmdyQSh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQp IHsKKysgICAgcHJlbXVsX3Nob3VsZF9zd2FwUkIodHJ1ZSwgZHN0LCBzcmMsIGNvdW50KTsKKyt9 CisrCisrdm9pZCBSR0JBX3RvX0JHUkEodWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNy YywgaW50IGNvdW50KSB7CisrICAgIGNvbnN0IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgc3dhcFJC ID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpeworKyAgICAgICAgMiwxLDAsMywgNiw1LDQsNywg MTAsOSw4LDExLCAxNCwxMywxMiwxNQorKyAgICB9OworKyAgICB3aGlsZSAoY291bnQgPj0gNCkg eworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciByZ2JhID0gdmVjX3hsKDAsIChjb25z dCB1bnNpZ25lZCBjaGFyKilzcmMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBi Z3JhID0gdmVjX3Blcm0ocmdiYSwgcmdiYSwgc3dhcFJCKTsKKysgICAgICAgIHZlY194c3QoYmdy YSwgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAgICBzcmMgKz0gNDsgZHN0ICs9IDQ7 IGNvdW50IC09IDQ7CisrICAgIH0KKysgICAgUkdCQV90b19CR1JBX3BvcnRhYmxlKGRzdCwgc3Jj LCBjb3VudCk7CisrfQorKworK3ZvaWQgZ3JheUFfdG9fUkdCQSh1aW50MzJfdCBkc3RbXSwgY29u c3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgd2hpbGUgKGNvdW50ID49IDgpIHsK KysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdhID0gKF9fdmVjdG9yIHVuc2lnbmVk IHNob3J0KXZlY194bCgwLCBzcmMpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQg Z2cgPSB2ZWNfb3IoCisrICAgICAgICAgICAgICAgIHZlY19hbmQoZ2EsIHZlY19zcGxhdHMoKHVu c2lnbmVkIHNob3J0KTB4MDBGRikpLAorKyAgICAgICAgICAgICAgICB2ZWNfc2wgKGdhLCB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KSkpOworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQg c2hvcnQgZ2dnYV9sbyA9IHZlY19tZXJnZWgoZ2csIGdhKTsKKysgICAgICAgIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IGdnZ2FfaGkgPSB2ZWNfbWVyZ2VsKGdnLCBnYSk7CisrICAgICAgICB2ZWNf eHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2FfbG8sIDAsICh1bnNpZ25lZCBjaGFyKiko ZHN0ICsgMCkpOworKyAgICAgICAgdmVjX3hzdCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dh X2hpLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDQpKTsKKysgICAgICAgIHNyYyArPSA4ICog MjsgZHN0ICs9IDg7IGNvdW50IC09IDg7CisrICAgIH0KKysgICAgZ3JheUFfdG9fUkdCQV9wb3J0 YWJsZShkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIGdyYXlBX3RvX3JnYkEodWludDMy X3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgIHdoaWxlIChj b3VudCA+PSA4KSB7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBncmF5QSA9IChf X3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfeGwoMCwgc3JjKTsKKysgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IGcwID0gdmVjX2FuZChncmF5QSwgdmVjX3NwbGF0cygodW5zaWduZWQg c2hvcnQpMHgwMEZGKSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBhMCA9IHZl Y19zciAgIChncmF5QSwgdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCkpOworKyAgICAgICAg ZzAgPSBzY2FsZShnMCwgYTApOworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgdjggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4KTsKKysgICAgICAgIF9fdmVjdG9y IHVuc2lnbmVkIHNob3J0IGdnID0gdmVjX29yKGcwLCB2ZWNfc2woZzAsIHY4KSk7CisrICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBnYSA9IHZlY19vcihnMCwgdmVjX3NsKGEwLCB2OCkp OworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYV9sbyA9IHZlY19tZXJnZWgo Z2csIGdhKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2FfaGkgPSB2ZWNf bWVyZ2VsKGdnLCBnYSk7CisrICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KWdnZ2FfbG8sIDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgMCkpOworKyAgICAgICAgdmVjX3hz dCgoX192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhX2hpLCAwLCAodW5zaWduZWQgY2hhciopKGRz dCArIDQpKTsKKysgICAgICAgIHNyYyArPSA4ICogMjsgZHN0ICs9IDg7IGNvdW50IC09IDg7Cisr ICAgIH0KKysgICAgZ3JheUFfdG9fcmdiQV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOworK30K KysKKytlbnVtIEZvcm1hdCB7IGtSR0IxLCBrQkdSMSB9OworK3N0YXRpYyB2b2lkIGludmVydGVk X2NteWtfdG8oRm9ybWF0IGZvcm1hdCwgdWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNy YywgaW50IGNvdW50KSB7CisrICAgIGF1dG8gY29udmVydDggPSBbPV0oX192ZWN0b3IgdW5zaWdu ZWQgY2hhciogbG8sIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIqIGhpKSB7CisrICAgICAgICBjb25z dCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHplcm9zID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIp ezB9OworKyAgICAgICAgY29uc3QgX192ZWN0b3IgdW5zaWduZWQgY2hhciBwbGFuYXIgPSAoa0JH UjEgPT0gZm9ybWF0KQorKyAgICAgICAgICAgID8gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpezIs NiwxMCwxNCwgMSw1LDksMTMsIDAsNCw4LDEyLCAzLDcsMTEsMTV9CisrICAgICAgICAgICAgOiAo X192ZWN0b3IgdW5zaWduZWQgY2hhcil7MCw0LDgsMTIsIDEsNSw5LDEzLCAyLDYsMTAsMTQsIDMs NywxMSwxNX07CisrCisrICAgICAgICAqbG8gPSB2ZWNfcGVybSgqbG8sICpsbywgcGxhbmFyKTsg ICAgICAgICAgICAgICAgICAgICAgICAvLyBjY2NjbW1tbSB5eXl5a2traworKyAgICAgICAgKmhp ID0gdmVjX3Blcm0oKmhpLCAqaGksIHBsYW5hcik7ICAgICAgICAgICAgICAgICAgICAgICAgLy8g Q0NDQ01NTU0gWVlZWUtLS0sKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgY20gPSAo X192ZWN0b3IgdW5zaWduZWQgY2hhcikKKysgICAgICAgICAgICB2ZWNfbWVyZ2VoKChfX3ZlY3Rv ciB1bnNpZ25lZCBpbnQpKmxvLCAoX192ZWN0b3IgdW5zaWduZWQgaW50KSpoaSk7CisrICAgICAg ICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIHlrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpCisr ICAgICAgICAgICAgdmVjX21lcmdlbCgoX192ZWN0b3IgdW5zaWduZWQgaW50KSpsbywgKF9fdmVj dG9yIHVuc2lnbmVkIGludCkqaGkpOworKworKyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hv cnQgYyA9IChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCl2ZWNfbWVyZ2VoKGNtLCB6ZXJvcyk7Cisr ICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBtID0gKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KXZlY19tZXJnZWwoY20sIHplcm9zKTsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0IHkgPSAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpdmVjX21lcmdlaCh5aywgemVyb3MpOwor KyAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgayA9IChfX3ZlY3RvciB1bnNpZ25lZCBz aG9ydCl2ZWNfbWVyZ2VsKHlrLCB6ZXJvcyk7CisrCisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCByID0gc2NhbGUoYywgayk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9y dCBnID0gc2NhbGUobSwgayk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCBiID0g c2NhbGUoeSwgayk7CisrCisrICAgICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB2 OCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTgpOworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgc2hvcnQgcmcgPSB2ZWNfb3IociwgdmVjX3NsKGcsIHY4KSk7CisrICAgICAgICBfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydCBiYSA9IHZlY19vcihiLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBz aG9ydCkweEZGMDApKTsKKysgICAgICAgICpsbyA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXZl Y19tZXJnZWgocmcsIGJhKTsKKysgICAgICAgICpoaSA9IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFy KXZlY19tZXJnZWwocmcsIGJhKTsKKysgICAgfTsKKysKKysgICAgd2hpbGUgKGNvdW50ID49IDgp IHsKKysgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgbG8gPSB2ZWNfeGwoMCwgKGNvbnN0 IHVuc2lnbmVkIGNoYXIqKShzcmMgKyAwKSk7CisrICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBj aGFyIGhpID0gdmVjX3hsKDAsIChjb25zdCB1bnNpZ25lZCBjaGFyKikoc3JjICsgNCkpOworKyAg ICAgICAgY29udmVydDgoJmxvLCAmaGkpOworKyAgICAgICAgdmVjX3hzdChsbywgMCwgKHVuc2ln bmVkIGNoYXIqKShkc3QgKyAwKSk7CisrICAgICAgICB2ZWNfeHN0KGhpLCAwLCAodW5zaWduZWQg Y2hhciopKGRzdCArIDQpKTsKKysgICAgICAgIHNyYyArPSA4OyBkc3QgKz0gODsgY291bnQgLT0g ODsKKysgICAgfQorKyAgICBpZiAoY291bnQgPj0gNCkgeworKyAgICAgICAgX192ZWN0b3IgdW5z aWduZWQgY2hhciBsbyA9IHZlY194bCgwLCAoY29uc3QgdW5zaWduZWQgY2hhciopc3JjKTsKKysg ICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgaGkgPSAoX192ZWN0b3IgdW5zaWduZWQgY2hh cil7MH07CisrICAgICAgICBjb252ZXJ0OCgmbG8sICZoaSk7CisrICAgICAgICB2ZWNfeHN0KGxv LCAwLCAodW5zaWduZWQgY2hhciopZHN0KTsKKysgICAgICAgIHNyYyArPSA0OyBkc3QgKz0gNDsg Y291bnQgLT0gNDsKKysgICAgfQorKyAgICBhdXRvIHByb2MgPSAoa0JHUjEgPT0gZm9ybWF0KSA/ IGludmVydGVkX0NNWUtfdG9fQkdSMV9wb3J0YWJsZSA6IGludmVydGVkX0NNWUtfdG9fUkdCMV9w b3J0YWJsZTsKKysgICAgcHJvYyhkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIGludmVy dGVkX0NNWUtfdG9fUkdCMSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDMyX3QqIHNyYywgaW50 IGNvdW50KSB7CisrICAgIGludmVydGVkX2NteWtfdG8oa1JHQjEsIGRzdCwgc3JjLCBjb3VudCk7 CisrfQorKworK3ZvaWQgaW52ZXJ0ZWRfQ01ZS190b19CR1IxKHVpbnQzMl90IGRzdFtdLCBjb25z dCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgaW52ZXJ0ZWRfY215a190byhrQkdS MSwgZHN0LCBzcmMsIGNvdW50KTsKKyt9CisrCisrdm9pZCByZ2JBX3RvX1JHQkEodWludDMyX3Qq IGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgaW50IGNvdW50KSB7CisrICAgIHJnYkFfdG9fUkdC QV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOworK30KKysKKyt2b2lkIHJnYkFfdG9fQkdSQSh1 aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgcmdi QV90b19CR1JBX3BvcnRhYmxlKGRzdCwgc3JjLCBjb3VudCk7CisrfQorKworICNlbGlmIFNLX0NQ VV9MU1hfTEVWRUwgPj0gU0tfQ1BVX0xTWF9MRVZFTF9MQVNYCisgLy8gLS0gTEFTWCAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCitAQCAtMTczNiw2ICsxOTYxLDM5IEBAIHN0YXRp YyB2b2lkIGdyYXlfdG9fUkdCMV9wb3J0YWJsZSh1aW50MzJfdCBkc3RbXSwgY29uc3QgdWludDhf dCogc3JjLCBpbnQgY291bnQpCisgICAgICAgICB9CisgICAgICAgICBncmF5X3RvX1JHQjFfcG9y dGFibGUoZHN0LCBzcmMsIGNvdW50KTsKKyAgICAgfQorKyNlbGlmIGRlZmluZWQoU0tfQ1BVX1BQ QykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICB2b2lkIGdyYXlfdG9fUkdCMSh1aW50MzJfdCBk c3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKKysgICAgICAgIGNvbnN0IF9f dmVjdG9yIHVuc2lnbmVkIGNoYXIgYWxwaGFzID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikw eEZGKTsKKysgICAgICAgIHdoaWxlIChjb3VudCA+PSAxNikgeworKyAgICAgICAgICAgIF9fdmVj dG9yIHVuc2lnbmVkIGNoYXIgZ3JheXMgPSB2ZWNfeGwoMCwgc3JjKTsKKysKKysgICAgICAgICAg ICAvLyBSZXBsaWNhdGUgZ3JheSBieXRlOiBnZyA9IHVucGFjayhncmF5LCBncmF5KSBwZXIgOC1i aXQgbGFuZS4KKysgICAgICAgICAgICBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGdnX2xvID0gdmVj X21lcmdlaChncmF5cywgZ3JheXMpOworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIgZ2dfaGkgPSB2ZWNfbWVyZ2VsKGdyYXlzLCBncmF5cyk7CisrICAgICAgICAgICAgX192ZWN0 b3IgdW5zaWduZWQgY2hhciBnYV9sbyA9IHZlY19tZXJnZWgoZ3JheXMsIGFscGhhcyk7CisrICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBnYV9oaSA9IHZlY19tZXJnZWwoZ3JheXMs IGFscGhhcyk7CisrCisrICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBnLXBhaXJzIGFuZCBnYS1w YWlycyBhdCAxNi1iaXQgZ3JhbnVsYXJpdHkuCisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWdu ZWQgc2hvcnQgZ2dnYTAgPSB2ZWNfbWVyZ2VoKChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnZ19s bywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdhX2xvKTsKKysgICAgICAgICAgICBfX3ZlY3Rv ciB1bnNpZ25lZCBzaG9ydCBnZ2dhMSA9IHZlY19tZXJnZWwoKF9fdmVjdG9yIHVuc2lnbmVkIHNo b3J0KWdnX2xvLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoX192ZWN0b3IgdW5zaWduZWQgc2hvcnQpZ2FfbG8pOworKyAgICAgICAgICAg IF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IGdnZ2EyID0gdmVjX21lcmdlaCgoX192ZWN0b3IgdW5z aWduZWQgc2hvcnQpZ2dfaGksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydClnYV9oaSk7CisrICAg ICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgc2hvcnQgZ2dnYTMgPSB2ZWNfbWVyZ2VsKChfX3Zl Y3RvciB1bnNpZ25lZCBzaG9ydClnZ19oaSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0KWdhX2hp KTsKKysKKysgICAgICAgICAgICB2ZWNfeHN0KChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2Ew LCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArICAwKSk7CisrICAgICAgICAgICAgdmVjX3hzdCgo X192ZWN0b3IgdW5zaWduZWQgY2hhcilnZ2dhMSwgMCwgKHVuc2lnbmVkIGNoYXIqKShkc3QgKyAg NCkpOworKyAgICAgICAgICAgIHZlY194c3QoKF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIpZ2dnYTIs IDAsICh1bnNpZ25lZCBjaGFyKikoZHN0ICsgIDgpKTsKKysgICAgICAgICAgICB2ZWNfeHN0KChf X3ZlY3RvciB1bnNpZ25lZCBjaGFyKWdnZ2EzLCAwLCAodW5zaWduZWQgY2hhciopKGRzdCArIDEy KSk7CisrCisrICAgICAgICAgICAgc3JjICs9IDE2OworKyAgICAgICAgICAgIGRzdCArPSAxNjsK KysgICAgICAgICAgICBjb3VudCAtPSAxNjsKKysgICAgICAgIH0KKysgICAgICAgIGdyYXlfdG9f UkdCMV9wb3J0YWJsZShkc3QsIHNyYywgY291bnQpOworKyAgICB9CisgI2VsaWYgU0tfQ1BVX0xT WF9MRVZFTCA+PSBTS19DUFVfTFNYX0xFVkVMX0xBU1gKKyAgICAgLypub3Qgc3RhdGljKi8gaW5s aW5lIHZvaWQgZ3JheV90b19SR0IxKHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50OF90KiBzcmMs IGludCBjb3VudCkgeworICAgICAgICAgY29uc3QgX19tMjU2aSBhbHBoYXMgPSBfX2xhc3hfeHZy ZXBsZ3IydnJfYigweEZGKTsKK0BAIC0xOTIwLDYgKzIxNzgsMzcgQEAgc3RhdGljIHZvaWQgUkdC X3RvX0JHUjFfcG9ydGFibGUodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50 IGNvdW50KQorICAgICAgICAgcHJvYyhkc3QsIHNyYywgY291bnQpOworICAgICB9CisgCisrICAg IHZvaWQgUkdCX3RvX1JHQjEodWludDMyX3QgZHN0W10sIGNvbnN0IHVpbnQ4X3QqIHNyYywgaW50 IGNvdW50KSB7CisrICAgICAgICBpbnNlcnRfYWxwaGFfc2hvdWxkX3N3YXByYihmYWxzZSwgZHN0 LCBzcmMsIGNvdW50KTsKKysgICAgfQorKyAgICB2b2lkIFJHQl90b19CR1IxKHVpbnQzMl90IGRz dFtdLCBjb25zdCB1aW50OF90KiBzcmMsIGludCBjb3VudCkgeworKyAgICAgICAgaW5zZXJ0X2Fs cGhhX3Nob3VsZF9zd2FwcmIodHJ1ZSwgZHN0LCBzcmMsIGNvdW50KTsKKysgICAgfQorKyNlbGlm IGRlZmluZWQoU0tfQ1BVX1BQQykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyAgICBzdGF0aWMgdm9p ZCBpbnNlcnRfYWxwaGFfc2hvdWxkX3N3YXByYihib29sIGtTd2FwUkIsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRzdFtdLCBjb25zdCB1aW50 OF90KiBzcmMsIGludCBjb3VudCkgeworKyAgICAgICAgLy8gYWxwaGFNYXNrID0gMHhGRjAwMDAw MCBwZXIgMzItYml0IGxhbmUgLT4gYnl0ZXMgKGluIExFIG1lbW9yeSBsYXlvdXQpIGFyZQorKyAg ICAgICAgLy8gezAwLDAwLDAwLEZGLCAwMCwwMCwwMCxGRiwgLi4ufS4KKysgICAgICAgIGNvbnN0 IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgYWxwaGFNYXNrID0gKF9fdmVjdG9yIHVuc2lnbmVkIGNo YXIpeworKyAgICAgICAgICAgIDAsMCwwLDB4RkYsIDAsMCwwLDB4RkYsIDAsMCwwLDB4RkYsIDAs MCwwLDB4RkYKKysgICAgICAgIH07CisrICAgICAgICAvLyAnWCcgKD0gMCkgaXMgaXJyZWxldmFu dDogdGhlIGFscGhhTWFzayBPUiBvdmVyd3JpdGVzIHRob3NlIGxhbmVzIHdpdGggRkYuCisrICAg ICAgICBjb25zdCBfX3ZlY3RvciB1bnNpZ25lZCBjaGFyIGV4cGFuZCA9IGtTd2FwUkIKKysgICAg ICAgICAgICA/IChfX3ZlY3RvciB1bnNpZ25lZCBjaGFyKXsyLDEsMCwwLCA1LDQsMywwLCA4LDcs NiwwLCAxMSwxMCw5LDB9CisrICAgICAgICAgICAgOiAoX192ZWN0b3IgdW5zaWduZWQgY2hhcil7 MCwxLDIsMCwgMyw0LDUsMCwgNiw3LDgsMCwgIDksMTAsMTEsMH07CisrCisrICAgICAgICB3aGls ZSAoY291bnQgPj0gNikgeworKyAgICAgICAgICAgIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgcmdi ID0gdmVjX3hsKDAsIHNyYyk7CisrICAgICAgICAgICAgX192ZWN0b3IgdW5zaWduZWQgY2hhciBy Z2JhID0gdmVjX29yKHZlY19wZXJtKHJnYiwgcmdiLCBleHBhbmQpLCBhbHBoYU1hc2spOworKyAg ICAgICAgICAgIHZlY194c3QocmdiYSwgMCwgKHVuc2lnbmVkIGNoYXIqKWRzdCk7CisrICAgICAg ICAgICAgc3JjICs9IDQqMzsKKysgICAgICAgICAgICBkc3QgKz0gNDsKKysgICAgICAgICAgICBj b3VudCAtPSA0OworKyAgICAgICAgfQorKyAgICAgICAgYXV0byBwcm9jID0ga1N3YXBSQiA/IFJH Ql90b19CR1IxX3BvcnRhYmxlIDogUkdCX3RvX1JHQjFfcG9ydGFibGU7CisrICAgICAgICBwcm9j KGRzdCwgc3JjLCBjb3VudCk7CisrICAgIH0KKysKKyAgICAgdm9pZCBSR0JfdG9fUkdCMSh1aW50 MzJfdCBkc3RbXSwgY29uc3QgdWludDhfdCogc3JjLCBpbnQgY291bnQpIHsKKyAgICAgICAgIGlu c2VydF9hbHBoYV9zaG91bGRfc3dhcHJiKGZhbHNlLCBkc3QsIHNyYywgY291bnQpOworICAgICB9 CisKK2Jhc2UtY29tbWl0OiBhOGQ1MzBhYzEzZjBjZTdlOTM3YzA0N2YwMWYwZDM2NzY0ZjVkMzRl CistLSAKKzIuNTIuMAorCgpkaWZmIC0tZ2l0IGEvMDAwMi1BZGQtVlNYLWluc3RydWN0aW9ucy1m b3ItbGlid2VicC5wYXRjaCBiLzAwMDItQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLWxpYndlYnAu cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY4NTdhNwotLS0gL2Rl di9udWxsCisrKyBiLzAwMDItQWRkLVZTWC1pbnN0cnVjdGlvbnMtZm9yLWxpYndlYnAucGF0Y2gK QEAgLTAsMCArMSwyNTI0IEBACitGcm9tIGI5ZTExNjg5ODgzMGEwZjllZGQxYjA1NjY2NTFjZTJk NDk4OTYxOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/VHJ1bmc9 MjBMPUMzPUFBPz0gPDhAdGxlLmlkLmF1PgorRGF0ZTogRnJpLCAxMiBKdW4gMjAyNiAxNTozMDox MyArMTAwMAorU3ViamVjdDogW1BBVENIIDIvM10gQWRkIFZTWCBpbnN0cnVjdGlvbnMgZm9yIGxp YndlYnAKKworQXNzaXN0ZWQtYnk6IExhbmNlIEFsYmVydHNvbiA8bGFuY2VAb3N1b3NsLm9yZz4K K0Fzc2lzdGVkLWJ5OiBUaHVzaGFuIEZlcm5hbmRvIDx0aHVzaGFuQHRodXNoYW5mZXJuYW5kby5j b20+CistLS0KKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2luZy5jICAgICB8 ICAgNiArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmdfdnN4LmMgfCAy NDYgKysrKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9jcHUuaCAgICAgICAgICAgICAgICAg IHwgIDE0ICstCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2RlYy5jICAgICAgICAgICAgICAgICAg fCAgIDYgKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMgICAgICAgICAgICAgIHwg NzM3ICsrKysrKysrKysrKysrKysrKysKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVycy5j ICAgICAgICAgICAgICB8ICAgNiArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnNfdnN4 LmMgICAgICAgICAgfCAxNjIgKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzcy5j ICAgICAgICAgICAgIHwgICA2ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3NfdnN4 LmMgICAgICAgICB8IDQ0OSArKysrKysrKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC9tb3ou YnVpbGQgICAgICAgICAgICAgIHwgIDE0ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2Fs ZXIuYyAgICAgICAgICAgICB8ICAgNiArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVy X3ZzeC5jICAgICAgICAgfCAyMDEgKysrKysKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AvdXBzYW1w bGluZy5jICAgICAgICAgICB8ICAxMiArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxp bmdfdnN4LmMgICAgICAgfCAxNTEgKysrKworIG1lZGlhL2xpYndlYnAvc3JjL2RzcC95dXYuYyAg ICAgICAgICAgICAgICAgIHwgICA2ICsKKyBtZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmggICAg ICAgICAgICAgICAgICB8ICAyMSArCisgbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1dl92c3guYyAg ICAgICAgICAgICAgfCAyMDYgKysrKysrCisgbWVkaWEvbGlid2VicC9zcmMvbW96L2NwdS5jcHAg ICAgICAgICAgICAgICAgfCAgIDQgKworIDE4IGZpbGVzIGNoYW5nZWQsIDIyNTIgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3ZWJwL3Ny Yy9kc3AvYWxwaGFfcHJvY2Vzc2luZ192c3guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvZGVjX3ZzeC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndl YnAvc3JjL2RzcC9maWx0ZXJzX3ZzeC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1lZGlhL2xpYndl YnAvc3JjL2RzcC9sb3NzbGVzc192c3guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBtZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvcmVzY2FsZXJfdnN4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEvbGli d2VicC9zcmMvZHNwL3Vwc2FtcGxpbmdfdnN4LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWVkaWEv bGlid2VicC9zcmMvZHNwL3l1dl92c3guYworCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9w cm9jZXNzaW5nLmMKK2luZGV4IDQ5MjdlNzNlODFiZi4uNWY5MTUyYmY3MDFhIDEwMDY0NAorLS0t IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYworKysrIGIvbWVkaWEv bGlid2VicC9zcmMvZHNwL2FscGhhX3Byb2Nlc3NpbmcuYworQEAgLTQzNCw2ICs0MzQsNyBAQCBl eHRlcm4gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ01JUFNkc3BSMih2b2lkKTsKKyBleHRl cm4gdm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1NTRTIodm9pZCk7CisgZXh0ZXJuIHZvaWQg V2ViUEluaXRBbHBoYVByb2Nlc3NpbmdTU0U0MSh2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQSW5p dEFscGhhUHJvY2Vzc2luZ05FT04odm9pZCk7CisrZXh0ZXJuIHZvaWQgV2ViUEluaXRBbHBoYVBy b2Nlc3NpbmdWU1godm9pZCk7CisgCisgV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0QWxwaGFQ cm9jZXNzaW5nKSB7CisgICBXZWJQTXVsdEFSR0JSb3cgPSBXZWJQTXVsdEFSR0JSb3dfQzsKK0BA IC00NzIsNiArNDczLDExIEBAIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdEFscGhhUHJvY2Vz c2luZykgeworICAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrTUlQU2RzcFIyKSkgeworICAgICAgIFdl YlBJbml0QWxwaGFQcm9jZXNzaW5nTUlQU2RzcFIyKCk7CisgICAgIH0KKysjZW5kaWYKKysjaWYg ZGVmaW5lZChXRUJQX0hBVkVfVlNYKQorKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewor KyAgICAgIFdlYlBJbml0QWxwaGFQcm9jZXNzaW5nVlNYKCk7CisrICAgIH0KKyAjZW5kaWYKKyAg IH0KKyAKK2RpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvYWxwaGFfcHJvY2Vzc2lu Z192c3guYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5nX3ZzeC5jCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi4yYWFkMWNkOGI2NDgKKy0t LSAvZGV2L251bGwKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9hbHBoYV9wcm9jZXNzaW5n X3ZzeC5jCitAQCAtMCwwICsxLDI0NiBAQAorKy8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMu IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisrLy8KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCisrLy8gdGhhdCBjYW4gYmUgZm91bmQg aW4gdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCisrLy8gdHJlZS4g QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm b3VuZAorKy8vIGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh dXRob3JzIG1heQorKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg b2YgdGhlIHNvdXJjZSB0cmVlLgorKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8KKysvLyBW U1ggKFBvd2VyUEMpIHZlcnNpb24gb2YgYWxwaGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMuCisrCisr I2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKQor KworKyNpbmNsdWRlIDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNs dWRlICJzcmMvZHNwL2NwdS5oIgorKyNpbmNsdWRlICJzcmMvd2VicC90eXBlcy5oIgorKworK3R5 cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1OHgxNjsKKyt0eXBlZGVmIF9fdmVjdG9yIHVu c2lnbmVkIHNob3J0IHUxNng4OworK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIHNob3J0IGkxNng4 OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgaW50IHUzMng0OworK3R5cGVkZWYgX192ZWN0 b3Igc2lnbmVkIGludCBpMzJ4NDsKKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIEFs cGhhIGRpc3BhdGNoIC8gZXh0cmFjdGlvbi4KKysKKytzdGF0aWMgaW50IERpc3BhdGNoQWxwaGFf VlNYKGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYWxwaGEsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgYWxwaGFfc3RyaWRlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCwg aW50IGRzdF9zdHJpZGUpIHsKKysgIHVpbnQzMl90IGFscGhhX2FuZCA9IDB4ZmY7CisrICBpbnQg aSwgaiwgazsKKysgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFy KTApOworKyAgY29uc3QgdTE2eDggejE2ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMCk7 CisrICBjb25zdCB1MzJ4NCBhX21hc2sgPSB2ZWNfc3BsYXRzKCh1aW50MzJfdCkweGZmKTsgIC8v IHNlbGVjdHMgdGhlIGxvdyBieXRlCisrICB1OHgxNiBhbGxfYW5kID0gdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcikweGZmKTsKKysgIGNvbnN0IGludCBsaW1pdCA9IHdpZHRoICYgfjE1OworKwor KyAgZm9yIChqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7CisrICAgIHVpbnQ4X3QqIHB0ciA9IGRz dDsKKysgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpICs9IDE2KSB7CisrICAgICAgY29uc3Qg dTh4MTYgYTAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIqKSZhbHBoYVtpXSk7CisrICAgICAg Ly8gU3ByZWFkIHRoZSAxNiBhbHBoYSBieXRlcyB0byB0aGUgbG93IGJ5dGUgb2YgMTYgMzItYml0 IGxhbmVzLgorKyAgICAgIGNvbnN0IHUxNng4IGExX2xvID0gKHUxNng4KXZlY19tZXJnZWgoYTAs IHplcm8pOworKyAgICAgIGNvbnN0IHUxNng4IGExX2hpID0gKHUxNng4KXZlY19tZXJnZWwoYTAs IHplcm8pOworKyAgICAgIGNvbnN0IHUzMng0IHMwID0gKHUzMng0KXZlY19tZXJnZWgoYTFfbG8s IHoxNik7CisrICAgICAgY29uc3QgdTMyeDQgczEgPSAodTMyeDQpdmVjX21lcmdlbChhMV9sbywg ejE2KTsKKysgICAgICBjb25zdCB1MzJ4NCBzMiA9ICh1MzJ4NCl2ZWNfbWVyZ2VoKGExX2hpLCB6 MTYpOworKyAgICAgIGNvbnN0IHUzMng0IHMzID0gKHUzMng0KXZlY19tZXJnZWwoYTFfaGksIHox Nik7CisrICAgICAgY29uc3QgdTMyeDQqIHNwcmVhZFs0XSA9IHsmczAsICZzMSwgJnMyLCAmczN9 OworKyAgICAgIGZvciAoayA9IDA7IGsgPCA0OyArK2spIHsKKysgICAgICAgIGNvbnN0IHUzMng0 IGQgPSB2ZWNfeGwoMCwgKHVpbnQzMl90KikocHRyICsgMTYgKiBrKSk7CisrICAgICAgICB2ZWNf eHN0KHZlY19zZWwoZCwgKnNwcmVhZFtrXSwgYV9tYXNrKSwgMCwgKHVpbnQzMl90KikocHRyICsg MTYgKiBrKSk7CisrICAgICAgfQorKyAgICAgIGFsbF9hbmQgPSB2ZWNfYW5kKGFsbF9hbmQsIGEw KTsKKysgICAgICBwdHIgKz0gNjQ7CisrICAgIH0KKysgICAgZm9yICg7IGkgPCB3aWR0aDsgKytp KSB7CisrICAgICAgY29uc3QgdWludDMyX3QgYWxwaGFfdmFsdWUgPSBhbHBoYVtpXTsKKysgICAg ICBkc3RbNCAqIGldID0gYWxwaGFfdmFsdWU7CisrICAgICAgYWxwaGFfYW5kICY9IGFscGhhX3Zh bHVlOworKyAgICB9CisrICAgIGFscGhhICs9IGFscGhhX3N0cmlkZTsKKysgICAgZHN0ICs9IGRz dF9zdHJpZGU7CisrICB9CisrICB7CisrICAgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKysgICAg bWVtY3B5KHRtcCwgJmFsbF9hbmQsIDE2KTsKKysgICAgZm9yIChrID0gMDsgayA8IDE2OyArK2sp IGFscGhhX2FuZCAmPSB0bXBba107CisrICB9CisrICByZXR1cm4gKGFscGhhX2FuZCAhPSAweGZm KTsKKyt9CisrCisrc3RhdGljIHZvaWQgRGlzcGF0Y2hBbHBoYVRvR3JlZW5fVlNYKGNvbnN0IHVp bnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYWxwaGEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBhbHBoYV9zdHJpZGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qg ZHN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZHN0X3N0cmlk ZSkgeworKyAgaW50IGksIGo7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHUxNng4IHoxNiA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IHNob3J0KTApOworKyAgY29uc3QgaW50IGxpbWl0ID0gd2lkdGggJiB+MTU7CisrICBmb3IgKGog PSAwOyBqIDwgaGVpZ2h0OyArK2opIHsKKysgICAgZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpICs9 IDE2KSB7CisrICAgICAgY29uc3QgdTh4MTYgYTAgPSB2ZWNfeGwoMCwgKHVuc2lnbmVkIGNoYXIq KSZhbHBoYVtpXSk7CisrICAgICAgLy8gUGxhY2UgZWFjaCBhbHBoYSBieXRlIGludG8gdGhlIGdy ZWVuIHNsb3QgKDw8IDgpIG9mIGEgMzItYml0IGxhbmUuCisrICAgICAgY29uc3QgdTE2eDggYTFf bG8gPSAodTE2eDgpdmVjX21lcmdlaCh6ZXJvLCBhMCk7ICAvLyBub3RlIHRoZSAnemVybycgZmly c3QKKysgICAgICBjb25zdCB1MTZ4OCBhMV9oaSA9ICh1MTZ4OCl2ZWNfbWVyZ2VsKHplcm8sIGEw KTsKKysgICAgICBjb25zdCB1MzJ4NCBnMCA9ICh1MzJ4NCl2ZWNfbWVyZ2VoKGExX2xvLCB6MTYp OworKyAgICAgIGNvbnN0IHUzMng0IGcxID0gKHUzMng0KXZlY19tZXJnZWwoYTFfbG8sIHoxNik7 CisrICAgICAgY29uc3QgdTMyeDQgZzIgPSAodTMyeDQpdmVjX21lcmdlaChhMV9oaSwgejE2KTsK KysgICAgICBjb25zdCB1MzJ4NCBnMyA9ICh1MzJ4NCl2ZWNfbWVyZ2VsKGExX2hpLCB6MTYpOwor KyAgICAgIHZlY194c3QoZzAsIDAsICZkc3RbaSArIDBdKTsKKysgICAgICB2ZWNfeHN0KGcxLCAw LCAmZHN0W2kgKyA0XSk7CisrICAgICAgdmVjX3hzdChnMiwgMCwgJmRzdFtpICsgOF0pOworKyAg ICAgIHZlY194c3QoZzMsIDAsICZkc3RbaSArIDEyXSk7CisrICAgIH0KKysgICAgZm9yICg7IGkg PCB3aWR0aDsgKytpKSBkc3RbaV0gPSBhbHBoYVtpXSA8PCA4OworKyAgICBhbHBoYSArPSBhbHBo YV9zdHJpZGU7CisrICAgIGRzdCArPSBkc3Rfc3RyaWRlOworKyAgfQorK30KKysKKytzdGF0aWMg aW50IEV4dHJhY3RBbHBoYV9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBhcmdiLCBp bnQgYXJnYl9zdHJpZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwg aW50IGhlaWdodCwgdWludDhfdCogV0VCUF9SRVNUUklDVCBhbHBoYSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGFscGhhX3N0cmlkZSkgeworKyAgdWludDMyX3QgYWxwaGFfYW5k ID0gMHhmZjsKKysgIGludCBpLCBqLCBrOworKyAgY29uc3QgdTMyeDQgYV9tYXNrID0gdmVjX3Nw bGF0cygodWludDMyX3QpMHhmZik7ICAvLyBrZWVwcyB0aGUgbG93IGJ5dGUKKysgIHU4eDE2IGFs bF9hbmQgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4ZmYpOworKyAgY29uc3QgaW50IGxp bWl0ID0gd2lkdGggJiB+NzsKKysKKysgIGZvciAoaiA9IDA7IGogPCBoZWlnaHQ7ICsraikgewor KyAgICBjb25zdCB1aW50MzJfdCogc3JjID0gKGNvbnN0IHVpbnQzMl90KilhcmdiOworKyAgICBm b3IgKGkgPSAwOyBpIDwgbGltaXQ7IGkgKz0gOCkgeworKyAgICAgIGNvbnN0IHUzMng0IGEwID0g dmVjX2FuZCh2ZWNfeGwoMCwgKHVpbnQzMl90Kikoc3JjICsgMCkpLCBhX21hc2spOworKyAgICAg IGNvbnN0IHUzMng0IGExID0gdmVjX2FuZCh2ZWNfeGwoMCwgKHVpbnQzMl90Kikoc3JjICsgNCkp LCBhX21hc2spOworKyAgICAgIGNvbnN0IGkxNng4IGMwID0gdmVjX3BhY2tzKChpMzJ4NClhMCwg KGkzMng0KWExKTsKKysgICAgICBjb25zdCB1OHgxNiBkMCA9IHZlY19wYWNrc3UoYzAsIGMwKTsg IC8vIDggYWxwaGEgYnl0ZXMgaW4gdGhlIGxvdyBoYWxmCisrICAgICAgbWVtY3B5KCZhbHBoYVtp XSwgJmQwLCA4KTsKKysgICAgICBhbGxfYW5kID0gdmVjX2FuZChhbGxfYW5kLCBkMCk7CisrICAg ICAgc3JjICs9IDg7CisrICAgIH0KKysgICAgZm9yICg7IGkgPCB3aWR0aDsgKytpKSB7CisrICAg ICAgY29uc3QgdWludDMyX3QgYWxwaGFfdmFsdWUgPSBhcmdiWzQgKiBpXTsKKysgICAgICBhbHBo YVtpXSA9IGFscGhhX3ZhbHVlOworKyAgICAgIGFscGhhX2FuZCAmPSBhbHBoYV92YWx1ZTsKKysg ICAgfQorKyAgICBhcmdiICs9IGFyZ2Jfc3RyaWRlOworKyAgICBhbHBoYSArPSBhbHBoYV9zdHJp ZGU7CisrICB9CisrICB7CisrICAgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKysgICAgbWVtY3B5 KHRtcCwgJmFsbF9hbmQsIDE2KTsKKysgICAgZm9yIChrID0gMDsgayA8IDg7ICsraykgYWxwaGFf YW5kICY9IHRtcFtrXTsKKysgIH0KKysgIHJldHVybiAoYWxwaGFfYW5kID09IDB4ZmYpOworK30K KysKKytzdGF0aWMgdm9pZCBFeHRyYWN0R3JlZW5fVlNYKGNvbnN0IHVpbnQzMl90KiBXRUJQX1JF U1RSSUNUIGFyZ2IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIGFscGhhLCBpbnQgc2l6ZSkgeworKyAgaW50IGk7CisrICBjb25zdCB1MzJ4NCBt YXNrID0gdmVjX3NwbGF0cygodWludDMyX3QpMHhmZik7CisrICBjb25zdCB1MzJ4NCBzaDggPSB2 ZWNfc3BsYXRzKCh1aW50MzJfdCk4KTsKKysgIGZvciAoaSA9IDA7IGkgKyAxNiA8PSBzaXplOyBp ICs9IDE2KSB7CisrICAgIGNvbnN0IHUzMng0IGEwID0KKysgICAgICAgIHZlY19hbmQodmVjX3Ny KHZlY194bCgwLCAodWludDMyX3QqKShhcmdiICsgaSArIDApKSwgc2g4KSwgbWFzayk7CisrICAg IGNvbnN0IHUzMng0IGExID0KKysgICAgICAgIHZlY19hbmQodmVjX3NyKHZlY194bCgwLCAodWlu dDMyX3QqKShhcmdiICsgaSArIDQpKSwgc2g4KSwgbWFzayk7CisrICAgIGNvbnN0IHUzMng0IGEy ID0KKysgICAgICAgIHZlY19hbmQodmVjX3NyKHZlY194bCgwLCAodWludDMyX3QqKShhcmdiICsg aSArIDgpKSwgc2g4KSwgbWFzayk7CisrICAgIGNvbnN0IHUzMng0IGEzID0KKysgICAgICAgIHZl Y19hbmQodmVjX3NyKHZlY194bCgwLCAodWludDMyX3QqKShhcmdiICsgaSArIDEyKSksIHNoOCks IG1hc2spOworKyAgICBjb25zdCBpMTZ4OCBkMCA9IHZlY19wYWNrcygoaTMyeDQpYTAsIChpMzJ4 NClhMSk7CisrICAgIGNvbnN0IGkxNng4IGQxID0gdmVjX3BhY2tzKChpMzJ4NClhMiwgKGkzMng0 KWEzKTsKKysgICAgY29uc3QgdTh4MTYgZSA9IHZlY19wYWNrc3UoZDAsIGQxKTsKKysgICAgdmVj X3hzdChlLCAwLCAmYWxwaGFbaV0pOworKyAgfQorKyAgZm9yICg7IGkgPCBzaXplOyArK2kpIGFs cGhhW2ldID0gYXJnYltpXSA+PiA4OworK30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor Ky8vIFByZW11bHRpcGx5LgorKworKyNkZWZpbmUgTVVMVElQTElFUihhKSAoKGEpICogMzI4OTdV KQorKyNkZWZpbmUgUFJFTVVMVElQTFkoeCwgbSkgKCgoeCkgKiAobSkpID4+IDIzKQorKworKy8v IFNwcmVhZHMgdGhlIGFscGhhIGxhbmUgYWNyb3NzIHIvZy9iIGFuZCBpbnNlcnRzIDB4ZmYgaW4g dGhlIGFscGhhIGxhbmUsIGZvcgorKy8vIHRoZSB0d28gcGl4ZWxzIHBhY2tlZCBpbiBhIDE2LWJp dC1wZXItY2hhbm5lbCB2ZWN0b3IuIEJ1aWx0IGFnYWluc3QgdGhlCisrLy8gbGl0dGxlLWVuZGlh biBieXRlIG9yZGVyOyBzcmMgaXMgdGhlIGNoYW5uZWwgdmVjdG9yLCB0aGUgc2Vjb25kIG9wZXJh bmQgaXMKKysvLyBhbiBhbGwtMHhmZiB2ZWN0b3IuCisrc3RhdGljIGNvbnN0IHU4eDE2IGtTcHJl YWRBbHBoYUxhc3QgPSB7NiwgIDcsICA2LCAgNywgIDYsICA3LCAgMTYsIDcsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIDE1LCAxNCwgMTUsIDE0LCAxNSwgMTYs IDE1fTsKKytzdGF0aWMgY29uc3QgdTh4MTYga1NwcmVhZEFscGhhRmlyc3QgPSB7MTYsIDEsIDAs IDEsIDAsIDEsIDAsIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE2LCA5LCA4LCA5LCA4LCA5LCA4LCA5fTsKKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdTE2eDgg TXVsSGkxNih1MTZ4OCBhLCB1MTZ4OCBiKSB7CisrICBjb25zdCB1MzJ4NCBzaCA9IHZlY19zcGxh dHMoKHVuc2lnbmVkIGludCkxNik7CisrICBjb25zdCB1MzJ4NCBlID0gdmVjX3NyKHZlY19tdWxl KGEsIGIpLCBzaCk7CisrICBjb25zdCB1MzJ4NCBvID0gdmVjX3NyKHZlY19tdWxvKGEsIGIpLCBz aCk7CisrICByZXR1cm4gdmVjX3BhY2sodmVjX21lcmdlaChlLCBvKSwgdmVjX21lcmdlbChlLCBv KSk7CisrfQorKworK3N0YXRpYyB2b2lkIEFwcGx5QWxwaGFNdWx0aXBseV9WU1godWludDhfdCog cmdiYSwgaW50IGFscGhhX2ZpcnN0LCBpbnQgdywgaW50IGgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgc3RyaWRlKSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVj X3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHU4eDE2IGFsbGZmID0gdmVjX3Nw bGF0cygodW5zaWduZWQgY2hhcikweGZmKTsKKysgIGNvbnN0IHUxNng4IHoxNiA9IHZlY19zcGxh dHMoKHVuc2lnbmVkIHNob3J0KTApOworKyAgY29uc3QgdTE2eDgga011bHQgPSB2ZWNfc3BsYXRz KCh1bnNpZ25lZCBzaG9ydCkweDgwODEpOworKyAgY29uc3QgdTE2eDggc2g3ID0gdmVjX3NwbGF0 cygodW5zaWduZWQgc2hvcnQpNyk7CisrICBjb25zdCB1OHgxNiBjdHJsID0gYWxwaGFfZmlyc3Qg PyBrU3ByZWFkQWxwaGFGaXJzdCA6IGtTcHJlYWRBbHBoYUxhc3Q7CisrICBjb25zdCBpbnQga1Nw YW4gPSA0OworKyAgd2hpbGUgKGgtLSA+IDApIHsKKysgICAgdWludDhfdCogY29uc3QgcmdieCA9 IHJnYmE7CisrICAgIGludCBpOworKyAgICBmb3IgKGkgPSAwOyBpICsga1NwYW4gPD0gdzsgaSAr PSBrU3BhbikgeworKyAgICAgIGNvbnN0IHU4eDE2IGFyZ2IwID0gdmVjX3hsKDAsICh1bnNpZ25l ZCBjaGFyKikocmdieCArIDQgKiBpKSk7CisrICAgICAgY29uc3QgdTE2eDggbG8gPSAodTE2eDgp dmVjX21lcmdlaChhcmdiMCwgemVybyk7CisrICAgICAgY29uc3QgdTE2eDggaGkgPSAodTE2eDgp dmVjX21lcmdlbChhcmdiMCwgemVybyk7CisrICAgICAgY29uc3QgdTE2eDggYV9sbyA9ICh1MTZ4 OCl2ZWNfcGVybSgodTh4MTYpbG8sIGFsbGZmLCBjdHJsKTsKKysgICAgICBjb25zdCB1MTZ4OCBh X2hpID0gKHUxNng4KXZlY19wZXJtKCh1OHgxNiloaSwgYWxsZmYsIGN0cmwpOworKyAgICAgIGNv bnN0IHUxNng4IEEwbG8gPSB2ZWNfbWxhZGQoYV9sbywgbG8sIHoxNik7CisrICAgICAgY29uc3Qg dTE2eDggQTBoaSA9IHZlY19tbGFkZChhX2hpLCBoaSwgejE2KTsKKysgICAgICBjb25zdCB1MTZ4 OCBBMmxvID0gdmVjX3NyKE11bEhpMTYoQTBsbywga011bHQpLCBzaDcpOworKyAgICAgIGNvbnN0 IHUxNng4IEEyaGkgPSB2ZWNfc3IoTXVsSGkxNihBMGhpLCBrTXVsdCksIHNoNyk7CisrICAgICAg Y29uc3QgdTh4MTYgb3V0ID0gdmVjX3BhY2tzdSgoaTE2eDgpQTJsbywgKGkxNng4KUEyaGkpOwor KyAgICAgIHZlY194c3Qob3V0LCAwLCAodW5zaWduZWQgY2hhciopKHJnYnggKyA0ICogaSkpOwor KyAgICB9CisrICAgIC8vIEZpbmlzaCB3aXRoIGxlZnQtb3ZlcnMuCisrICAgIGZvciAoOyBpIDwg dzsgKytpKSB7CisrICAgICAgdWludDhfdCogY29uc3QgcmdiID0gcmdiYSArIChhbHBoYV9maXJz dCA/IDEgOiAwKTsKKysgICAgICBjb25zdCB1aW50OF90KiBjb25zdCBhbHBoYSA9IHJnYmEgKyAo YWxwaGFfZmlyc3QgPyAwIDogMyk7CisrICAgICAgY29uc3QgdWludDMyX3QgYSA9IGFscGhhWzQg KiBpXTsKKysgICAgICBpZiAoYSAhPSAweGZmKSB7CisrICAgICAgICBjb25zdCB1aW50MzJfdCBt dWx0ID0gTVVMVElQTElFUihhKTsKKysgICAgICAgIHJnYls0ICogaSArIDBdID0gUFJFTVVMVElQ TFkocmdiWzQgKiBpICsgMF0sIG11bHQpOworKyAgICAgICAgcmdiWzQgKiBpICsgMV0gPSBQUkVN VUxUSVBMWShyZ2JbNCAqIGkgKyAxXSwgbXVsdCk7CisrICAgICAgICByZ2JbNCAqIGkgKyAyXSA9 IFBSRU1VTFRJUExZKHJnYls0ICogaSArIDJdLCBtdWx0KTsKKysgICAgICB9CisrICAgIH0KKysg ICAgcmdiYSArPSBzdHJpZGU7CisrICB9CisrfQorKworKyN1bmRlZiBNVUxUSVBMSUVSCisrI3Vu ZGVmIFBSRU1VTFRJUExZCisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKKytleHRlcm4g dm9pZCBXZWJQSW5pdEFscGhhUHJvY2Vzc2luZ1ZTWCh2b2lkKTsKKysKKytXRUJQX1RTQU5fSUdO T1JFX0ZVTkNUSU9OIHZvaWQgV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdWU1godm9pZCkgeworKyAg V2ViUEFwcGx5QWxwaGFNdWx0aXBseSA9IEFwcGx5QWxwaGFNdWx0aXBseV9WU1g7CisrICBXZWJQ RGlzcGF0Y2hBbHBoYSA9IERpc3BhdGNoQWxwaGFfVlNYOworKyAgV2ViUERpc3BhdGNoQWxwaGFU b0dyZWVuID0gRGlzcGF0Y2hBbHBoYVRvR3JlZW5fVlNYOworKyAgV2ViUEV4dHJhY3RBbHBoYSA9 IEV4dHJhY3RBbHBoYV9WU1g7CisrICBXZWJQRXh0cmFjdEdyZWVuID0gRXh0cmFjdEdyZWVuX1ZT WDsKKyt9CisrCisrI2Vsc2UgIC8vICFXRUJQX1VTRV9WU1gKKysKKytXRUJQX0RTUF9JTklUX1NU VUIoV2ViUEluaXRBbHBoYVByb2Nlc3NpbmdWU1gpCisrCisrI2VuZGlmICAvLyBXRUJQX1VTRV9W U1gKK2RpZmYgLS1naXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvY3B1LmggYi9tZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvY3B1LmgKK2luZGV4IDE3YzRkYjk3MWM3Zi4uZDFkNGIzMTI3Yzg0IDEwMDY0 NAorLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2NwdS5oCisrKysgYi9tZWRpYS9saWJ3ZWJw L3NyYy9kc3AvY3B1LmgKK0BAIC0xNTQsNiArMTU0LDE3IEBACisgI2RlZmluZSBXRUJQX1VTRV9N U0EKKyAjZW5kaWYKKyAKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFBQQzY0IC8gUG93 ZXIgVlNYIChJU0EgMi4wNyAvIFBPV0VSOCBiYXNlbGluZSkuCisrCisrI2lmIGRlZmluZWQoX19w b3dlcnBjNjRfXykgJiYgZGVmaW5lZChfX1ZTWF9fKQorKyNkZWZpbmUgV0VCUF9VU0VfVlNYCisr I2VuZGlmCisrCisrI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKSAmJiAhZGVmaW5lZChXRUJQX0hB VkVfVlNYKQorKyNkZWZpbmUgV0VCUF9IQVZFX1ZTWAorKyNlbmRpZgorKworIC8vLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgCisgI2lmbmRlZiBXRUJQX0RTUF9PTUlUX0NfQ09ERQorQEAgLTMwOCw3 ICszMTksOCBAQCB0eXBlZGVmIGVudW0geworICAga05FT04sCisgICBrTUlQUzMyLAorICAga01J UFNkc3BSMiwKKy0gIGtNU0EKKysgIGtNU0EsCisrICBrVlNYCisgfSBDUFVGZWF0dXJlOworIAor IC8vIHJldHVybnMgdHJ1ZSBpZiB0aGUgQ1BVIHN1cHBvcnRzIHRoZSBmZWF0dXJlLgorZGlmZiAt LWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWMuYyBiL21lZGlhL2xpYndlYnAvc3JjL2Rz cC9kZWMuYworaW5kZXggNGYzODMwOTk4MGNlLi5mMzQyNzZiYTczMTYgMTAwNjQ0CistLS0gYS9t ZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZGVjLmMKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9k ZWMuYworQEAgLTc1Miw2ICs3NTIsNyBAQCBleHRlcm4gdm9pZCBWUDhEc3BJbml0TkVPTih2b2lk KTsKKyBleHRlcm4gdm9pZCBWUDhEc3BJbml0TUlQUzMyKHZvaWQpOworIGV4dGVybiB2b2lkIFZQ OERzcEluaXRNSVBTZHNwUjIodm9pZCk7CisgZXh0ZXJuIHZvaWQgVlA4RHNwSW5pdE1TQSh2b2lk KTsKKytleHRlcm4gdm9pZCBWUDhEc3BJbml0VlNYKHZvaWQpOworIAorIFdFQlBfRFNQX0lOSVRf RlVOQyhWUDhEc3BJbml0KSB7CisgICBWUDhJbml0Q2xpcFRhYmxlcygpOworQEAgLTg0Myw2ICs4 NDQsMTEgQEAgV0VCUF9EU1BfSU5JVF9GVU5DKFZQOERzcEluaXQpIHsKKyAgICAgaWYgKFZQOEdl dENQVUluZm8oa01TQSkpIHsKKyAgICAgICBWUDhEc3BJbml0TVNBKCk7CisgICAgIH0KKysjZW5k aWYKKysjaWYgZGVmaW5lZChXRUJQX0hBVkVfVlNYKQorKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhr VlNYKSkgeworKyAgICAgIFZQOERzcEluaXRWU1goKTsKKysgICAgfQorICNlbmRpZgorICAgfQor IAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9kZWNfdnN4LmMgYi9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AvZGVjX3ZzeC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAw MDAwMDAwMDAwLi5lMGMxY2JjM2I3MWIKKy0tLSAvZGV2L251bGwKKysrKyBiL21lZGlhL2xpYndl YnAvc3JjL2RzcC9kZWNfdnN4LmMKK0BAIC0wLDAgKzEsNzM3IEBACisrLy8gQ29weXJpZ2h0IDIw MTEgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysvLworKy8vIFVzZSBvZiB0aGlz IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKysvLyB0aGF0 IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy Y2UKKysvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg Z3JhbnQgY2FuIGJlIGZvdW5kCisrLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1 dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisrLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysvLworKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBkZWNvZGluZyBmdW5jdGlvbnMu CisrCisrI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmluZWQoV0VCUF9VU0Vf VlNYKQorKworKyNpbmNsdWRlIDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKwor K3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIHNob3J0ICAgICBpMTZ4ODsKKyt0eXBlZGVmIF9fdmVj dG9yIHVuc2lnbmVkIHNob3J0ICAgdTE2eDg7CisrdHlwZWRlZiBfX3ZlY3RvciBzaWduZWQgaW50 ICAgICAgIGkzMng0OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgaW50ICAgICB1MzJ4NDsK Kyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgICAgdTh4MTY7CisrdHlwZWRlZiBfX3Zl Y3RvciBzaWduZWQgY2hhciAgICAgIGk4eDE2OworK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIGxv bmcgbG9uZyBpNjR4MjsKKysKKysvLyBTaWduZWQgbXVsdGlwbHktaGlnaCBvZiBwYWNrZWQgMTYt Yml0IGxhbmVzIChQT1dFUjggaGFzIG5vIHZtdWxoc2gpLgorK3N0YXRpYyBXRUJQX0lOTElORSBp MTZ4OCBNdWxIaTE2X1MoaTE2eDggYSwgaTE2eDggYikgeworKyAgY29uc3QgdTMyeDQgc2ggPSB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMTYpOworKyAgY29uc3QgaTMyeDQgZSA9IHZlY19zcmEo dmVjX211bGUoYSwgYiksIHNoKTsKKysgIGNvbnN0IGkzMng0IG8gPSB2ZWNfc3JhKHZlY19tdWxv KGEsIGIpLCBzaCk7CisrICByZXR1cm4gKGkxNng4KXZlY19wYWNrKHZlY19tZXJnZWgoZSwgbyks IHZlY19tZXJnZWwoZSwgbykpOworK30KKysKKysvLyBUcmFuc3Bvc2UgdHdvIGludGVybGVhdmVk IDR4NCBibG9ja3Mgb2YgMTYtYml0IHZhbHVlcy4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBU cmFuc3Bvc2UyXzR4NChpMTZ4OCBpbjAsIGkxNng4IGluMSwgaTE2eDggaW4yLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxNng4IGluMywgaTE2eDgqIG91dDAsIGkx Nng4KiBvdXQxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxNng4 KiBvdXQyLCBpMTZ4OCogb3V0MykgeworKyAgY29uc3QgaTE2eDggdDAgPSAoaTE2eDgpdmVjX21l cmdlaChpbjAsIGluMSk7CisrICBjb25zdCBpMTZ4OCB0MSA9IChpMTZ4OCl2ZWNfbWVyZ2VoKGlu MiwgaW4zKTsKKysgIGNvbnN0IGkxNng4IHQyID0gKGkxNng4KXZlY19tZXJnZWwoaW4wLCBpbjEp OworKyAgY29uc3QgaTE2eDggdDMgPSAoaTE2eDgpdmVjX21lcmdlbChpbjIsIGluMyk7CisrICBj b25zdCBpMzJ4NCB1MCA9IHZlY19tZXJnZWgoKGkzMng0KXQwLCAoaTMyeDQpdDEpOworKyAgY29u c3QgaTMyeDQgdTEgPSB2ZWNfbWVyZ2VoKChpMzJ4NCl0MiwgKGkzMng0KXQzKTsKKysgIGNvbnN0 IGkzMng0IHUyID0gdmVjX21lcmdlbCgoaTMyeDQpdDAsIChpMzJ4NCl0MSk7CisrICBjb25zdCBp MzJ4NCB1MyA9IHZlY19tZXJnZWwoKGkzMng0KXQyLCAoaTMyeDQpdDMpOworKyAgKm91dDAgPSAo aTE2eDgpdmVjX21lcmdlaCgoaTY0eDIpdTAsIChpNjR4Mil1MSk7CisrICAqb3V0MSA9IChpMTZ4 OCl2ZWNfbWVyZ2VsKChpNjR4Mil1MCwgKGk2NHgyKXUxKTsKKysgICpvdXQyID0gKGkxNng4KXZl Y19tZXJnZWgoKGk2NHgyKXUyLCAoaTY0eDIpdTMpOworKyAgKm91dDMgPSAoaTE2eDgpdmVjX21l cmdlbCgoaTY0eDIpdTIsIChpNjR4Mil1Myk7CisrfQorKworKy8vIEJvdW5kZWQgNC1jb2VmZmlj aWVudCBsb2FkIGludG8gdGhlIGxvdyBoYWxmIG9mIGEgMTYtYml0IHZlY3Rvci4KKytzdGF0aWMg V0VCUF9JTkxJTkUgaTE2eDggTG9hZDRDb2VmZnMoY29uc3QgaW50MTZfdCogV0VCUF9SRVNUUklD VCBwKSB7CisrICBpbnQxNl90IHRtcFs4XSA9IHswfTsKKysgIG1lbWNweSh0bXAsIHAsIDQgKiBz aXplb2YoaW50MTZfdCkpOworKyAgcmV0dXJuICooY29uc3QgaTE2eDgqKXRtcDsKKyt9CisrCisr Ly8gQm91bmRlZCBsb2FkIG9mIG4gcGl4ZWxzLCB6ZXJvLWV4dGVuZGVkIHRvIDE2LWJpdCBsYW5l cy4KKytzdGF0aWMgV0VCUF9JTkxJTkUgaTE2eDggTG9hZERzdChjb25zdCB1aW50OF90KiBXRUJQ X1JFU1RSSUNUIHAsIGludCBuKSB7CisrICB1bnNpZ25lZCBjaGFyIHRtcFsxNl0gPSB7MH07Cisr ICBtZW1jcHkodG1wLCBwLCBuKTsKKysgIHJldHVybiAoaTE2eDgpdmVjX21lcmdlaCh2ZWNfeGwo MCwgdG1wKSwgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSk7CisrfQorKworK3N0YXRpYyB2 b2lkIFRyYW5zZm9ybV9WU1goY29uc3QgaW50MTZfdCogV0VCUF9SRVNUUklDVCBpbiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0LCBpbnQgZG9f dHdvKSB7CisrICBjb25zdCBpMTZ4OCBrMSA9IHZlY19zcGxhdHMoKHNob3J0KTIwMDkxKTsKKysg IGNvbnN0IGkxNng4IGsyID0gdmVjX3NwbGF0cygoc2hvcnQpLTMwMDY4KTsKKysgIGNvbnN0IHUx Nng4IHRocmVlID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMyk7CisrICBpMTZ4OCBpbjAg PSBMb2FkNENvZWZmcyhpbiArIDApLCBpbjEgPSBMb2FkNENvZWZmcyhpbiArIDQpOworKyAgaTE2 eDggaW4yID0gTG9hZDRDb2VmZnMoaW4gKyA4KSwgaW4zID0gTG9hZDRDb2VmZnMoaW4gKyAxMik7 CisrICBpMTZ4OCBUMCwgVDEsIFQyLCBUMzsKKysKKysgIGlmIChkb190d28pIHsKKysgICAgaW4w ID0gKGkxNng4KXZlY19tZXJnZWgoKGk2NHgyKWluMCwgKGk2NHgyKUxvYWQ0Q29lZmZzKGluICsg MTYpKTsKKysgICAgaW4xID0gKGkxNng4KXZlY19tZXJnZWgoKGk2NHgyKWluMSwgKGk2NHgyKUxv YWQ0Q29lZmZzKGluICsgMjApKTsKKysgICAgaW4yID0gKGkxNng4KXZlY19tZXJnZWgoKGk2NHgy KWluMiwgKGk2NHgyKUxvYWQ0Q29lZmZzKGluICsgMjQpKTsKKysgICAgaW4zID0gKGkxNng4KXZl Y19tZXJnZWgoKGk2NHgyKWluMywgKGk2NHgyKUxvYWQ0Q29lZmZzKGluICsgMjgpKTsKKysgIH0K KysKKysgIHsgIC8vIFZlcnRpY2FsIHBhc3MgKyB0cmFuc3Bvc2UuCisrICAgIGNvbnN0IGkxNng4 IGEgPSB2ZWNfYWRkKGluMCwgaW4yKTsKKysgICAgY29uc3QgaTE2eDggYiA9IHZlY19zdWIoaW4w LCBpbjIpOworKyAgICBjb25zdCBpMTZ4OCBjID0gdmVjX2FkZCh2ZWNfc3ViKGluMSwgaW4zKSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3N1YihNdWxIaTE2X1MoaW4xLCBrMiks IE11bEhpMTZfUyhpbjMsIGsxKSkpOworKyAgICBjb25zdCBpMTZ4OCBkID0gdmVjX2FkZCh2ZWNf YWRkKGluMSwgaW4zKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX2FkZChNdWxI aTE2X1MoaW4xLCBrMSksIE11bEhpMTZfUyhpbjMsIGsyKSkpOworKyAgICBUcmFuc3Bvc2UyXzR4 NCh2ZWNfYWRkKGEsIGQpLCB2ZWNfYWRkKGIsIGMpLCB2ZWNfc3ViKGIsIGMpLCB2ZWNfc3ViKGEs IGQpLAorKyAgICAgICAgICAgICAgICAgICAmVDAsICZUMSwgJlQyLCAmVDMpOworKyAgfQorKyAg eyAgLy8gSG9yaXpvbnRhbCBwYXNzICsgdHJhbnNwb3NlLgorKyAgICBjb25zdCBpMTZ4OCBkYyA9 IHZlY19hZGQoVDAsIHZlY19zcGxhdHMoKHNob3J0KTQpKTsKKysgICAgY29uc3QgaTE2eDggYSA9 IHZlY19hZGQoZGMsIFQyKTsKKysgICAgY29uc3QgaTE2eDggYiA9IHZlY19zdWIoZGMsIFQyKTsK KysgICAgY29uc3QgaTE2eDggYyA9IHZlY19hZGQodmVjX3N1YihUMSwgVDMpLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2ZWNfc3ViKE11bEhpMTZfUyhUMSwgazIpLCBNdWxIaTE2X1Mo VDMsIGsxKSkpOworKyAgICBjb25zdCBpMTZ4OCBkID0gdmVjX2FkZCh2ZWNfYWRkKFQxLCBUMyks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY19hZGQoTXVsSGkxNl9TKFQxLCBrMSks IE11bEhpMTZfUyhUMywgazIpKSk7CisrICAgIGNvbnN0IGkxNng4IHMwID0gdmVjX3NyYSh2ZWNf YWRkKGEsIGQpLCB0aHJlZSk7CisrICAgIGNvbnN0IGkxNng4IHMxID0gdmVjX3NyYSh2ZWNfYWRk KGIsIGMpLCB0aHJlZSk7CisrICAgIGNvbnN0IGkxNng4IHMyID0gdmVjX3NyYSh2ZWNfc3ViKGIs IGMpLCB0aHJlZSk7CisrICAgIGNvbnN0IGkxNng4IHMzID0gdmVjX3NyYSh2ZWNfc3ViKGEsIGQp LCB0aHJlZSk7CisrICAgIFRyYW5zcG9zZTJfNHg0KHMwLCBzMSwgczIsIHMzLCAmVDAsICZUMSwg JlQyLCAmVDMpOworKyAgfQorKyAgeyAgLy8gQWRkIHRvIHRoZSByZWZlcmVuY2UgcGl4ZWxzIGFu ZCBzdG9yZSB3aXRoIHNhdHVyYXRpb24uCisrICAgIGNvbnN0IGludCBuID0gZG9fdHdvID8gOCA6 IDQ7CisrICAgIGNvbnN0IGkxNng4IGQwID0gTG9hZERzdChkc3QgKyAwICogQlBTLCBuKTsKKysg ICAgY29uc3QgaTE2eDggZDEgPSBMb2FkRHN0KGRzdCArIDEgKiBCUFMsIG4pOworKyAgICBjb25z dCBpMTZ4OCBkMiA9IExvYWREc3QoZHN0ICsgMiAqIEJQUywgbik7CisrICAgIGNvbnN0IGkxNng4 IGQzID0gTG9hZERzdChkc3QgKyAzICogQlBTLCBuKTsKKysgICAgY29uc3QgdTh4MTYgcjAgPSB2 ZWNfcGFja3N1KHZlY19hZGQoZDAsIFQwKSwgdmVjX2FkZChkMCwgVDApKTsKKysgICAgY29uc3Qg dTh4MTYgcjEgPSB2ZWNfcGFja3N1KHZlY19hZGQoZDEsIFQxKSwgdmVjX2FkZChkMSwgVDEpKTsK KysgICAgY29uc3QgdTh4MTYgcjIgPSB2ZWNfcGFja3N1KHZlY19hZGQoZDIsIFQyKSwgdmVjX2Fk ZChkMiwgVDIpKTsKKysgICAgY29uc3QgdTh4MTYgcjMgPSB2ZWNfcGFja3N1KHZlY19hZGQoZDMs IFQzKSwgdmVjX2FkZChkMywgVDMpKTsKKysgICAgdW5zaWduZWQgY2hhciBiMFsxNl0sIGIxWzE2 XSwgYjJbMTZdLCBiM1sxNl07CisrICAgIG1lbWNweShiMCwgJnIwLCAxNik7IG1lbWNweShiMSwg JnIxLCAxNik7CisrICAgIG1lbWNweShiMiwgJnIyLCAxNik7IG1lbWNweShiMywgJnIzLCAxNik7 CisrICAgIG1lbWNweShkc3QgKyAwICogQlBTLCBiMCwgbik7IG1lbWNweShkc3QgKyAxICogQlBT LCBiMSwgbik7CisrICAgIG1lbWNweShkc3QgKyAyICogQlBTLCBiMiwgbik7IG1lbWNweShkc3Qg KyAzICogQlBTLCBiMywgbik7CisrICB9CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisrLy8gU2ltcGxlIGluLWxvb3AgZWRnZSBmaWx0ZXJpbmcuCisrCisrI2RlZmluZSBBQlNVKHAs IHEpIHZlY19vcih2ZWNfc3VicygodTh4MTYpKHEpLCAodTh4MTYpKHApKSwgXAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdmVjX3N1YnMoKHU4eDE2KShwKSwgKHU4eDE2KShxKSkpCisrCisr Ly8gUGVyLWJ5dGUgc2lnbmVkIGFyaXRobWV0aWMgPj4zLCBwYWNrZWQgd2l0aCBzYXR1cmF0aW9u LgorK3N0YXRpYyBXRUJQX0lOTElORSBpOHgxNiBTaWduZWRTaGlmdDMoaTh4MTYgeCkgeworKyAg Y29uc3QgdTh4MTYgeiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICBjb25zdCB1 MTZ4OCBzaCA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KSgzICsgOCkpOworKyAgY29uc3Qg aTE2eDggbG8gPSB2ZWNfc3JhKChpMTZ4OCl2ZWNfbWVyZ2VoKHosICh1OHgxNil4KSwgc2gpOwor KyAgY29uc3QgaTE2eDggaGkgPSB2ZWNfc3JhKChpMTZ4OCl2ZWNfbWVyZ2VsKHosICh1OHgxNil4 KSwgc2gpOworKyAgcmV0dXJuIChpOHgxNil2ZWNfcGFja3MobG8sIGhpKTsKKyt9CisrCisrc3Rh dGljIFdFQlBfSU5MSU5FIHZvaWQgRG9GaWx0ZXIyX1ZTWCh1OHgxNiogV0VCUF9SRVNUUklDVCBw MSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBXRUJQX1JF U1RSSUNUIHAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYq IFdFQlBfUkVTVFJJQ1QgcTAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1OHgxNiogV0VCUF9SRVNUUklDVCBxMSwgaW50IHRocmVzaCkgeworKyAgY29uc3QgdTh4MTYg c2lnbiA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMHg4MCk7CisrICBjb25zdCB1OHgxNiB0 MSA9IEFCU1UoKnAxLCAqcTEpOworKyAgY29uc3QgdTh4MTYgdDIgPSB2ZWNfYW5kKHQxLCB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBjaGFyKTB4RkUpKTsKKysgIGNvbnN0IHU4eDE2IHQzID0gKHU4eDE2 KXZlY19zcigodTE2eDgpdDIsIHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpKTsKKysgIGNv bnN0IHU4eDE2IHQ0ID0gQUJTVSgqcDAsICpxMCk7CisrICBjb25zdCB1OHgxNiB0NiA9IHZlY19h ZGRzKHZlY19hZGRzKHQ0LCB0NCksIHQzKTsKKysgIGNvbnN0IHU4eDE2IHQ3ID0gdmVjX3N1YnMo dDYsIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpdGhyZXNoKSk7CisrICBjb25zdCB1OHgxNiBt YXNrID0gKHU4eDE2KXZlY19jbXBlcSh0NywgdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSk7 CisrCisrICBjb25zdCBpOHgxNiBwMXMgPSAoaTh4MTYpdmVjX3hvcigqcDEsIHNpZ24pOworKyAg Y29uc3QgaTh4MTYgcTFzID0gKGk4eDE2KXZlY194b3IoKnExLCBzaWduKTsKKysgIGk4eDE2IFAw ID0gKGk4eDE2KXZlY194b3IoKnAwLCBzaWduKTsKKysgIGk4eDE2IFEwID0gKGk4eDE2KXZlY194 b3IoKnEwLCBzaWduKTsKKysKKysgIGNvbnN0IGk4eDE2IGQwID0gdmVjX3N1YnMoUTAsIFAwKTsK KysgIGNvbnN0IGk4eDE2IHMxID0gdmVjX2FkZHModmVjX3N1YnMocDFzLCBxMXMpLCBkMCk7Cisr ICBpOHgxNiBhID0gdmVjX2FkZHMoZDAsIHZlY19hZGRzKGQwLCBzMSkpOworKyAgYSA9IHZlY19h bmQoYSwgKGk4eDE2KW1hc2spOworKyAgY29uc3QgaTh4MTYgdjMgPSBTaWduZWRTaGlmdDModmVj X2FkZHMoYSwgdmVjX3NwbGF0cygoc2lnbmVkIGNoYXIpMykpKTsKKysgIGNvbnN0IGk4eDE2IHY0 ID0gU2lnbmVkU2hpZnQzKHZlY19hZGRzKGEsIHZlY19zcGxhdHMoKHNpZ25lZCBjaGFyKTQpKSk7 CisrICBRMCA9IHZlY19zdWJzKFEwLCB2NCk7CisrICBQMCA9IHZlY19hZGRzKFAwLCB2Myk7Cisr ICAqcDAgPSB2ZWNfeG9yKCh1OHgxNilQMCwgc2lnbik7CisrICAqcTAgPSB2ZWNfeG9yKCh1OHgx NilRMCwgc2lnbik7CisrfQorKworK3N0YXRpYyB2b2lkIFNpbXBsZVZGaWx0ZXIxNl9WU1godWlu dDhfdCogcCwgaW50IHN0cmlkZSwgaW50IHRocmVzaCkgeworKyAgdTh4MTYgcDEgPSB2ZWNfeGwo MCwgcCAtIDIgKiBzdHJpZGUpOworKyAgdTh4MTYgcDAgPSB2ZWNfeGwoMCwgcCAtIHN0cmlkZSk7 CisrICB1OHgxNiBxMCA9IHZlY194bCgwLCBwKTsKKysgIHU4eDE2IHExID0gdmVjX3hsKDAsIHAg KyBzdHJpZGUpOworKyAgRG9GaWx0ZXIyX1ZTWCgmcDEsICZwMCwgJnEwLCAmcTEsIHRocmVzaCk7 CisrICB2ZWNfeHN0KHAwLCAwLCBwIC0gc3RyaWRlKTsKKysgIHZlY194c3QocTAsIDAsIHApOwor K30KKysKKytzdGF0aWMgdm9pZCBTaW1wbGVWRmlsdGVyMTZpX1ZTWCh1aW50OF90KiBwLCBpbnQg c3RyaWRlLCBpbnQgdGhyZXNoKSB7CisrICBpbnQgazsKKysgIGZvciAoayA9IDM7IGsgPiAwOyAt LWspIHsKKysgICAgcCArPSA0ICogc3RyaWRlOworKyAgICBTaW1wbGVWRmlsdGVyMTZfVlNYKHAs IHN0cmlkZSwgdGhyZXNoKTsKKysgIH0KKyt9CisrCisrLy8gVHJhbnNwb3NlIGZvdXIgY29sdW1u cyBvdXQgb2YgLyBpbnRvIDE2IHJvd3MgZm9yIGhvcml6b250YWwtZWRnZSBmaWx0ZXJpbmcuCisr c3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgTG9hZDh4NChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RS SUNUIGIsIGludCBzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTh4MTYqIFdF QlBfUkVTVFJJQ1QgcCwgdTh4MTYqIFdFQlBfUkVTVFJJQ1QgcSkgeworKyAgdWludDMyX3QgYTBb NF0sIGExWzRdOworKyAgbWVtY3B5KCZhMFswXSwgYiArIDAgKiBzLCA0KTsgbWVtY3B5KCZhMFsx XSwgYiArIDQgKiBzLCA0KTsKKysgIG1lbWNweSgmYTBbMl0sIGIgKyAyICogcywgNCk7IG1lbWNw eSgmYTBbM10sIGIgKyA2ICogcywgNCk7CisrICBtZW1jcHkoJmExWzBdLCBiICsgMSAqIHMsIDQp OyBtZW1jcHkoJmExWzFdLCBiICsgNSAqIHMsIDQpOworKyAgbWVtY3B5KCZhMVsyXSwgYiArIDMg KiBzLCA0KTsgbWVtY3B5KCZhMVszXSwgYiArIDcgKiBzLCA0KTsKKysgIGNvbnN0IHU4eDE2IEEw ID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKilhMCk7CisrICBjb25zdCB1OHgxNiBBMSA9IHZl Y194bCgwLCAodW5zaWduZWQgY2hhciopYTEpOworKyAgY29uc3QgdTh4MTYgQjAgPSB2ZWNfbWVy Z2VoKEEwLCBBMSksIEIxID0gdmVjX21lcmdlbChBMCwgQTEpOworKyAgY29uc3QgdTE2eDggQzAg PSB2ZWNfbWVyZ2VoKCh1MTZ4OClCMCwgKHUxNng4KUIxKTsKKysgIGNvbnN0IHUxNng4IEMxID0g dmVjX21lcmdlbCgodTE2eDgpQjAsICh1MTZ4OClCMSk7CisrICAqcCA9ICh1OHgxNil2ZWNfbWVy Z2VoKCh1MzJ4NClDMCwgKHUzMng0KUMxKTsKKysgICpxID0gKHU4eDE2KXZlY19tZXJnZWwoKHUz Mng0KUMwLCAodTMyeDQpQzEpOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBMb2Fk MTZ4NChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHIwLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcjgsIGludCBzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBwMSwgdTh4MTYqIHAwLCB1 OHgxNiogcTAsIHU4eDE2KiBxMSkgeworKyAgTG9hZDh4NChyMCwgcywgcDEsIHEwKTsKKysgIExv YWQ4eDQocjgsIHMsIHAwLCBxMSk7CisrICBjb25zdCB1OHgxNiB0MSA9ICpwMSwgdDIgPSAqcTA7 CisrICAqcDEgPSAodTh4MTYpdmVjX21lcmdlaCgoaTY0eDIpdDEsIChpNjR4MikqcDApOworKyAg KnAwID0gKHU4eDE2KXZlY19tZXJnZWwoKGk2NHgyKXQxLCAoaTY0eDIpKnAwKTsKKysgICpxMCA9 ICh1OHgxNil2ZWNfbWVyZ2VoKChpNjR4Mil0MiwgKGk2NHgyKSpxMSk7CisrICAqcTEgPSAodTh4 MTYpdmVjX21lcmdlbCgoaTY0eDIpdDIsIChpNjR4MikqcTEpOworK30KKysKKytzdGF0aWMgV0VC UF9JTkxJTkUgdm9pZCBTdG9yZTR4NCh1OHgxNiB4LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRz dCwgaW50IHMpIHsKKysgIHVuc2lnbmVkIGNoYXIgYlsxNl07CisrICBpbnQgaTsKKysgIG1lbWNw eShiLCAmeCwgMTYpOworKyAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgbWVtY3B5KGRzdCArIGkg KiBzLCBiICsgNCAqIGksIDQpOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBTdG9y ZTE2eDQodTh4MTYgcDEsIHU4eDE2IHAwLCB1OHgxNiBxMCwgdTh4MTYgcTEsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgcjAsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1Qgcjgs IGludCBzKSB7CisrICB1OHgxNiB0ID0gcDA7CisrICB1OHgxNiBwMHMgPSB2ZWNfbWVyZ2VoKHAx LCB0KSwgcDFzID0gdmVjX21lcmdlbChwMSwgdCk7CisrICB0ID0gcTA7CisrICB1OHgxNiBxMHMg PSB2ZWNfbWVyZ2VoKHQsIHExKSwgcTFzID0gdmVjX21lcmdlbCh0LCBxMSk7CisrICB0ID0gcDBz OworKyAgcDBzID0gKHU4eDE2KXZlY19tZXJnZWgoKHUxNng4KXQsICh1MTZ4OClxMHMpOworKyAg cTBzID0gKHU4eDE2KXZlY19tZXJnZWwoKHUxNng4KXQsICh1MTZ4OClxMHMpOworKyAgdCA9IHAx czsKKysgIHAxcyA9ICh1OHgxNil2ZWNfbWVyZ2VoKCh1MTZ4OCl0LCAodTE2eDgpcTFzKTsKKysg IHExcyA9ICh1OHgxNil2ZWNfbWVyZ2VsKCh1MTZ4OCl0LCAodTE2eDgpcTFzKTsKKysgIFN0b3Jl NHg0KHAwcywgcjAsIHMpOyBTdG9yZTR4NChxMHMsIHIwICsgNCAqIHMsIHMpOworKyAgU3RvcmU0 eDQocDFzLCByOCwgcyk7IFN0b3JlNHg0KHExcywgcjggKyA0ICogcywgcyk7CisrfQorKworK3N0 YXRpYyB2b2lkIFNpbXBsZUhGaWx0ZXIxNl9WU1godWludDhfdCogcCwgaW50IHN0cmlkZSwgaW50 IHRocmVzaCkgeworKyAgdTh4MTYgcDEsIHAwLCBxMCwgcTE7CisrICBwIC09IDI7ICAvLyBiZWdp bm5pbmcgb2YgcDEKKysgIExvYWQxNng0KHAsIHAgKyA4ICogc3RyaWRlLCBzdHJpZGUsICZwMSwg JnAwLCAmcTAsICZxMSk7CisrICBEb0ZpbHRlcjJfVlNYKCZwMSwgJnAwLCAmcTAsICZxMSwgdGhy ZXNoKTsKKysgIFN0b3JlMTZ4NChwMSwgcDAsIHEwLCBxMSwgcCwgcCArIDggKiBzdHJpZGUsIHN0 cmlkZSk7CisrfQorKworK3N0YXRpYyB2b2lkIFNpbXBsZUhGaWx0ZXIxNmlfVlNYKHVpbnQ4X3Qq IHAsIGludCBzdHJpZGUsIGludCB0aHJlc2gpIHsKKysgIGludCBrOworKyAgZm9yIChrID0gMzsg ayA+IDA7IC0taykgeworKyAgICBwICs9IDQ7CisrICAgIFNpbXBsZUhGaWx0ZXIxNl9WU1gocCwg c3RyaWRlLCB0aHJlc2gpOworKyAgfQorK30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor Ky8vIENvbXBsZXggaW4tbG9vcCBlZGdlIGZpbHRlcmluZyAodmVydGljYWwvbHVtYSkuCisrCisr c3RhdGljIGNvbnN0IHU4eDE2IGtTaWduQml0ID0geworKyAgICAweDgwLCAweDgwLCAweDgwLCAw eDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAorKyAgICAweDgwLCAweDgwLCAweDgwLCAweDgw LCAweDgwLCAweDgwLCAweDgwLCAweDgwfTsKKysjZGVmaW5lIEZMSVBCKHgpICgoeCkgPSAoaTh4 MTYpdmVjX3hvcigodTh4MTYpKHgpLCBrU2lnbkJpdCkpCisrCisrc3RhdGljIFdFQlBfSU5MSU5F IHU4eDE2IEdldE5vdEhFVih1OHgxNiBwMSwgdTh4MTYgcDAsIHU4eDE2IHEwLCB1OHgxNiBxMSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZXZfdGhyZXNoKSB7Cisr ICBjb25zdCB1OHgxNiBkID0gdmVjX3N1YnModmVjX21heChBQlNVKHAxLCBwMCksIEFCU1UocTEs IHEwKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQg Y2hhciloZXZfdGhyZXNoKSk7CisrICByZXR1cm4gKHU4eDE2KXZlY19jbXBlcShkLCB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTApKTsKKyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5FIGk4eDE2 IEdldEJhc2VEZWx0YShpOHgxNiBwMSwgaTh4MTYgcDAsIGk4eDE2IHEwLCBpOHgxNiBxMSkgewor KyAgY29uc3QgaTh4MTYgZCA9IHZlY19zdWJzKHEwLCBwMCk7CisrICBjb25zdCBpOHgxNiBzMSA9 IHZlY19hZGRzKHZlY19zdWJzKHAxLCBxMSksIGQpOworKyAgcmV0dXJuIHZlY19hZGRzKGQsIHZl Y19hZGRzKGQsIHMxKSk7CisrfQorKworK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIERvU2ltcGxl RmlsdGVyUyhpOHgxNiogcDAsIGk4eDE2KiBxMCwgaTh4MTYgZikgeworKyAgKnEwID0gdmVjX3N1 YnMoKnEwLCBTaWduZWRTaGlmdDModmVjX2FkZHMoZiwgdmVjX3NwbGF0cygoc2lnbmVkIGNoYXIp NCkpKSk7CisrICAqcDAgPSB2ZWNfYWRkcygqcDAsIFNpZ25lZFNoaWZ0Myh2ZWNfYWRkcyhmLCB2 ZWNfc3BsYXRzKChzaWduZWQgY2hhcikzKSkpKTsKKyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5F IHZvaWQgVXBkYXRlMlBpeGVscyhpOHgxNiogcGksIGk4eDE2KiBxaSwgaTE2eDggbG8sIGkxNng4 IGhpKSB7CisrICBjb25zdCB1MTZ4OCBzNyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTcp OworKyAgY29uc3QgaTh4MTYgZCA9IChpOHgxNil2ZWNfcGFja3ModmVjX3NyYShsbywgczcpLCB2 ZWNfc3JhKGhpLCBzNykpOworKyAgKnBpID0gdmVjX2FkZHMoKnBpLCBkKTsKKysgICpxaSA9IHZl Y19zdWJzKCpxaSwgZCk7CisrICBGTElQQigqcGkpOworKyAgRkxJUEIoKnFpKTsKKyt9CisrCisr Ly8gbWFzayA9IChtYXggaW5uZXIgYWJzLWRpZmYgPD0gaXRocmVzaCkgJiYgTmVlZHNGaWx0ZXIo dGhyZXNoKS4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgQ29tcGxleE1hc2sodTh4MTYgcDMs IHU4eDE2IHAyLCB1OHgxNiBwMSwgdTh4MTYgcDAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHU4eDE2IHEwLCB1OHgxNiBxMSwgdTh4MTYgcTIsIHU4eDE2IHEzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhyZXNoLCBpbnQgaXRocmVz aCkgeworKyAgdTh4MTYgbSA9IEFCU1UocDEsIHAwKTsKKysgIG0gPSB2ZWNfbWF4KG0sIEFCU1Uo cDMsIHAyKSk7CisrICBtID0gdmVjX21heChtLCBBQlNVKHAyLCBwMSkpOworKyAgbSA9IHZlY19t YXgobSwgQUJTVShxMSwgcTApKTsKKysgIG0gPSB2ZWNfbWF4KG0sIEFCU1UocTMsIHEyKSk7Cisr ICBtID0gdmVjX21heChtLCBBQlNVKHEyLCBxMSkpOworKyAgY29uc3QgdTh4MTYgdG0gPSAodTh4 MTYpdmVjX2NtcGVxKAorKyAgICAgIHZlY19zdWJzKG0sIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNo YXIpaXRocmVzaCkpLAorKyAgICAgIHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCkpOworKyAg Y29uc3QgdTh4MTYgdDIgPSB2ZWNfYW5kKEFCU1UocDEsIHExKSwgdmVjX3NwbGF0cygodW5zaWdu ZWQgY2hhcikweEZFKSk7CisrICBjb25zdCB1OHgxNiB0MyA9ICh1OHgxNil2ZWNfc3IoKHUxNng4 KXQyLCB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxKSk7CisrICBjb25zdCB1OHgxNiB0NiA9 IHZlY19hZGRzKHZlY19hZGRzKEFCU1UocDAsIHEwKSwgQUJTVShwMCwgcTApKSwgdDMpOworKyAg Y29uc3QgdTh4MTYgZm0gPSAodTh4MTYpdmVjX2NtcGVxKAorKyAgICAgIHZlY19zdWJzKHQ2LCB2 ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKXRocmVzaCkpLAorKyAgICAgIHZlY19zcGxhdHMoKHVu c2lnbmVkIGNoYXIpMCkpOworKyAgcmV0dXJuIHZlY19hbmQodG0sIGZtKTsKKyt9CisrCisrc3Rh dGljIFdFQlBfSU5MSU5FIHZvaWQgRG9GaWx0ZXI0KHU4eDE2KiBwMXUsIHU4eDE2KiBwMHUsIHU4 eDE2KiBxMHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBxMXUs IHU4eDE2IG1hc2ssIGludCBoZXZfdGhyZXNoKSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVj X3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHU4eDE2IG5vdF9oZXYgPSBHZXRO b3RIRVYoKnAxdSwgKnAwdSwgKnEwdSwgKnExdSwgaGV2X3RocmVzaCk7CisrICBpOHgxNiBwMSA9 IChpOHgxNil2ZWNfeG9yKCpwMXUsIGtTaWduQml0KSwgcDAgPSAoaTh4MTYpdmVjX3hvcigqcDB1 LCBrU2lnbkJpdCk7CisrICBpOHgxNiBxMCA9IChpOHgxNil2ZWNfeG9yKCpxMHUsIGtTaWduQml0 KSwgcTEgPSAoaTh4MTYpdmVjX3hvcigqcTF1LCBrU2lnbkJpdCk7CisrICBpOHgxNiB0MSA9IHZl Y19hbmRjKHZlY19zdWJzKHAxLCBxMSksIChpOHgxNilub3RfaGV2KTsKKysgIGNvbnN0IGk4eDE2 IHQyID0gdmVjX3N1YnMocTAsIHAwKTsKKysgIHQxID0gdmVjX2FkZHModDEsIHQyKTsgdDEgPSB2 ZWNfYWRkcyh0MSwgdDIpOyB0MSA9IHZlY19hZGRzKHQxLCB0Mik7CisrICB0MSA9IHZlY19hbmQo dDEsIChpOHgxNiltYXNrKTsKKysgIGNvbnN0IGk4eDE2IGEzID0gU2lnbmVkU2hpZnQzKHZlY19h ZGRzKHQxLCB2ZWNfc3BsYXRzKChzaWduZWQgY2hhcik0KSkpOworKyAgcDAgPSB2ZWNfYWRkcyhw MCwgU2lnbmVkU2hpZnQzKHZlY19hZGRzKHQxLCB2ZWNfc3BsYXRzKChzaWduZWQgY2hhcikzKSkp KTsKKysgIHEwID0gdmVjX3N1YnMocTAsIGEzKTsKKysgIEZMSVBCKHAwKTsgRkxJUEIocTApOwor KyAgY29uc3QgaTh4MTYgdCA9IHZlY19hZGQoYTMsIChpOHgxNilrU2lnbkJpdCk7CisrICBpOHgx NiB0MyA9IHZlY19zdWIoKGk4eDE2KXZlY19hdmcoKHU4eDE2KXQsIHplcm8pLCB2ZWNfc3BsYXRz KChzaWduZWQgY2hhcik2NCkpOworKyAgdDMgPSB2ZWNfYW5kKChpOHgxNilub3RfaGV2LCB0Myk7 CisrICBxMSA9IHZlY19zdWJzKHExLCB0Myk7IHAxID0gdmVjX2FkZHMocDEsIHQzKTsKKysgIEZM SVBCKHAxKTsgRkxJUEIocTEpOworKyAgKnAxdSA9ICh1OHgxNilwMTsgKnAwdSA9ICh1OHgxNilw MDsgKnEwdSA9ICh1OHgxNilxMDsgKnExdSA9ICh1OHgxNilxMTsKKyt9CisrCisrc3RhdGljIFdF QlBfSU5MSU5FIHZvaWQgRG9GaWx0ZXI2KHU4eDE2KiBwMnUsIHU4eDE2KiBwMXUsIHU4eDE2KiBw MHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4eDE2KiBxMHUsIHU4eDE2 KiBxMXUsIHU4eDE2KiBxMnUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4 eDE2IG1hc2ssIGludCBoZXZfdGhyZXNoKSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3Nw bGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHU4eDE2IG5vdF9oZXYgPSBHZXROb3RI RVYoKnAxdSwgKnAwdSwgKnEwdSwgKnExdSwgaGV2X3RocmVzaCk7CisrICBpOHgxNiBwMiA9IChp OHgxNil2ZWNfeG9yKCpwMnUsIGtTaWduQml0KSwgcDEgPSAoaTh4MTYpdmVjX3hvcigqcDF1LCBr U2lnbkJpdCk7CisrICBpOHgxNiBwMCA9IChpOHgxNil2ZWNfeG9yKCpwMHUsIGtTaWduQml0KSwg cTAgPSAoaTh4MTYpdmVjX3hvcigqcTB1LCBrU2lnbkJpdCk7CisrICBpOHgxNiBxMSA9IChpOHgx Nil2ZWNfeG9yKCpxMXUsIGtTaWduQml0KSwgcTIgPSAoaTh4MTYpdmVjX3hvcigqcTJ1LCBrU2ln bkJpdCk7CisrICBjb25zdCBpOHgxNiBhID0gR2V0QmFzZURlbHRhKHAxLCBwMCwgcTAsIHExKTsK KysgIHsgIC8vIGhldiBwaXhlbHM6IHNpbXBsZSBmaWx0ZXIKKysgICAgY29uc3QgaTh4MTYgZiA9 IHZlY19hbmQoYSwgKGk4eDE2KXZlY19hbmRjKG1hc2ssIG5vdF9oZXYpKTsKKysgICAgRG9TaW1w bGVGaWx0ZXJTKCZwMCwgJnEwLCBmKTsKKysgIH0KKysgIHsgIC8vIG5vbi1oZXYgcGl4ZWxzOiBz dHJvbmcgZmlsdGVyCisrICAgIGNvbnN0IGk4eDE2IGYgPSB2ZWNfYW5kKGEsIHZlY19hbmQoKGk4 eDE2KW5vdF9oZXYsIChpOHgxNiltYXNrKSk7CisrICAgIGNvbnN0IGkxNng4IGs5ID0gdmVjX3Nw bGF0cygoc2hvcnQpMHgwOTAwKSwgazYzID0gdmVjX3NwbGF0cygoc2hvcnQpNjMpOworKyAgICBj b25zdCBpMTZ4OCBmOWxvID0gTXVsSGkxNl9TKChpMTZ4OCl2ZWNfbWVyZ2VoKHplcm8sICh1OHgx NilmKSwgazkpOworKyAgICBjb25zdCBpMTZ4OCBmOWhpID0gTXVsSGkxNl9TKChpMTZ4OCl2ZWNf bWVyZ2VsKHplcm8sICh1OHgxNilmKSwgazkpOworKyAgICBjb25zdCBpMTZ4OCBhMmxvID0gdmVj X2FkZChmOWxvLCBrNjMpLCBhMmhpID0gdmVjX2FkZChmOWhpLCBrNjMpOworKyAgICBjb25zdCBp MTZ4OCBhMWxvID0gdmVjX2FkZChhMmxvLCBmOWxvKSwgYTFoaSA9IHZlY19hZGQoYTJoaSwgZjlo aSk7CisrICAgIGNvbnN0IGkxNng4IGEwbG8gPSB2ZWNfYWRkKGExbG8sIGY5bG8pLCBhMGhpID0g dmVjX2FkZChhMWhpLCBmOWhpKTsKKysgICAgVXBkYXRlMlBpeGVscygmcDIsICZxMiwgYTJsbywg YTJoaSk7CisrICAgIFVwZGF0ZTJQaXhlbHMoJnAxLCAmcTEsIGExbG8sIGExaGkpOworKyAgICBV cGRhdGUyUGl4ZWxzKCZwMCwgJnEwLCBhMGxvLCBhMGhpKTsKKysgIH0KKysgICpwMnUgPSAodTh4 MTYpcDI7ICpwMXUgPSAodTh4MTYpcDE7ICpwMHUgPSAodTh4MTYpcDA7CisrICAqcTB1ID0gKHU4 eDE2KXEwOyAqcTF1ID0gKHU4eDE2KXExOyAqcTJ1ID0gKHU4eDE2KXEyOworK30KKysKKytzdGF0 aWMgdm9pZCBWRmlsdGVyMTZfVlNYKHVpbnQ4X3QqIHAsIGludCBzLCBpbnQgdGhyZXNoLCBpbnQg aXRocmVzaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZXZfdGhyZXNoKSB7Cisr ICB1OHgxNiBwMyA9IHZlY194bCgwLCBwIC0gNCAqIHMpLCBwMiA9IHZlY194bCgwLCBwIC0gMyAq IHMpOworKyAgdTh4MTYgcDEgPSB2ZWNfeGwoMCwgcCAtIDIgKiBzKSwgcDAgPSB2ZWNfeGwoMCwg cCAtIHMpOworKyAgdTh4MTYgcTAgPSB2ZWNfeGwoMCwgcCksIHExID0gdmVjX3hsKDAsIHAgKyBz KTsKKysgIHU4eDE2IHEyID0gdmVjX3hsKDAsIHAgKyAyICogcyksIHEzID0gdmVjX3hsKDAsIHAg KyAzICogcyk7CisrICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwgcDAs IHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgRG9GaWx0ZXI2KCZwMiwgJnAx LCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJlc2gpOworKyAgdmVjX3hzdChwMiwgMCwg cCAtIDMgKiBzKTsgdmVjX3hzdChwMSwgMCwgcCAtIDIgKiBzKTsgdmVjX3hzdChwMCwgMCwgcCAt IHMpOworKyAgdmVjX3hzdChxMCwgMCwgcCk7IHZlY194c3QocTEsIDAsIHAgKyBzKTsgdmVjX3hz dChxMiwgMCwgcCArIDIgKiBzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgVkZpbHRlcjE2aV9WU1go dWludDhfdCogcCwgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBoZXZfdGhyZXNoKSB7CisrICBpbnQgazsKKysgIGZvciAoayA9 IDM7IGsgPiAwOyAtLWspIHsKKysgICAgcCArPSA0ICogczsKKysgICAgdTh4MTYgcDMgPSB2ZWNf eGwoMCwgcCAtIDQgKiBzKSwgcDIgPSB2ZWNfeGwoMCwgcCAtIDMgKiBzKTsKKysgICAgdTh4MTYg cDEgPSB2ZWNfeGwoMCwgcCAtIDIgKiBzKSwgcDAgPSB2ZWNfeGwoMCwgcCAtIHMpOworKyAgICB1 OHgxNiBxMCA9IHZlY194bCgwLCBwKSwgcTEgPSB2ZWNfeGwoMCwgcCArIHMpOworKyAgICB1OHgx NiBxMiA9IHZlY194bCgwLCBwICsgMiAqIHMpLCBxMyA9IHZlY194bCgwLCBwICsgMyAqIHMpOwor KyAgICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwg cTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgICBEb0ZpbHRlcjQoJnAxLCAmcDAsICZxMCwg JnExLCBtLCBoZXZfdGhyZXNoKTsKKysgICAgdmVjX3hzdChwMSwgMCwgcCAtIDIgKiBzKTsgdmVj X3hzdChwMCwgMCwgcCAtIHMpOworKyAgICB2ZWNfeHN0KHEwLCAwLCBwKTsgdmVjX3hzdChxMSwg MCwgcCArIHMpOworKyAgfQorK30KKysKKysvLyBDb21wbGV4IGhvcml6b250YWwgbHVtYTogdHdv IDE2eDQgdHJhbnNwb3NlcyBhcm91bmQgdGhlIHZlcnRpY2FsIGVkZ2UgZmVlZAorKy8vIHRoZSBz YW1lIERvRmlsdGVyNC9Eb0ZpbHRlcjYgdXNlZCBieSB0aGUgdmVydGljYWwgdmFyaWFudHMuCisr c3RhdGljIHZvaWQgSEZpbHRlcjE2X1ZTWCh1aW50OF90KiBwLCBpbnQgcywgaW50IHRocmVzaCwg aW50IGl0aHJlc2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGV2X3RocmVzaCkg eworKyAgdWludDhfdCogY29uc3QgYiA9IHAgLSA0OworKyAgdTh4MTYgcDMsIHAyLCBwMSwgcDAs IHEwLCBxMSwgcTIsIHEzOworKyAgTG9hZDE2eDQoYiwgYiArIDggKiBzLCBzLCAmcDMsICZwMiwg JnAxLCAmcDApOworKyAgTG9hZDE2eDQocCwgcCArIDggKiBzLCBzLCAmcTAsICZxMSwgJnEyLCAm cTMpOworKyAgY29uc3QgdTh4MTYgbSA9IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwg cTEsIHEyLCBxMywgdGhyZXNoLCBpdGhyZXNoKTsKKysgIERvRmlsdGVyNigmcDIsICZwMSwgJnAw LCAmcTAsICZxMSwgJnEyLCBtLCBoZXZfdGhyZXNoKTsKKysgIFN0b3JlMTZ4NChwMywgcDIsIHAx LCBwMCwgYiwgYiArIDggKiBzLCBzKTsKKysgIFN0b3JlMTZ4NChxMCwgcTEsIHEyLCBxMywgcCwg cCArIDggKiBzLCBzKTsKKyt9CisrCisrc3RhdGljIHZvaWQgSEZpbHRlcjE2aV9WU1godWludDhf dCogcCwgaW50IHMsIGludCB0aHJlc2gsIGludCBpdGhyZXNoLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBoZXZfdGhyZXNoKSB7CisrICBpbnQgazsKKysgIGZvciAoayA9IDM7IGsg PiAwOyAtLWspIHsKKysgICAgcCArPSA0OworKyAgICB1OHgxNiBwMywgcDIsIHAxLCBwMCwgcTAs IHExLCBxMiwgcTM7CisrICAgIExvYWQxNng0KHAgLSA0LCBwIC0gNCArIDggKiBzLCBzLCAmcDMs ICZwMiwgJnAxLCAmcDApOworKyAgICBMb2FkMTZ4NChwLCBwICsgOCAqIHMsIHMsICZxMCwgJnEx LCAmcTIsICZxMyk7CisrICAgIGNvbnN0IHU4eDE2IG0gPQorKyAgICAgICAgQ29tcGxleE1hc2so cDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgICBE b0ZpbHRlcjQoJnAxLCAmcDAsICZxMCwgJnExLCBtLCBoZXZfdGhyZXNoKTsKKysgICAgU3RvcmUx Nng0KHAxLCBwMCwgcTAsIHExLCBwIC0gMiwgcCAtIDIgKyA4ICogcywgcyk7CisrICB9CisrfQor KworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gQ29tcGxleCBjaHJvbWEgZmlsdGVyaW5n OiBvcGVyYXRlIG9uIHRoZSB1IGFuZCB2IHBsYW5lcyAoOCB3aWRlKSB0b2dldGhlci4KKysKKysv LyBQYWNrIDggdS1ieXRlcyBpbnRvIHRoZSBsb3cgaGFsZiBhbmQgOCB2LWJ5dGVzIGludG8gdGhl IGhpZ2ggaGFsZi4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgTG9hZFVWKGNvbnN0IHVpbnQ4 X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdikgeworKyAgdW5zaWduZWQgY2hhciBiWzE2XTsK KysgIG1lbWNweShiLCB1LCA4KTsKKysgIG1lbWNweShiICsgOCwgdiwgOCk7CisrICByZXR1cm4g dmVjX3hsKDAsIGIpOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBTdG9yZVVWKHU4 eDE2IHgsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdikgeworKyAgdW5zaWduZWQgY2hhciBi WzE2XTsKKysgIG1lbWNweShiLCAmeCwgMTYpOworKyAgbWVtY3B5KHUsIGIsIDgpOworKyAgbWVt Y3B5KHYsIGIgKyA4LCA4KTsKKyt9CisrCisrc3RhdGljIHZvaWQgVkZpbHRlcjhfVlNYKHVpbnQ4 X3QqIFdFQlBfUkVTVFJJQ1QgdSwgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcywgaW50IHRocmVzaCwgaW50IGl0aHJlc2gsIGludCBoZXZf dGhyZXNoKSB7CisrICB1OHgxNiBwMyA9IExvYWRVVih1IC0gNCAqIHMsIHYgLSA0ICogcyksIHAy ID0gTG9hZFVWKHUgLSAzICogcywgdiAtIDMgKiBzKTsKKysgIHU4eDE2IHAxID0gTG9hZFVWKHUg LSAyICogcywgdiAtIDIgKiBzKSwgcDAgPSBMb2FkVVYodSAtIHMsIHYgLSBzKTsKKysgIHU4eDE2 IHEwID0gTG9hZFVWKHUsIHYpLCBxMSA9IExvYWRVVih1ICsgcywgdiArIHMpOworKyAgdTh4MTYg cTIgPSBMb2FkVVYodSArIDIgKiBzLCB2ICsgMiAqIHMpLCBxMyA9IExvYWRVVih1ICsgMyAqIHMs IHYgKyAzICogcyk7CisrICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwg cDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAgRG9GaWx0ZXI2KCZwMiwg JnAxLCAmcDAsICZxMCwgJnExLCAmcTIsIG0sIGhldl90aHJlc2gpOworKyAgU3RvcmVVVihwMiwg dSAtIDMgKiBzLCB2IC0gMyAqIHMpOyBTdG9yZVVWKHAxLCB1IC0gMiAqIHMsIHYgLSAyICogcyk7 CisrICBTdG9yZVVWKHAwLCB1IC0gcywgdiAtIHMpOyBTdG9yZVVWKHEwLCB1LCB2KTsKKysgIFN0 b3JlVVYocTEsIHUgKyBzLCB2ICsgcyk7IFN0b3JlVVYocTIsIHUgKyAyICogcywgdiArIDIgKiBz KTsKKyt9CisrCisrc3RhdGljIHZvaWQgVkZpbHRlcjhpX1ZTWCh1aW50OF90KiBXRUJQX1JFU1RS SUNUIHUsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBzLCBpbnQgdGhyZXNoLCBpbnQgaXRocmVzaCwgaW50IGhldl90aHJlc2gpIHsKKysg IHUgKz0gNCAqIHM7IHYgKz0gNCAqIHM7CisrICB1OHgxNiBwMyA9IExvYWRVVih1IC0gNCAqIHMs IHYgLSA0ICogcyksIHAyID0gTG9hZFVWKHUgLSAzICogcywgdiAtIDMgKiBzKTsKKysgIHU4eDE2 IHAxID0gTG9hZFVWKHUgLSAyICogcywgdiAtIDIgKiBzKSwgcDAgPSBMb2FkVVYodSAtIHMsIHYg LSBzKTsKKysgIHU4eDE2IHEwID0gTG9hZFVWKHUsIHYpLCBxMSA9IExvYWRVVih1ICsgcywgdiAr IHMpOworKyAgdTh4MTYgcTIgPSBMb2FkVVYodSArIDIgKiBzLCB2ICsgMiAqIHMpLCBxMyA9IExv YWRVVih1ICsgMyAqIHMsIHYgKyAzICogcyk7CisrICBjb25zdCB1OHgxNiBtID0gQ29tcGxleE1h c2socDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gsIGl0aHJlc2gpOworKyAg RG9GaWx0ZXI0KCZwMSwgJnAwLCAmcTAsICZxMSwgbSwgaGV2X3RocmVzaCk7CisrICBTdG9yZVVW KHAxLCB1IC0gMiAqIHMsIHYgLSAyICogcyk7IFN0b3JlVVYocDAsIHUgLSBzLCB2IC0gcyk7Cisr ICBTdG9yZVVWKHEwLCB1LCB2KTsgU3RvcmVVVihxMSwgdSArIHMsIHYgKyBzKTsKKyt9CisrCisr c3RhdGljIHZvaWQgSEZpbHRlcjhfVlNYKHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwgdWludDhf dCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcywgaW50 IHRocmVzaCwgaW50IGl0aHJlc2gsIGludCBoZXZfdGhyZXNoKSB7CisrICB1OHgxNiBwMywgcDIs IHAxLCBwMCwgcTAsIHExLCBxMiwgcTM7CisrICBMb2FkMTZ4NCh1IC0gNCwgdiAtIDQsIHMsICZw MywgJnAyLCAmcDEsICZwMCk7CisrICBMb2FkMTZ4NCh1LCB2LCBzLCAmcTAsICZxMSwgJnEyLCAm cTMpOworKyAgY29uc3QgdTh4MTYgbSA9IENvbXBsZXhNYXNrKHAzLCBwMiwgcDEsIHAwLCBxMCwg cTEsIHEyLCBxMywgdGhyZXNoLCBpdGhyZXNoKTsKKysgIERvRmlsdGVyNigmcDIsICZwMSwgJnAw LCAmcTAsICZxMSwgJnEyLCBtLCBoZXZfdGhyZXNoKTsKKysgIFN0b3JlMTZ4NChwMywgcDIsIHAx LCBwMCwgdSAtIDQsIHYgLSA0LCBzKTsKKysgIFN0b3JlMTZ4NChxMCwgcTEsIHEyLCBxMywgdSwg diwgcyk7CisrfQorKworK3N0YXRpYyB2b2lkIEhGaWx0ZXI4aV9WU1godWludDhfdCogV0VCUF9S RVNUUklDVCB1LCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcywgaW50IHRocmVzaCwgaW50IGl0aHJlc2gsIGludCBoZXZfdGhyZXNoKSB7 CisrICB1ICs9IDQ7IHYgKz0gNDsKKysgIHU4eDE2IHAzLCBwMiwgcDEsIHAwLCBxMCwgcTEsIHEy LCBxMzsKKysgIExvYWQxNng0KHUgLSA0LCB2IC0gNCwgcywgJnAzLCAmcDIsICZwMSwgJnAwKTsK KysgIExvYWQxNng0KHUsIHYsIHMsICZxMCwgJnExLCAmcTIsICZxMyk7CisrICBjb25zdCB1OHgx NiBtID0gQ29tcGxleE1hc2socDMsIHAyLCBwMSwgcDAsIHEwLCBxMSwgcTIsIHEzLCB0aHJlc2gs IGl0aHJlc2gpOworKyAgRG9GaWx0ZXI0KCZwMSwgJnAwLCAmcTAsICZxMSwgbSwgaGV2X3RocmVz aCk7CisrICBTdG9yZTE2eDQocDEsIHAwLCBxMCwgcTEsIHUgLSAyLCB2IC0gMiwgcyk7CisrfQor KworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gSW50cmEgcHJlZGljdGlvbiAoMTZ4MTYg bHVtYSwgOHg4IGNocm9tYSkuIERDIHRvcC1zdW1zIGFyZSBzY2FsYXIgKHRoZSBTSU1ECisrLy8g d2luIGlzIHRoZSBibG9jayBmaWxsKTsgVHJ1ZU1vdGlvbi9WRS9IRSBhcmUgdmVjdG9yaXplZC4K KysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBQdXQxNih1aW50OF90IHYsIHVpbnQ4X3QqIGRz dCkgeworKyAgY29uc3QgdTh4MTYgeCA9IHZlY19zcGxhdHModik7CisrICBpbnQgajsKKysgIGZv ciAoaiA9IDA7IGogPCAxNjsgKytqKSB2ZWNfeHN0KHgsIDAsIGRzdCArIGogKiBCUFMpOworK30K KytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBQdXQ4eDh1dih1aW50OF90IHYsIHVpbnQ4X3QqIGRz dCkgeworKyAgY29uc3QgdTh4MTYgeCA9IHZlY19zcGxhdHModik7CisrICB1bnNpZ25lZCBjaGFy IGJbMTZdOworKyAgaW50IGo7CisrICBtZW1jcHkoYiwgJngsIDE2KTsKKysgIGZvciAoaiA9IDA7 IGogPCA4OyArK2opIG1lbWNweShkc3QgKyBqICogQlBTLCBiLCA4KTsKKyt9CisrCisrc3RhdGlj IHZvaWQgVkUxNl9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB0b3AgPSB2ZWNf eGwoMCwgZHN0IC0gQlBTKTsKKysgIGludCBqOworKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2op IHZlY194c3QodG9wLCAwLCBkc3QgKyBqICogQlBTKTsKKyt9Cisrc3RhdGljIHZvaWQgSEUxNl9W U1godWludDhfdCogZHN0KSB7CisrICBpbnQgajsKKysgIGZvciAoaiA9IDA7IGogPCAxNjsgKytq KSB2ZWNfeHN0KHZlY19zcGxhdHMoZHN0Wy0xICsgaiAqIEJQU10pLCAwLCBkc3QgKyBqICogQlBT KTsKKyt9Cisrc3RhdGljIHZvaWQgREMxNl9WU1godWludDhfdCogZHN0KSB7CisrICBpbnQgcyA9 IDE2LCBqOworKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHMgKz0gZHN0Wy1CUFMgKyBqXSAr IGRzdFstMSArIGogKiBCUFNdOworKyAgUHV0MTYocyA+PiA1LCBkc3QpOworK30KKytzdGF0aWMg dm9pZCBEQzE2Tm9Ub3BfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgaW50IHMgPSA4LCBqOworKyAg Zm9yIChqID0gMDsgaiA8IDE2OyArK2opIHMgKz0gZHN0Wy0xICsgaiAqIEJQU107CisrICBQdXQx NihzID4+IDQsIGRzdCk7CisrfQorK3N0YXRpYyB2b2lkIERDMTZOb0xlZnRfVlNYKHVpbnQ4X3Qq IGRzdCkgeworKyAgaW50IHMgPSA4LCBqOworKyAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHMg Kz0gZHN0Wy1CUFMgKyBqXTsKKysgIFB1dDE2KHMgPj4gNCwgZHN0KTsKKyt9Cisrc3RhdGljIHZv aWQgREMxNk5vVG9wTGVmdF9WU1godWludDhfdCogZHN0KSB7IFB1dDE2KDB4ODAsIGRzdCk7IH0K KytzdGF0aWMgdm9pZCBUTTE2X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IHU4eDE2IHpl cm8gPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYgdCA9IHZl Y194bCgwLCBkc3QgLSBCUFMpOworKyAgY29uc3QgaTE2eDggdGwgPSAoaTE2eDgpdmVjX21lcmdl aCh0LCB6ZXJvKSwgdGggPSAoaTE2eDgpdmVjX21lcmdlbCh0LCB6ZXJvKTsKKysgIGNvbnN0IGlu dCBjID0gZHN0Wy1CUFMgLSAxXTsKKysgIGludCB5OworKyAgZm9yICh5ID0gMDsgeSA8IDE2OyAr K3kpIHsKKysgICAgY29uc3QgaTE2eDggYiA9IHZlY19zcGxhdHMoKHNob3J0KShkc3RbLTEgKyB5 ICogQlBTXSAtIGMpKTsKKysgICAgdmVjX3hzdCgodTh4MTYpdmVjX3BhY2tzdSh2ZWNfYWRkKGIs IHRsKSwgdmVjX2FkZChiLCB0aCkpLCAwLCBkc3QgKyB5ICogQlBTKTsKKysgIH0KKyt9CisrCisr c3RhdGljIHZvaWQgVkU4dXZfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgdW5zaWduZWQgY2hhciB0 WzhdOworKyAgaW50IGo7CisrICBtZW1jcHkodCwgZHN0IC0gQlBTLCA4KTsKKysgIGZvciAoaiA9 IDA7IGogPCA4OyArK2opIG1lbWNweShkc3QgKyBqICogQlBTLCB0LCA4KTsKKyt9Cisrc3RhdGlj IHZvaWQgREM4dXZfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgaW50IHMgPSA4LCBqOworKyAgZm9y IChqID0gMDsgaiA8IDg7ICsraikgcyArPSBkc3RbLUJQUyArIGpdICsgZHN0Wy0xICsgaiAqIEJQ U107CisrICBQdXQ4eDh1dihzID4+IDQsIGRzdCk7CisrfQorK3N0YXRpYyB2b2lkIERDOHV2Tm9U b3BfVlNYKHVpbnQ4X3QqIGRzdCkgeworKyAgaW50IHMgPSA0LCBqOworKyAgZm9yIChqID0gMDsg aiA8IDg7ICsraikgcyArPSBkc3RbLTEgKyBqICogQlBTXTsKKysgIFB1dDh4OHV2KHMgPj4gMywg ZHN0KTsKKyt9Cisrc3RhdGljIHZvaWQgREM4dXZOb0xlZnRfVlNYKHVpbnQ4X3QqIGRzdCkgewor KyAgaW50IHMgPSA0LCBqOworKyAgZm9yIChqID0gMDsgaiA8IDg7ICsraikgcyArPSBkc3RbLUJQ UyArIGpdOworKyAgUHV0OHg4dXYocyA+PiAzLCBkc3QpOworK30KKytzdGF0aWMgdm9pZCBEQzh1 dk5vVG9wTGVmdF9WU1godWludDhfdCogZHN0KSB7IFB1dDh4OHV2KDB4ODAsIGRzdCk7IH0KKytz dGF0aWMgdm9pZCBUTTh1dl9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJv ID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgIGNvbnN0IHU4eDE2IHQgPSB2ZWNf eGwoMCwgZHN0IC0gQlBTKTsKKysgIGNvbnN0IGkxNng4IHRsID0gKGkxNng4KXZlY19tZXJnZWgo dCwgemVybyk7CisrICBjb25zdCBpbnQgYyA9IGRzdFstQlBTIC0gMV07CisrICBpbnQgeTsKKysg IGZvciAoeSA9IDA7IHkgPCA4OyArK3kpIHsKKysgICAgY29uc3QgaTE2eDggYiA9IHZlY19zcGxh dHMoKHNob3J0KShkc3RbLTEgKyB5ICogQlBTXSAtIGMpKTsKKysgICAgY29uc3QgdTh4MTYgbyA9 ICh1OHgxNil2ZWNfcGFja3N1KHZlY19hZGQoYiwgdGwpLCB2ZWNfc3BsYXRzKChzaG9ydCkwKSk7 CisrICAgIHVuc2lnbmVkIGNoYXIgYmJbMTZdOworKyAgICBtZW1jcHkoYmIsICZvLCAxNik7Cisr ICAgIG1lbWNweShkc3QgKyB5ICogQlBTLCBiYiwgOCk7CisrICB9CisrfQorKworKy8vLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrLy8gNHg0IGx1bWEgaW50cmEgcHJlZGljdGlvbi4gV2hvbGUtdmVj dG9yIGJ5dGUgc2hpZnRzIHdpbmRvdyB0aGUgZWRnZSBzYW1wbGVzOgorKy8vICAgc3JsaV9zaTEy OCh4LG4pID09IHZlY19zbGQoemVybywgeCwgMTYgLSBuKQorKy8vICAgc2xsaV9zaTEyOCh4LG4p ID09IHZlY19zbGQoeCwgemVybywgbikKKysKKysjZGVmaW5lIFNSTEkoeCwgbikgdmVjX3NsZCh6 ZXJvLCAoeCksIDE2IC0gKG4pKQorKyNkZWZpbmUgU0xMSSh4LCBuKSB2ZWNfc2xkKCh4KSwgemVy bywgKG4pKQorKyNkZWZpbmUgSU5TMTYodiwgdmFsLCBpKSAoKHU4eDE2KXZlY19pbnNlcnQoKHNo b3J0KSh2YWwpLCAoaTE2eDgpKHYpLCAoaSkpKQorKyNkZWZpbmUgQVZHM0MoYSwgYiwgYykgKCh1 aW50OF90KSgoKGEpICsgMiAqIChiKSArIChjKSArIDIpID4+IDIpKQorKworK3N0YXRpYyBXRUJQ X0lOTElORSB1OHgxNiBMb2FkNjQoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBwKSB7Cisr ICB1bnNpZ25lZCBjaGFyIGJbMTZdID0gezB9OworKyAgbWVtY3B5KGIsIHAsIDgpOworKyAgcmV0 dXJuIHZlY194bCgwLCBiKTsKKyt9Cisrc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IEdldFdv cmQodTh4MTYgdikgeworKyAgdW5zaWduZWQgY2hhciBiWzE2XTsKKysgIHVpbnQzMl90IHI7Cisr ICBtZW1jcHkoYiwgJnYsIDE2KTsKKysgIG1lbWNweSgmciwgYiwgNCk7CisrICByZXR1cm4gcjsK Kyt9Cisrc3RhdGljIFdFQlBfSU5MSU5FIHU4eDE2IFNldFdvcmQodWludDMyX3QgdikgeworKyAg dW5zaWduZWQgY2hhciBiWzE2XSA9IHswfTsKKysgIG1lbWNweShiLCAmdiwgNCk7CisrICByZXR1 cm4gdmVjX3hsKDAsIGIpOworK30KKytzdGF0aWMgV0VCUF9JTkxJTkUgdm9pZCBTdG9yZVdvcmQo dWludDMyX3QgdiwgdWludDhfdCogZHN0KSB7CisrICBtZW1jcHkoZHN0LCAmdiwgNCk7CisrfQor KworK3N0YXRpYyB2b2lkIFZFNF9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6 ZXJvID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcikxKTsKKysgIGNvbnN0IHU4eDE2IEEgPSBMb2FkNjQoZHN0IC0gQlBTIC0gMSks IEIgPSBTUkxJKEEsIDEpLCBDID0gU1JMSShBLCAyKTsKKysgIGNvbnN0IHU4eDE2IGEgPSB2ZWNf YXZnKEEsIEMpLCBsc2IgPSB2ZWNfYW5kKHZlY194b3IoQSwgQyksIG9uZSk7CisrICBjb25zdCB1 OHgxNiBhdmcgPSB2ZWNfYXZnKHZlY19zdWJzKGEsIGxzYiksIEIpOworKyAgY29uc3QgdWludDMy X3QgdiA9IEdldFdvcmQoYXZnKTsKKysgIGludCBpOworKyAgZm9yIChpID0gMDsgaSA8IDQ7ICsr aSkgU3RvcmVXb3JkKHYsIGRzdCArIGkgKiBCUFMpOworK30KKytzdGF0aWMgdm9pZCBMRDRfVlNY KHVpbnQ4X3QqIGRzdCkgeworKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIGNoYXIpMCksIG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7CisrICBjb25z dCB1OHgxNiBBID0gTG9hZDY0KGRzdCAtIEJQUyksIEIgPSBTUkxJKEEsIDEpLCBDID0gU1JMSShB LCAyKTsKKysgIGNvbnN0IHU4eDE2IENIID0gSU5TMTYoQywgZHN0Wy1CUFMgKyA3XSwgMyk7Cisr ICBjb25zdCB1OHgxNiBhMSA9IHZlY19hdmcoQSwgQ0gpLCBsc2IgPSB2ZWNfYW5kKHZlY194b3Io QSwgQ0gpLCBvbmUpOworKyAgY29uc3QgdTh4MTYgciA9IHZlY19hdmcodmVjX3N1YnMoYTEsIGxz YiksIEIpOworKyAgU3RvcmVXb3JkKEdldFdvcmQociksIGRzdCArIDAgKiBCUFMpOworKyAgU3Rv cmVXb3JkKEdldFdvcmQoU1JMSShyLCAxKSksIGRzdCArIDEgKiBCUFMpOworKyAgU3RvcmVXb3Jk KEdldFdvcmQoU1JMSShyLCAyKSksIGRzdCArIDIgKiBCUFMpOworKyAgU3RvcmVXb3JkKEdldFdv cmQoU1JMSShyLCAzKSksIGRzdCArIDMgKiBCUFMpOworK30KKytzdGF0aWMgdm9pZCBWUjRfVlNY KHVpbnQ4X3QqIGRzdCkgeworKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2ln bmVkIGNoYXIpMCksIG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7CisrICBjb25z dCBpbnQgSSA9IGRzdFstMSArIDAgKiBCUFNdLCBKID0gZHN0Wy0xICsgMSAqIEJQU10sIEsgPSBk c3RbLTEgKyAyICogQlBTXTsKKysgIGNvbnN0IGludCBYID0gZHN0Wy0xIC0gQlBTXTsKKysgIGNv bnN0IHU4eDE2IFhBID0gTG9hZDY0KGRzdCAtIEJQUyAtIDEpLCBBMCA9IFNSTEkoWEEsIDEpOwor KyAgY29uc3QgdTh4MTYgYWJjZCA9IHZlY19hdmcoWEEsIEEwKTsKKysgIGNvbnN0IHU4eDE2IElY ID0gSU5TMTYoU0xMSShYQSwgMSksIChJIHwgKFggPDwgOCkpLCAwKTsKKysgIGNvbnN0IHU4eDE2 IGExID0gdmVjX2F2ZyhJWCwgQTApLCBsc2IgPSB2ZWNfYW5kKHZlY194b3IoSVgsIEEwKSwgb25l KTsKKysgIGNvbnN0IHU4eDE2IGVmZ2ggPSB2ZWNfYXZnKHZlY19zdWJzKGExLCBsc2IpLCBYQSk7 CisrICBTdG9yZVdvcmQoR2V0V29yZChhYmNkKSwgZHN0ICsgMCAqIEJQUyk7CisrICBTdG9yZVdv cmQoR2V0V29yZChlZmdoKSwgZHN0ICsgMSAqIEJQUyk7CisrICBTdG9yZVdvcmQoR2V0V29yZChT TExJKGFiY2QsIDEpKSwgZHN0ICsgMiAqIEJQUyk7CisrICBTdG9yZVdvcmQoR2V0V29yZChTTExJ KGVmZ2gsIDEpKSwgZHN0ICsgMyAqIEJQUyk7CisrICBkc3RbMCArIDIgKiBCUFNdID0gQVZHM0Mo SiwgSSwgWCk7CisrICBkc3RbMCArIDMgKiBCUFNdID0gQVZHM0MoSywgSiwgSSk7CisrfQorK3N0 YXRpYyB2b2lkIFZMNF9WU1godWludDhfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0g dmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKSwgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQg Y2hhcikxKTsKKysgIGNvbnN0IHU4eDE2IEEgPSBMb2FkNjQoZHN0IC0gQlBTKSwgQiA9IFNSTEko QSwgMSksIEMgPSBTUkxJKEEsIDIpOworKyAgY29uc3QgdTh4MTYgYTEgPSB2ZWNfYXZnKEEsIEIp LCBhMiA9IHZlY19hdmcoQywgQiksIGEzID0gdmVjX2F2ZyhhMSwgYTIpOworKyAgY29uc3QgdTh4 MTYgbHNiMSA9IHZlY19hbmQodmVjX3hvcihhMSwgYTIpLCBvbmUpOworKyAgY29uc3QgdTh4MTYg YWJiYyA9IHZlY19vcih2ZWNfeG9yKEEsIEIpLCB2ZWNfeG9yKEMsIEIpKTsKKysgIGNvbnN0IHU4 eDE2IGE0ID0gdmVjX3N1YnMoYTMsIHZlY19hbmQoYWJiYywgbHNiMSkpOworKyAgY29uc3QgdWlu dDMyX3QgZXh0cmEgPSBHZXRXb3JkKFNSTEkoYTQsIDQpKTsKKysgIFN0b3JlV29yZChHZXRXb3Jk KGExKSwgZHN0ICsgMCAqIEJQUyk7CisrICBTdG9yZVdvcmQoR2V0V29yZChhNCksIGRzdCArIDEg KiBCUFMpOworKyAgU3RvcmVXb3JkKEdldFdvcmQoU1JMSShhMSwgMSkpLCBkc3QgKyAyICogQlBT KTsKKysgIFN0b3JlV29yZChHZXRXb3JkKFNSTEkoYTQsIDEpKSwgZHN0ICsgMyAqIEJQUyk7Cisr ICBkc3RbMyArIDIgKiBCUFNdID0gKGV4dHJhID4+IDApICYgMHhmZjsKKysgIGRzdFszICsgMyAq IEJQU10gPSAoZXh0cmEgPj4gOCkgJiAweGZmOworK30KKytzdGF0aWMgdm9pZCBSRDRfVlNYKHVp bnQ4X3QqIGRzdCkgeworKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IGNoYXIpMCksIG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMSk7CisrICBjb25zdCB1 aW50MzJfdCBJID0gZHN0Wy0xICsgMCAqIEJQU10sIEogPSBkc3RbLTEgKyAxICogQlBTXTsKKysg IGNvbnN0IHVpbnQzMl90IEsgPSBkc3RbLTEgKyAyICogQlBTXSwgTCA9IGRzdFstMSArIDMgKiBC UFNdOworKyAgY29uc3QgdTh4MTYgWEEgPSBMb2FkNjQoZHN0IC0gQlBTIC0gMSk7CisrICBjb25z dCB1OHgxNiBhbGwgPSB2ZWNfb3IoU2V0V29yZCgodWludDMyX3QpKEwgfCAoSyA8PCA4KSB8IChK IDw8IDE2KSB8IChJIDw8IDI0KSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMTEko WEEsIDQpKTsKKysgIGNvbnN0IHU4eDE2IGsxID0gU1JMSShhbGwsIDEpLCBqMiA9IFNSTEkoYWxs LCAyKTsKKysgIGNvbnN0IHU4eDE2IGExID0gdmVjX2F2ZyhqMiwgYWxsKSwgbHNiID0gdmVjX2Fu ZCh2ZWNfeG9yKGoyLCBhbGwpLCBvbmUpOworKyAgY29uc3QgdTh4MTYgciA9IHZlY19hdmcodmVj X3N1YnMoYTEsIGxzYiksIGsxKTsKKysgIFN0b3JlV29yZChHZXRXb3JkKHIpLCBkc3QgKyAzICog QlBTKTsKKysgIFN0b3JlV29yZChHZXRXb3JkKFNSTEkociwgMSkpLCBkc3QgKyAyICogQlBTKTsK KysgIFN0b3JlV29yZChHZXRXb3JkKFNSTEkociwgMikpLCBkc3QgKyAxICogQlBTKTsKKysgIFN0 b3JlV29yZChHZXRXb3JkKFNSTEkociwgMykpLCBkc3QgKyAwICogQlBTKTsKKyt9Cisrc3RhdGlj IHZvaWQgVE00X1ZTWCh1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgY29uc3QgdTh4MTYgdCA9IExvYWQ2NChkc3Qg LSBCUFMpOworKyAgY29uc3QgaTE2eDggdGIgPSAoaTE2eDgpdmVjX21lcmdlaCh0LCB6ZXJvKTsK KysgIGNvbnN0IGludCBjID0gZHN0Wy1CUFMgLSAxXTsKKysgIGludCB5OworKyAgZm9yICh5ID0g MDsgeSA8IDQ7ICsreSkgeworKyAgICBjb25zdCBpMTZ4OCBiID0gdmVjX3NwbGF0cygoc2hvcnQp KGRzdFstMSArIHkgKiBCUFNdIC0gYykpOworKyAgICBjb25zdCB1OHgxNiBvID0gKHU4eDE2KXZl Y19wYWNrc3UodmVjX2FkZChiLCB0YiksIHZlY19zcGxhdHMoKHNob3J0KTApKTsKKysgICAgU3Rv cmVXb3JkKEdldFdvcmQobyksIGRzdCArIHkgKiBCUFMpOworKyAgfQorK30KKysjdW5kZWYgU1JM SQorKyN1bmRlZiBTTExJCisrI3VuZGVmIElOUzE2CisrI3VuZGVmIEFWRzNDCisrCisrZXh0ZXJu IHZvaWQgVlA4RHNwSW5pdFZTWCh2b2lkKTsKKysKKytXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9O IHZvaWQgVlA4RHNwSW5pdFZTWCh2b2lkKSB7CisrICBWUDhUcmFuc2Zvcm0gPSBUcmFuc2Zvcm1f VlNYOworKyAgVlA4U2ltcGxlVkZpbHRlcjE2ID0gU2ltcGxlVkZpbHRlcjE2X1ZTWDsKKysgIFZQ OFNpbXBsZVZGaWx0ZXIxNmkgPSBTaW1wbGVWRmlsdGVyMTZpX1ZTWDsKKysgIFZQOFNpbXBsZUhG aWx0ZXIxNiA9IFNpbXBsZUhGaWx0ZXIxNl9WU1g7CisrICBWUDhTaW1wbGVIRmlsdGVyMTZpID0g U2ltcGxlSEZpbHRlcjE2aV9WU1g7CisrICBWUDhWRmlsdGVyMTYgPSBWRmlsdGVyMTZfVlNYOwor KyAgVlA4VkZpbHRlcjE2aSA9IFZGaWx0ZXIxNmlfVlNYOworKyAgVlA4SEZpbHRlcjE2ID0gSEZp bHRlcjE2X1ZTWDsKKysgIFZQOEhGaWx0ZXIxNmkgPSBIRmlsdGVyMTZpX1ZTWDsKKysgIFZQOFZG aWx0ZXI4ID0gVkZpbHRlcjhfVlNYOworKyAgVlA4VkZpbHRlcjhpID0gVkZpbHRlcjhpX1ZTWDsK KysgIFZQOEhGaWx0ZXI4ID0gSEZpbHRlcjhfVlNYOworKyAgVlA4SEZpbHRlcjhpID0gSEZpbHRl cjhpX1ZTWDsKKysKKysgIFZQOFByZWRMdW1hMTZbMF0gPSBEQzE2X1ZTWDsKKysgIFZQOFByZWRM dW1hMTZbMV0gPSBUTTE2X1ZTWDsKKysgIFZQOFByZWRMdW1hMTZbMl0gPSBWRTE2X1ZTWDsKKysg IFZQOFByZWRMdW1hMTZbM10gPSBIRTE2X1ZTWDsKKysgIFZQOFByZWRMdW1hMTZbNF0gPSBEQzE2 Tm9Ub3BfVlNYOworKyAgVlA4UHJlZEx1bWExNls1XSA9IERDMTZOb0xlZnRfVlNYOworKyAgVlA4 UHJlZEx1bWExNls2XSA9IERDMTZOb1RvcExlZnRfVlNYOworKyAgVlA4UHJlZENocm9tYThbMF0g PSBEQzh1dl9WU1g7CisrICBWUDhQcmVkQ2hyb21hOFsxXSA9IFRNOHV2X1ZTWDsKKysgIFZQOFBy ZWRDaHJvbWE4WzJdID0gVkU4dXZfVlNYOworKyAgVlA4UHJlZENocm9tYThbNF0gPSBEQzh1dk5v VG9wX1ZTWDsKKysgIFZQOFByZWRDaHJvbWE4WzVdID0gREM4dXZOb0xlZnRfVlNYOworKyAgVlA4 UHJlZENocm9tYThbNl0gPSBEQzh1dk5vVG9wTGVmdF9WU1g7CisrICBWUDhQcmVkTHVtYTRbMV0g PSBUTTRfVlNYOworKyAgVlA4UHJlZEx1bWE0WzJdID0gVkU0X1ZTWDsKKysgIFZQOFByZWRMdW1h NFs0XSA9IFJENF9WU1g7CisrICBWUDhQcmVkTHVtYTRbNV0gPSBWUjRfVlNYOworKyAgVlA4UHJl ZEx1bWE0WzZdID0gTEQ0X1ZTWDsKKysgIFZQOFByZWRMdW1hNFs3XSA9IFZMNF9WU1g7CisrfQor KworKyNlbHNlICAvLyAhV0VCUF9VU0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFZQOERz cEluaXRWU1gpCisrCisrI2VuZGlmICAvLyBXRUJQX1VTRV9WU1gKK2RpZmYgLS1naXQgYS9tZWRp YS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVycy5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRl cnMuYworaW5kZXggMzhkYTUyNTJkZjNhLi45OTYyZTEyODc0MDIgMTAwNjQ0CistLS0gYS9tZWRp YS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVycy5jCisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3Av ZmlsdGVycy5jCitAQCAtMjE3LDYgKzIxNyw3IEBAIGV4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0 TUlQU2RzcFIyKHZvaWQpOworIGV4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0TVNBKHZvaWQpOwor IGV4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0TkVPTih2b2lkKTsKKyBleHRlcm4gdm9pZCBWUDhG aWx0ZXJzSW5pdFNTRTIodm9pZCk7CisrZXh0ZXJuIHZvaWQgVlA4RmlsdGVyc0luaXRWU1godm9p ZCk7CisgCisgV0VCUF9EU1BfSU5JVF9GVU5DKFZQOEZpbHRlcnNJbml0KSB7CisgICBXZWJQVW5m aWx0ZXJzW1dFQlBfRklMVEVSX05PTkVdID0gTm9uZVVuZmlsdGVyX0M7CitAQCAtMjQ4LDYgKzI0 OSwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoVlA4RmlsdGVyc0luaXQpIHsKKyAgICAgaWYgKFZQ OEdldENQVUluZm8oa01TQSkpIHsKKyAgICAgICBWUDhGaWx0ZXJzSW5pdE1TQSgpOworICAgICB9 CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKKysgICAgaWYgKFZQOEdldENQ VUluZm8oa1ZTWCkpIHsKKysgICAgICBWUDhGaWx0ZXJzSW5pdFZTWCgpOworKyAgICB9CisgI2Vu ZGlmCisgICB9CisgCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2ZpbHRlcnNf dnN4LmMgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVyc192c3guYworbmV3IGZpbGUgbW9k ZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uYWU4ZTU3YWM2ODVjCistLS0gL2Rldi9udWxs CisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvZmlsdGVyc192c3guYworQEAgLTAsMCArMSwx NjIgQEAKKysvLyBDb3B5cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk LgorKy8vCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt c3R5bGUgbGljZW5zZQorKy8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUg aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQorKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKKysvLyBpbiB0aGUgZmls ZSBQQVRFTlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKKysvLyBiZSBm b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K KysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vCisrLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9u IG9mIGZpbHRlcmluZyBmdW5jdGlvbnMuCisrCisrI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisr CisrI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKQorKworKyNpbmNsdWRlIDxhbHRpdmVjLmg+Cisr I2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAi c3JjL2RzcC9jcHUuaCIKKysjaW5jbHVkZSAic3JjL3dlYnAvdHlwZXMuaCIKKysKKyt0eXBlZGVm IF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdTh4MTY7CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25l ZCBzaG9ydCB1MTZ4ODsKKyt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBzaG9ydCBpMTZ4ODsKKyt0 eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjR4MjsKKysKKysvLyBCeXRlLXdp c2Ugc2hpZnRzIG9mIHRoZSB3aG9sZSAxMjgtYml0IHJlZ2lzdGVyLCBtYXRjaGluZyB0aGUgbGl0 dGxlLWVuZGlhbgorKy8vIHNlbWFudGljcyBvZiBfbW1fc2xsaV9zaTEyOCAvIF9tbV9zcmxpX3Np MTI4LiAnbicgbXVzdCBiZSBhIGxpdGVyYWwuCisrI2RlZmluZSBTTExJKHgsIG4pIHZlY19zbGQo KHgpLCB6ZXJvLCAobikpCisrI2RlZmluZSBTUkxJKHgsIG4pIHZlY19zbGQoemVybywgKHgpLCAx NiAtIChuKSkKKysKKysvLyBMb2FkcyA4IGJ5dGVzIGZyb20gJ3AnIGludG8gdGhlIGxvdyBoYWxm IG9mIGEgdmVjdG9yIChoaWdoIGhhbGYgdW5kZWZpbmVkKS4KKytzdGF0aWMgV0VCUF9JTkxJTkUg dTh4MTYgTG9hZDgoY29uc3QgdWludDhfdCogcCkgeworKyAgdWludDY0X3QgdjsKKysgIG1lbWNw eSgmdiwgcCwgOCk7CisrICByZXR1cm4gKHU4eDE2KXZlY19zcGxhdHModik7CisrfQorKworKy8v LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gSG9yaXpvbnRhbCB1bmZpbHRlcjogb3V0W2ldID0g aW5baV0gKyBvdXRbaSAtIDFdIChhIHByZWZpeCBzdW0pLgorKworK3N0YXRpYyB2b2lkIEhvcml6 b250YWxVbmZpbHRlcl9WU1goY29uc3QgdWludDhfdCogcHJldiwgY29uc3QgdWludDhfdCogaW4s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBvdXQsIGludCB3 aWR0aCkgeworKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIp MCk7CisrICBjb25zdCB1NjR4MiBzaDU2ID0gdmVjX3NwbGF0cygodW5zaWduZWQgbG9uZyBsb25n KTU2KTsKKysgIHU4eDE2IGxhc3Q7CisrICBpbnQgaTsKKysgIG91dFswXSA9ICh1aW50OF90KShp blswXSArIChwcmV2ID09IE5VTEwgPyAwIDogcHJldlswXSkpOworKyAgaWYgKHdpZHRoIDw9IDEp IHJldHVybjsKKysgIGxhc3QgPSB2ZWNfaW5zZXJ0KG91dFswXSwgemVybywgMCk7CisrICBmb3Ig KGkgPSAxOyBpICsgOCA8PSB3aWR0aDsgaSArPSA4KSB7CisrICAgIGNvbnN0IHU4eDE2IEEwID0g TG9hZDgoaW4gKyBpKTsKKysgICAgY29uc3QgdTh4MTYgQTEgPSB2ZWNfYWRkKEEwLCBsYXN0KTsK KysgICAgY29uc3QgdTh4MTYgQTIgPSBTTExJKEExLCAxKTsKKysgICAgY29uc3QgdTh4MTYgQTMg PSB2ZWNfYWRkKEExLCBBMik7CisrICAgIGNvbnN0IHU4eDE2IEE0ID0gU0xMSShBMywgMik7Cisr ICAgIGNvbnN0IHU4eDE2IEE1ID0gdmVjX2FkZChBMywgQTQpOworKyAgICBjb25zdCB1OHgxNiBB NiA9IFNMTEkoQTUsIDQpOworKyAgICBjb25zdCB1OHgxNiBBNyA9IHZlY19hZGQoQTUsIEE2KTsK KysgICAgbWVtY3B5KG91dCArIGksICZBNywgOCk7CisrICAgIGxhc3QgPSAodTh4MTYpdmVjX3Ny KCh1NjR4MilBNywgc2g1Nik7ICAvLyBicm9hZGNhc3Qgb3V0W2kgKyA3XSB0byBieXRlIDAKKysg IH0KKysgIGZvciAoOyBpIDwgd2lkdGg7ICsraSkgb3V0W2ldID0gKHVpbnQ4X3QpKGluW2ldICsg b3V0W2kgLSAxXSk7CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gVmVydGlj YWwgdW5maWx0ZXI6IG91dFtpXSA9IGluW2ldICsgcHJldltpXS4KKysKKytzdGF0aWMgdm9pZCBW ZXJ0aWNhbFVuZmlsdGVyX1ZTWChjb25zdCB1aW50OF90KiBwcmV2LCBjb25zdCB1aW50OF90KiBp biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBvdXQsIGludCB3 aWR0aCkgeworKyAgaWYgKHByZXYgPT0gTlVMTCkgeworKyAgICBIb3Jpem9udGFsVW5maWx0ZXJf VlNYKE5VTEwsIGluLCBvdXQsIHdpZHRoKTsKKysgIH0gZWxzZSB7CisrICAgIGludCBpOworKyAg ICBjb25zdCBpbnQgbWF4X3BvcyA9IHdpZHRoICYgfjMxOworKyAgICBmb3IgKGkgPSAwOyBpIDwg bWF4X3BvczsgaSArPSAzMikgeworKyAgICAgIGNvbnN0IHU4eDE2IEEwID0gdmVjX3hsKDAsICh1 bnNpZ25lZCBjaGFyKikmaW5baSArIDBdKTsKKysgICAgICBjb25zdCB1OHgxNiBBMSA9IHZlY194 bCgwLCAodW5zaWduZWQgY2hhciopJmluW2kgKyAxNl0pOworKyAgICAgIGNvbnN0IHU4eDE2IEIw ID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKikmcHJldltpICsgMF0pOworKyAgICAgIGNvbnN0 IHU4eDE2IEIxID0gdmVjX3hsKDAsICh1bnNpZ25lZCBjaGFyKikmcHJldltpICsgMTZdKTsKKysg ICAgICB2ZWNfeHN0KHZlY19hZGQoQTAsIEIwKSwgMCwgKHVuc2lnbmVkIGNoYXIqKSZvdXRbaSAr IDBdKTsKKysgICAgICB2ZWNfeHN0KHZlY19hZGQoQTEsIEIxKSwgMCwgKHVuc2lnbmVkIGNoYXIq KSZvdXRbaSArIDE2XSk7CisrICAgIH0KKysgICAgZm9yICg7IGkgPCB3aWR0aDsgKytpKSBvdXRb aV0gPSAodWludDhfdCkoaW5baV0gKyBwcmV2W2ldKTsKKysgIH0KKyt9CisrCisrLy8tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKysvLyBHcmFkaWVudCB1bmZpbHRlcjogcm93W2ldID0gaW5baV0gKyBj bGlwKHJvd1tpLTFdICsgdG9wW2ldIC0gdG9wW2ktMV0pLgorKworK3N0YXRpYyBXRUJQX0lOTElO RSBpbnQgR3JhZGllbnRQcmVkaWN0b3JfVlNYKHVpbnQ4X3QgYSwgdWludDhfdCBiLCB1aW50OF90 IGMpIHsKKysgIGNvbnN0IGludCBnID0gYSArIGIgLSBjOworKyAgcmV0dXJuICgoZyAmIH4weGZm KSA9PSAwKSA/IGcgOiAoZyA8IDApID8gMCA6IDI1NTsKKyt9CisrCisrc3RhdGljIHZvaWQgR3Jh ZGllbnRQcmVkaWN0SW52ZXJzZV9WU1goY29uc3QgdWludDhfdCogaW4sIGNvbnN0IHVpbnQ4X3Qq IHRvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBy b3csIGludCBsZW5ndGgpIHsKKysgIGlmIChsZW5ndGggPiAwKSB7CisrICAgIGludCBpOworKyAg ICBjb25zdCBpbnQgbWF4X3BvcyA9IGxlbmd0aCAmIH43OworKyAgICBjb25zdCB1OHgxNiB6ZXJv ID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikwKTsKKysgICAgdTh4MTYgQSA9IHZlY19pbnNl cnQoKHVuc2lnbmVkIGNoYXIpcm93Wy0xXSwgemVybywgMCk7ICAvLyBsZWZ0IHNhbXBsZQorKyAg ICBmb3IgKGkgPSAwOyBpIDwgbWF4X3BvczsgaSArPSA4KSB7CisrICAgICAgY29uc3QgdTh4MTYg dDAgPSBMb2FkOCh0b3AgKyBpKTsKKysgICAgICBjb25zdCB1OHgxNiB0MSA9IExvYWQ4KHRvcCAr IGkgLSAxKTsKKysgICAgICBjb25zdCB1MTZ4OCBCID0gKHUxNng4KXZlY19tZXJnZWgodDAsIHpl cm8pOworKyAgICAgIGNvbnN0IHUxNng4IEMgPSAodTE2eDgpdmVjX21lcmdlaCh0MSwgemVybyk7 CisrICAgICAgY29uc3QgdTh4MTYgRCA9IExvYWQ4KGluICsgaSk7ICAvLyBiYXNlIGlucHV0Cisr ICAgICAgY29uc3QgdTE2eDggRSA9IHZlY19zdWIoQiwgQyk7ICAvLyB1bmNsaXBwZWQgZ3JhZGll bnQgYmFzaXMgYiAtIGMKKysgICAgICB1OHgxNiBvdXQgPSB6ZXJvOyAgICAgICAgICAgICAgIC8v IGFjY3VtdWxhdG9yIGZvciBvdXRwdXQKKysgICAgICB1OHgxNiBtYXNrX2hpID0gdmVjX2luc2Vy dCgodW5zaWduZWQgY2hhcikweGZmLCB6ZXJvLCAwKTsKKysgICAgICBpbnQgayA9IDg7CisrICAg ICAgd2hpbGUgKDEpIHsKKysgICAgICAgIGNvbnN0IHUxNng4IHRtcDMgPSB2ZWNfYWRkKCh1MTZ4 OClBLCBFKTsgIC8vIGRlbHRhID0gYSArIGIgLSBjCisrICAgICAgICBjb25zdCB1OHgxNiB0bXA0 ID0gdmVjX3BhY2tzdSgoaTE2eDgpdG1wMywgKGkxNng4KXplcm8pOyAgLy8gc2F0LiBkZWx0YQor KyAgICAgICAgY29uc3QgdTh4MTYgdG1wNSA9IHZlY19hZGQodG1wNCwgRCk7ICAgICAgICAgICAg ICAgICAgICAgIC8vIGFkZCB0byBpbltdCisrICAgICAgICBBID0gdmVjX2FuZCh0bXA1LCBtYXNr X2hpKTsgIC8vIGtlZXAgbmV3IHNhbXBsZQorKyAgICAgICAgb3V0ID0gdmVjX29yKG91dCwgQSk7 ICAgICAgICAvLyBhY2N1bXVsYXRlIG91dHB1dAorKyAgICAgICAgaWYgKC0tayA9PSAwKSBicmVh azsKKysgICAgICAgIEEgPSBTTExJKEEsIDEpOyAgICAgICAgICAgICAgICAgIC8vIHJvdGF0ZSBs ZWZ0IHNhbXBsZQorKyAgICAgICAgbWFza19oaSA9IFNMTEkobWFza19oaSwgMSk7ICAgICAgLy8g cm90YXRlIG1hc2sKKysgICAgICAgIEEgPSAodTh4MTYpdmVjX21lcmdlaChBLCB6ZXJvKTsgIC8v IGNvbnZlcnQgOGIgLT4gMTZiCisrICAgICAgfQorKyAgICAgIEEgPSBTUkxJKEEsIDcpOyAgLy8g cHJlcGFyZSBsZWZ0IHNhbXBsZSBmb3IgbmV4dCBpdGVyYXRpb24KKysgICAgICBtZW1jcHkocm93 ICsgaSwgJm91dCwgOCk7CisrICAgIH0KKysgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgewor KyAgICAgIGNvbnN0IGludCBkZWx0YSA9IEdyYWRpZW50UHJlZGljdG9yX1ZTWChyb3dbaSAtIDFd LCB0b3BbaV0sIHRvcFtpIC0gMV0pOworKyAgICAgIHJvd1tpXSA9ICh1aW50OF90KShpbltpXSAr IGRlbHRhKTsKKysgICAgfQorKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBHcmFkaWVudFVuZmls dGVyX1ZTWChjb25zdCB1aW50OF90KiBwcmV2LCBjb25zdCB1aW50OF90KiBpbiwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBvdXQsIGludCB3aWR0aCkgeworKyAg aWYgKHByZXYgPT0gTlVMTCkgeworKyAgICBIb3Jpem9udGFsVW5maWx0ZXJfVlNYKE5VTEwsIGlu LCBvdXQsIHdpZHRoKTsKKysgIH0gZWxzZSB7CisrICAgIG91dFswXSA9ICh1aW50OF90KShpblsw XSArIHByZXZbMF0pOyAgLy8gcHJlZGljdCBmcm9tIGFib3ZlCisrICAgIEdyYWRpZW50UHJlZGlj dEludmVyc2VfVlNYKGluICsgMSwgcHJldiArIDEsIG91dCArIDEsIHdpZHRoIC0gMSk7CisrICB9 CisrfQorKworKyN1bmRlZiBTTExJCisrI3VuZGVmIFNSTEkKKysKKysvLy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorKworK2V4dGVybiB2b2lkIFZQOEZpbHRlcnNJbml0VlNYKHZvaWQpOworKworK1dF QlBfVFNBTl9JR05PUkVfRlVOQ1RJT04gdm9pZCBWUDhGaWx0ZXJzSW5pdFZTWCh2b2lkKSB7Cisr ICBXZWJQVW5maWx0ZXJzW1dFQlBfRklMVEVSX0hPUklaT05UQUxdID0gSG9yaXpvbnRhbFVuZmls dGVyX1ZTWDsKKysgIFdlYlBVbmZpbHRlcnNbV0VCUF9GSUxURVJfVkVSVElDQUxdID0gVmVydGlj YWxVbmZpbHRlcl9WU1g7CisrICBXZWJQVW5maWx0ZXJzW1dFQlBfRklMVEVSX0dSQURJRU5UXSA9 IEdyYWRpZW50VW5maWx0ZXJfVlNYOworK30KKysKKysjZWxzZSAgLy8gIVdFQlBfVVNFX1ZTWAor KworK1dFQlBfRFNQX0lOSVRfU1RVQihWUDhGaWx0ZXJzSW5pdFZTWCkKKysKKysjZW5kaWYgIC8v IFdFQlBfVVNFX1ZTWAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVz cy5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3NsZXNzLmMKK2luZGV4IDFhM2Q4MDBjM2Zi Yy4uNDhiNWQ0YTNhZWRjIDEwMDY0NAorLS0tIGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL2xvc3Ns ZXNzLmMKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzcy5jCitAQCAtNjA2LDYg KzYwNiw3IEBAIGV4dGVybiB2b2lkIFZQOExEc3BJbml0QVZYMih2b2lkKTsKKyBleHRlcm4gdm9p ZCBWUDhMRHNwSW5pdE5FT04odm9pZCk7CisgZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRNSVBTZHNw UjIodm9pZCk7CisgZXh0ZXJuIHZvaWQgVlA4TERzcEluaXRNU0Eodm9pZCk7CisrZXh0ZXJuIHZv aWQgVlA4TERzcEluaXRWU1godm9pZCk7CisgCisgI2RlZmluZSBDT1BZX1BSRURJQ1RPUl9BUlJB WShJTiwgT1VUKSBkbyB7ICAgICAgICAgICAgICAgIFwKKyAgIChPVVQpWzBdID0gSU4jIzBfQzsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTY3Myw2ICs2NzQsMTEg QEAgV0VCUF9EU1BfSU5JVF9GVU5DKFZQOExEc3BJbml0KSB7CisgICAgIGlmIChWUDhHZXRDUFVJ bmZvKGtNU0EpKSB7CisgICAgICAgVlA4TERzcEluaXRNU0EoKTsKKyAgICAgfQorKyNlbmRpZgor KyNpZiBkZWZpbmVkKFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gp KSB7CisrICAgICAgVlA4TERzcEluaXRWU1goKTsKKysgICAgfQorICNlbmRpZgorICAgfQorIAor ZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzc192c3guYyBiL21lZGlh L2xpYndlYnAvc3JjL2RzcC9sb3NzbGVzc192c3guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu ZGV4IDAwMDAwMDAwMDAwMC4uODlkYTMwYzk1ODljCistLS0gL2Rldi9udWxsCisrKysgYi9tZWRp YS9saWJ3ZWJwL3NyYy9kc3AvbG9zc2xlc3NfdnN4LmMKK0BAIC0wLDAgKzEsNDQ5IEBACisrLy8g Q29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKysvLworKy8v IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu c2UKKysvLyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290 IG9mIHRoZSBzb3VyY2UKKysvLyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCisrLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4g QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5CisrLy8gYmUgZm91bmQgaW4gdGhl IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCisrLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKysvLworKy8vIFZTWCAoUG93ZXJQQykgdmVyc2lvbiBvZiBsb3NzbGVz cyBmdW5jdGlvbnMuCisrCisrI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmlu ZWQoV0VCUF9VU0VfVlNYKQorKworKyNpbmNsdWRlIDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKworKyNpbmNsdWRlICJzcmMvZHNwL2NwdS5oIgorKyNpbmNsdWRlICJzcmMvZHNw L2xvc3NsZXNzLmgiCisrI2luY2x1ZGUgInNyYy9kc3AvbG9zc2xlc3NfY29tbW9uLmgiCisrI2lu Y2x1ZGUgInNyYy93ZWJwL2Zvcm1hdF9jb25zdGFudHMuaCIKKysjaW5jbHVkZSAic3JjL3dlYnAv dHlwZXMuaCIKKysKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGNoYXIgdTh4MTY7CisrdHlw ZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB1MTZ4ODsKKyt0eXBlZGVmIF9fdmVjdG9yIHNp Z25lZCBzaG9ydCBpMTZ4ODsKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIGludCB1MzJ4NDsK Kyt0eXBlZGVmIF9fdmVjdG9yIHNpZ25lZCBpbnQgaTMyeDQ7CisrCisrLy8gU2lnbmVkIG11bHRp cGx5LWhpZ2ggb2YgMTYtYml0IGxhbmVzOiAoYSAqIGIpID4+IDE2LCBtYXRjaGluZworKy8vIF9t bV9tdWxoaV9lcGkxNi4KKytzdGF0aWMgV0VCUF9JTkxJTkUgaTE2eDggTXVsSGlTMTYoaTE2eDgg YSwgaTE2eDggYikgeworKyAgY29uc3QgdTMyeDQgc2ggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBp bnQpMTYpOworKyAgY29uc3QgaTMyeDQgZSA9IHZlY19zcmEodmVjX211bGUoYSwgYiksIHNoKTsK KysgIGNvbnN0IGkzMng0IG8gPSB2ZWNfc3JhKHZlY19tdWxvKGEsIGIpLCBzaCk7CisrICByZXR1 cm4gKGkxNng4KXZlY19wYWNrKHZlY19tZXJnZWgoZSwgbyksIHZlY19tZXJnZWwoZSwgbykpOwor K30KKysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIENvbG9yIHRyYW5zZm9ybXMuCisr Cisrc3RhdGljIHZvaWQgQWRkR3JlZW5Ub0JsdWVBbmRSZWRfVlNYKGNvbnN0IHVpbnQzMl90KiBz cmMsIGludCBudW1fcGl4ZWxzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCogZHN0KSB7CisrICBjb25zdCB1OHgxNiB6ZXJvID0gdmVjX3NwbGF0cygodW5z aWduZWQgY2hhcikwKTsKKysgIC8vIFJlcGxpY2F0ZSB0aGUgZ3JlZW4gYnl0ZSAob2Zmc2V0IDEg b2YgZWFjaCBwaXhlbCkgaW50byB0aGUgYmx1ZS9yZWQgc2xvdHMuCisrICBjb25zdCB1OHgxNiBr U3ByZWFkR3JlZW4gPSB7MSwgMTYsIDEsIDE2LCA1LCAgMTYsIDUsICAxNiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA5LCAxNiwgOSwgMTYsIDEzLCAxNiwgMTMsIDE2fTsKKysgIGlu dCBpOworKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7CisrICAg IGNvbnN0IHU4eDE2IGluID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZzcmNbaV0pOwor KyAgICBjb25zdCB1OHgxNiBnID0gdmVjX3Blcm0oaW4sIHplcm8sIGtTcHJlYWRHcmVlbik7ICAv LyAwIGcgMCBnIHBlciBwaXhlbAorKyAgICB2ZWNfeHN0KCh1MzJ4NCl2ZWNfYWRkKGluLCBnKSwg MCwgJmRzdFtpXSk7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7CisrICAgIFZQOExB ZGRHcmVlblRvQmx1ZUFuZFJlZF9DKHNyYyArIGksIG51bV9waXhlbHMgLSBpLCBkc3QgKyBpKTsK KysgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgVHJhbnNmb3JtQ29sb3JJbnZlcnNlX1ZTWChjb25z dCBWUDhMTXVsdGlwbGllcnMqIGNvbnN0IG0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjLCBpbnQgbnVtX3BpeGVscywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiBkc3QpIHsKKysvLyBzaWdu LWV4dGVuZGVkIG11bHRpcGx5aW5nIGNvbnN0YW50cywgcHJlLXNoaWZ0ZWQgYnkgNSAoc2VlIGxv c3NsZXNzX3NzZTIuYykuCisrI2RlZmluZSBDU1QoWCkgKCgoaW50MTZfdCkoKG0tPlgpIDw8IDgp KSA+PiA1KQorKyAgY29uc3QgaTE2eDggbXVsdHNfcmIgPQorKyAgICAgIChpMTZ4OCl2ZWNfc3Bs YXRzKChpbnQpKCgodWludDMyX3QpKHVpbnQxNl90KUNTVChncmVlbl90b19yZWQpIDw8IDE2KSB8 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdClDU1QoZ3JlZW5fdG9f Ymx1ZSkpKSk7CisrICBjb25zdCBpMTZ4OCBtdWx0c19iMiA9CisrICAgICAgKGkxNng4KXZlY19z cGxhdHMoKGludCkoKHVpbnQzMl90KSh1aW50MTZfdClDU1QocmVkX3RvX2JsdWUpIDw8IDE2KSk7 CisrI3VuZGVmIENTVAorKyAgY29uc3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVk IGNoYXIpMCk7CisrICBjb25zdCB1MzJ4NCBtYXNrX2FnID0gdmVjX3NwbGF0cygodWludDMyX3Qp MHhmZjAwZmYwMCk7ICAvLyBhbHBoYS9ncmVlbgorKyAgY29uc3QgdTE2eDggc2g4XzE2ID0gdmVj X3NwbGF0cygodW5zaWduZWQgc2hvcnQpOCk7CisrICBjb25zdCB1MzJ4NCBzaDhfMzIgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBpbnQpOCk7CisrICAvLyBCcm9hZGNhc3QgdGhlIGdyZWVuIGJ5dGUg KG9mZnNldCAxKSBpbnRvIHRoZSBoaWdoIGJ5dGUgb2YgYm90aCAxNi1iaXQKKysgIC8vIGhhbHZl cyBvZiBlYWNoIHBpeGVsOiB5aWVsZHMgZyA8PCA4IGluIGVhY2ggbGFuZS4KKysgIGNvbnN0IHU4 eDE2IGtHcmVlbkhpID0gezE2LCAxLCAxNiwgMSwgMTYsIDUsICAxNiwgNSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgIDE2LCA5LCAxNiwgOSwgMTYsIDEzLCAxNiwgMTN9OworKyAgaW50IGk7 CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKKysgICAgY29u c3QgdTh4MTYgaW4gPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnNyY1tpXSk7CisrICAg IGNvbnN0IHU4eDE2IEEgPSAodTh4MTYpdmVjX2FuZCgodTMyeDQpaW4sIG1hc2tfYWcpOyAgIC8v IGEgMCBnIDAKKysgICAgY29uc3QgaTE2eDggQyA9IChpMTZ4OCl2ZWNfcGVybShBLCB6ZXJvLCBr R3JlZW5IaSk7ICAgLy8gZzBnMCAoZyA8PCA4KQorKyAgICBjb25zdCB1OHgxNiBEID0gKHU4eDE2 KU11bEhpUzE2KEMsIG11bHRzX3JiKTsgICAgICAgICAvLyB4IGRyIHggZGIxCisrICAgIGNvbnN0 IHU4eDE2IEUgPSB2ZWNfYWRkKGluLCBEKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIHggcicg eCBiJworKyAgICBjb25zdCB1MTZ4OCBGID0gdmVjX3NsKCh1MTZ4OClFLCBzaDhfMTYpOyAgICAg ICAgICAgICAvLyByJyAwIGInIDAKKysgICAgY29uc3QgdTh4MTYgRyA9ICh1OHgxNilNdWxIaVMx NigoaTE2eDgpRiwgbXVsdHNfYjIpOyAgLy8geCBkYjIgMCAwCisrICAgIGNvbnN0IHU4eDE2IEgg PSAodTh4MTYpdmVjX3NyKCh1MzJ4NClHLCBzaDhfMzIpOyAgICAgIC8vIDAgeCBkYjIgMAorKyAg ICBjb25zdCB1MTZ4OCBJID0gKHUxNng4KXZlY19hZGQoSCwgKHU4eDE2KUYpOyAgICAgICAgICAv LyByJyB4IGInJyAwCisrICAgIGNvbnN0IHU4eDE2IEogPSAodTh4MTYpdmVjX3NyKEksIHNoOF8x Nik7ICAgICAgICAgICAgIC8vIDAgcicgMCBiJycKKysgICAgdmVjX3hzdCh2ZWNfb3IoKHUzMng0 KUosICh1MzJ4NClBKSwgMCwgJmRzdFtpXSk7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxz KSB7CisrICAgIFZQOExUcmFuc2Zvcm1Db2xvckludmVyc2VfQyhtLCBzcmMgKyBpLCBudW1fcGl4 ZWxzIC0gaSwgZHN0ICsgaSk7CisrICB9CisrfQorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisrLy8gQ29sb3Itc3BhY2UgY29udmVyc2lvbiBmdW5jdGlvbnMuCisrCisrc3RhdGljIHZvaWQg Q29udmVydEJHUkFUb1JHQkFfVlNYKGNvbnN0IHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQ4 X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7CisrICAvLyBTd2FwIHRoZSBibHVlIChvZmZzZXQgMCkg YW5kIHJlZCAob2Zmc2V0IDIpIGJ5dGVzIG9mIGVhY2ggcGl4ZWwuCisrICBjb25zdCB1OHgxNiBr U3dhcEJSID0gezIsIDEsIDAsIDMsIDYsIDUsIDQsIDcsIDEwLCA5LCA4LCAxMSwgMTQsIDEzLCAx MiwgMTV9OworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBp ICs9IDQpIHsKKysgICAgY29uc3QgdTh4MTYgaW4gPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJf dCopJnNyY1tpXSk7CisrICAgIHZlY194c3QodmVjX3Blcm0oaW4sIGluLCBrU3dhcEJSKSwgMCwg JmRzdFs0ICogaV0pOworKyAgfQorKyAgaWYgKGkgIT0gbnVtX3BpeGVscykgeworKyAgICBWUDhM Q29udmVydEJHUkFUb1JHQkFfQyhzcmMgKyBpLCBudW1fcGl4ZWxzIC0gaSwgZHN0ICsgNCAqIGkp OworKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBDb252ZXJ0QkdSQVRvUkdCX1ZTWChjb25zdCB1 aW50MzJfdCogV0VCUF9SRVNUUklDVCBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG51bV9waXhlbHMsIHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7CisrICAv LyBCR1JBIC0+IFJHQjogZ2F0aGVyIFIsRyxCIChvZmZzZXRzIDIsMSwwKSBvZiBlYWNoIHBpeGVs LCBkcm9wIGFscGhhLgorKyAgY29uc3QgdTh4MTYga1RvUkdCID0gezIsIDEsIDAsIDYsIDUsIDQs IDEwLCA5LCA4LCAxNCwgMTMsIDEyLCAwLCAwLCAwLCAwfTsKKysgIGludCBpOworKyAgZm9yIChp ID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7CisrICAgIGNvbnN0IHU4eDE2IGlu ID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZzcmNbaV0pOworKyAgICBjb25zdCB1OHgx NiBvdXQgPSB2ZWNfcGVybShpbiwgaW4sIGtUb1JHQik7CisrICAgIG1lbWNweSgmZHN0WzMgKiBp XSwgJm91dCwgMTIpOworKyAgfQorKyAgaWYgKGkgIT0gbnVtX3BpeGVscykgeworKyAgICBWUDhM Q29udmVydEJHUkFUb1JHQl9DKHNyYyArIGksIG51bV9waXhlbHMgLSBpLCBkc3QgKyAzICogaSk7 CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIENvbnZlcnRCR1JBVG9CR1JfVlNYKGNvbnN0IHVp bnQzMl90KiBXRUJQX1JFU1RSSUNUIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbnVtX3BpeGVscywgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKKysgIC8v IEJHUkEgLT4gQkdSOiBnYXRoZXIgQixHLFIgKG9mZnNldHMgMCwxLDIpIG9mIGVhY2ggcGl4ZWws IGRyb3AgYWxwaGEuCisrICBjb25zdCB1OHgxNiBrVG9CR1IgPSB7MCwgMSwgMiwgNCwgNSwgNiwg OCwgOSwgMTAsIDEyLCAxMywgMTQsIDAsIDAsIDAsIDB9OworKyAgaW50IGk7CisrICBmb3IgKGkg PSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKKysgICAgY29uc3QgdTh4MTYgaW4g PSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJnNyY1tpXSk7CisrICAgIGNvbnN0IHU4eDE2 IG91dCA9IHZlY19wZXJtKGluLCBpbiwga1RvQkdSKTsKKysgICAgbWVtY3B5KCZkc3RbMyAqIGld LCAmb3V0LCAxMik7CisrICB9CisrICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7CisrICAgIFZQOExD b252ZXJ0QkdSQVRvQkdSX0Moc3JjICsgaSwgbnVtX3BpeGVscyAtIGksIGRzdCArIDMgKiBpKTsK KysgIH0KKyt9CisrCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBQcmVkaWN0b3IgdHJh bnNmb3JtLgorKworKy8vIEJ5dGUtd2lzZSBzaGlmdHMgb2YgdGhlIHdob2xlIHJlZ2lzdGVyIChs aXR0bGUtZW5kaWFuIF9tbV9ze2wscn1saV9zaTEyOCkuCisrI2RlZmluZSBTTExJKHgsIG4pIHZl Y19zbGQoKHgpLCBrWmVybywgKG4pKQorKyNkZWZpbmUgU1JMSSh4LCBuKSB2ZWNfc2xkKGtaZXJv LCAoeCksIDE2IC0gKG4pKQorK3N0YXRpYyBjb25zdCB1OHgxNiBrWmVybyA9IHswLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKysKKysvLyBQZXItYnl0ZSBm bG9vciBhdmVyYWdlIChhICsgYikgPj4gMSwgbWF0Y2hpbmcgdGhlIEMgQXZlcmFnZTIoKS4KKytz dGF0aWMgV0VCUF9JTkxJTkUgdTh4MTYgQXZlcmFnZTJfdTgodTh4MTYgYSwgdTh4MTYgYikgewor KyAgY29uc3QgdTh4MTYgb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgY2hhcikxKTsKKysgIGNv bnN0IHU4eDE2IGF2ZzEgPSB2ZWNfYXZnKGEsIGIpOyAgLy8gKGEgKyBiICsgMSkgPj4gMQorKyAg cmV0dXJuIHZlY19zdWIoYXZnMSwgdmVjX2FuZCh2ZWNfeG9yKGEsIGIpLCBvbmUpKTsKKyt9Cisr Cisrc3RhdGljIFdFQlBfSU5MSU5FIHUzMng0IExhbmUwKHVpbnQzMl90IHYpIHsKKysgIGNvbnN0 IHUzMng0IHIgPSB7diwgMCwgMCwgMH07CisrICByZXR1cm4gcjsKKyt9CisrCisrLy8gU2luZ2xl LXBpeGVsIGhlbHBlcnMgb3BlcmF0aW5nIG9uIHRoZSBsb3cgMzItYml0IGxhbmUgb25seS4KKytz dGF0aWMgV0VCUF9JTkxJTkUgdTE2eDggVW5wYWNrMTYodWludDMyX3QgYSkgeworKyAgcmV0dXJu ICh1MTZ4OCl2ZWNfbWVyZ2VoKCh1OHgxNilMYW5lMChhKSwga1plcm8pOworK30KKysKKytzdGF0 aWMgV0VCUF9JTkxJTkUgdWludDMyX3QgQXZlcmFnZTJfVlNYKHVpbnQzMl90IGEwLCB1aW50MzJf dCBhMSkgeworKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1MzJ4NClBdmVyYWdlMl91OCgodTh4MTYp TGFuZTAoYTApLCAodTh4MTYpTGFuZTAoYTEpKSwgMCk7CisrfQorKworK3N0YXRpYyBXRUJQX0lO TElORSB1MTZ4OCBBdmVyYWdlMl8xNih1aW50MzJfdCBhMCwgdWludDMyX3QgYTEpIHsKKysgIGNv bnN0IHUxNng4IG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpOworKyAgcmV0dXJu IHZlY19zcih2ZWNfYWRkKFVucGFjazE2KGEwKSwgVW5wYWNrMTYoYTEpKSwgb25lKTsKKyt9Cisr Cisrc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IEF2ZXJhZ2UzX1ZTWCh1aW50MzJfdCBhMCwg dWludDMyX3QgYTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCBhMikgeworKyAgY29uc3QgdTE2eDggb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQg c2hvcnQpMSk7CisrICBjb25zdCB1MTZ4OCBhdmcxID0gQXZlcmFnZTJfMTYoYTAsIGEyKTsKKysg IGNvbnN0IHUxNng4IGF2ZzIgPSB2ZWNfc3IodmVjX2FkZChhdmcxLCBVbnBhY2sxNihhMSkpLCBv bmUpOworKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1MzJ4NCl2ZWNfcGFja3N1KChpMTZ4OClhdmcy LCAoaTE2eDgpYXZnMiksIDApOworK30KKysKKytzdGF0aWMgV0VCUF9JTkxJTkUgdWludDMyX3Qg QXZlcmFnZTRfVlNYKHVpbnQzMl90IGEwLCB1aW50MzJfdCBhMSwgdWludDMyX3QgYTIsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhMykgeworKyAg Y29uc3QgdTE2eDggb25lID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMSk7CisrICBjb25z dCB1MTZ4OCBhdmcxID0gQXZlcmFnZTJfMTYoYTAsIGExKTsKKysgIGNvbnN0IHUxNng4IGF2ZzIg PSBBdmVyYWdlMl8xNihhMiwgYTMpOworKyAgY29uc3QgdTE2eDggYXZnMyA9IHZlY19zcih2ZWNf YWRkKGF2ZzEsIGF2ZzIpLCBvbmUpOworKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1MzJ4NCl2ZWNf cGFja3N1KChpMTZ4OClhdmczLCAoaTE2eDgpYXZnMyksIDApOworK30KKysKKytzdGF0aWMgV0VC UF9JTkxJTkUgdWludDMyX3QgQ2xhbXBlZEFkZFN1YnRyYWN0RnVsbF9WU1godWludDMyX3QgYzAs IHVpbnQzMl90IGMxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCBjMikgeworKyAgY29uc3QgaTE2eDggdiA9CisrICAgICAg dmVjX3N1YigoaTE2eDgpdmVjX2FkZChVbnBhY2sxNihjMCksIFVucGFjazE2KGMxKSksIChpMTZ4 OClVbnBhY2sxNihjMikpOworKyAgcmV0dXJuIHZlY19leHRyYWN0KCh1MzJ4NCl2ZWNfcGFja3N1 KHYsIHYpLCAwKTsKKyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5FIHVpbnQzMl90IENsYW1wZWRB ZGRTdWJ0cmFjdEhhbGZfVlNYKHVpbnQzMl90IGMwLCB1aW50MzJfdCBjMSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYzIp IHsKKysgIGNvbnN0IHUxNng4IG9uZSA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTEpOwor KyAgY29uc3QgdTE2eDggQzAgPSBVbnBhY2sxNihjMCk7CisrICBjb25zdCB1MTZ4OCBDMSA9IFVu cGFjazE2KGMxKTsKKysgIGNvbnN0IHUxNng4IEIwID0gVW5wYWNrMTYoYzIpOworKyAgY29uc3Qg dTE2eDggQTAgPSB2ZWNfc3IodmVjX2FkZChDMSwgQzApLCBvbmUpOyAgLy8gYXZlCisrICBjb25z dCBpMTZ4OCBBMSA9IHZlY19zdWIoKGkxNng4KUEwLCAoaTE2eDgpQjApOworKyAgY29uc3QgaTE2 eDggQmd0QSA9IChpMTZ4OCl2ZWNfY21wZ3QoQjAsIEEwKTsgIC8vIDAgb3IgLTEKKysgIGNvbnN0 IGkxNng4IEEyID0gdmVjX3N1YihBMSwgQmd0QSk7CisrICBjb25zdCBpMTZ4OCBBMyA9IHZlY19z cmEoQTIsIG9uZSk7CisrICBjb25zdCBpMTZ4OCBBNCA9IHZlY19hZGQoKGkxNng4KUEwLCBBMyk7 CisrICByZXR1cm4gdmVjX2V4dHJhY3QoKHUzMng0KXZlY19wYWNrc3UoQTQsIEE0KSwgMCk7Cisr fQorKworK3N0YXRpYyBXRUJQX0lOTElORSB1aW50MzJfdCBTZWxlY3RfVlNYKHVpbnQzMl90IGEs IHVpbnQzMl90IGIsIHVpbnQzMl90IGMpIHsKKysgIGNvbnN0IHU4eDE2IEEgPSAodTh4MTYpTGFu ZTAoYSk7CisrICBjb25zdCB1OHgxNiBCID0gKHU4eDE2KUxhbmUwKGIpOworKyAgY29uc3QgdTh4 MTYgQyA9ICh1OHgxNilMYW5lMChjKTsKKysgIGNvbnN0IHUzMng0IHNhID0gdmVjX3N1bTRzKHZl Y19vcih2ZWNfc3VicyhBLCBDKSwgdmVjX3N1YnMoQywgQSkpLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KTApKTsKKysgIGNvbnN0IHUzMng0 IHNiID0gdmVjX3N1bTRzKHZlY19vcih2ZWNfc3VicyhCLCBDKSwgdmVjX3N1YnMoQywgQikpLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjX3NwbGF0cygodW5zaWduZWQgaW50KTAp KTsKKysgIHJldHVybiB2ZWNfZXh0cmFjdCgodTMyeDQpdmVjX2NtcGd0KHNiLCBzYSksIDApID8g YiA6IGE7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCBQcmVkaWN0b3I1X1ZTWChjb25zdCB1aW50 MzJfdCogY29uc3QgbGVmdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dWludDMyX3QqIGNvbnN0IHRvcCkgeworKyAgcmV0dXJuIEF2ZXJhZ2UzX1ZTWCgqbGVmdCwgdG9w WzBdLCB0b3BbMV0pOworK30KKytzdGF0aWMgdWludDMyX3QgUHJlZGljdG9yNl9WU1goY29uc3Qg dWludDMyX3QqIGNvbnN0IGxlZnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQzMl90KiBjb25zdCB0b3ApIHsKKysgIHJldHVybiBBdmVyYWdlMl9WU1goKmxlZnQs IHRvcFstMV0pOworK30KKytzdGF0aWMgdWludDMyX3QgUHJlZGljdG9yN19WU1goY29uc3QgdWlu dDMyX3QqIGNvbnN0IGxlZnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVpbnQzMl90KiBjb25zdCB0b3ApIHsKKysgIHJldHVybiBBdmVyYWdlMl9WU1goKmxlZnQsIHRv cFswXSk7CisrfQorK3N0YXRpYyB1aW50MzJfdCBQcmVkaWN0b3IxM19WU1goY29uc3QgdWludDMy X3QqIGNvbnN0IGxlZnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 aW50MzJfdCogY29uc3QgdG9wKSB7CisrICByZXR1cm4gQ2xhbXBlZEFkZFN1YnRyYWN0SGFsZl9W U1goKmxlZnQsIHRvcFswXSwgdG9wWy0xXSk7CisrfQorKworK3N0YXRpYyB2b2lkIFByZWRpY3Rv ckFkZDBfVlNYKGNvbnN0IHVpbnQzMl90KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50MzJfdCogV0VC UF9SRVNUUklDVCBvdXQpIHsKKysgIGNvbnN0IHU4eDE2IGJsYWNrID0gKHU4eDE2KXZlY19zcGxh dHMoKHVpbnQzMl90KUFSR0JfQkxBQ0spOworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpICsg NCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKKysgICAgY29uc3QgdTh4MTYgc3JjID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSZpbltpXSk7CisrICAgIHZlY194c3QoKHUzMng0KXZlY19h ZGQoc3JjLCBibGFjayksIDAsICZvdXRbaV0pOworKyAgfQorKyAgaWYgKGkgIT0gbnVtX3BpeGVs cykgeworKyAgICBWUDhMUHJlZGljdG9yc0FkZF9DWzBdKGluICsgaSwgTlVMTCwgbnVtX3BpeGVs cyAtIGksIG91dCArIGkpOworKyAgfQorKyAgKHZvaWQpdXBwZXI7CisrfQorKworK3N0YXRpYyB2 b2lkIFByZWRpY3RvckFkZDFfVlNYKGNvbnN0IHVpbnQzMl90KiBpbiwgY29uc3QgdWludDMyX3Qq IHVwcGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1 aW50MzJfdCogV0VCUF9SRVNUUklDVCBvdXQpIHsKKysgIHUzMng0IHByZXYgPSB2ZWNfc3BsYXRz KG91dFstMV0pOworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxz OyBpICs9IDQpIHsKKysgICAgY29uc3QgdTh4MTYgc3JjID0gKHU4eDE2KXZlY194bCgwLCAodWlu dDMyX3QqKSZpbltpXSk7CisrICAgIGNvbnN0IHU4eDE2IHN1bTAgPSB2ZWNfYWRkKHNyYywgU0xM SShzcmMsIDQpKTsgICAgLy8gYSB8IGErYiB8IGIrYyB8IGMrZAorKyAgICBjb25zdCB1OHgxNiBz dW0xID0gdmVjX2FkZChzdW0wLCBTTExJKHN1bTAsIDgpKTsgIC8vIHJ1bm5pbmcgc3VtCisrICAg IGNvbnN0IHU4eDE2IHJlcyA9IHZlY19hZGQoc3VtMSwgKHU4eDE2KXByZXYpOworKyAgICB2ZWNf eHN0KCh1MzJ4NClyZXMsIDAsICZvdXRbaV0pOworKyAgICBwcmV2ID0gdmVjX3NwbGF0KCh1MzJ4 NClyZXMsIDMpOyAgLy8gcmVwbGljYXRlIGxhc3QgcGl4ZWwKKysgIH0KKysgIGlmIChpICE9IG51 bV9waXhlbHMpIHsKKysgICAgVlA4TFByZWRpY3RvcnNBZGRfQ1sxXShpbiArIGksIHVwcGVyICsg aSwgbnVtX3BpeGVscyAtIGksIG91dCArIGkpOworKyAgfQorK30KKysKKysjZGVmaW5lIEdFTkVS QVRFX1BSRURJQ1RPUl8xX1ZTWChYLCBJTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkIyNYIyNfVlNYKGNvbnN0IHVp bnQzMl90KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLCBcCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG51bV9waXhlbHMsICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogV0VC UF9SRVNUUklDVCBvdXQpIHsgICAgICAgICAgICAgXAorKyAgICBpbnQgaTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIGZvciAoaSA9IDA7IGkgKyA0IDw9IG51bV9waXhlbHM7IGkgKz0gNCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBjb25zdCB1OHgxNiBzcmMgPSAodTh4 MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsgICAgICAgICAgICAgICAgICAgXAorKyAg ICAgIGNvbnN0IHU4eDE2IG90aGVyID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSYoSU4p KTsgICAgICAgICAgICAgICAgICBcCisrICAgICAgdmVjX3hzdCgodTMyeDQpdmVjX2FkZChzcmMs IG90aGVyKSwgMCwgJm91dFtpXSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgVlA4TFBy ZWRpY3RvcnNBZGRfQ1soWCldKGluICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0 ICsgaSk7ICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfQorK0dFTkVSQVRFX1BS RURJQ1RPUl8xX1ZTWCgyLCB1cHBlcltpXSkgICAgICAvLyBUb3AuCisrR0VORVJBVEVfUFJFRElD VE9SXzFfVlNYKDMsIHVwcGVyW2kgKyAxXSkgIC8vIFRvcC1yaWdodC4KKytHRU5FUkFURV9QUkVE SUNUT1JfMV9WU1goNCwgdXBwZXJbaSAtIDFdKSAgLy8gVG9wLWxlZnQuCisrI3VuZGVmIEdFTkVS QVRFX1BSRURJQ1RPUl8xX1ZTWAorKworKy8vIFByZWRpY3RvcnMgNSwgNiwgNywgMTMgdXNlIGlu dGVnZXIgYXZlcmFnZXMgYW5kIGNhbm5vdCBiZSBhY2N1bXVsYXRlZCBpbgorKy8vIHBhcmFsbGVs LCBzbyB1c2UgdGhlIGdlbmVyaWMgb25lLXBpeGVsLWF0LWEtdGltZSBiYXRjaC4KKytHRU5FUkFU RV9QUkVESUNUT1JfQUREKFByZWRpY3RvcjVfVlNYLCBQcmVkaWN0b3JBZGQ1X1ZTWCkKKytHRU5F UkFURV9QUkVESUNUT1JfQUREKFByZWRpY3RvcjZfVlNYLCBQcmVkaWN0b3JBZGQ2X1ZTWCkKKytH RU5FUkFURV9QUkVESUNUT1JfQUREKFByZWRpY3RvcjdfVlNYLCBQcmVkaWN0b3JBZGQ3X1ZTWCkK KytHRU5FUkFURV9QUkVESUNUT1JfQUREKFByZWRpY3RvcjEzX1ZTWCwgUHJlZGljdG9yQWRkMTNf VlNYKQorKworKyNkZWZpbmUgR0VORVJBVEVfUFJFRElDVE9SXzJfVlNYKFgsIElOKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBzdGF0aWMgdm9pZCBQcmVkaWN0 b3JBZGQjI1gjI19WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIs IFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90KiBXRUJQX1JFU1RSSUNUIG91dCkgeyAgICAgICAgICAgICBcCisr ICAgIGludCBpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3Bp eGVsczsgaSArPSA0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAg IGNvbnN0IHU4eDE2IFRvdGhlciA9ICh1OHgxNil2ZWNfeGwoMCwgKHVpbnQzMl90KikmKElOKSk7 ICAgICAgICAgICAgICAgICBcCisrICAgICAgY29uc3QgdTh4MTYgVCA9ICh1OHgxNil2ZWNfeGwo MCwgKHVpbnQzMl90KikmdXBwZXJbaV0pOyAgICAgICAgICAgICAgICAgIFwKKysgICAgICBjb25z dCB1OHgxNiBzcmMgPSAodTh4MTYpdmVjX3hsKDAsICh1aW50MzJfdCopJmluW2ldKTsgICAgICAg ICAgICAgICAgICAgXAorKyAgICAgIHZlY194c3QoKHUzMng0KXZlY19hZGQoQXZlcmFnZTJfdTgo VCwgVG90aGVyKSwgc3JjKSwgMCwgJm91dFtpXSk7ICAgICAgICBcCisrICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgaWYgKGkgIT0gbnVtX3BpeGVscykgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIFZQOExQcmVkaWN0b3Jz QWRkX0NbKFgpXShpbiArIGksIHVwcGVyICsgaSwgbnVtX3BpeGVscyAtIGksIG91dCArIGkpOyAg ICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKytHRU5FUkFURV9QUkVESUNUT1Jf Ml9WU1goOCwgdXBwZXJbaSAtIDFdKSAgLy8gQXZlcmFnZSBUTCwgVC4KKytHRU5FUkFURV9QUkVE SUNUT1JfMl9WU1goOSwgdXBwZXJbaSArIDFdKSAgLy8gQXZlcmFnZSBULCBUUi4KKysjdW5kZWYg R0VORVJBVEVfUFJFRElDVE9SXzJfVlNYCisrCisrLy8gUHJlZGljdG9yMTA6IGF2ZXJhZ2Ugb2Yg KGF2ZXJhZ2UoTCwgVEwpLCBhdmVyYWdlKFQsIFRSKSkuCisrc3RhdGljIHZvaWQgUHJlZGljdG9y QWRkMTBfVlNYKGNvbnN0IHVpbnQzMl90KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3BpeGVscywgdWludDMyX3QqIFdF QlBfUkVTVFJJQ1Qgb3V0KSB7CisrICB1OHgxNiBMID0gKHU4eDE2KUxhbmUwKG91dFstMV0pOwor KyAgaW50IGksIGs7CisrICBmb3IgKGkgPSAwOyBpICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQp IHsKKysgICAgdTh4MTYgc3JjID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZpbltpXSk7 CisrICAgIHU4eDE2IFRMID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1cHBlcltpIC0g MV0pOworKyAgICBjb25zdCB1OHgxNiBUID0gKHU4eDE2KXZlY194bCgwLCAodWludDMyX3QqKSZ1 cHBlcltpXSk7CisrICAgIGNvbnN0IHU4eDE2IFRSID0gKHU4eDE2KXZlY194bCgwLCAodWludDMy X3QqKSZ1cHBlcltpICsgMV0pOworKyAgICB1OHgxNiBhdmdUVFIgPSBBdmVyYWdlMl91OChULCBU Uik7CisrICAgIGZvciAoayA9IDA7IGsgPCA0OyArK2spIHsKKysgICAgICBjb25zdCB1OHgxNiBh dmcgPSBBdmVyYWdlMl91OChhdmdUVFIsIEF2ZXJhZ2UyX3U4KEwsIFRMKSk7CisrICAgICAgTCA9 IHZlY19hZGQoYXZnLCBzcmMpOworKyAgICAgIG91dFtpICsga10gPSB2ZWNfZXh0cmFjdCgodTMy eDQpTCwgMCk7CisrICAgICAgYXZnVFRSID0gU1JMSShhdmdUVFIsIDQpOworKyAgICAgIFRMID0g U1JMSShUTCwgNCk7CisrICAgICAgc3JjID0gU1JMSShzcmMsIDQpOworKyAgICB9CisrICB9Cisr ICBpZiAoaSAhPSBudW1fcGl4ZWxzKSB7CisrICAgIFZQOExQcmVkaWN0b3JzQWRkX0NbMTBdKGlu ICsgaSwgdXBwZXIgKyBpLCBudW1fcGl4ZWxzIC0gaSwgb3V0ICsgaSk7CisrICB9CisrfQorKwor Ky8vIFByZWRpY3RvcjExOiBzZWxlY3QgYmV0d2VlbiBUIGFuZCBMIGJhc2VkIG9uIHxULVRMfCB2 cyB8TC1UTHwuCisrc3RhdGljIHZvaWQgUHJlZGljdG9yQWRkMTFfVlNYKGNvbnN0IHVpbnQzMl90 KiBpbiwgY29uc3QgdWludDMyX3QqIHVwcGVyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgbnVtX3BpeGVscywgdWludDMyX3QqIFdFQlBfUkVTVFJJQ1Qgb3V0KSB7CisrICBj b25zdCB1MzJ4NCB6MzIgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMCk7CisrICB1OHgxNiBM ID0gKHU4eDE2KUxhbmUwKG91dFstMV0pOworKyAgaW50IGksIGs7CisrICBmb3IgKGkgPSAwOyBp ICsgNCA8PSBudW1fcGl4ZWxzOyBpICs9IDQpIHsKKysgICAgdTh4MTYgVCA9ICh1OHgxNil2ZWNf eGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaV0pOworKyAgICB1OHgxNiBUTCA9ICh1OHgxNil2ZWNf eGwoMCwgKHVpbnQzMl90KikmdXBwZXJbaSAtIDFdKTsKKysgICAgdTh4MTYgc3JjID0gKHU4eDE2 KXZlY194bCgwLCAodWludDMyX3QqKSZpbltpXSk7CisrICAgIHU4eDE2IHBhID0gKHU4eDE2KXZl Y19zdW00cyh2ZWNfb3IodmVjX3N1YnMoVCwgVEwpLCB2ZWNfc3VicyhUTCwgVCkpLCB6MzIpOwor KyAgICBmb3IgKGsgPSAwOyBrIDwgNDsgKytrKSB7CisrICAgICAgY29uc3QgdTMyeDQgcGIgPSB2 ZWNfc3VtNHModmVjX29yKHZlY19zdWJzKEwsIFRMKSwgdmVjX3N1YnMoVEwsIEwpKSwgejMyKTsK KysgICAgICBjb25zdCB1MzJ4NCBtYXNrID0gKHUzMng0KXZlY19jbXBndChwYiwgKHUzMng0KXBh KTsgIC8vIHBiID4gcGEgPyBMIDogVAorKyAgICAgIGNvbnN0IHU4eDE2IHByZWQgPSB2ZWNfc2Vs KFQsIEwsICh1OHgxNiltYXNrKTsKKysgICAgICBMID0gdmVjX2FkZChzcmMsIHByZWQpOworKyAg ICAgIG91dFtpICsga10gPSB2ZWNfZXh0cmFjdCgodTMyeDQpTCwgMCk7CisrICAgICAgVCA9IFNS TEkoVCwgNCk7CisrICAgICAgVEwgPSBTUkxJKFRMLCA0KTsKKysgICAgICBzcmMgPSBTUkxJKHNy YywgNCk7CisrICAgICAgcGEgPSBTUkxJKHBhLCA0KTsKKysgICAgfQorKyAgfQorKyAgaWYgKGkg IT0gbnVtX3BpeGVscykgeworKyAgICBWUDhMUHJlZGljdG9yc0FkZF9DWzExXShpbiArIGksIHVw cGVyICsgaSwgbnVtX3BpeGVscyAtIGksIG91dCArIGkpOworKyAgfQorK30KKysKKysvLyBQcmVk aWN0b3IxMjogQ2xhbXBlZEFkZFN1YnRyYWN0RnVsbC4gJ0wnIGlzIGtlcHQgdW5wYWNrZWQgdG8g MTYgYml0cyBpbiB0aGUKKysvLyBsb3cgNCBsYW5lczsgJ2RpZmYnICg9IFQgLSBUTCkgaG9sZHMg dHdvIHBpeGVscywgdGhlIGFjdGl2ZSBvbmUgaW4gbGFuZXMgMC0zLgorKyNkZWZpbmUgRE9fUFJF RDEyKERJRkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg Y29uc3QgaTE2eDggYWxsID0gdmVjX2FkZCgoaTE2eDgpTCwgKERJRkYpKTsgICAgICAgICAgXAor KyAgICBjb25zdCB1OHgxNiByZXMgPSB2ZWNfYWRkKHNyYywgdmVjX3BhY2tzdShhbGwsIGFsbCkp OyBcCisrICAgIG91dFtpICsgb3V0X2lkeCsrXSA9IHZlY19leHRyYWN0KCh1MzJ4NClyZXMsIDAp OyAgICAgIFwKKysgICAgTCA9ICh1MTZ4OCl2ZWNfbWVyZ2VoKHJlcywga1plcm8pOyAgICAgICAg ICAgICAgICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKytzdGF0aWMgdm9pZCBQcmVkaWN0b3JB ZGQxMl9WU1goY29uc3QgdWludDMyX3QqIGluLCBjb25zdCB1aW50MzJfdCogdXBwZXIsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fcGl4ZWxzLCB1aW50MzJfdCogV0VC UF9SRVNUUklDVCBvdXQpIHsKKysgIHUxNng4IEwgPSBVbnBhY2sxNihvdXRbLTFdKTsKKysgIGlu dCBpOworKyAgZm9yIChpID0gMDsgaSArIDQgPD0gbnVtX3BpeGVsczsgaSArPSA0KSB7CisrICAg IGludCBvdXRfaWR4ID0gMDsKKysgICAgdTh4MTYgc3JjID0gKHU4eDE2KXZlY194bCgwLCAodWlu dDMyX3QqKSZpbltpXSk7CisrICAgIGNvbnN0IHU4eDE2IFQgPSAodTh4MTYpdmVjX3hsKDAsICh1 aW50MzJfdCopJnVwcGVyW2ldKTsKKysgICAgY29uc3QgdTh4MTYgVEwgPSAodTh4MTYpdmVjX3hs KDAsICh1aW50MzJfdCopJnVwcGVyW2kgLSAxXSk7CisrICAgIC8vIDE2LWJpdCBncmFkaWVudCBi YXNpcyBUIC0gVEwgZm9yIHRoZSBmb3VyIHBpeGVscyAobG93IGFuZCBoaWdoIGhhbHZlcykuCisr ICAgIGkxNng4IGRpZmZfbG8gPQorKyAgICAgICAgdmVjX3N1YigoaTE2eDgpdmVjX21lcmdlaChU LCBrWmVybyksIChpMTZ4OCl2ZWNfbWVyZ2VoKFRMLCBrWmVybykpOworKyAgICBpMTZ4OCBkaWZm X2hpID0KKysgICAgICAgIHZlY19zdWIoKGkxNng4KXZlY19tZXJnZWwoVCwga1plcm8pLCAoaTE2 eDgpdmVjX21lcmdlbChUTCwga1plcm8pKTsKKysgICAgRE9fUFJFRDEyKGRpZmZfbG8pOworKyAg ICBkaWZmX2xvID0gKGkxNng4KVNSTEkoKHU4eDE2KWRpZmZfbG8sIDgpOworKyAgICBzcmMgPSBT UkxJKHNyYywgNCk7CisrICAgIERPX1BSRUQxMihkaWZmX2xvKTsKKysgICAgc3JjID0gU1JMSShz cmMsIDQpOworKyAgICBET19QUkVEMTIoZGlmZl9oaSk7CisrICAgIGRpZmZfaGkgPSAoaTE2eDgp U1JMSSgodTh4MTYpZGlmZl9oaSwgOCk7CisrICAgIHNyYyA9IFNSTEkoc3JjLCA0KTsKKysgICAg RE9fUFJFRDEyKGRpZmZfaGkpOworKyAgfQorKyAgaWYgKGkgIT0gbnVtX3BpeGVscykgeworKyAg ICBWUDhMUHJlZGljdG9yc0FkZF9DWzEyXShpbiArIGksIHVwcGVyICsgaSwgbnVtX3BpeGVscyAt IGksIG91dCArIGkpOworKyAgfQorK30KKysjdW5kZWYgRE9fUFJFRDEyCisrCisrI3VuZGVmIFNM TEkKKysjdW5kZWYgU1JMSQorKworKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrZXh0ZXJu IHZvaWQgVlA4TERzcEluaXRWU1godm9pZCk7CisrCisrV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElP TiB2b2lkIFZQOExEc3BJbml0VlNYKHZvaWQpIHsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzBdID0g UHJlZGljdG9yQWRkMF9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsxXSA9IFByZWRpY3RvckFk ZDFfVlNYOworKyAgVlA4TFByZWRpY3RvcnNBZGRbMl0gPSBQcmVkaWN0b3JBZGQyX1ZTWDsKKysg IFZQOExQcmVkaWN0b3JzQWRkWzNdID0gUHJlZGljdG9yQWRkM19WU1g7CisrICBWUDhMUHJlZGlj dG9yc0FkZFs0XSA9IFByZWRpY3RvckFkZDRfVlNYOworKyAgVlA4TFByZWRpY3RvcnNBZGRbNV0g PSBQcmVkaWN0b3JBZGQ1X1ZTWDsKKysgIFZQOExQcmVkaWN0b3JzQWRkWzZdID0gUHJlZGljdG9y QWRkNl9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFs3XSA9IFByZWRpY3RvckFkZDdfVlNYOwor KyAgVlA4TFByZWRpY3RvcnNBZGRbOF0gPSBQcmVkaWN0b3JBZGQ4X1ZTWDsKKysgIFZQOExQcmVk aWN0b3JzQWRkWzldID0gUHJlZGljdG9yQWRkOV9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsx MF0gPSBQcmVkaWN0b3JBZGQxMF9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsxMV0gPSBQcmVk aWN0b3JBZGQxMV9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsxMl0gPSBQcmVkaWN0b3JBZGQx Ml9WU1g7CisrICBWUDhMUHJlZGljdG9yc0FkZFsxM10gPSBQcmVkaWN0b3JBZGQxM19WU1g7Cisr CisrICBWUDhMQWRkR3JlZW5Ub0JsdWVBbmRSZWQgPSBBZGRHcmVlblRvQmx1ZUFuZFJlZF9WU1g7 CisrICBWUDhMVHJhbnNmb3JtQ29sb3JJbnZlcnNlID0gVHJhbnNmb3JtQ29sb3JJbnZlcnNlX1ZT WDsKKysgIFZQOExDb252ZXJ0QkdSQVRvUkdCQSA9IENvbnZlcnRCR1JBVG9SR0JBX1ZTWDsKKysg IFZQOExDb252ZXJ0QkdSQVRvUkdCID0gQ29udmVydEJHUkFUb1JHQl9WU1g7CisrICBWUDhMQ29u dmVydEJHUkFUb0JHUiA9IENvbnZlcnRCR1JBVG9CR1JfVlNYOworK30KKysKKysjZWxzZSAgLy8g IVdFQlBfVVNFX1ZTWAorKworK1dFQlBfRFNQX0lOSVRfU1RVQihWUDhMRHNwSW5pdFZTWCkKKysK KysjZW5kaWYgIC8vIFdFQlBfVVNFX1ZTWAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3Jj L2RzcC9tb3ouYnVpbGQgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvbW96LmJ1aWxkCitpbmRleCA4 ZDZmODQyN2M5MDAuLmYzZTlkMTI3MzExMCAxMDA2NDQKKy0tLSBhL21lZGlhL2xpYndlYnAvc3Jj L2RzcC9tb3ouYnVpbGQKKysrKyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC9tb3ouYnVpbGQKK0BA IC0xMTgsNiArMTE4LDIwIEBAIGVsaWYgQ09ORklHWydUQVJHRVRfQ1BVJ10uc3RhcnRzd2l0aCgn bWlwcycpOgorICAgICAgICAgJ3l1dl9taXBzMzIuYycsCisgICAgICAgICAneXV2X21pcHNfZHNw X3IyLmMnLAorICAgICBdCisrZWxpZiBDT05GSUdbJ1RBUkdFVF9DUFUnXSA9PSAncHBjNjQnOgor KyAgICBTT1VSQ0VTICs9IFsKKysgICAgICAgICdhbHBoYV9wcm9jZXNzaW5nX3ZzeC5jJywKKysg ICAgICAgICdkZWNfdnN4LmMnLAorKyAgICAgICAgJ2ZpbHRlcnNfdnN4LmMnLAorKyAgICAgICAg J2xvc3NsZXNzX3ZzeC5jJywKKysgICAgICAgICdyZXNjYWxlcl92c3guYycsCisrICAgICAgICAn dXBzYW1wbGluZ192c3guYycsCisrICAgICAgICAneXV2X3ZzeC5jJywKKysgICAgXQorKyAgICBE RUZJTkVTWydXRUJQX0hBVkVfVlNYJ10gPSAxOworKyAgICBmb3IgZiBpbiBTT1VSQ0VTOgorKyAg ICAgIGlmIGYuZW5kc3dpdGgoJ3ZzeC5jJyk6CisrICAgICAgICBTT1VSQ0VTW2ZdLmZsYWdzICs9 IFsnLW12c3gnXQorIAorIGlmIENPTkZJR1snQ0NfVFlQRSddIGluICgnY2xhbmcnLCAnY2xhbmct Y2wnKToKKyAgICAgQ0ZMQUdTICs9IFsnLVduby11bnJlYWNoYWJsZS1jb2RlJ10KK2RpZmYgLS1n aXQgYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AvcmVzY2FsZXIuYyBiL21lZGlhL2xpYndlYnAvc3Jj L2RzcC9yZXNjYWxlci5jCitpbmRleCBlYWZjY2Q0NDJmMjUuLjJjMGM4YzQ3YTdhMyAxMDA2NDQK Ky0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC9yZXNjYWxlci5jCisrKysgYi9tZWRpYS9saWJ3 ZWJwL3NyYy9kc3AvcmVzY2FsZXIuYworQEAgLTIwNyw2ICsyMDcsNyBAQCBleHRlcm4gdm9pZCBX ZWJQUmVzY2FsZXJEc3BJbml0TUlQUzMyKHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBSZXNjYWxl ckRzcEluaXRNSVBTZHNwUjIodm9pZCk7CisgZXh0ZXJuIHZvaWQgV2ViUFJlc2NhbGVyRHNwSW5p dE1TQSh2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0TkVPTih2b2lkKTsK KytleHRlcm4gdm9pZCBXZWJQUmVzY2FsZXJEc3BJbml0VlNYKHZvaWQpOworIAorIFdFQlBfRFNQ X0lOSVRfRlVOQyhXZWJQUmVzY2FsZXJEc3BJbml0KSB7CisgI2lmICFkZWZpbmVkKFdFQlBfUkVE VUNFX1NJWkUpCitAQCAtMjM4LDYgKzIzOSwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUFJl c2NhbGVyRHNwSW5pdCkgeworICAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrTVNBKSkgeworICAgICAg IFdlYlBSZXNjYWxlckRzcEluaXRNU0EoKTsKKyAgICAgfQorKyNlbmRpZgorKyNpZiBkZWZpbmVk KFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7CisrICAgICAg V2ViUFJlc2NhbGVyRHNwSW5pdFZTWCgpOworKyAgICB9CisgI2VuZGlmCisgICB9CisgCitkaWZm IC0tZ2l0IGEvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Jlc2NhbGVyX3ZzeC5jIGIvbWVkaWEvbGli d2VicC9zcmMvZHNwL3Jlc2NhbGVyX3ZzeC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg MDAwMDAwMDAwMDAwLi4wMDJmMjMyZDY0N2EKKy0tLSAvZGV2L251bGwKKysrKyBiL21lZGlhL2xp YndlYnAvc3JjL2RzcC9yZXNjYWxlcl92c3guYworQEAgLTAsMCArMSwyMDEgQEAKKysvLyBDb3B5 cmlnaHQgMjAxNSBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorKy8vCisrLy8gVXNl IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQor Ky8vIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg dGhlIHNvdXJjZQorKy8vIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5 IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKKysvLyBpbiB0aGUgZmlsZSBQQVRFTlRTLiBBbGwg Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKKysvLyBiZSBmb3VuZCBpbiB0aGUgQVVU SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KKysvLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorKy8vCisrLy8gVlNYIChQb3dlclBDKSB2ZXJzaW9uIG9mIHJlc2NhbGluZyBm dW5jdGlvbnMuCisrCisrI2luY2x1ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmluZWQo V0VCUF9VU0VfVlNYKSAmJiAhZGVmaW5lZChXRUJQX1JFRFVDRV9TSVpFKQorKworKyNpbmNsdWRl IDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysKKysjaW5jbHVkZSAic3JjL2RzcC9jcHUuaCIKKysjaW5jbHVkZSAic3JjL3V0aWxzL3Jlc2Nh bGVyX3V0aWxzLmgiCisrI2luY2x1ZGUgInNyYy93ZWJwL3R5cGVzLmgiCisrCisrdHlwZWRlZiBf X3ZlY3RvciB1bnNpZ25lZCBjaGFyIHU4eDE2OworK3R5cGVkZWYgX192ZWN0b3Igc2lnbmVkIHNo b3J0IGkxNng4OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgaW50IHUzMng0OworK3R5cGVk ZWYgX192ZWN0b3Igc2lnbmVkIGludCBpMzJ4NDsKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVk IGxvbmcgbG9uZyB1NjR4MjsKKysKKysjZGVmaW5lIFJPVU5ERVIgKFdFQlBfUkVTQ0FMRVJfT05F ID4+IDEpCisrI2RlZmluZSBNVUxUX0ZJWF9DKHgsIHkpICgoKHVpbnQ2NF90KSh4KSAqICh5KSAr IFJPVU5ERVIpID4+IFdFQlBfUkVTQ0FMRVJfUkZJWCkKKysjZGVmaW5lIE1VTFRfRklYX0ZMT09S X0MoeCwgeSkgKCgodWludDY0X3QpKHgpICogKHkpKSA+PiBXRUJQX1JFU0NBTEVSX1JGSVgpCisr CisrI2lmIChXRUJQX1JFU0NBTEVSX1JGSVggIT0gMzIpCisrI2Vycm9yICJNVUxUX0ZJWC9XRUJQ X1JFU0NBTEVSX1JGSVggbmVlZCBzb21lIG1vcmUgd29yayIKKysjZW5kaWYKKysKKysvLyBSZXR1 cm5zICh4ICogc2NhbGUgKyBST1VOREVSKSA+PiAzMiBmb3IgZWFjaCBvZiB0aGUgZm91ciAzMi1i aXQgbGFuZXMuCisrc3RhdGljIFdFQlBfSU5MSU5FIHUzMng0IE11bHRGaXhfVlNYKHUzMng0IHgs IHVpbnQzMl90IHNjYWxlKSB7CisrICBjb25zdCB1NjR4MiByb3VuZGVyID0gdmVjX3NwbGF0cygo dW5zaWduZWQgbG9uZyBsb25nKVJPVU5ERVIpOworKyAgY29uc3QgdTY0eDIgc2hpZnQgPSB2ZWNf c3BsYXRzKCh1bnNpZ25lZCBsb25nIGxvbmcpV0VCUF9SRVNDQUxFUl9SRklYKTsKKysgIGNvbnN0 IHUzMng0IHMgPSB2ZWNfc3BsYXRzKHNjYWxlKTsKKysgIC8vIHZlY19tdWxlL3ZlY19tdWxvIHBy b2R1Y2UgdGhlIDMyeDMyLT42NCBwcm9kdWN0cyBvZiB0aGUgZXZlbiAoMCwgMikgYW5kCisrICAv LyBvZGQgKDEsIDMpIGxhbmVzIHJlc3BlY3RpdmVseS4KKysgIHU2NHgyIGUgPSB2ZWNfYWRkKHZl Y19tdWxlKHgsIHMpLCByb3VuZGVyKTsKKysgIHU2NHgyIG8gPSB2ZWNfYWRkKHZlY19tdWxvKHgs IHMpLCByb3VuZGVyKTsKKysgIGUgPSB2ZWNfc3IoZSwgc2hpZnQpOworKyAgbyA9IHZlY19zcihv LCBzaGlmdCk7CisrICByZXR1cm4gdmVjX21lcmdlZSgodTMyeDQpZSwgKHUzMng0KW8pOworK30K KysKKysvLyBSZXR1cm5zICh4ICogc2NhbGUpID4+IDMyIGZvciBlYWNoIGxhbmUgKG5vIHJvdW5k aW5nKS4KKytzdGF0aWMgV0VCUF9JTkxJTkUgdTMyeDQgTXVsdEZpeEZsb29yX1ZTWCh1MzJ4NCB4 LCB1aW50MzJfdCBzY2FsZSkgeworKyAgY29uc3QgdTY0eDIgc2hpZnQgPSB2ZWNfc3BsYXRzKCh1 bnNpZ25lZCBsb25nIGxvbmcpV0VCUF9SRVNDQUxFUl9SRklYKTsKKysgIGNvbnN0IHUzMng0IHMg PSB2ZWNfc3BsYXRzKHNjYWxlKTsKKysgIHU2NHgyIGUgPSB2ZWNfc3IodmVjX211bGUoeCwgcyks IHNoaWZ0KTsKKysgIHU2NHgyIG8gPSB2ZWNfc3IodmVjX211bG8oeCwgcyksIHNoaWZ0KTsKKysg IHJldHVybiB2ZWNfbWVyZ2VlKCh1MzJ4NCllLCAodTMyeDQpbyk7CisrfQorKworKy8vIFJldHVy bnMgKEEgKiBmcm93ICsgQiAqIGlyb3cgKyBST1VOREVSKSA+PiAzMiBmb3IgZWFjaCBsYW5lLgor K3N0YXRpYyBXRUJQX0lOTElORSB1MzJ4NCBJbnRlcnBvbGF0ZV9WU1goY29uc3QgcmVzY2FsZXJf dCogV0VCUF9SRVNUUklDVCBmcm93LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgcmVzY2FsZXJfdCogV0VCUF9SRVNUUklDVCBpcm93LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgQSwgdWludDMyX3QgQikg eworKyAgY29uc3QgdTY0eDIgcm91bmRlciA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGxvbmcgbG9u ZylST1VOREVSKTsKKysgIGNvbnN0IHU2NHgyIHNoaWZ0ID0gdmVjX3NwbGF0cygodW5zaWduZWQg bG9uZyBsb25nKVdFQlBfUkVTQ0FMRVJfUkZJWCk7CisrICBjb25zdCB1MzJ4NCBmID0gdmVjX3hs KDAsICh1aW50MzJfdCopZnJvdyk7CisrICBjb25zdCB1MzJ4NCBpciA9IHZlY194bCgwLCAodWlu dDMyX3QqKWlyb3cpOworKyAgY29uc3QgdTMyeDQgdmEgPSB2ZWNfc3BsYXRzKEEpOworKyAgY29u c3QgdTMyeDQgdmIgPSB2ZWNfc3BsYXRzKEIpOworKyAgdTY0eDIgZSA9IHZlY19hZGQodmVjX211 bGUoZiwgdmEpLCB2ZWNfbXVsZShpciwgdmIpKTsKKysgIHU2NHgyIG8gPSB2ZWNfYWRkKHZlY19t dWxvKGYsIHZhKSwgdmVjX211bG8oaXIsIHZiKSk7CisrICBlID0gdmVjX3NyKHZlY19hZGQoZSwg cm91bmRlciksIHNoaWZ0KTsKKysgIG8gPSB2ZWNfc3IodmVjX2FkZChvLCByb3VuZGVyKSwgc2hp ZnQpOworKyAgcmV0dXJuIHZlY19tZXJnZWUoKHUzMng0KWUsICh1MzJ4NClvKTsKKyt9CisrCisr Ly8gU2F0dXJhdGVkIHBhY2sgb2YgdHdvIDMyLWJpdCBsYW5lIHZlY3RvcnMgKDggdmFsdWVzKSBp bnRvIDggYnl0ZXMgYXQgZHN0LgorK3N0YXRpYyBXRUJQX0lOTElORSB2b2lkIFN0b3JlOF9WU1go dTMyeDQgbG8sIHUzMng0IGhpLCB1aW50OF90KiBkc3QpIHsKKysgIGNvbnN0IGkxNng4IHMxNiA9 IHZlY19wYWNrcygoaTMyeDQpbG8sIChpMzJ4NCloaSk7CisrICBjb25zdCB1OHgxNiBzOCA9IHZl Y19wYWNrc3UoczE2LCBzMTYpOworKyAgbWVtY3B5KGRzdCwgJnM4LCA4KTsKKyt9CisrCisrc3Rh dGljIHZvaWQgUmVzY2FsZXJFeHBvcnRSb3dFeHBhbmRfVlNYKFdlYlBSZXNjYWxlciogY29uc3Qg d3JrKSB7CisrICBpbnQgeF9vdXQ7CisrICB1aW50OF90KiBjb25zdCBkc3QgPSB3cmstPmRzdDsK KysgIHJlc2NhbGVyX3QqIGNvbnN0IGlyb3cgPSB3cmstPmlyb3c7CisrICBjb25zdCBpbnQgeF9v dXRfbWF4ID0gd3JrLT5kc3Rfd2lkdGggKiB3cmstPm51bV9jaGFubmVsczsKKysgIGNvbnN0IGlu dCBtYXhfc3BhbiA9IHhfb3V0X21heCAmIH43OworKyAgY29uc3QgcmVzY2FsZXJfdCogY29uc3Qg ZnJvdyA9IHdyay0+ZnJvdzsKKysgIGNvbnN0IHVpbnQzMl90IGZ5X3NjYWxlID0gd3JrLT5meV9z Y2FsZTsKKysgIGFzc2VydCghV2ViUFJlc2NhbGVyT3V0cHV0RG9uZSh3cmspKTsKKysgIGFzc2Vy dCh3cmstPnlfYWNjdW0gPD0gMCk7CisrICBhc3NlcnQod3JrLT55X2V4cGFuZCk7CisrICBhc3Nl cnQod3JrLT55X3N1YiAhPSAwKTsKKysgIGlmICh3cmstPnlfYWNjdW0gPT0gMCkgeworKyAgICBm b3IgKHhfb3V0ID0gMDsgeF9vdXQgPCBtYXhfc3BhbjsgeF9vdXQgKz0gOCkgeworKyAgICAgIGNv bnN0IHUzMng0IEEwID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGZyb3cgKyB4X291dCArIDApKTsK KysgICAgICBjb25zdCB1MzJ4NCBBMSA9IHZlY194bCgwLCAodWludDMyX3QqKShmcm93ICsgeF9v dXQgKyA0KSk7CisrICAgICAgY29uc3QgdTMyeDQgQjAgPSBNdWx0Rml4X1ZTWChBMCwgZnlfc2Nh bGUpOworKyAgICAgIGNvbnN0IHUzMng0IEIxID0gTXVsdEZpeF9WU1goQTEsIGZ5X3NjYWxlKTsK KysgICAgICBTdG9yZThfVlNYKEIwLCBCMSwgZHN0ICsgeF9vdXQpOworKyAgICB9CisrICAgIGZv ciAoOyB4X291dCA8IHhfb3V0X21heDsgKyt4X291dCkgeworKyAgICAgIGNvbnN0IHVpbnQzMl90 IEogPSBmcm93W3hfb3V0XTsKKysgICAgICBjb25zdCBpbnQgdiA9IChpbnQpTVVMVF9GSVhfQyhK LCBmeV9zY2FsZSk7CisrICAgICAgZHN0W3hfb3V0XSA9ICh2ID4gMjU1KSA/IDI1NXUgOiAodWlu dDhfdCl2OworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBjb25zdCB1aW50MzJfdCBCID0gV0VC UF9SRVNDQUxFUl9GUkFDKC13cmstPnlfYWNjdW0sIHdyay0+eV9zdWIpOworKyAgICBjb25zdCB1 aW50MzJfdCBBID0gKHVpbnQzMl90KShXRUJQX1JFU0NBTEVSX09ORSAtIEIpOworKyAgICBmb3Ig KHhfb3V0ID0gMDsgeF9vdXQgPCBtYXhfc3BhbjsgeF9vdXQgKz0gOCkgeworKyAgICAgIGNvbnN0 IHUzMng0IEMwID0KKysgICAgICAgICAgSW50ZXJwb2xhdGVfVlNYKGZyb3cgKyB4X291dCArIDAs IGlyb3cgKyB4X291dCArIDAsIEEsIEIpOworKyAgICAgIGNvbnN0IHUzMng0IEMxID0KKysgICAg ICAgICAgSW50ZXJwb2xhdGVfVlNYKGZyb3cgKyB4X291dCArIDQsIGlyb3cgKyB4X291dCArIDQs IEEsIEIpOworKyAgICAgIGNvbnN0IHUzMng0IEQwID0gTXVsdEZpeF9WU1goQzAsIGZ5X3NjYWxl KTsKKysgICAgICBjb25zdCB1MzJ4NCBEMSA9IE11bHRGaXhfVlNYKEMxLCBmeV9zY2FsZSk7Cisr ICAgICAgU3RvcmU4X1ZTWChEMCwgRDEsIGRzdCArIHhfb3V0KTsKKysgICAgfQorKyAgICBmb3Ig KDsgeF9vdXQgPCB4X291dF9tYXg7ICsreF9vdXQpIHsKKysgICAgICBjb25zdCB1aW50NjRfdCBJ ID0gKHVpbnQ2NF90KUEgKiBmcm93W3hfb3V0XSArICh1aW50NjRfdClCICogaXJvd1t4X291dF07 CisrICAgICAgY29uc3QgdWludDMyX3QgSiA9ICh1aW50MzJfdCkoKEkgKyBST1VOREVSKSA+PiBX RUJQX1JFU0NBTEVSX1JGSVgpOworKyAgICAgIGNvbnN0IGludCB2ID0gKGludClNVUxUX0ZJWF9D KEosIGZ5X3NjYWxlKTsKKysgICAgICBkc3RbeF9vdXRdID0gKHYgPiAyNTUpID8gMjU1dSA6ICh1 aW50OF90KXY7CisrICAgIH0KKysgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgUmVzY2FsZXJFeHBv cnRSb3dTaHJpbmtfVlNYKFdlYlBSZXNjYWxlciogY29uc3Qgd3JrKSB7CisrICBpbnQgeF9vdXQ7 CisrICB1aW50OF90KiBjb25zdCBkc3QgPSB3cmstPmRzdDsKKysgIHJlc2NhbGVyX3QqIGNvbnN0 IGlyb3cgPSB3cmstPmlyb3c7CisrICBjb25zdCBpbnQgeF9vdXRfbWF4ID0gd3JrLT5kc3Rfd2lk dGggKiB3cmstPm51bV9jaGFubmVsczsKKysgIGNvbnN0IGludCBtYXhfc3BhbiA9IHhfb3V0X21h eCAmIH43OworKyAgY29uc3QgcmVzY2FsZXJfdCogY29uc3QgZnJvdyA9IHdyay0+ZnJvdzsKKysg IGNvbnN0IHVpbnQzMl90IHlzY2FsZSA9IHdyay0+Znlfc2NhbGUgKiAoLXdyay0+eV9hY2N1bSk7 CisrICBjb25zdCB1aW50MzJfdCBmeHlfc2NhbGUgPSB3cmstPmZ4eV9zY2FsZTsKKysgIGFzc2Vy dCghV2ViUFJlc2NhbGVyT3V0cHV0RG9uZSh3cmspKTsKKysgIGFzc2VydCh3cmstPnlfYWNjdW0g PD0gMCk7CisrICBhc3NlcnQoIXdyay0+eV9leHBhbmQpOworKyAgaWYgKHlzY2FsZSkgeworKyAg ICBmb3IgKHhfb3V0ID0gMDsgeF9vdXQgPCBtYXhfc3BhbjsgeF9vdXQgKz0gOCkgeworKyAgICAg IGNvbnN0IHUzMng0IGluMCA9IHZlY194bCgwLCAodWludDMyX3QqKShmcm93ICsgeF9vdXQgKyAw KSk7CisrICAgICAgY29uc3QgdTMyeDQgaW4xID0gdmVjX3hsKDAsICh1aW50MzJfdCopKGZyb3cg KyB4X291dCArIDQpKTsKKysgICAgICBjb25zdCB1MzJ4NCBpbjIgPSB2ZWNfeGwoMCwgKHVpbnQz Ml90KikoaXJvdyArIHhfb3V0ICsgMCkpOworKyAgICAgIGNvbnN0IHUzMng0IGluMyA9IHZlY194 bCgwLCAodWludDMyX3QqKShpcm93ICsgeF9vdXQgKyA0KSk7CisrICAgICAgY29uc3QgdTMyeDQg QTAgPSBNdWx0Rml4Rmxvb3JfVlNYKGluMCwgeXNjYWxlKTsKKysgICAgICBjb25zdCB1MzJ4NCBB MSA9IE11bHRGaXhGbG9vcl9WU1goaW4xLCB5c2NhbGUpOworKyAgICAgIGNvbnN0IHUzMng0IEIw ID0gdmVjX3N1YihpbjIsIEEwKTsKKysgICAgICBjb25zdCB1MzJ4NCBCMSA9IHZlY19zdWIoaW4z LCBBMSk7CisrICAgICAgY29uc3QgdTMyeDQgQzAgPSBNdWx0Rml4X1ZTWChCMCwgZnh5X3NjYWxl KTsKKysgICAgICBjb25zdCB1MzJ4NCBDMSA9IE11bHRGaXhfVlNYKEIxLCBmeHlfc2NhbGUpOwor KyAgICAgIFN0b3JlOF9WU1goQzAsIEMxLCBkc3QgKyB4X291dCk7CisrICAgICAgdmVjX3hzdChB MCwgMCwgKHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgMCkpOworKyAgICAgIHZlY194c3QoQTEs IDAsICh1aW50MzJfdCopKGlyb3cgKyB4X291dCArIDQpKTsKKysgICAgfQorKyAgICBmb3IgKDsg eF9vdXQgPCB4X291dF9tYXg7ICsreF9vdXQpIHsKKysgICAgICBjb25zdCB1aW50MzJfdCBmcmFj ID0gKHVpbnQzMl90KU1VTFRfRklYX0ZMT09SX0MoZnJvd1t4X291dF0sIHlzY2FsZSk7CisrICAg ICAgY29uc3QgaW50IHYgPSAoaW50KU1VTFRfRklYX0MoaXJvd1t4X291dF0gLSBmcmFjLCBmeHlf c2NhbGUpOworKyAgICAgIGRzdFt4X291dF0gPSAodiA+IDI1NSkgPyAyNTV1IDogKHVpbnQ4X3Qp djsKKysgICAgICBpcm93W3hfb3V0XSA9IGZyYWM7ICAvLyBuZXcgZnJhY3Rpb25hbCBzdGFydAor KyAgICB9CisrICB9IGVsc2UgeworKyAgICBjb25zdCB1MzJ4NCB6ZXJvID0gdmVjX3NwbGF0cygo dWludDMyX3QpMCk7CisrICAgIGZvciAoeF9vdXQgPSAwOyB4X291dCA8IG1heF9zcGFuOyB4X291 dCArPSA4KSB7CisrICAgICAgY29uc3QgdTMyeDQgaW4wID0gdmVjX3hsKDAsICh1aW50MzJfdCop KGlyb3cgKyB4X291dCArIDApKTsKKysgICAgICBjb25zdCB1MzJ4NCBpbjEgPSB2ZWNfeGwoMCwg KHVpbnQzMl90KikoaXJvdyArIHhfb3V0ICsgNCkpOworKyAgICAgIGNvbnN0IHUzMng0IEEwID0g TXVsdEZpeF9WU1goaW4wLCBmeHlfc2NhbGUpOworKyAgICAgIGNvbnN0IHUzMng0IEExID0gTXVs dEZpeF9WU1goaW4xLCBmeHlfc2NhbGUpOworKyAgICAgIFN0b3JlOF9WU1goQTAsIEExLCBkc3Qg KyB4X291dCk7CisrICAgICAgdmVjX3hzdCh6ZXJvLCAwLCAodWludDMyX3QqKShpcm93ICsgeF9v dXQgKyAwKSk7CisrICAgICAgdmVjX3hzdCh6ZXJvLCAwLCAodWludDMyX3QqKShpcm93ICsgeF9v dXQgKyA0KSk7CisrICAgIH0KKysgICAgZm9yICg7IHhfb3V0IDwgeF9vdXRfbWF4OyArK3hfb3V0 KSB7CisrICAgICAgY29uc3QgaW50IHYgPSAoaW50KU1VTFRfRklYX0MoaXJvd1t4X291dF0sIGZ4 eV9zY2FsZSk7CisrICAgICAgZHN0W3hfb3V0XSA9ICh2ID4gMjU1KSA/IDI1NXUgOiAodWludDhf dCl2OworKyAgICAgIGlyb3dbeF9vdXRdID0gMDsKKysgICAgfQorKyAgfQorK30KKysKKysjdW5k ZWYgTVVMVF9GSVhfRkxPT1JfQworKyN1bmRlZiBNVUxUX0ZJWF9DCisrI3VuZGVmIFJPVU5ERVIK KysKKysvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK2V4dGVybiB2b2lkIFdlYlBSZXNjYWxl ckRzcEluaXRWU1godm9pZCk7CisrCisrV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFdl YlBSZXNjYWxlckRzcEluaXRWU1godm9pZCkgeworKyAgV2ViUFJlc2NhbGVyRXhwb3J0Um93RXhw YW5kID0gUmVzY2FsZXJFeHBvcnRSb3dFeHBhbmRfVlNYOworKyAgV2ViUFJlc2NhbGVyRXhwb3J0 Um93U2hyaW5rID0gUmVzY2FsZXJFeHBvcnRSb3dTaHJpbmtfVlNYOworK30KKysKKysjZWxzZSAg Ly8gIVdFQlBfVVNFX1ZTWAorKworK1dFQlBfRFNQX0lOSVRfU1RVQihXZWJQUmVzY2FsZXJEc3BJ bml0VlNYKQorKworKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCitkaWZmIC0tZ2l0IGEvbWVkaWEv bGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmcuYyBiL21lZGlhL2xpYndlYnAvc3JjL2RzcC91cHNh bXBsaW5nLmMKK2luZGV4IGM1N2Y2NmMzNTUzZi4uZmFlY2RmMjc3MzkzIDEwMDY0NAorLS0tIGEv bWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmcuYworKysrIGIvbWVkaWEvbGlid2VicC9z cmMvZHNwL3Vwc2FtcGxpbmcuYworQEAgLTIzNSw2ICsyMzUsNyBAQCBleHRlcm4gVlA4Q1BVSW5m byBWUDhHZXRDUFVJbmZvOworIGV4dGVybiB2b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc01J UFNkc3BSMih2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQSW5pdFlVVjQ0NENvbnZlcnRlcnNTU0Uy KHZvaWQpOworIGV4dGVybiB2b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1NTRTQxKHZvaWQp OworK2V4dGVybiB2b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1ZTWCh2b2lkKTsKKyAKKyBX RUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRZVVY0NDRDb252ZXJ0ZXJzKSB7CisgICBXZWJQWVVW NDQ0Q29udmVydGVyc1tNT0RFX1JHQkFdICAgICAgPSBXZWJQWXV2NDQ0VG9SZ2JhX0M7CitAQCAt MjY0LDYgKzI2NSwxMSBAQCBXRUJQX0RTUF9JTklUX0ZVTkMoV2ViUEluaXRZVVY0NDRDb252ZXJ0 ZXJzKSB7CisgICAgIGlmIChWUDhHZXRDUFVJbmZvKGtNSVBTZHNwUjIpKSB7CisgICAgICAgV2Vi UEluaXRZVVY0NDRDb252ZXJ0ZXJzTUlQU2RzcFIyKCk7CisgICAgIH0KKysjZW5kaWYKKysjaWYg ZGVmaW5lZChXRUJQX0hBVkVfVlNYKQorKyAgICBpZiAoVlA4R2V0Q1BVSW5mbyhrVlNYKSkgewor KyAgICAgIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1ZTWCgpOworKyAgICB9CisgI2VuZGlmCisg ICB9CisgfQorQEAgLTI3Niw2ICsyODIsNyBAQCBleHRlcm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxl cnNTU0U0MSh2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNORU9OKHZvaWQp OworIGV4dGVybiB2b2lkIFdlYlBJbml0VXBzYW1wbGVyc01JUFNkc3BSMih2b2lkKTsKKyBleHRl cm4gdm9pZCBXZWJQSW5pdFVwc2FtcGxlcnNNU0Eodm9pZCk7CisrZXh0ZXJuIHZvaWQgV2ViUElu aXRVcHNhbXBsZXJzVlNYKHZvaWQpOworIAorIFdFQlBfRFNQX0lOSVRfRlVOQyhXZWJQSW5pdFVw c2FtcGxlcnMpIHsKKyAjaWZkZWYgRkFOQ1lfVVBTQU1QTElORworQEAgLTMxNCw2ICszMjEsMTEg QEAgV0VCUF9EU1BfSU5JVF9GVU5DKFdlYlBJbml0VXBzYW1wbGVycykgeworICAgICBpZiAoVlA4 R2V0Q1BVSW5mbyhrTVNBKSkgeworICAgICAgIFdlYlBJbml0VXBzYW1wbGVyc01TQSgpOworICAg ICB9CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0VCUF9IQVZFX1ZTWCkKKysgICAgaWYgKFZQOEdl dENQVUluZm8oa1ZTWCkpIHsKKysgICAgICBXZWJQSW5pdFVwc2FtcGxlcnNWU1goKTsKKysgICAg fQorICNlbmRpZgorICAgfQorIAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC91 cHNhbXBsaW5nX3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmdfdnN4LmMK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmE3MTkxOTcyZmM2ZQor LS0tIC9kZXYvbnVsbAorKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3Vwc2FtcGxpbmdfdnN4 LmMKK0BAIC0wLDAgKzEsMTUxIEBACisrLy8gQ29weXJpZ2h0IDIwMTEgR29vZ2xlIEluYy4gQWxs IFJpZ2h0cyBSZXNlcnZlZC4KKysvLworKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKKysvLyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0 aGUgQ09QWUlORyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKKysvLyB0cmVlLiBBbiBh ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k CisrLy8gaW4gdGhlIGZpbGUgUEFURU5UUy4gQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv cnMgbWF5CisrLy8gYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0 aGUgc291cmNlIHRyZWUuCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLworKy8vIFZTWCAo UG93ZXJQQykgdmVyc2lvbiBvZiBZVVYgdG8gUkdCIHVwc2FtcGxpbmcgZnVuY3Rpb25zLgorKwor KyNpbmNsdWRlICJzcmMvZHNwL2RzcC5oIgorKworKyNpZiBkZWZpbmVkKFdFQlBfVVNFX1ZTWCkK KysKKysjaW5jbHVkZSA8YWx0aXZlYy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrCisrI2luY2x1ZGUgInNyYy9kc3AvY3B1LmgiCisrI2luY2x1ZGUgInNy Yy9kc3AveXV2LmgiCisrI2luY2x1ZGUgInNyYy93ZWJwL2RlY29kZS5oIgorKyNpbmNsdWRlICJz cmMvd2VicC90eXBlcy5oIgorKworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciB1OHgx NjsKKyt0eXBlZGVmIF9fdmVjdG9yIHVuc2lnbmVkIHNob3J0IHUxNng4OworKworKy8vIFVwc2Ft cGxlIDE2IGNocm9tYSBwYWlycyBmcm9tIHJvd3MgcjEvcjIgKDE3IHJlYWRhYmxlIGJ5dGVzIGVh Y2gpIGludG8gMzIKKysvLyAidG9wIiBieXRlcyBhdCBvdXRbMC4uMzFdIGFuZCAzMiAiYm90dG9t IiBieXRlcyBhdCBvdXRbNjQuLjk1XSwgbWF0Y2hpbmcgdGhlCisrLy8gZmFuY3ktdXBzYW1wbGVy IGRpYWdvbmFsIHdlaWdodHMgKGEgKyAzYiArIDNjICsgZCkgLyA4IGV0Yy4KKysjZGVmaW5lIEdF VF9NKGlqLCBpbikgXAorKyAgdmVjX3N1Yih2ZWNfYXZnKGssIChpbikpLCBcCisrICAgICAgICAg IHZlY19hbmQodmVjX29yKHZlY19hbmQoKGlqKSwgc3QpLCB2ZWNfeG9yKGssIChpbikpKSwgb25l KSkKKysKKytzdGF0aWMgdm9pZCBVcHNhbXBsZTMyUGl4ZWxzKGNvbnN0IHVpbnQ4X3QqIFdFQlBf UkVTVFJJQ1QgcjEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHIyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCogV0VCUF9SRVNUUklDVCBvdXQpIHsKKysgIGNvbnN0IHU4eDE2IG9uZSA9IHZlY19zcGxhdHMo KHVuc2lnbmVkIGNoYXIpMSk7CisrICBjb25zdCB1OHgxNiBhID0gdmVjX3hsKDAsIChjb25zdCB1 bnNpZ25lZCBjaGFyKilyMSk7CisrICBjb25zdCB1OHgxNiBiID0gdmVjX3hsKDEsIChjb25zdCB1 bnNpZ25lZCBjaGFyKilyMSk7CisrICBjb25zdCB1OHgxNiBjID0gdmVjX3hsKDAsIChjb25zdCB1 bnNpZ25lZCBjaGFyKilyMik7CisrICBjb25zdCB1OHgxNiBkID0gdmVjX3hsKDEsIChjb25zdCB1 bnNpZ25lZCBjaGFyKilyMik7CisrICBjb25zdCB1OHgxNiBzID0gdmVjX2F2ZyhhLCBkKTsKKysg IGNvbnN0IHU4eDE2IHQgPSB2ZWNfYXZnKGIsIGMpOworKyAgY29uc3QgdTh4MTYgc3QgPSB2ZWNf eG9yKHMsIHQpOworKyAgY29uc3QgdTh4MTYgdDMgPQorKyAgICAgIHZlY19hbmQodmVjX29yKHZl Y19vcih2ZWNfeG9yKGEsIGQpLCB2ZWNfeG9yKGIsIGMpKSwgc3QpLCBvbmUpOworKyAgY29uc3Qg dTh4MTYgayA9IHZlY19zdWIodmVjX2F2ZyhzLCB0KSwgdDMpOworKyAgY29uc3QgdTh4MTYgZGlh ZzEgPSBHRVRfTSh2ZWNfeG9yKGIsIGMpLCB0KTsKKysgIGNvbnN0IHU4eDE2IGRpYWcyID0gR0VU X00odmVjX3hvcihhLCBkKSwgcyk7CisrICBjb25zdCB1OHgxNiB0YSA9IHZlY19hdmcoYSwgZGlh ZzEpLCB0YiA9IHZlY19hdmcoYiwgZGlhZzIpOworKyAgY29uc3QgdTh4MTYgdGMgPSB2ZWNfYXZn KGMsIGRpYWcyKSwgdGQgPSB2ZWNfYXZnKGQsIGRpYWcxKTsKKysgIHZlY194c3QodmVjX21lcmdl aCh0YSwgdGIpLCAwLCBvdXQpOworKyAgdmVjX3hzdCh2ZWNfbWVyZ2VsKHRhLCB0YiksIDAsIG91 dCArIDE2KTsKKysgIHZlY194c3QodmVjX21lcmdlaCh0YywgdGQpLCAwLCBvdXQgKyA2NCk7Cisr ICB2ZWNfeHN0KHZlY19tZXJnZWwodGMsIHRkKSwgMCwgb3V0ICsgODApOworK30KKysKKysjZGVm aW5lIFVQU0FNUExFX0ZVTkMoRlVOQ19OQU1FLCBGVU5DLCBGVU5DMzIpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorK3N0YXRpYyB2b2lkIEZVTkNfTkFNRShjb25zdCB1aW50OF90 KiBXRUJQX1JFU1RSSUNUIHRvcF95LCAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYm90dG9tX3ksICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VC UF9SRVNUUklDVCB0b3BfdSwgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHRvcF92LCAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVT VFJJQ1QgY3VyX3UsICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCBjdXJfdiwgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHRvcF9k c3QsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QqIFdFQlBfUkVTVFJJQ1QgYm90dG9tX2RzdCwgaW50IGxlbikgeyAgICAgICAgICAgIFwK KysgIGludCB1dl9wb3MsIHBvczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICB1aW50OF90IHV2X2J1ZlsxNCAqIDMyICsgMTVd ID0gezB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgdWlu dDhfdCogY29uc3Qgcl91ID0gKHVpbnQ4X3QqKSgoKHVpbnRwdHJfdCkodXZfYnVmICsgMTUpKSAm IH4odWludHB0cl90KTE1KTtcCisrICB1aW50OF90KiBjb25zdCByX3YgPSByX3UgKyAzMjsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgYXNzZXJ0KHRv cF95ICE9IE5VTEwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIGNvbnN0IGludCB1X2Rp YWcgPSAoKHRvcF91WzBdICsgY3VyX3VbMF0pID4+IDEpICsgMTsgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICBjb25zdCBpbnQgdl9kaWFnID0gKCh0b3BfdlswXSArIGN1cl92WzBdKSA+PiAx KSArIDE7ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgRlVOQyh0b3BfeVswXSwgKHRvcF91 WzBdICsgdV9kaWFnKSA+PiAxLCAodG9wX3ZbMF0gKyB2X2RpYWcpID4+IDEsICAgICAgICBcCisr ICAgICAgICAgdG9wX2RzdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIGlmIChib3R0b21feSAhPSBOVUxMKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIEZV TkMoYm90dG9tX3lbMF0sIChjdXJfdVswXSArIHVfZGlhZykgPj4gMSwgKGN1cl92WzBdICsgdl9k aWFnKSA+PiAxLCAgIFwKKysgICAgICAgICAgIGJvdHRvbV9kc3QpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZm9yIChwb3MgPSAxLCB1dl9wb3Mg PSAwOyBwb3MgKyAzMiArIDEgPD0gbGVuOyBwb3MgKz0gMzIsIHV2X3BvcyArPSAxNikgeyAgIFwK KysgICAgVXBzYW1wbGUzMlBpeGVscyh0b3BfdSArIHV2X3BvcywgY3VyX3UgKyB1dl9wb3MsIHJf dSk7ICAgICAgICAgICAgICAgICAgICBcCisrICAgIFVwc2FtcGxlMzJQaXhlbHModG9wX3YgKyB1 dl9wb3MsIGN1cl92ICsgdXZfcG9zLCByX3YpOyAgICAgICAgICAgICAgICAgICAgXAorKyAgICBG VU5DMzIodG9wX3kgKyBwb3MsIHJfdSwgcl92LCB0b3BfZHN0ICsgcG9zICogNCk7ICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgaWYgKGJvdHRvbV95ICE9IE5VTEwpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgRlVOQzMy KGJvdHRvbV95ICsgcG9zLCByX3UgKyA2NCwgcl92ICsgNjQsIGJvdHRvbV9kc3QgKyBwb3MgKiA0 KTsgICAgICAgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBpZiAobGVuID4gMSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBjb25zdCBpbnQgbGVmdF9vdmVyID0g KChsZW4gKyAxKSA+PiAxKSAtIChwb3MgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgdWludDhfdCogY29uc3QgdG1wX3RvcF9kc3QgPSByX3UgKyA0ICogMzI7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHVpbnQ4X3QqIGNvbnN0IHRtcF9ib3R0b21fZHN0 ID0gdG1wX3RvcF9kc3QgKyA0ICogMzI7ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB1aW50 OF90KiBjb25zdCB0bXBfdG9wID0gdG1wX2JvdHRvbV9kc3QgKyA0ICogMzI7ICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgdWludDhfdCogY29uc3QgdG1wX2JvdHRvbSA9IChib3R0b21f eSA9PSBOVUxMKSA/IE5VTEwgOiB0bXBfdG9wICsgMzI7ICAgICBcCisrICAgIHVpbnQ4X3QgcjFb MTddLCByMlsxN107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgICBhc3NlcnQobGVmdF9vdmVyID4gMCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgbWVtY3B5KHIxLCB0b3BfdSAr IHV2X3BvcywgbGVmdF9vdmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICAgIG1lbWNweShyMiwgY3VyX3UgKyB1dl9wb3MsIGxlZnRfb3Zlcik7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBtZW1zZXQocjEgKyBsZWZ0X292ZXIsIHIx W2xlZnRfb3ZlciAtIDFdLCAxNyAtIGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgIFwKKysgICAg bWVtc2V0KHIyICsgbGVmdF9vdmVyLCByMltsZWZ0X292ZXIgLSAxXSwgMTcgLSBsZWZ0X292ZXIp OyAgICAgICAgICAgICAgICBcCisrICAgIFVwc2FtcGxlMzJQaXhlbHMocjEsIHIyLCByX3UpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBtZW1jcHko cjEsIHRvcF92ICsgdXZfcG9zLCBsZWZ0X292ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKysgICAgbWVtY3B5KHIyLCBjdXJfdiArIHV2X3BvcywgbGVmdF9vdmVyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIG1lbXNldChyMSArIGxl ZnRfb3ZlciwgcjFbbGVmdF9vdmVyIC0gMV0sIDE3IC0gbGVmdF9vdmVyKTsgICAgICAgICAgICAg ICAgXAorKyAgICBtZW1zZXQocjIgKyBsZWZ0X292ZXIsIHIyW2xlZnRfb3ZlciAtIDFdLCAxNyAt IGxlZnRfb3Zlcik7ICAgICAgICAgICAgICAgIFwKKysgICAgVXBzYW1wbGUzMlBpeGVscyhyMSwg cjIsIHJfdik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIG1lbWNweSh0bXBfdG9wLCB0b3BfeSArIHBvcywgbGVuIC0gcG9zKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoYm90dG9tX3kgIT0gTlVMTCkgbWVtY3B5 KHRtcF9ib3R0b20sIGJvdHRvbV95ICsgcG9zLCBsZW4gLSBwb3MpOyAgICAgIFwKKysgICAgRlVO QzMyKHRtcF90b3AsIHJfdSwgcl92LCB0bXBfdG9wX2RzdCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgIGlmIChib3R0b21feSAhPSBOVUxMKSBGVU5DMzIodG1wX2Jv dHRvbSwgcl91ICsgNjQsIHJfdiArIDY0LCAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wX2JvdHRvbV9kc3QpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIG1lbWNweSh0b3BfZHN0ICsgcG9zICogNCwgdG1wX3RvcF9kc3QsIChsZW4g LSBwb3MpICogNCk7ICAgICAgICAgICAgICAgICAgXAorKyAgICBpZiAoYm90dG9tX3kgIT0gTlVM TCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgICAgICBtZW1jcHkoYm90dG9tX2RzdCArIHBvcyAqIDQsIHRtcF9ib3R0b21fZHN0LCAobGVu IC0gcG9zKSAqIDQpOyAgICAgICAgICBcCisrICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyt9CisrCisrVVBTQU1QTEVfRlVOQyhVcHNhbXBsZVJnYmFMaW5l UGFpcl9WU1gsIFZQOFl1dlRvUmdiYSwgVlA4WXV2VG9SZ2JhMzJfVlNYKQorK1VQU0FNUExFX0ZV TkMoVXBzYW1wbGVCZ3JhTGluZVBhaXJfVlNYLCBWUDhZdXZUb0JncmEsIFZQOFl1dlRvQmdyYTMy X1ZTWCkKKytVUFNBTVBMRV9GVU5DKFVwc2FtcGxlQXJnYkxpbmVQYWlyX1ZTWCwgVlA4WXV2VG9B cmdiLCBWUDhZdXZUb0FyZ2IzMl9WU1gpCisrCisrZXh0ZXJuIFdlYlBVcHNhbXBsZUxpbmVQYWly RnVuYyBXZWJQVXBzYW1wbGVyc1svKiBNT0RFX0xBU1QgKi9dOworKworK2V4dGVybiB2b2lkIFdl YlBJbml0VXBzYW1wbGVyc1ZTWCh2b2lkKTsKKysKKytXRUJQX1RTQU5fSUdOT1JFX0ZVTkNUSU9O IHZvaWQgV2ViUEluaXRVcHNhbXBsZXJzVlNYKHZvaWQpIHsKKysgIFdlYlBVcHNhbXBsZXJzW01P REVfUkdCQV0gPSBVcHNhbXBsZVJnYmFMaW5lUGFpcl9WU1g7CisrICBXZWJQVXBzYW1wbGVyc1tN T0RFX0JHUkFdID0gVXBzYW1wbGVCZ3JhTGluZVBhaXJfVlNYOworKyAgV2ViUFVwc2FtcGxlcnNb TU9ERV9yZ2JBXSA9IFVwc2FtcGxlUmdiYUxpbmVQYWlyX1ZTWDsKKysgIFdlYlBVcHNhbXBsZXJz W01PREVfYmdyQV0gPSBVcHNhbXBsZUJncmFMaW5lUGFpcl9WU1g7CisrI2lmICFkZWZpbmVkKFdF QlBfUkVEVUNFX0NTUCkKKysgIFdlYlBVcHNhbXBsZXJzW01PREVfQVJHQl0gPSBVcHNhbXBsZUFy Z2JMaW5lUGFpcl9WU1g7CisrICBXZWJQVXBzYW1wbGVyc1tNT0RFX0FyZ2JdID0gVXBzYW1wbGVB cmdiTGluZVBhaXJfVlNYOworKyNlbmRpZgorK30KKysKKytleHRlcm4gdm9pZCBXZWJQSW5pdFlV VjQ0NENvbnZlcnRlcnNWU1godm9pZCk7CisrCisrLy8gWVVWNDQ0IHBvaW50IGNvbnZlcnRlcnMg c3RheSBvbiB0aGUgQyBwYXRoIGZvciBub3cuCisrV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2 b2lkIFdlYlBJbml0WVVWNDQ0Q29udmVydGVyc1ZTWCh2b2lkKSB7fQorKworKyNlbHNlICAvLyAh V0VCUF9VU0VfVlNYCisrCisrV0VCUF9EU1BfSU5JVF9TVFVCKFdlYlBJbml0WVVWNDQ0Q29udmVy dGVyc1ZTWCkKKysKKytXRUJQX0RTUF9JTklUX1NUVUIoV2ViUEluaXRVcHNhbXBsZXJzVlNYKQor KworKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvZHNwL3l1di5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5jCitpbmRleCA2MmYxZWNj MTU2N2QuLjlhOTVjNWRlMWUyMyAxMDA2NDQKKy0tLSBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC95 dXYuYworKysrIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1di5jCitAQCAtODEsNiArODEsNyBA QCBleHRlcm4gdm9pZCBXZWJQSW5pdFNhbXBsZXJzU1NFMih2b2lkKTsKKyBleHRlcm4gdm9pZCBX ZWJQSW5pdFNhbXBsZXJzU1NFNDEodm9pZCk7CisgZXh0ZXJuIHZvaWQgV2ViUEluaXRTYW1wbGVy c01JUFMzMih2b2lkKTsKKyBleHRlcm4gdm9pZCBXZWJQSW5pdFNhbXBsZXJzTUlQU2RzcFIyKHZv aWQpOworK2V4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNWU1godm9pZCk7CisgCisgV0VCUF9E U1BfSU5JVF9GVU5DKFdlYlBJbml0U2FtcGxlcnMpIHsKKyAgIFdlYlBTYW1wbGVyc1tNT0RFX1JH Ql0gICAgICAgPSBZdXZUb1JnYlJvdzsKK0BAIC0xMTcsNiArMTE4LDExIEBAIFdFQlBfRFNQX0lO SVRfRlVOQyhXZWJQSW5pdFNhbXBsZXJzKSB7CisgICAgICAgV2ViUEluaXRTYW1wbGVyc01JUFNk c3BSMigpOworICAgICB9CisgI2VuZGlmICAvLyBXRUJQX1VTRV9NSVBTX0RTUF9SMgorKyNpZiBk ZWZpbmVkKFdFQlBfSEFWRV9WU1gpCisrICAgIGlmIChWUDhHZXRDUFVJbmZvKGtWU1gpKSB7Cisr ICAgICAgV2ViUEluaXRTYW1wbGVyc1ZTWCgpOworKyAgICB9CisrI2VuZGlmCisgICB9CisgfQor IAorZGlmZiAtLWdpdCBhL21lZGlhL2xpYndlYnAvc3JjL2RzcC95dXYuaCBiL21lZGlhL2xpYndl YnAvc3JjL2RzcC95dXYuaAoraW5kZXggNmYyMThjZjdlMDdmLi45Nzk4OTFkMzIzMmQgMTAwNjQ0 CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2LmgKKysrKyBiL21lZGlhL2xpYndlYnAv c3JjL2RzcC95dXYuaAorQEAgLTE4Miw2ICsxODIsMjcgQEAgdm9pZCBWUDhZdXZUb1JnYjU2NTMy X1NTRTIoY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorIAorICNlbmRpZiAgICAvLyBX RUJQX1VTRV9TU0UyCisgCisrLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFZTWCBleHRyYSBm dW5jdGlvbnMgKG1vc3RseSBmb3IgdXBzYW1wbGluZ192c3guYykKKysKKysjaWYgZGVmaW5lZChX RUJQX1VTRV9WU1gpCisrCisrLy8gUHJvY2VzcyAzMiBwaXhlbHMgYW5kIHN0b3JlIHRoZSAzMmIt cGVyLXBpeGVsIHJlc3VsdCBpbiAqZHN0LgorK3ZvaWQgVlA4WXV2VG9SZ2JhMzJfVlNYKGNvbnN0 IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KTsKKyt2b2lkIFZQOFl1dlRvQmdyYTMyX1ZTWChjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdiwKKysgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCk7Cisrdm9pZCBWUDhZdXZUb0FyZ2IzMl9WU1goY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAgICAgICAgICAg dWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpOworKworKyNlbmRpZiAgICAvLyBXRUJQX1VTRV9W U1gKKysKKyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLy8gU1NFNDEgZXh0cmEgZnVuY3Rpb25z IChtb3N0bHkgZm9yIHVwc2FtcGxpbmdfc3NlNDEuYykKKyAKK2RpZmYgLS1naXQgYS9tZWRpYS9s aWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jIGIvbWVkaWEvbGlid2VicC9zcmMvZHNwL3l1dl92c3gu YworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMWZkYzVjODBiYTE2 CistLS0gL2Rldi9udWxsCisrKysgYi9tZWRpYS9saWJ3ZWJwL3NyYy9kc3AveXV2X3ZzeC5jCitA QCAtMCwwICsxLDIwNiBAQAorKy8vIENvcHlyaWdodCAyMDE0IEdvb2dsZSBJbmMuIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisrLy8KKysvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCisrLy8gdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIENP UFlJTkcgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCisrLy8gdHJlZS4gQW4gYWRkaXRp b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAorKy8v IGluIHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h eQorKy8vIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv dXJjZSB0cmVlLgorKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8KKysvLyBWU1ggKFBvd2Vy UEMpIHZlcnNpb24gb2YgWVVWLT5SR0IgY29udmVyc2lvbiBmdW5jdGlvbnMuCisrCisrI2luY2x1 ZGUgInNyYy9kc3AvZHNwLmgiCisrCisrI2lmIGRlZmluZWQoV0VCUF9VU0VfVlNYKQorKworKyNp bmNsdWRlIDxhbHRpdmVjLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJz cmMvZHNwL3l1di5oIgorKworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgY2hhciAgdTh4MTY7 CisrdHlwZWRlZiBfX3ZlY3RvciB1bnNpZ25lZCBzaG9ydCB1MTZ4ODsKKyt0eXBlZGVmIF9fdmVj dG9yIHNpZ25lZCAgIHNob3J0IGkxNng4OworK3R5cGVkZWYgX192ZWN0b3IgdW5zaWduZWQgaW50 ICAgdTMyeDQ7CisrCisrLy8gUE9XRVI4IGhhcyBubyAibXVsdGlwbHktaGlnaCB1bnNpZ25lZCBo YWxmd29yZCIsIHNvIGVtdWxhdGUgX21tX211bGhpX2VwdTE2CisrLy8gdmlhIGV2ZW4vb2RkIDE2 eDE2LT4zMiBwcm9kdWN0cywgPj4xNiwgdGhlbiBpbnRlcmxlYXZlIGJhY2suCisrc3RhdGljIFdF QlBfSU5MSU5FIHUxNng4IE11bEhpMTYodTE2eDggYSwgdTE2eDggYikgeworKyAgY29uc3QgdTMy eDQgc2ggPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBpbnQpMTYpOworKyAgY29uc3QgdTMyeDQgZSA9 IHZlY19zcih2ZWNfbXVsZShhLCBiKSwgc2gpOworKyAgY29uc3QgdTMyeDQgbyA9IHZlY19zcih2 ZWNfbXVsbyhhLCBiKSwgc2gpOworKyAgcmV0dXJuIHZlY19wYWNrKHZlY19tZXJnZWgoZSwgbyks IHZlY19tZXJnZWwoZSwgbykpOworK30KKysKKysvLyAxNGIgZml4ZWQtcG9pbnQgSVRVLVIgQlQu NjAxIFlVVi0+UkdCLCBtYXRjaGluZyB0aGUgU1NFMi9zY2FsYXIgcGF0aC4KKysvLyBJbnB1dHMg YXJlIHNhbXBsZXMgcHJlLXNoaWZ0ZWQgaW50byB0aGUgaGlnaCBieXRlICg8PCA4KS4KKytzdGF0 aWMgV0VCUF9JTkxJTkUgdm9pZCBDb252ZXJ0WVVWNDQ0VG9SR0IodTE2eDggWTAsIHUxNng4IFUw LCB1MTZ4OCBWMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aTE2eDgqIGNvbnN0IFIsIGkxNng4KiBjb25zdCBHLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1MTZ4OCogY29uc3QgQikgeworKyAgY29uc3QgdTE2eDggazE5 MDc3ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMTkwNzcpOworKyAgY29uc3QgdTE2eDgg azI2MTQ5ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMjYxNDkpOworKyAgY29uc3QgdTE2 eDggazE0MjM0ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMTQyMzQpOworKyAgY29uc3Qg dTE2eDggazMzMDUwID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMzMwNTApOworKyAgY29u c3QgdTE2eDggazE3Njg1ID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpMTc2ODUpOworKyAg Y29uc3QgdTE2eDggazY0MTkgID0gdmVjX3NwbGF0cygodW5zaWduZWQgc2hvcnQpNjQxOSk7Cisr ICBjb25zdCB1MTZ4OCBrMTMzMjAgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCkxMzMyMCk7 CisrICBjb25zdCB1MTZ4OCBrODcwOCAgPSB2ZWNfc3BsYXRzKCh1bnNpZ25lZCBzaG9ydCk4NzA4 KTsKKysgIGNvbnN0IHUxNng4IHNpeCAgICA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIHNob3J0KTYp OworKworKyAgY29uc3QgdTE2eDggWTEgPSBNdWxIaTE2KFkwLCBrMTkwNzcpOworKyAgY29uc3Qg dTE2eDggUjIgPSB2ZWNfYWRkKHZlY19zdWIoWTEsIGsxNDIzNCksIE11bEhpMTYoVjAsIGsyNjE0 OSkpOworKyAgY29uc3QgdTE2eDggRzQgPSB2ZWNfc3ViKHZlY19hZGQoWTEsIGs4NzA4KSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfYWRkKE11bEhpMTYoVTAsIGs2NDE5KSwgTXVs SGkxNihWMCwgazEzMzIwKSkpOworKyAgLy8gMzMwNTAgbmVlZHMgdW5zaWduZWQgc2F0dXJhdGlu ZyBhcml0aG1ldGljOyBCIGNhbiBleGNlZWQgMzI3NjcuCisrICBjb25zdCB1MTZ4OCBCMiA9IHZl Y19zdWJzKHZlY19hZGRzKE11bEhpMTYoVTAsIGszMzA1MCksIFkxKSwgazE3Njg1KTsKKysKKysg ICpSID0gdmVjX3NyYSgoaTE2eDgpUjIsIHNpeCk7CisrICAqRyA9IHZlY19zcmEoKGkxNng4KUc0 LCBzaXgpOworKyAgKkIgPSB2ZWNfc3IoQjIsIHNpeCk7CisrfQorKworKy8vIExvYWQgOCBieXRl cyBpbnRvIHRoZSBoaWdoIGJ5dGUgb2YgOCB1MTYgbGFuZXMgKGkuZS4gc2FtcGxlIDw8IDgpLgor Ky8vIFVzZSBhbiA4LWJ5dGUgY29weSAobm90IGEgMTYtYnl0ZSB2ZWN0b3IgbG9hZCkgdG8gYXZv aWQgcmVhZGluZyBwYXN0IHRoZQorKy8vIGVuZCBvZiB0aGUgc291cmNlIHJvdywgbWF0Y2hpbmcg dGhlIFNTRTIgX21tX2xvYWRsX2VwaTY0IGJlaGF2aW9yLgorK3N0YXRpYyBXRUJQX0lOTElORSB1 MTZ4OCBMb2FkSGkxNihjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHNyYykgeworKyAgY29u c3QgdTh4MTYgemVybyA9IHZlY19zcGxhdHMoKHVuc2lnbmVkIGNoYXIpMCk7CisrICB1bnNpZ25l ZCBjaGFyIHRtcFsxNl0gPSB7MH07CisrICBtZW1jcHkodG1wLCBzcmMsIDgpOworKyAgcmV0dXJu ICh1MTZ4OCl2ZWNfbWVyZ2VoKHplcm8sIHZlY194bCgwLCB0bXApKTsKKyt9CisrCisrLy8gTG9h ZCA0IFUvViBieXRlcywgc2hpZnQgaW50byB0aGUgaGlnaCBieXRlLCBhbmQgcmVwbGljYXRlIGVh Y2ggc2FtcGxlLgorK3N0YXRpYyBXRUJQX0lOTElORSB1MTZ4OCBMb2FkVVZIaTgoY29uc3QgdWlu dDhfdCogV0VCUF9SRVNUUklDVCBzcmMpIHsKKysgIGNvbnN0IHU4eDE2IHplcm8gPSB2ZWNfc3Bs YXRzKCh1bnNpZ25lZCBjaGFyKTApOworKyAgdW5zaWduZWQgY2hhciB0bXBbMTZdID0gezB9Owor KyAgbWVtY3B5KHRtcCwgc3JjLCA0KTsKKysgIGNvbnN0IHUxNng4IHQgPSAodTE2eDgpdmVjX21l cmdlaCh6ZXJvLCB2ZWNfeGwoMCwgdG1wKSk7CisrICByZXR1cm4gdmVjX21lcmdlaCh0LCB0KTsK Kyt9CisrCisrc3RhdGljIFdFQlBfSU5MSU5FIHZvaWQgWVVWNDIwVG9SR0IoY29uc3QgdWludDhf dCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE2eDgqIGNvbnN0IFIsIGkxNng4KiBjb25zdCBH LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNng4KiBjb25zdCBCKSB7 CisrICBDb252ZXJ0WVVWNDQ0VG9SR0IoTG9hZEhpMTYoeSksIExvYWRVVkhpOCh1KSwgTG9hZFVW SGk4KHYpLCBSLCBHLCBCKTsKKyt9CisrCisrLy8gUGFjayBmb3VyIDgtbGFuZSBjaGFubmVscyBp bnRvIDMyIGludGVybGVhdmVkIGJ5dGVzIChjMCBjMSBjMiBjMyBwZXIgcGl4ZWwpLgorK3N0YXRp YyBXRUJQX0lOTElORSB2b2lkIFBhY2tBbmRTdG9yZTQoaTE2eDggYzAsIGkxNng4IGMxLCBpMTZ4 OCBjMiwgaTE2eDggYzMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90KiBXRUJQX1JFU1RSSUNUIGRzdCkgeworKyAgY29uc3QgdTh4MTYgYzAyID0gdmVjX3Bh Y2tzdShjMCwgYzIpOworKyAgY29uc3QgdTh4MTYgYzEzID0gdmVjX3BhY2tzdShjMSwgYzMpOwor KyAgY29uc3QgdTh4MTYgbG84ID0gdmVjX21lcmdlaChjMDIsIGMxMyk7CisrICBjb25zdCB1OHgx NiBoaTggPSB2ZWNfbWVyZ2VsKGMwMiwgYzEzKTsKKysgIHZlY194c3QoKHU4eDE2KXZlY19tZXJn ZWgoKHUxNng4KWxvOCwgKHUxNng4KWhpOCksIDAsIGRzdCk7CisrICB2ZWNfeHN0KCh1OHgxNil2 ZWNfbWVyZ2VsKCh1MTZ4OClsbzgsICh1MTZ4OCloaTgpLCAwLCBkc3QgKyAxNik7CisrfQorKwor K3N0YXRpYyBjb25zdCBpMTZ4OCBrQWxwaGEgPSB7MjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1 NSwgMjU1LCAyNTV9OworKworK3N0YXRpYyB2b2lkIFl1dlRvUmdiYVJvd19WU1goY29uc3QgdWlu dDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QsIGludCBsZW4pIHsKKysgIGludCBu OworKyAgZm9yIChuID0gMDsgbiArIDggPD0gbGVuOyBuICs9IDgsIGRzdCArPSAzMikgeworKyAg ICBpMTZ4OCBSLCBHOyB1MTZ4OCBCOworKyAgICBZVVY0MjBUb1JHQih5LCB1LCB2LCAmUiwgJkcs ICZCKTsKKysgICAgUGFja0FuZFN0b3JlNChSLCBHLCAoaTE2eDgpQiwga0FscGhhLCBkc3QpOwor KyAgICB5ICs9IDg7IHUgKz0gNDsgdiArPSA0OworKyAgfQorKyAgZm9yICg7IG4gPCBsZW47ICsr bikgeworKyAgICBWUDhZdXZUb1JnYmEoeVswXSwgdVswXSwgdlswXSwgZHN0KTsKKysgICAgZHN0 ICs9IDQ7IHkgKz0gMTsgdSArPSAobiAmIDEpOyB2ICs9IChuICYgMSk7CisrICB9CisrfQorKwor K3N0YXRpYyB2b2lkIFl1dlRvQmdyYVJvd19WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklD VCB5LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9S RVNUUklDVCB1LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCog V0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCog V0VCUF9SRVNUUklDVCBkc3QsIGludCBsZW4pIHsKKysgIGludCBuOworKyAgZm9yIChuID0gMDsg biArIDggPD0gbGVuOyBuICs9IDgsIGRzdCArPSAzMikgeworKyAgICBpMTZ4OCBSLCBHOyB1MTZ4 OCBCOworKyAgICBZVVY0MjBUb1JHQih5LCB1LCB2LCAmUiwgJkcsICZCKTsKKysgICAgUGFja0Fu ZFN0b3JlNCgoaTE2eDgpQiwgRywgUiwga0FscGhhLCBkc3QpOworKyAgICB5ICs9IDg7IHUgKz0g NDsgdiArPSA0OworKyAgfQorKyAgZm9yICg7IG4gPCBsZW47ICsrbikgeworKyAgICBWUDhZdXZU b0JncmEoeVswXSwgdVswXSwgdlswXSwgZHN0KTsKKysgICAgZHN0ICs9IDQ7IHkgKz0gMTsgdSAr PSAobiAmIDEpOyB2ICs9IChuICYgMSk7CisrICB9CisrfQorKworK3N0YXRpYyB2b2lkIFl1dlRv QXJnYlJvd19WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB1LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3Qs IGludCBsZW4pIHsKKysgIGludCBuOworKyAgZm9yIChuID0gMDsgbiArIDggPD0gbGVuOyBuICs9 IDgsIGRzdCArPSAzMikgeworKyAgICBpMTZ4OCBSLCBHOyB1MTZ4OCBCOworKyAgICBZVVY0MjBU b1JHQih5LCB1LCB2LCAmUiwgJkcsICZCKTsKKysgICAgUGFja0FuZFN0b3JlNChrQWxwaGEsIFIs IEcsIChpMTZ4OClCLCBkc3QpOworKyAgICB5ICs9IDg7IHUgKz0gNDsgdiArPSA0OworKyAgfQor KyAgZm9yICg7IG4gPCBsZW47ICsrbikgeworKyAgICBWUDhZdXZUb0FyZ2IoeVswXSwgdVswXSwg dlswXSwgZHN0KTsKKysgICAgZHN0ICs9IDQ7IHkgKz0gMTsgdSArPSAobiAmIDEpOyB2ICs9IChu ICYgMSk7CisrICB9CisrfQorKworKy8vIENvbnZlcnQgMzIgWVVWNDQ0IHBpeGVscyBhbmQgc3Rv cmUgdGhlIDMyYi1wZXItcGl4ZWwgcmVzdWx0LiBVc2VkIGJ5IHRoZQorKy8vIGZhbmN5IHVwc2Ft cGxlciBpbiB1cHNhbXBsaW5nX3ZzeC5jLgorK3ZvaWQgVlA4WXV2VG9SZ2JhMzJfVlNYKGNvbnN0 IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgeSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHUsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB2LAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QqIFdFQlBfUkVTVFJJQ1QgZHN0KSB7CisrICBpbnQgbjsKKysgIGZvciAobiA9IDA7IG4g PCAzMjsgbiArPSA4LCBkc3QgKz0gMzIpIHsKKysgICAgaTE2eDggUiwgRzsgdTE2eDggQjsKKysg ICAgQ29udmVydFlVVjQ0NFRvUkdCKExvYWRIaTE2KHkgKyBuKSwgTG9hZEhpMTYodSArIG4pLCBM b2FkSGkxNih2ICsgbiksCisrICAgICAgICAgICAgICAgICAgICAgICAmUiwgJkcsICZCKTsKKysg ICAgUGFja0FuZFN0b3JlNChSLCBHLCAoaTE2eDgpQiwga0FscGhhLCBkc3QpOworKyAgfQorK30K KysKKyt2b2lkIFZQOFl1dlRvQmdyYTMyX1ZTWChjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNU IHksCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklD VCB1LAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJ Q1QgdiwKKysgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90KiBXRUJQX1JFU1RSSUNUIGRz dCkgeworKyAgaW50IG47CisrICBmb3IgKG4gPSAwOyBuIDwgMzI7IG4gKz0gOCwgZHN0ICs9IDMy KSB7CisrICAgIGkxNng4IFIsIEc7IHUxNng4IEI7CisrICAgIENvbnZlcnRZVVY0NDRUb1JHQihM b2FkSGkxNih5ICsgbiksIExvYWRIaTE2KHUgKyBuKSwgTG9hZEhpMTYodiArIG4pLAorKyAgICAg ICAgICAgICAgICAgICAgICAgJlIsICZHLCAmQik7CisrICAgIFBhY2tBbmRTdG9yZTQoKGkxNng4 KUIsIEcsIFIsIGtBbHBoYSwgZHN0KTsKKysgIH0KKyt9CisrCisrdm9pZCBWUDhZdXZUb0FyZ2Iz Ml9WU1goY29uc3QgdWludDhfdCogV0VCUF9SRVNUUklDVCB5LAorKyAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVpbnQ4X3QqIFdFQlBfUkVTVFJJQ1QgdSwKKysgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90KiBXRUJQX1JFU1RSSUNUIHYsCisrICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCogV0VCUF9SRVNUUklDVCBkc3QpIHsKKysgIGludCBuOworKyAgZm9y IChuID0gMDsgbiA8IDMyOyBuICs9IDgsIGRzdCArPSAzMikgeworKyAgICBpMTZ4OCBSLCBHOyB1 MTZ4OCBCOworKyAgICBDb252ZXJ0WVVWNDQ0VG9SR0IoTG9hZEhpMTYoeSArIG4pLCBMb2FkSGkx Nih1ICsgbiksIExvYWRIaTE2KHYgKyBuKSwKKysgICAgICAgICAgICAgICAgICAgICAgICZSLCAm RywgJkIpOworKyAgICBQYWNrQW5kU3RvcmU0KGtBbHBoYSwgUiwgRywgKGkxNng4KUIsIGRzdCk7 CisrICB9CisrfQorKworK2V4dGVybiB2b2lkIFdlYlBJbml0U2FtcGxlcnNWU1godm9pZCk7Cisr CisrV0VCUF9UU0FOX0lHTk9SRV9GVU5DVElPTiB2b2lkIFdlYlBJbml0U2FtcGxlcnNWU1godm9p ZCkgeworKyAgV2ViUFNhbXBsZXJzW01PREVfUkdCQV0gPSBZdXZUb1JnYmFSb3dfVlNYOworKyAg V2ViUFNhbXBsZXJzW01PREVfQkdSQV0gPSBZdXZUb0JncmFSb3dfVlNYOworKyAgV2ViUFNhbXBs ZXJzW01PREVfQVJHQl0gPSBZdXZUb0FyZ2JSb3dfVlNYOworK30KKysKKysjZWxzZSAgLy8gIVdF QlBfVVNFX1ZTWAorKworK1dFQlBfRFNQX0lOSVRfU1RVQihXZWJQSW5pdFNhbXBsZXJzVlNYKQor KworKyNlbmRpZiAgLy8gV0VCUF9VU0VfVlNYCitkaWZmIC0tZ2l0IGEvbWVkaWEvbGlid2VicC9z cmMvbW96L2NwdS5jcHAgYi9tZWRpYS9saWJ3ZWJwL3NyYy9tb3ovY3B1LmNwcAoraW5kZXggYzY2 MzMxNzBjOTIzLi44Mjk4NmQyZjYzMWUgMTAwNjQ0CistLS0gYS9tZWRpYS9saWJ3ZWJwL3NyYy9t b3ovY3B1LmNwcAorKysrIGIvbWVkaWEvbGlid2VicC9zcmMvbW96L2NwdS5jcHAKK0BAIC0zNSw2 ICszNSwxMCBAQCBzdGF0aWMgaW50IE1vekNQVUluZm8oQ1BVRmVhdHVyZSBmZWF0dXJlKQorICAg ICBjYXNlIGtNSVBTZHNwUjI6CisgICAgIGNhc2Uga01TQToKKyAgICAgICByZXR1cm4gMTsKKysj ZW5kaWYKKysjaWYgZGVmaW5lZChXRUJQX1VTRV9WU1gpCisrICAgIGNhc2Uga1ZTWDoKKysgICAg ICByZXR1cm4gMTsKKyAjZW5kaWYKKyAgICAgZGVmYXVsdDoKKyAgICAgICByZXR1cm4gMDsKKy0t IAorMi41Mi4wCisKCmRpZmYgLS1naXQgYS8wMDAzLUFkZC1QUEM2NExFLUpJVC1iYWNrZW5kLnBh dGNoIGIvMDAwMy1BZGQtUFBDNjRMRS1KSVQtYmFja2VuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5lZTA4YjMzCi0tLSAvZGV2L251bGwKKysrIGIvMDAwMy1BZGQt UFBDNjRMRS1KSVQtYmFja2VuZC5wYXRjaApAQCAtMCwwICsxLDM4MjA1IEBACitGcm9tIGM3OTky NmU0MTc2NGM2YWE2YWU1OTY4MTJiMjNiYzM1YjQ3MDAyOGMgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCitGcm9tOiA9P1VURi04P3E/VHJ1bmc9MjBMPUMzPUFBPz0gPDhAdGxlLmlkLmF1PgorRGF0 ZTogRnJpLCAxMiBKdW4gMjAyNiAxNjowMjoyOCArMTAwMAorU3ViamVjdDogW1BBVENIIDMvM10g QWRkIFBQQzY0TEUgSklUIGJhY2tlbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6 IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhi aXQKKworQmFzZWQgb24gdGhlIHdvcmsgZG9uZSBieSBDYW1lcm9uIEthaXNlciBhbmQgSnVzdGlu IEhpYmJpdHMKK2h0dHBzOi8vZ2l0aHViLmNvbS9jaG1lZWVkYWxmL2dlY2tvLWRldgorCitDby1h dXRob3JlZC1ieTogQ2FtZXJvbiBLYWlzZXIgPGNsYXNzaWxsYUBmbG9vZGdhcC5jb20+CitDby1h dXRob3JlZC1ieTogSnVzdGluIEhpYmJpdHMgPGNobWVlZWRhbGZAZ21haWwuY29tPgorQXNzaXN0 ZWQtYnk6IExhbmNlIEFsYmVydHNvbiA8bGFuY2VAb3N1b3NsLm9yZz4KK0Fzc2lzdGVkLWJ5OiBU aHVzaGFuIEZlcm5hbmRvIDx0aHVzaGFuQHRodXNoYW5mZXJuYW5kby5jb20+CitBc3Npc3RlZC1i eTogVGltb3RoeSBQZWFyc29uIDx0cGVhcnNvbkBzb2xpZHNpbGljb24uY29tPgorQXNzaXN0ZWQt Ynk6IERhbiBIb3LDoWsgPGRhbkBkYW5ueS5jej4KK0Fzc2lzdGVkLWJ5OiBIaeG6v3UgTMOqIDxt b2RvbG9neUBnbWFpbC5jb20+CitBc3Npc3RlZC1ieTogQ2xhdWRlIEZhYmxlIDUgPG5vcmVwbHlA YW50aHJvcGljLmNvbT4KKy0tLQorIGNvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZS5w eSAgICAgICAgICB8ICAgIDIgKworIGpzL21vei5jb25maWd1cmUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMzQgKy0KKyBqcy9zcmMvYnVpbHRpbi9UZXN0aW5nRnVuY3Rpb25zLmNw cCAgICAgICAgICAgfCAgIDE4ICsKKyBqcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcCAgICAg ICAgICAgICAgICAgfCAgICA1ICstCisgLi4uL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNz ZW1ibGVyLmNwcCAgIHwgICAyOCArCisgLi4uL3Rlc3RzL2Jhc2VsaW5lL3BwYzY0LWJyYW5jaDgt MTYtbmFycm93LmpzIHwgIDEwMyArCisganMvc3JjL2ppdC10ZXN0L3Rlc3RzL2djL2djcGFyYW0u anMgICAgICAgICAgIHwgICAgMyArLQorIC4uLi90ZXN0cy9pb24vbW9kLWNvbnN0YW50LXBvdzIt bWludXMtb25lLmpzICB8ICAgNzggKworIC4uLi90ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUt ZGl2aWRlbmQuanMgICB8ICAgNzEgKworIC4uLi90ZXN0cy9tYXRoLW1pbi1tYXgtY29ybmVyLWNh c2VzLmpzICAgICAgICB8ICAgNTAgKworIGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL2F0b21p Y2l0eS5qcyAgICAgICB8ICAgIDggKy0KKyAuLi4vaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3Np dmUtaW5saW5pbmcuanMgfCAgIDE5ICstCisgLi4uL2ppdC10ZXN0L3Rlc3RzL3dhc20vbWVtb3J5 LW9vYi1tZXNzYWdlLmpzIHwgICAxMCArLQorIC4uLi90ZXN0cy93YXNtL3BwYzY0LWFyZ29uMi10 aWVyaW5nLmpzICAgICAgICB8ICAxMjQgKworIC4uLi90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUt c2VsZWN0LWJlbmNoLmpzICB8ICAgNzAgKworIC4uLi9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0 LWV4dG11bC1hbGlhcy5qcyB8ICAxMDcgKworIC4uLi90ZXN0cy93YXNtL3BwYzY0LXNpbWQtdnIt Y2xvYmJlci5qcyAgICAgICB8ICAxNzkgKworIGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3By b2ZpbGluZy5qcyAgICAgICB8ICAgIDcgKworIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtZXh0cmFj dC1sYW5lLWN0ei5qcyAgICB8ICAgNDkgKworIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtc2VsZWN0 LWNvbmRpdGlvbi5qcyAgICB8ICAgMzAgKworIC4uLi93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJhcC1l eGl0LXNpbWQtc2F2ZS5qcyB8ICAgNjQgKworIC4uLi9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5k LWJyYW5jaC5qcyAgICAgICB8ICAgIDcgKworIC4uLi9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5k LWJyYW5jaC53YXNtICAgICB8ICBCaW4gMCAtPiAxMTQ4IGJ5dGVzCisganMvc3JjL2ppdC10ZXN0 L3Rlc3RzL3dhc20vc2ltZC9idWcxOTQ2NjE4LmpzIHwgICAgNyArLQorIC4uLi9qaXQtdGVzdC90 ZXN0cy93YXNtL3NpbWQvaW9uLWFuYWx5c2lzLmpzICB8ICAgIDcgKy0KKyBqcy9zcmMvaml0L0Fz c2VtYmxlci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBqcy9zcmMvaml0L0Jh c2VsaW5lSUMuY3BwICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBqcy9zcmMvaml0L0Nh Y2hlSVJDb21waWxlci5jcHAgICAgICAgICAgICAgICAgfCAgIDE2ICsKKyBqcy9zcmMvaml0L0Nv ZGVHZW5lcmF0b3IuY3BwICAgICAgICAgICAgICAgICAgfCAgICA2ICsKKyBqcy9zcmMvaml0L0Nv ZGVHZW5lcmF0b3IuaCAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBqcy9zcmMvaml0L0Vm ZmVjdGl2ZUFkZHJlc3NBbmFseXNpcy5jcHAgICAgICAgfCAgICAyICstCisganMvc3JjL2ppdC9F eGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAgICAgICAgICAgIHwgICAxMCArLQorIGpzL3NyYy9qaXQv Rmx1c2hJQ2FjaGUuY3BwICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KKyBqcy9zcmMvaml0 L0ZsdXNoSUNhY2hlLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCisganMvc3JjL2pp dC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlwZS5weSAgICAgICAgIHwgIDEwMCArCisganMvc3JjL2pp dC9KaXRDb250ZXh0LmNwcCAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCisganMvc3JjL2pp dC9KaXRGcmFtZXMuY3BwICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArCisganMvc3JjL2pp dC9KaXRGcmFtZXMuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArLQorIGpzL3NyYy9q aXQvTElSLmNwcCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KKyBqcy9zcmMv aml0L0xJUi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisganMvc3Jj L2ppdC9MSVJPcHMueWFtbCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4MiArLQorIGpzL3Ny Yy9qaXQvTGFiZWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBqcy9z cmMvaml0L0xvd2VyaW5nLmNwcCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisganMv c3JjL2ppdC9Mb3dlcmluZy5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisganMv c3JjL2ppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCAgICAgICAgICAgICAgIHwgICAgMiArCisganMv c3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5jcHAgICAgICAgICAgICAgICAgIHwgICAyNSArLQorIGpz L3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIuaCAgICAgICAgICAgICAgICAgICB8ICA2NDcgKy0KKyBq cy9zcmMvaml0L01vdmVFbWl0dGVyLmggICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBq cy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsKKyBq cy9zcmMvaml0L1JlZ2lzdGVyQWxsb2NhdG9yLmggICAgICAgICAgICAgICAgfCAgICA3ICstCisg anMvc3JjL2ppdC9SZWdpc3RlcnMuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisg anMvc3JjL2ppdC9TYWZlcG9pbnRzLmNwcCAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCisg anMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMtaW5sLmggICAgICAgICAgICAgIHwgICAgMiArCisg anMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMuaCAgICAgICAgICAgICAgICAgIHwgICAgMiArCisg anMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lzdGVycy5oICAgICAgICAgICAgICAgIHwgICAgMiArCisg anMvc3JjL2ppdC9TaW11bGF0b3IuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisg anMvc3JjL2ppdC9tb3ouYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArCisg anMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuY3BwICAgICAgIHwgIDIyMSArCisg anMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaCAgICAgICAgIHwgIDU4MSArKwor IGpzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcCAgICAgICAgICB8IDMwMjggKysr KysrKworIGpzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmggICAgICAgICAgICB8IDIx MTQgKysrKysKKyBqcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwICAgICAg fCAzNjQ3ICsrKysrKysrCisganMvc3JjL2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0Lmgg ICAgICAgIHwgIDEwMSArCisganMvc3JjL2ppdC9wcGM2NC9MSVItcHBjNjQuaCAgICAgICAgICAg ICAgICAgIHwgIDEzNSArCisganMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2NC5jcHAgICAg ICAgICAgIHwgMTMyNCArKysKKyBqcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmggICAg ICAgICAgICAgfCAgMTA1ICsKKyBqcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0 LWlubC5oICAgfCA2MTQyICsrKysrKysrKysrKysrCisganMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fz c2VtYmxlci1wcGM2NC5jcHAgICAgIHwgMzQ2NyArKysrKysrKworIGpzL3NyYy9qaXQvcHBjNjQv TWFjcm9Bc3NlbWJsZXItcHBjNjQuaCAgICAgICB8IDIwMzEgKysrKysKKyBqcy9zcmMvaml0L3Bw YzY0L01vdmVFbWl0dGVyLXBwYzY0LmNwcCAgICAgICAgfCAgMzU3ICsKKyBqcy9zcmMvaml0L3Bw YzY0L01vdmVFbWl0dGVyLXBwYzY0LmggICAgICAgICAgfCAgIDY0ICsKKyBqcy9zcmMvaml0L3Bw YzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaCAgfCAgIDgzICsKKyBqcy9zcmMvaml0L3Bw YzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC5oICAgICAgfCAgIDk3ICsKKyBqcy9zcmMvaml0L3Bw YzY0L1NoYXJlZElDUmVnaXN0ZXJzLXBwYzY0LmggICAgfCAgIDQ2ICsKKyBqcy9zcmMvaml0L3Bw YzY0L1NpbXVsYXRvci1wcGM2NC5jcHAgICAgICAgICAgfCA3Mjk2ICsrKysrKysrKysrKysrKysr CisganMvc3JjL2ppdC9wcGM2NC9TaW11bGF0b3ItcHBjNjQuaCAgICAgICAgICAgIHwgIDU1NiAr KworIGpzL3NyYy9qaXQvcHBjNjQvVHJhbXBvbGluZS1wcGM2NC5jcHAgICAgICAgICB8ICA2NDgg KysKKyBqcy9zcmMvaml0L3NoYXJlZC9Bc3NlbWJsZXItc2hhcmVkLmggICAgICAgICAgfCAgICA1 ICstCisgLi4uL0F0b21pY09wZXJhdGlvbnMtZmVlbGluZy1sdWNreS1nY2MuaCAgICAgIHwgICAg MyArLQorIGpzL3NyYy9qaXQvc2hhcmVkL0NvZGVHZW5lcmF0b3Itc2hhcmVkLmNwcCAgICB8ICAg IDYgKy0KKyBqcy9zcmMvaml0L3NoYXJlZC9Mb3dlcmluZy1zaGFyZWQtaW5sLmggICAgICAgfCAg ICAyICstCisganMvc3JjL2pzLWNvbmZpZy5tb3pidWlsZCAgICAgICAgICAgICAgICAgICAgIHwg ICAgMSArCisganMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RKaXRBQkljYWxscy5jcHAgICAgICAgIHwg ICAgMyArCisganMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwICAgIHwg ICAxMCArLQorIGpzL3NyYy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAgICAgICAgICAgICAgICB8 ICAgMjAgKworIGpzL3NyYy9zaGVsbC9qcy5jcHAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMjUgKworIGpzL3NyYy9zaGVsbC9qc3NoZWxsLmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDMgKy0KKyBqcy9zcmMvdGVzdHMvc2hlbGwvb3MuanMgICAgICAgICAgICAgICAgICAgICAg fCAgICA4ICstCisganMvc3JjL3V0aWwvUG9pc29uLmggICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMiArCisganMvc3JjL3dhc20vV2FzbUFueVJlZi5oICAgICAgICAgICAgICAgICAgICAg IHwgICAgNyArLQorIGpzL3NyYy93YXNtL1dhc21CQ0RlZnMuaCAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDcgKworIGpzL3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAgICAgICAgICAgICAgICAg ICB8ICAgNDcgKy0KKyBqcy9zcmMvd2FzbS9XYXNtQkNSZWdEZWZzLmggICAgICAgICAgICAgICAg ICAgfCAgIDEyICstCisganMvc3JjL3dhc20vV2FzbUJhc2VsaW5lQ29tcGlsZS5jcHAgICAgICAg ICAgIHwgIDE0OCArLQorIGpzL3NyYy93YXNtL1dhc21Db2RlZ2VuQ29uc3RhbnRzLmggICAgICAg ICAgICB8ICAgIDMgKy0KKyBqcy9zcmMvd2FzbS9XYXNtQ29kZWdlblR5cGVzLmNwcCAgICAgICAg ICAgICAgfCAgIDExICstCisganMvc3JjL3dhc20vV2FzbUNvbXBpbGUuY3BwICAgICAgICAgICAg ICAgICAgIHwgICAgNiArLQorIGpzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwICAgICAgICAg ICAgICAgICB8ICAxMTggKworIGpzL3NyYy93YXNtL1dhc21HQy5jcHAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDggKworIGpzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwICAgICAgICAg ICAgICAgICB8ICAgMTggKy0KKyBqcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAgICAgICAg ICAgICAgICAgfCAgICAyICstCisganMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAgICAgICAgICAg ICAgICAgICAgIHwgICAgNCArLQorIGpzL3NyYy93YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAg ICAgICAgICAgICB8ICAgMjAgKy0KKyBqcy9zcmMvd2FzbS9XYXNtU3RhY2tzLmNwcCAgICAgICAg ICAgICAgICAgICAgfCAgIDMxICstCisganMvc3JjL3dhc20vV2FzbVN0dWJzLmNwcCAgICAgICAg ICAgICAgICAgICAgIHwgICA0MyArLQorIGpzL3NyYy93YXNtL1dhc21TdW1tYXJpemVJbnNuLmNw cCAgICAgICAgICAgICB8ICAxNjMgKworIGpzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBtZmJ0L0Fzc2VydGlvbnMuaCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICA1ICsKKyAxMDggZmlsZXMgY2hhbmdlZCwgMzQ0NDIgaW5zZXJ0 aW9ucygrKSwgNDM4IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0 LXRlc3QvdGVzdHMvYmFzZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJyb3cuanMKKyBjcmVhdGUg bW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lvbi9tb2QtY29uc3RhbnQtcG93Mi1t aW51cy1vbmUuanMKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL2lv bi9tb2QtcG93Mi1uZWdhdGl2ZS1kaXZpZGVuZC5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9z cmMvaml0LXRlc3QvdGVzdHMvbWF0aC1taW4tbWF4LWNvcm5lci1jYXNlcy5qcworIGNyZWF0ZSBt b2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1hcmdvbjItdGllcmlu Zy5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2 NC1jb21wYXJlLXNlbGVjdC1iZW5jaC5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1leHRtdWwtYWxpYXMuanMKKyBjcmVhdGUgbW9kZSAxMDA2 NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtc2ltZC12ci1jbG9iYmVyLmpzCisg Y3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBj NjQtZXh0cmFjdC1sYW5lLWN0ei5qcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0LXNlbGVjdC1jb25kaXRpb24uanMKKyBjcmVhdGUg bW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC10cmFw LWV4aXQtc2ltZC1zYXZlLmpzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQtdGVzdC90 ZXN0cy93YXNtL3JlZ3Jlc3MvYnVnLXBwYzY0LXNpbWQtcmVkdWNlLWFuZC1icmFuY2guanMKKyBj cmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWct cHBjNjQtc2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC53YXNtCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpz L3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0 NCBqcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oCisgY3JlYXRlIG1vZGUgMTAw NjQ0IGpzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcAorIGNyZWF0ZSBtb2RlIDEw MDY0NCBqcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oCisgY3JlYXRlIG1vZGUgMTAw NjQ0IGpzL3NyYy9qaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5jcHAKKyBjcmVhdGUgbW9k ZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmgKKyBjcmVhdGUg bW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9MSVItcHBjNjQuaAorIGNyZWF0ZSBtb2RlIDEw MDY0NCBqcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmNwcAorIGNyZWF0ZSBtb2RlIDEw MDY0NCBqcy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2 NDQganMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwuaAorIGNyZWF0ZSBt b2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcAorIGNy ZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmgK KyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5j cHAKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2 NC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJz LXBwYzY0LWlubC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQvcHBjNjQvU2hhcmVk SUNIZWxwZXJzLXBwYzY0LmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQganMvc3JjL2ppdC9wcGM2NC9T aGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQv cHBjNjQvU2ltdWxhdG9yLXBwYzY0LmNwcAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBqcy9zcmMvaml0 L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGpzL3NyYy9qaXQv cHBjNjQvVHJhbXBvbGluZS1wcGM2NC5jcHAKKworZGlmZiAtLWdpdCBhL2NvbmZpZy9jaGVja19t YWNyb2Fzc2VtYmxlcl9zdHlsZS5weSBiL2NvbmZpZy9jaGVja19tYWNyb2Fzc2VtYmxlcl9zdHls ZS5weQoraW5kZXggYWExYTU0MTA0ZTI2Li5iYTczZGUzODgwOTkgMTAwNjQ0CistLS0gYS9jb25m aWcvY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUucHkKKysrKyBiL2NvbmZpZy9jaGVja19tYWNy b2Fzc2VtYmxlcl9zdHlsZS5weQorQEAgLTMzLDYgKzMzLDcgQEAgYWxsX2FyY2hpdGVjdHVyZV9u YW1lcyA9IHNldChbCisgICAgICJhcm02NCIsCisgICAgICJsb29uZzY0IiwKKyAgICAgInJpc2N2 NjQiLAorKyAgICAicHBjNjQiLAorICAgICAid2FzbTMyIiwKKyBdKQorIGFsbF9zaGFyZWRfYXJj aGl0ZWN0dXJlX25hbWVzID0gc2V0KFsKK0BAIC00MSw2ICs0Miw3IEBAIGFsbF9zaGFyZWRfYXJj aGl0ZWN0dXJlX25hbWVzID0gc2V0KFsKKyAgICAgImFybTY0IiwKKyAgICAgImxvb25nNjQiLAor ICAgICAicmlzY3Y2NCIsCisrICAgICJwcGM2NCIsCisgICAgICJ3YXNtMzIiLAorIF0pCisgCitk aWZmIC0tZ2l0IGEvanMvbW96LmNvbmZpZ3VyZSBiL2pzL21vei5jb25maWd1cmUKK2luZGV4IDI2 Y2M4NTYyMjY1NC4uNTMxMGRkMDg1MDZmIDEwMDY0NAorLS0tIGEvanMvbW96LmNvbmZpZ3VyZQor KysrIGIvanMvbW96LmNvbmZpZ3VyZQorQEAgLTI2NCw2ICsyNjQsNyBAQCBkZWYgaml0X2RlZmF1 bHQodGFyZ2V0LCBlbmFibGVfcG9ydGFibGVfYmFzZWxpbmVfaW50ZXJwKToKKyAgICAgICAgICJh YXJjaDY0IiwKKyAgICAgICAgICJtaXBzNjQiLAorICAgICAgICAgImxvb25nYXJjaDY0IiwKKysg ICAgICAgICJwcGM2NCIsCisgICAgICAgICAicmlzY3Y2NCIsCisgICAgICk6CisgICAgICAgICBy ZXR1cm4gVHJ1ZQorQEAgLTI4NSw3ICsyODYsNyBAQCBkZWYgcmVwb3J0X2RlcHJlY2F0ZWQodmFs dWUpOgorICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorIG9wdGlvbigKKyAgICAgIi0tZW5hYmxlLXNpbXVsYXRvciIsCistICAgIGNob2lj ZXM9KCJhcm0iLCAiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAicmlzY3Y2NCIpLAorKyAg ICBjaG9pY2VzPSgiYXJtIiwgImFybTY0IiwgIm1pcHM2NCIsICJsb29uZzY0IiwgInJpc2N2NjQi LCAicHBjNjQiKSwKKyAgICAgbmFyZ3M9MSwKKyAgICAgaGVscD0iRW5hYmxlIGEgSklUIGNvZGUg c2ltdWxhdG9yIGZvciB0aGUgc3BlY2lmaWVkIGFyY2hpdGVjdHVyZSIsCisgKQorQEAgLTMwMiw3 ICszMDMsNyBAQCBkZWYgc2ltdWxhdG9yKGppdF9lbmFibGVkLCBzaW11bGF0b3JfZW5hYmxlZCwg dGFyZ2V0KToKKyAgICAgICAgIGlmIHRhcmdldC5jcHUgIT0gIng4NiI6CisgICAgICAgICAgICAg ZGllKCJUaGUgJXMgc2ltdWxhdG9yIG9ubHkgd29ya3Mgb24geDg2LiIgJSBzaW1fY3B1KQorIAor LSAgICBpZiBzaW1fY3B1IGluICgiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAicmlzY3Y2 NCIpOgorKyAgICBpZiBzaW1fY3B1IGluICgiYXJtNjQiLCAibWlwczY0IiwgImxvb25nNjQiLCAi cmlzY3Y2NCIsICJwcGM2NCIpOgorICAgICAgICAgaWYgdGFyZ2V0LmNwdSAhPSAieDg2XzY0IiBh bmQgdGFyZ2V0LmNwdSAhPSAiYWFyY2g2NCI6CisgICAgICAgICAgICAgZGllKCJUaGUgJXMgc2lt dWxhdG9yIG9ubHkgd29ya3Mgb24geDg2LTY0IG9yIGFybTY0LiIgJSBzaW1fY3B1KQorIAorQEAg LTMxNSwxMiArMzE2LDE0IEBAIHNldF9jb25maWcoIkpTX1NJTVVMQVRPUl9BUk02NCIsIHNpbXVs YXRvci5hcm02NCkKKyBzZXRfY29uZmlnKCJKU19TSU1VTEFUT1JfTUlQUzY0Iiwgc2ltdWxhdG9y Lm1pcHM2NCkKKyBzZXRfY29uZmlnKCJKU19TSU1VTEFUT1JfTE9PTkc2NCIsIHNpbXVsYXRvci5s b29uZzY0KQorIHNldF9jb25maWcoIkpTX1NJTVVMQVRPUl9SSVNDVjY0Iiwgc2ltdWxhdG9yLnJp c2N2NjQpCisrc2V0X2NvbmZpZygiSlNfU0lNVUxBVE9SX1BQQzY0Iiwgc2ltdWxhdG9yLnBwYzY0 KQorIHNldF9kZWZpbmUoIkpTX1NJTVVMQVRPUiIsIGRlcGVuZHNfaWYoc2ltdWxhdG9yKShsYW1i ZGEgeDogVHJ1ZSkpCisgc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SX0FSTSIsIHNpbXVsYXRvci5h cm0pCisgc2V0X2RlZmluZSgiSlNfU0lNVUxBVE9SX0FSTTY0Iiwgc2ltdWxhdG9yLmFybTY0KQor IHNldF9kZWZpbmUoIkpTX1NJTVVMQVRPUl9NSVBTNjQiLCBzaW11bGF0b3IubWlwczY0KQorIHNl dF9kZWZpbmUoIkpTX1NJTVVMQVRPUl9MT09ORzY0Iiwgc2ltdWxhdG9yLmxvb25nNjQpCisgc2V0 X2RlZmluZSgiSlNfU0lNVUxBVE9SX1JJU0NWNjQiLCBzaW11bGF0b3IucmlzY3Y2NCkKKytzZXRf ZGVmaW5lKCJKU19TSU1VTEFUT1JfUFBDNjQiLCBzaW11bGF0b3IucHBjNjQpCisgCisgCisgQGRl cGVuZHMoIi0tZW5hYmxlLWppdCIsIHNpbXVsYXRvciwgdGFyZ2V0KQorQEAgLTMzNyw2ICszNDAs OCBAQCBkZWYgaml0X2NvZGVnZW4oaml0X2VuYWJsZWQsIHNpbXVsYXRvciwgdGFyZ2V0KToKKyAg ICAgICAgIHJldHVybiBuYW1lc3BhY2UoeDY0PVRydWUpCisgICAgIGVsaWYgdGFyZ2V0LmNwdSA9 PSAibG9vbmdhcmNoNjQiOgorICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZShsb29uZzY0PVRydWUp CisrICAgIGVsaWYgdGFyZ2V0LmNwdSA9PSAicHBjNjQiOgorKyAgICAgICAgcmV0dXJuIG5hbWVz cGFjZShwcGM2ND1UcnVlKQorICAgICBlbGlmIHRhcmdldC5jcHUgPT0gInJpc2N2NjQiOgorICAg ICAgICAgcmV0dXJuIG5hbWVzcGFjZShyaXNjdjY0PVRydWUpCisgCitAQCAtMzQ4LDYgKzM1Myw3 IEBAIHNldF9jb25maWcoIkpTX0NPREVHRU5fQVJNIiwgaml0X2NvZGVnZW4uYXJtKQorIHNldF9j b25maWcoIkpTX0NPREVHRU5fQVJNNjQiLCBqaXRfY29kZWdlbi5hcm02NCkKKyBzZXRfY29uZmln KCJKU19DT0RFR0VOX01JUFM2NCIsIGppdF9jb2RlZ2VuLm1pcHM2NCkKKyBzZXRfY29uZmlnKCJK U19DT0RFR0VOX0xPT05HNjQiLCBqaXRfY29kZWdlbi5sb29uZzY0KQorK3NldF9jb25maWcoIkpT X0NPREVHRU5fUFBDNjQiLCBqaXRfY29kZWdlbi5wcGM2NCkKKyBzZXRfY29uZmlnKCJKU19DT0RF R0VOX1JJU0NWNjQiLCBqaXRfY29kZWdlbi5yaXNjdjY0KQorIHNldF9jb25maWcoIkpTX0NPREVH RU5fWDg2Iiwgaml0X2NvZGVnZW4ueDg2KQorIHNldF9jb25maWcoIkpTX0NPREVHRU5fWDY0Iiwg aml0X2NvZGVnZW4ueDY0KQorQEAgLTM1OCw2ICszNjQsNyBAQCBzZXRfZGVmaW5lKCJKU19DT0RF R0VOX0FSTSIsIGppdF9jb2RlZ2VuLmFybSkKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX0FSTTY0 Iiwgaml0X2NvZGVnZW4uYXJtNjQpCisgc2V0X2RlZmluZSgiSlNfQ09ERUdFTl9NSVBTNjQiLCBq aXRfY29kZWdlbi5taXBzNjQpCisgc2V0X2RlZmluZSgiSlNfQ09ERUdFTl9MT09ORzY0Iiwgaml0 X2NvZGVnZW4ubG9vbmc2NCkKKytzZXRfZGVmaW5lKCJKU19DT0RFR0VOX1BQQzY0Iiwgaml0X2Nv ZGVnZW4ucHBjNjQpCisgc2V0X2RlZmluZSgiSlNfQ09ERUdFTl9SSVNDVjY0Iiwgaml0X2NvZGVn ZW4ucmlzY3Y2NCkKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX1g4NiIsIGppdF9jb2RlZ2VuLng4 NikKKyBzZXRfZGVmaW5lKCJKU19DT0RFR0VOX1g2NCIsIGppdF9jb2RlZ2VuLng2NCkKK0BAIC03 MjgsNyArNzM1LDcgQEAgZGVmIGRlZmF1bHRfd2FzbV9qc3BpKAorICAgICAgICAgcmV0dXJuCisg CisgICAgIGlmIHNpbXVsYXRvcjoKKy0gICAgICAgIHJldHVybiBzaW11bGF0b3JbMF0gaW4gKCJh cm02NCIsICJhcm0iLCAibG9vbmc2NCIsICJtaXBzNjQiLCAicmlzY3Y2NCIpCisrICAgICAgICBy ZXR1cm4gc2ltdWxhdG9yWzBdIGluICgiYXJtNjQiLCAiYXJtIiwgImxvb25nNjQiLCAibWlwczY0 IiwgInBwYzY0IiwgInJpc2N2NjQiKQorIAorICAgICBpZiB0YXJnZXQuY3B1IGluICgKKyAgICAg ICAgICJ4ODZfNjQiLAorQEAgLTczNyw2ICs3NDQsNyBAQCBkZWYgZGVmYXVsdF93YXNtX2pzcGko CisgICAgICAgICAiYXJtIiwKKyAgICAgICAgICJsb29uZ2FyY2g2NCIsCisgICAgICAgICAibWlw czY0IiwKKysgICAgICAgICJwcGM2NCIsCisgICAgICAgICAicmlzY3Y2NCIsCisgICAgICk6Cisg ICAgICAgICByZXR1cm4gVHJ1ZQorQEAgLTc2OCwxMCArNzc2LDExIEBAIGRlZiB3YXNtX2pzcGko dmFsdWUsIGppdF9lbmFibGVkLCBzaW11bGF0b3IsIG5vX2V4cGVyaW1lbnRhbCwgdGFyZ2V0KToK KyAgICAgICAgICJhcm0iLAorICAgICAgICAgImxvb25nNjQiLAorICAgICAgICAgIm1pcHM2NCIs CisrICAgICAgICAicHBjNjQiLAorICAgICAgICAgInJpc2N2NjQiLAorICAgICApOgorICAgICAg ICAgZGllKAorLSAgICAgICAgICAgICItLWVuYWJsZS13YXNtLWpzcGkgaXMgb25seSBzdXBwb3J0 ZWQgZm9yIGFybTY0L2FybS9sb29uZzY0L21pcHM2NC9yaXNjdjY0IHNpbXVsYXRvcnMiCisrICAg ICAgICAgICAgIi0tZW5hYmxlLXdhc20tanNwaSBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgYXJtNjQv YXJtL2xvb25nNjQvbWlwczY0L3BwYzY0L3Jpc2N2NjQgc2ltdWxhdG9ycyIKKyAgICAgICAgICkK KyAKKyAgICAgaWYgdGFyZ2V0LmNwdSBpbiAoCitAQCAtNzgxLDEyICs3OTAsMTMgQEAgZGVmIHdh c21fanNwaSh2YWx1ZSwgaml0X2VuYWJsZWQsIHNpbXVsYXRvciwgbm9fZXhwZXJpbWVudGFsLCB0 YXJnZXQpOgorICAgICAgICAgImFybSIsCisgICAgICAgICAibG9vbmdhcmNoNjQiLAorICAgICAg ICAgIm1pcHM2NCIsCisrICAgICAgICAicHBjNjQiLAorICAgICAgICAgInJpc2N2NjQiLAorICAg ICApOgorICAgICAgICAgcmV0dXJuIFRydWUKKyAKKyAgICAgZGllKAorLSAgICAgICAgIi0tZW5h YmxlLXdhc20tanNwaSBvbmx5IHBvc3NpYmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQveDg2 L2FybTY0L2FybS9sb29uZ2FyY2g2NC9taXBzNjQvcmlzY3Y2NCBqaXRzIgorKyAgICAgICAgIi0t ZW5hYmxlLXdhc20tanNwaSBvbmx5IHBvc3NpYmxlIHdoZW4gdGFyZ2V0aW5nIHRoZSB4ODZfNjQv eDg2L2FybTY0L2FybS9sb29uZ2FyY2g2NC9taXBzNjQvcHBjNjQvcmlzY3Y2NCBqaXRzIgorICAg ICApCisgCisgCitAQCAtODIxLDEwICs4MzEsMTAgQEAgZGVmIGRlZmF1bHRfd2FzbV9zaW1kKGpp dF9lbmFibGVkLCBzaW11bGF0b3IsIHRhcmdldCk6CisgICAgIGlmIG5vdCBqaXRfZW5hYmxlZDoK KyAgICAgICAgIHJldHVybgorIAorLSAgICBpZiBzaW11bGF0b3IgYW5kIChzaW11bGF0b3JbMF0g IT0gImFybTY0Iik6CisrICAgIGlmIHNpbXVsYXRvciBhbmQgc2ltdWxhdG9yWzBdIG5vdCBpbiAo ImFybTY0IiwgInBwYzY0Iik6CisgICAgICAgICByZXR1cm4KKyAKKy0gICAgaWYgdGFyZ2V0LmNw dSBpbiAoIng4Nl82NCIsICJ4ODYiLCAiYWFyY2g2NCIpOgorKyAgICBpZiB0YXJnZXQuY3B1IGlu ICgieDg2XzY0IiwgIng4NiIsICJhYXJjaDY0IiwgInBwYzY0Iik6CisgICAgICAgICByZXR1cm4g VHJ1ZQorIAorIAorQEAgLTg0OSwxMyArODU5LDE1IEBAIGRlZiB3YXNtX3NpbWQodmFsdWUsIGpp dF9lbmFibGVkLCBzaW11bGF0b3IsIHRhcmdldCwgbm9fZXhwZXJpbWVudGFsKToKKyAgICAgaWYg bm90IGppdF9lbmFibGVkOgorICAgICAgICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQgcmVxdWly ZXMgLS1lbmFibGUtaml0IikKKyAKKy0gICAgaWYgc2ltdWxhdG9yIGFuZCAoc2ltdWxhdG9yWzBd ICE9ICJhcm02NCIpOgorLSAgICAgICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQgaXMgbm90IHN1 cHBvcnRlZCBmb3Igc2ltdWxhdG9ycywgZXhjZXB0IGFybTY0IikKKysgICAgaWYgc2ltdWxhdG9y IGFuZCBzaW11bGF0b3JbMF0gbm90IGluICgiYXJtNjQiLCAicHBjNjQiKToKKysgICAgICAgIGRp ZSgKKysgICAgICAgICAgICAiLS1lbmFibGUtd2FzbS1zaW1kIGlzIG5vdCBzdXBwb3J0ZWQgZm9y IHNpbXVsYXRvcnMsIGV4Y2VwdCBhcm02NCBhbmQgcHBjNjQiCisrICAgICAgICApCisgCistICAg IGlmIHRhcmdldC5jcHUgaW4gKCJ4ODZfNjQiLCAieDg2IiwgImFhcmNoNjQiKToKKysgICAgaWYg dGFyZ2V0LmNwdSBpbiAoIng4Nl82NCIsICJ4ODYiLCAiYWFyY2g2NCIsICJwcGM2NCIpOgorICAg ICAgICAgcmV0dXJuIFRydWUKKyAKKy0gICAgZGllKCItLWVuYWJsZS13YXNtLXNpbWQgb25seSBw b3NzaWJsZSB3aGVuIHRhcmdldGluZyB0aGUgeDg2XzY0L3g4Ni9hcm02NCBqaXRzIikKKysgICAg ZGllKCItLWVuYWJsZS13YXNtLXNpbWQgb25seSBwb3NzaWJsZSB3aGVuIHRhcmdldGluZyB0aGUg eDg2XzY0L3g4Ni9hcm02NC9wcGM2NCBqaXRzIikKKyAKKyAKKyBzZXRfY29uZmlnKCJFTkFCTEVf V0FTTV9TSU1EIiwgd2FzbV9zaW1kKQorZGlmZiAtLWdpdCBhL2pzL3NyYy9idWlsdGluL1Rlc3Rp bmdGdW5jdGlvbnMuY3BwIGIvanMvc3JjL2J1aWx0aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAKK2lu ZGV4IGJlOGIzZDBlMTZiNi4uMjI5MWQ1OGRjMGExIDEwMDY0NAorLS0tIGEvanMvc3JjL2J1aWx0 aW4vVGVzdGluZ0Z1bmN0aW9ucy5jcHAKKysrKyBiL2pzL3NyYy9idWlsdGluL1Rlc3RpbmdGdW5j dGlvbnMuY3BwCitAQCAtNDQ3LDYgKzQ0NywxNSBAQCBzdGF0aWMgYm9vbCBHZXRCdWlsZENvbmZp Z3VyYXRpb24oSlNDb250ZXh0KiBjeCwgdW5zaWduZWQgYXJnYywgVmFsdWUqIHZwKSB7CisgICAg IHJldHVybiBmYWxzZTsKKyAgIH0KKyAKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgdmFs dWUgPSBCb29sZWFuVmFsdWUodHJ1ZSk7CisrI2Vsc2UKKysgIHZhbHVlID0gQm9vbGVhblZhbHVl KGZhbHNlKTsKKysjZW5kaWYKKysgIGlmICghSlNfU2V0UHJvcGVydHkoY3gsIGluZm8sICJwcGM2 NCIsIHZhbHVlKSkgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrCisgI2lmZGVmIEpTX0NP REVHRU5fTE9PTkc2NAorICAgdmFsdWUgPSBCb29sZWFuVmFsdWUodHJ1ZSk7CisgI2Vsc2UKK0BA IC00ODMsNiArNDkyLDE1IEBAIHN0YXRpYyBib29sIEdldEJ1aWxkQ29uZmlndXJhdGlvbihKU0Nv bnRleHQqIGN4LCB1bnNpZ25lZCBhcmdjLCBWYWx1ZSogdnApIHsKKyAgICAgcmV0dXJuIGZhbHNl OworICAgfQorIAorKyNpZmRlZiBKU19TSU1VTEFUT1JfUFBDNjQKKysgIHZhbHVlID0gQm9vbGVh blZhbHVlKHRydWUpOworKyNlbHNlCisrICB2YWx1ZSA9IEJvb2xlYW5WYWx1ZShmYWxzZSk7Cisr I2VuZGlmCisrICBpZiAoIUpTX1NldFByb3BlcnR5KGN4LCBpbmZvLCAicHBjNjQtc2ltdWxhdG9y IiwgdmFsdWUpKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKyAjaWZkZWYgTU9aX0FT QU4KKyAgIHZhbHVlID0gQm9vbGVhblZhbHVlKHRydWUpOworICNlbHNlCitkaWZmIC0tZ2l0IGEv anMvc3JjL2lycmVnZXhwL1JlZ0V4cEFQSS5jcHAgYi9qcy9zcmMvaXJyZWdleHAvUmVnRXhwQVBJ LmNwcAoraW5kZXggMzEwY2Q4NWM2YTIwLi4zNzc1MDk1NzRmMjggMTAwNjQ0CistLS0gYS9qcy9z cmMvaXJyZWdleHAvUmVnRXhwQVBJLmNwcAorKysrIGIvanMvc3JjL2lycmVnZXhwL1JlZ0V4cEFQ SS5jcHAKK0BAIC00OTUsNyArNDk1LDEwIEBAIGNsYXNzIFJlZ0V4cERlcHRoQ2hlY2sgZmluYWwg OiBwdWJsaWMgdjg6OmludGVybmFsOjpyZWdleHA6OlZpc2l0b3IgeworIAorICAgLy8gVGhpcyBz aXplIGlzIHBpY2tlZCB0byBiZSBjb21mb3J0YWJseSBsYXJnZXIgdGhhbiBhbnkKKyAgIC8vIFJl Z0V4cCo6OlRvTm9kZSBzdGFjayBmcmFtZS4KKy0jaWYgIWRlZmluZWQoREVCVUcpICYmICFkZWZp bmVkKE1PWl9DT0RFX0NPVkVSQUdFKQorKyNpZiBkZWZpbmVkKF9fcG93ZXJwYzY0X18pCisrICAv LyBQUEM2NCBFTEZ2MiBoYXMgbGFyZ2VyIG1pbmltdW0gc3RhY2sgZnJhbWVzLgorKyAgc3RhdGlj IGNvbnN0IHNpemVfdCBGUkFNRV9QQURESU5HID0gMjU2ICogNDsKKysjZWxpZiAhZGVmaW5lZChE RUJVRykgJiYgIWRlZmluZWQoTU9aX0NPREVfQ09WRVJBR0UpCisgICBzdGF0aWMgY29uc3Qgc2l6 ZV90IEZSQU1FX1BBRERJTkcgPSAyNTY7CisgI2Vsc2UKKyAgIC8vIFVzZSBhIHNsaWdodGx5IGxh cmdlciBwYWRkaW5nIGZvciBkZWJ1ZyBhbmQgY29kZSBjb3ZlcmFnZSBidWlsZHMuCitkaWZmIC0t Z2l0IGEvanMvc3JjL2lycmVnZXhwL1JlZ0V4cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcCBiL2pz L3NyYy9pcnJlZ2V4cC9SZWdFeHBOYXRpdmVNYWNyb0Fzc2VtYmxlci5jcHAKK2luZGV4IGFlMzUx MjI2Nzk3Yi4uYTM5NmFlYjNjNzMxIDEwMDY0NAorLS0tIGEvanMvc3JjL2lycmVnZXhwL1JlZ0V4 cE5hdGl2ZU1hY3JvQXNzZW1ibGVyLmNwcAorKysrIGIvanMvc3JjL2lycmVnZXhwL1JlZ0V4cE5h dGl2ZU1hY3JvQXNzZW1ibGVyLmNwcAorQEAgLTk5MCw4ICs5OTAsMjEgQEAgdm9pZCBTTVJlZ0V4 cE1hY3JvQXNzZW1ibGVyOjpDaGVja0JhY2t0cmFja1N0YWNrTGltaXQoKSB7CisgICAgICAgQWJz b2x1dGVBZGRyZXNzKGlzb2xhdGUoKS0+cmVnZXhwX3N0YWNrKCktPmxpbWl0X2FkZHJlc3NfYWRk cmVzcygpKSwKKyAgICAgICBiYWNrdHJhY2tfc3RhY2tfcG9pbnRlcl8sICZub19zdGFja19vdmVy Zmxvdyk7CisgCisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKKysgIC8vIExSIG9uIFBvd2VyUEMg aXNuJ3QgYSBHUFIsIHNvIHdlIGhhdmUgdG8gZXhwbGljaXRseSBzYXZlIGl0IGJlZm9yZQorKyAg Ly8gY2FsbGluZyBvciB0aGUgcmVnZXhwJ3MgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBjbG9iYmVy ZWQuCisrICBtYXNtXy54c19tZmxyKHRlbXAxXyk7CisrICBtYXNtXy5hc19zdGR1KHRlbXAxXywg bWFzbV8uZ2V0U3RhY2tQb2ludGVyKCksIC04KTsKKysjZW5kaWYKKysKKyAgIG1hc21fLmNhbGwo JnN0YWNrX292ZXJmbG93X2xhYmVsXyk7CisgCisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKKysg IG1hc21fLmFzX2xkKHRlbXAxXywgbWFzbV8uZ2V0U3RhY2tQb2ludGVyKCksIDApOworKyAgbWFz bV8ueHNfbXRscih0ZW1wMV8pOworKyAgbWFzbV8uYXNfYWRkaShtYXNtXy5nZXRTdGFja1BvaW50 ZXIoKSwgbWFzbV8uZ2V0U3RhY2tQb2ludGVyKCksIDgpOworKyNlbmRpZgorKworICAgLy8gRXhp dCB3aXRoIGFuIGV4Y2VwdGlvbiBpZiB0aGUgY2FsbCBmYWlsZWQKKyAgIG1hc21fLmJyYW5jaFRl c3QzMihBc3NlbWJsZXI6Olplcm8sIHRlbXAwXywgdGVtcDBfLAorICAgICAgICAgICAgICAgICAg ICAgICZleGl0X3dpdGhfZXhjZXB0aW9uX2xhYmVsXyk7CitAQCAtMTA4MCw2ICsxMDkzLDEzIEBA IHZvaWQgU01SZWdFeHBNYWNyb0Fzc2VtYmxlcjo6Y3JlYXRlU3RhY2tGcmFtZSgpIHsKKyAgIG1h c21fLmluaXRQc2V1ZG9TdGFja1B0cigpOworICNlbmRpZgorIAorKyNpZmRlZiBKU19DT0RFR0VO X1BQQzY0CisrICAvLyBQUEM2NCdzIGxpbmsgcmVnaXN0ZXIgaXMgYW4gU1BSLCBub3QgYSBHUFIs IHNvIGl0IGNhbm5vdCBiZSBpbmNsdWRlZCBpbgorKyAgLy8gU2F2ZWROb25Wb2xhdGlsZVJlZ2lz dGVycy4gU2F2ZSBpdCBleHBsaWNpdGx5IGJlZm9yZSB0aGUgZnJhbWUgcG9pbnRlcgorKyAgLy8g c28gdGhhdCBhYmlyZXQoKSdzIGJsciBjYW4gcmV0dXJuIHRvIHRoZSBjYWxsZXIgYWZ0ZXIgd2Ug cmVzdG9yZSBpdC4KKysgIG1hc21fLnB1c2hSZXR1cm5BZGRyZXNzKCk7CisrI2VuZGlmCisrCisg ICBtYXNtXy5QdXNoKGpzOjpqaXQ6OkZyYW1lUG9pbnRlcik7CisgICBtYXNtXy5tb3ZlU3RhY2tQ dHJUbyhqczo6aml0OjpGcmFtZVBvaW50ZXIpOworIAorQEAgLTEzMDgsNiArMTMyOCw5IEBAIHZv aWQgU01SZWdFeHBNYWNyb0Fzc2VtYmxlcjo6ZXhpdEhhbmRsZXIoKSB7CisgICAvLyBQZXJmb3Jt IGEgcGxhaW4gUmV0KCksIGFzIGFiaXJldCgpIHdpbGwgbW92ZSBTUCA8LSBQU1AgYW5kIHRoYXQg aXMgd3JvbmcuCisgICBtYXNtXy5SZXQodml4bDo6bHIpOworICNlbHNlCisrIyAgaWZkZWYgSlNf Q09ERUdFTl9QUEM2NAorKyAgbWFzbV8ucG9wUmV0dXJuQWRkcmVzcygpOworKyMgIGVuZGlmCisg ICBtYXNtXy5hYmlyZXQoKTsKKyAjZW5kaWYKKyAKK0BAIC0xMzUxLDYgKzEzNzQsMTEgQEAgdm9p ZCBTTVJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpzdGFja092ZXJmbG93SGFuZGxlcigpIHsKKyAKKyAg IC8vIEFkanVzdCBmb3IgdGhlIHJldHVybiBhZGRyZXNzIG9uIHRoZSBzdGFjay4KKyAgIHNpemVf dCBmcmFtZU9mZnNldCA9IHNpemVvZih2b2lkKik7CisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQK KysgIC8vIENoZWNrQmFja3RyYWNrU3RhY2tMaW1pdCBwdXNoZXMgTFIgYmVmb3JlIGNhbGxpbmcg dXMsIHNvIHRoZXJlJ3MgYQorKyAgLy8gc2Vjb25kIHJldHVybiBhZGRyZXNzIG9uIHRoZSBzdGFj ay4KKysgIGZyYW1lT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisrI2VuZGlmCisgCisgICB2b2xh dGlsZVJlZ3MudGFrZVVuY2hlY2tlZCh0ZW1wMF8pOworICAgdm9sYXRpbGVSZWdzLnRha2VVbmNo ZWNrZWQodGVtcDFfKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFzZWxp bmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJyb3cuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvYmFz ZWxpbmUvcHBjNjQtYnJhbmNoOC0xNi1uYXJyb3cuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAwMDAuLmZjMTA3NGE5ZWY4YgorLS0tIC9kZXYvbnVsbAorKysrIGIvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL2Jhc2VsaW5lL3BwYzY0LWJyYW5jaDgtMTYtbmFycm93LmpzCitA QCAtMCwwICsxLDEwMyBAQAorKy8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgUFBDNjQgYnJhbmNoOC9i cmFuY2gxNiB3aWR0aC1uYXJyb3dpbmcgdW5kZXIgRXF1YWwgLworKy8vIE5vdEVxdWFsIC8gdW5z aWduZWQgY29tcGFyaXNvbnMuIFR3byBwcmlvciBidWdzOgorKy8vCisrLy8gICAxLiBTaWduLWV4 dGVuZGluZyB0aGUgbG9hZCB3aGlsZSBtb3ZlMzIoSW1tMzIpIHplcm8tZXh0ZW5kZWQgdGhlIGlt bQorKy8vICAgICAgY2F1c2VkIHNwdXJpb3VzIG1pc21hdGNoIHdoZW4gdGhlIGxvYWRlZCBieXRl L2hhbGZ3b3JkIGhhZCBpdHMgaGlnaAorKy8vICAgICAgYml0IHNldCAoZS5nLiAiw4DDgcOCIi5z dGFydHNXaXRoKCLDgMOBw4IiKSByZXR1cm5lZCBmYWxzZSBiZWNhdXNlIGJ5dGUgMHhDMAorKy8v ICAgICAgc2lnbi1leHRlbmRlZCB0byAweEZGLi4uQzAgYnV0IHRoZSBpbW0gMHhDMCB6ZXJvLWV4 dGVuZGVkIHRvIDB4MDBDMCwKKysvLyAgICAgIHNvIGNtcHcgb24gdGhlIGxvdyAzMiBiaXRzIHNh dyBhIG5lZ2F0aXZlIHZzIHBvc2l0aXZlIHZhbHVlKS4KKysvLworKy8vICAgMi4gQWx3YXlzIHpl cm8tZXh0ZW5kaW5nIHRoZSBsb2FkIGJyb2tlIGBieXRlID09IEltbTMyKC0xKWAgYmVjYXVzZSAt MQorKy8vICAgICAgc2lnbi1leHRlbmRzIGluIHRoZSBpbW0gcGF0aDogdGhlIGxvYWRlZCAweDAw MDAwMEZGIGRpZG4ndCBtYXRjaCB0aGUKKysvLyAgICAgIG1hdGVyaWFsaXplZCAweEZGRkZGRkZG LgorKy8vCisrLy8gRml4OiBjYXN0IHRoZSBpbW1lZGlhdGUgdG8gdWludDgvdWludDE2IChlcXVh bGl0eSArIHVuc2lnbmVkKSBvciBpbnQ4L2ludDE2CisrLy8gKHNpZ25lZCByZWxhdGlvbmFsKSBz byBib3RoIHNpZGVzIGhhdmUgbWF0Y2hpbmcgYml0IHBhdHRlcm5zIHJlZ2FyZGxlc3Mgb2YKKysv LyBob3cgbW92ZTMyKEltbTMyKSBjaG9zZSB0byBtYXRlcmlhbGl6ZSBpdC4gTWF0Y2ggQVJNNjQv TG9vbmdBcmNoNjQvUklTQy1WLgorKy8vCisrLy8gV2UgZXhlcmNpc2UgYm90aCBieXRlIGFuZCBo YWxmd29yZCBicmFuY2ggcGF0aHMgdmlhIFR5cGVkQXJyYXkgbG9hZHMgYW5kCisrLy8gU3RyaW5n LnByb3RvdHlwZS5zdGFydHNXaXRoIHdpdGggYSBjb25zdGFudCBzZWFyY2ggc3RyaW5nICh0aGUg b3JpZ2luYWwKKysvLyBmYWlsaW5nIHNpdGUgbG93ZXJlZCB0byBicmFuY2gxNihOb3RFcXVhbCwg YWRkciwgSW1tMzIoMHhDMUMwKSkpLgorKworKy8vIC0tLSBEaXJlY3QgYnl0ZS9oYWxmd29yZCBl cXVhbGl0eSB0aHJvdWdoIFR5cGVkQXJyYXkgLS0tCisreworKyAgbGV0IHU4ID0gbmV3IFVpbnQ4 QXJyYXkoWzAsIDEsIDB4N0YsIDB4ODAsIDB4QzAsIDB4QzEsIDB4RkUsIDB4RkZdKTsKKysgIGxl dCBpOCA9IG5ldyBJbnQ4QXJyYXkodTguYnVmZmVyKTsKKysgIGxldCB1MTYgPSBuZXcgVWludDE2 QXJyYXkoWzB4MDAwMCwgMHg3RkZGLCAweDgwMDAsIDB4QzFDMCwgMHhGRkZFLCAweEZGRkZdKTsK KysgIGxldCBpMTYgPSBuZXcgSW50MTZBcnJheSh1MTYuYnVmZmVyKTsKKysKKysgIC8vIEZvcmNl IGJhc2VsaW5lICsgSW9uIHRvIHNwZWNpYWxpemUgdGhlIGNvbXBhcmlzb25zLgorKyAgZnVuY3Rp b24gZXFVOChhcnIsIGlkeCwgdmFsKSB7CisrICAgIHJldHVybiBhcnJbaWR4XSA9PT0gdmFsOwor KyAgfQorKyAgZnVuY3Rpb24gZXFJOChhcnIsIGlkeCwgdmFsKSB7CisrICAgIHJldHVybiBhcnJb aWR4XSA9PT0gdmFsOworKyAgfQorKyAgZnVuY3Rpb24gZXFVMTYoYXJyLCBpZHgsIHZhbCkgewor KyAgICByZXR1cm4gYXJyW2lkeF0gPT09IHZhbDsKKysgIH0KKysgIGZ1bmN0aW9uIGVxSTE2KGFy ciwgaWR4LCB2YWwpIHsKKysgICAgcmV0dXJuIGFycltpZHhdID09PSB2YWw7CisrICB9CisrCisr ICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisrICAgIC8vIEhpZ2gtYml0LXNldCBi eXRlczogYml0IHBhdHRlcm4gZXF1YWxpdHkgbXVzdCBob2xkIGJvdGggc2lnbmVkIGFuZAorKyAg ICAvLyB1bnNpZ25lZCBpbnRlcnByZXRhdGlvbnMgb2YgdGhlIGltbWVkaWF0ZS4KKysgICAgYXNz ZXJ0RXEoZXFVOCh1OCwgNCwgMHhDMCksIHRydWUpOyAgIC8vIHVuc2lnbmVkIGNvbXBhcmUgMHhD MCA9PSAweEMwCisrICAgIGFzc2VydEVxKGVxVTgodTgsIDQsIDB4QzEpLCBmYWxzZSk7CisrICAg IGFzc2VydEVxKGVxVTgodTgsIDcsIDB4RkYpLCB0cnVlKTsKKysgICAgYXNzZXJ0RXEoZXFVOCh1 OCwgNywgLTEgJiAweEZGKSwgdHJ1ZSk7ICAgLy8gMHhGRiB3cml0dGVuIGFzIC0xJjB4RkYKKysK KysgICAgLy8gU2lnbmVkIEludDggdmlldzogMHhGRiBpcyAtMSwgMHhDMCBpcyAtNjQuCisrICAg IGFzc2VydEVxKGVxSTgoaTgsIDQsIC02NCksIHRydWUpOworKyAgICBhc3NlcnRFcShlcUk4KGk4 LCA3LCAtMSksIHRydWUpOworKyAgICBhc3NlcnRFcShlcUk4KGk4LCA0LCAtNjMpLCBmYWxzZSk7 CisrCisrICAgIC8vIEhhbGZ3b3JkIHZhcmlhbnRzOiB0aGUgb3JpZ2luYWwgc3RhcnRzd2l0aCBm YWlsdXJlIHBhdHRlcm4gd2FzCisrICAgIC8vIChMYXRpbi0xIGNoYXIgMHhDMUMwKSDigJQgYSAx Ni1iaXQgdmFsdWUgd2l0aCBiaXQgMTUgc2V0LgorKyAgICBhc3NlcnRFcShlcVUxNih1MTYsIDMs IDB4QzFDMCksIHRydWUpOworKyAgICBhc3NlcnRFcShlcVUxNih1MTYsIDMsIDB4QzFDMSksIGZh bHNlKTsKKysgICAgYXNzZXJ0RXEoZXFVMTYodTE2LCA1LCAweEZGRkYpLCB0cnVlKTsKKysgICAg YXNzZXJ0RXEoZXFVMTYodTE2LCA1LCAtMSAmIDB4RkZGRiksIHRydWUpOworKworKyAgICBhc3Nl cnRFcShlcUkxNihpMTYsIDMsIC0xNTkzNiksIHRydWUpOyAgLy8gMHhDMUMwIGFzIGkxNiA9IC0x NTkzNgorKyAgICBhc3NlcnRFcShlcUkxNihpMTYsIDUsIC0xKSwgdHJ1ZSk7CisrICAgIGFzc2Vy dEVxKGVxSTE2KGkxNiwgNSwgLTIpLCBmYWxzZSk7CisrICB9CisrfQorKworKy8vIC0tLSBTdHJp bmcucHJvdG90eXBlLnN0YXJ0c1dpdGggd2l0aCBhIExhdGluLTEgY29uc3RhbnQgc2VhcmNoIC0t LQorKy8vIFRoaXMgd2FzIHRoZSBvcmlnaW5hbCBmYWlsaW5nIHNpdGUg4oCUIElvbiBsb3dlcnMg YSBjb25zdGFudCBzZWFyY2ggc3RyaW5nCisrLy8gb2YgbGVuZ3RoIDEuLjMyIGludG8gYSBzZXF1 ZW5jZSBvZiBieXRlLXdpc2UgY29tcGFyaXNvbnMuCisreworKyAgbGV0IHMgPSAiw4DDgcOCIjsg IC8vIExhdGluLTEgbGVuZ3RoIDMsIGJ5dGVzIDB4QzAgMHhDMSAweEMyIChhbGwgaGlnaC1iaXQg c2V0KQorKyAgZnVuY3Rpb24gY2hlY2soKSB7CisrICAgIHJldHVybiBzLnN0YXJ0c1dpdGgoIsOA w4HDgiIpOworKyAgfQorKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDA7IGkrKykgeworKyAgICBh c3NlcnRFcShjaGVjaygpLCB0cnVlKTsKKysgIH0KKysKKysgIC8vIE1pc21hdGNoIG9uIGEgc2lu Z2xlIGhpZ2gtYml0IGJ5dGUgbXVzdCByZXBvcnQgbm90LWVxdWFsLgorKyAgbGV0IHMyID0gIsOA w4HDgyI7ICAvLyBsYXN0IGJ5dGUgMHhDMyBpbnN0ZWFkIG9mIDB4QzIKKysgIGZ1bmN0aW9uIGNo ZWNrMigpIHsKKysgICAgcmV0dXJuIHMyLnN0YXJ0c1dpdGgoIsOAw4HDgiIpOworKyAgfQorKyAg Zm9yIChsZXQgaSA9IDA7IGkgPCAyMDA7IGkrKykgeworKyAgICBhc3NlcnRFcShjaGVjazIoKSwg ZmFsc2UpOworKyAgfQorK30KKysKKysvLyAtLS0gU2lnbmVkIHJlbGF0aW9uYWwgY29tcGFyaXNv bnMgc3RpbGwgd29yayAod2Uga2VwdCB0aGUgc2lnbi1leHRlbmQgcGF0aCkgLS0tCisreworKyAg bGV0IGk4ID0gbmV3IEludDhBcnJheShbMHg3RiwgLTEsIC0xMjgsIDEsIDBdKTsKKysgIGZ1bmN0 aW9uIGx0WmVybyhpZHgpIHsKKysgICAgcmV0dXJuIGk4W2lkeF0gPCAwOworKyAgfQorKyAgZm9y IChsZXQgaSA9IDA7IGkgPCAyMDA7IGkrKykgeworKyAgICBhc3NlcnRFcShsdFplcm8oMCksIGZh bHNlKTsgIC8vIDB4N0YgPSArMTI3CisrICAgIGFzc2VydEVxKGx0WmVybygxKSwgdHJ1ZSk7ICAg Ly8gLTEKKysgICAgYXNzZXJ0RXEobHRaZXJvKDIpLCB0cnVlKTsgICAvLyAtMTI4CisrICAgIGFz c2VydEVxKGx0WmVybygzKSwgZmFsc2UpOyAgLy8gMQorKyAgfQorK30KK2RpZmYgLS1naXQgYS9q cy9zcmMvaml0LXRlc3QvdGVzdHMvZ2MvZ2NwYXJhbS5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy9nYy9nY3BhcmFtLmpzCitpbmRleCA1MWQ1ODY2MjE5M2YuLjQ4ZTVhOTdjMTM1ZiAxMDA2NDQK Ky0tLSBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9nYy9nY3BhcmFtLmpzCisrKysgYi9qcy9zcmMv aml0LXRlc3QvdGVzdHMvZ2MvZ2NwYXJhbS5qcworQEAgLTMwLDcgKzMwLDggQEAgdGVzdEdldFBh cmFtKCJjaHVua0J5dGVzIik7CisgdGVzdEdldFBhcmFtKCJoZWxwZXJUaHJlYWRDb3VudCIpOwor IAorIHRlc3RDaGFuZ2VQYXJhbSgibWF4Qnl0ZXMiKTsKKy10ZXN0Q2hhbmdlUGFyYW0oIm1pbk51 cnNlcnlCeXRlcyIsIDE2ICogMTAyNCk7CisrdmFyIHBhZ2VTaXplID0gZ2NwYXJhbSgic3lzdGVt UGFnZVNpemVLQiIpICogMTAyNDsKKyt0ZXN0Q2hhbmdlUGFyYW0oIm1pbk51cnNlcnlCeXRlcyIs IHBhZ2VTaXplKTsKKyB0ZXN0Q2hhbmdlUGFyYW0oIm1heE51cnNlcnlCeXRlcyIsIDEwMjQgKiAx MDI0KTsKKyB0ZXN0Q2hhbmdlUGFyYW0oImluY3JlbWVudGFsR0NFbmFibGVkIik7CisgdGVzdENo YW5nZVBhcmFtKCJwZXJab25lR0NFbmFibGVkIik7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10 ZXN0L3Rlc3RzL2lvbi9tb2QtY29uc3RhbnQtcG93Mi1taW51cy1vbmUuanMgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvaW9uL21vZC1jb25zdGFudC1wb3cyLW1pbnVzLW9uZS5qcworbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uOTAyOGY1NTg3YzY1CistLS0gL2Rldi9u dWxsCisrKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1jb25zdGFudC1wb3cyLW1p bnVzLW9uZS5qcworQEAgLTAsMCArMSw3OCBAQAorKy8vIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBQ UEM2NCBJb24gbWlzY29tcGlsZSBvZiBpbnRlZ2VyIG1vZHVsbyBieSBhCisrLy8gY29uc3RhbnQg b2YgdGhlIGZvcm0gMl5uIC0gMSAoZS5nLiA2NTUzNSkuCisrLy8KKysvLyBsb3dlck1vZEkgcm91 dGVzIGB4ICUgKDJebiAtIDEpYCB0byBMTW9kTWFza0ksIHdob3NlIGNvZGVnZW4KKysvLyAobWFf bW9kX21hc2spIG1hdGVyaWFsaXplZCB0aGUgbWFzayAyXm4gLSAxIHdpdGggeHNfbGkoKS4geHNf bGkgdGFrZXMgYQorKy8vIHNpZ25lZCBpbnQxNl90LCBzbyBhIG1hc2sgb2YgMHhGRkZGIHdhcyB0 cnVuY2F0ZWQgdG8gLTEsIGNvcnJ1cHRpbmcgdGhlCisrLy8gZGlnaXQtc3VtbWluZyByZWR1Y3Rp b24uIFRoZSBidWcgb25seSBhZmZlY3RlZCBtYXNrcyB0aGF0IGRvIG5vdCBmaXQgaW4gYQorKy8v IHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRlLCBpLmUuIGRpdmlzb3JzID49IDY1NTM1IChuID49IDE2 KTsgc21hbGxlcgorKy8vIDJebiAtIDEgZGl2aXNvcnMgc3VjaCBhcyAyNTUgd2VyZSB1bmFmZmVj dGVkLgorKy8vCisrLy8gVGhlIHJlZmVyZW5jZSB1c2VzIGEgbm9uLWNvbnN0YW50IGRpdmlzb3Is IHdoaWNoIGxvd2VycyB0byB0aGUKKysvLyBoYXJkd2FyZS1kaXZpZGUgbW9kdWxvIHBhdGggKExN b2RJKSBhbmQgaXMgdGhlcmVmb3JlIGluZGVwZW5kZW50IG9mIHRoZQorKy8vIExNb2RNYXNrSSBj b2RlZ2VuIHVuZGVyIHRlc3QuCisrCisrZnVuY3Rpb24gcmVmbW9kKHgsIGQpIHsKKysgIC8vIGQg aXMgbm90IGEgY29uc3RhbnQgaGVyZSAtPiBkaXZpZGUtYmFzZWQgbW9kdWxvLCBub3QgTE1vZE1h c2tJLgorKyAgcmV0dXJuICh4ICUgZCkgfCAwOworK30KKysKKysvLyBPbmUgZnVuY3Rpb24gcGVy IGNvbnN0YW50IGRpdmlzb3Igc28gdGhlIGRpdmlzb3IgaXMgYSBsaXRlcmFsIGFuZCB0aGUKKysv LyBMTW9kTWFza0kgcGF0aCBpcyBzZWxlY3RlZC4KKytmdW5jdGlvbiBtb2QyNTUoeCkgeyByZXR1 cm4gKHggJSAyNTUpIHwgMDsgfQorK2Z1bmN0aW9uIG1vZDMyNzY3KHgpIHsgcmV0dXJuICh4ICUg MzI3NjcpIHwgMDsgfQorK2Z1bmN0aW9uIG1vZDY1NTM1KHgpIHsgcmV0dXJuICh4ICUgNjU1MzUp IHwgMDsgfQorK2Z1bmN0aW9uIG1vZDEzMTA3MSh4KSB7IHJldHVybiAoeCAlIDEzMTA3MSkgfCAw OyB9CisrZnVuY3Rpb24gbW9kMTA0ODU3NSh4KSB7IHJldHVybiAoeCAlIDEwNDg1NzUpIHwgMDsg fQorKworK2NvbnN0IGNhc2VzID0gWworKyAgW21vZDI1NSwgMjU1XSwKKysgIFttb2QzMjc2Nywg MzI3NjddLAorKyAgW21vZDY1NTM1LCA2NTUzNV0sCisrICBbbW9kMTMxMDcxLCAxMzEwNzFdLAor KyAgW21vZDEwNDg1NzUsIDEwNDg1NzVdLAorK107CisrCisrLy8gSW5wdXRzIHNwYW5uaW5nIHNt YWxsIHZhbHVlcywgdmFsdWVzIHdpdGggYml0cyBhYm92ZSB0aGUgbWFzayB3aWR0aAorKy8vIChz byB0aGUgbXVsdGktZGlnaXQgcmVkdWN0aW9uIGlzIGV4ZXJjaXNlZCksIGFuZCBuZWdhdGl2ZXMu CisrY29uc3QgaW5wdXRzID0gW107CisrZm9yIChsZXQgaSA9IDA7IGkgPCA2NDsgaSsrKSB7Cisr ICBpbnB1dHMucHVzaChNYXRoLmltdWwoaSwgMjY1NDQzNTc2MSkgfCAwKTsKKysgIGlucHV0cy5w dXNoKChpICogNjU1MzUgKyBpKSB8IDApOworKyAgaW5wdXRzLnB1c2goKGkgKiAxMzEwNzEgLSA3 KSB8IDApOworKyAgaW5wdXRzLnB1c2goLU1hdGguaW11bChpLCA0MDUwMykgfCAwKTsKKyt9Cisr aW5wdXRzLnB1c2goMCwgMSwgLTEsIDY1NTM0LCA2NTUzNSwgNjU1MzYsIDB4N2ZmZmZmZmYsIC0w eDgwMDAwMDAwKTsKKysKKysvLyBXYXJtIHVwIHRocm91Z2ggdGhlIHRpZXJzLCB0aGVuIGFzc2Vy dCBlYWNoIGNvbnN0YW50LWRpdmlzb3IgcmVzdWx0CisrLy8gbWF0Y2hlcyB0aGUgZGl2aWRlLWJh c2VkIHJlZmVyZW5jZS4KKytmb3IgKGxldCBpdGVyID0gMDsgaXRlciA8IDIwMDA7IGl0ZXIrKykg eworKyAgZm9yIChjb25zdCBbZm4sIGRdIG9mIGNhc2VzKSB7CisrICAgIGZvciAoY29uc3QgeCBv ZiBpbnB1dHMpIHsKKysgICAgICBhc3NlcnRFcShmbih4KSwgcmVmbW9kKHgsIGQpKTsKKysgICAg fQorKyAgfQorK30KKysKKysvLyBSZWdpc3Rlci1wcmVzc3VyZSB2YXJpYW50OiBtaXJyb3JzIHRo ZSBzaGFwZSB0aGF0IGV4cG9zZWQgdGhlIGJ1ZyAobWFueQorKy8vIGxpdmUgbG9jYWxzIGZvcmNp bmcgdGhlIG1hc2sgbWF0ZXJpYWxpemF0aW9uIHRvIGludGVyYWN0IHdpdGggc3BpbGxzKS4KKytm dW5jdGlvbiBwcmVzc3VyZShidWYsIGkpIHsKKysgIGxldCB2MCA9IGksIHYxID0gaSArIDEsIHYy ID0gaSArIDIsIHYzID0gaSArIDMsIHY0ID0gaSArIDQsIHY1ID0gaSArIDU7CisrICBsZXQgdjYg PSBpICsgNiwgdjcgPSBpICsgNywgdjggPSBpICsgOCwgdjkgPSBpICsgOSwgdjEwID0gaSArIDEw LCB2MTEgPSBpICsgMTE7CisrICBsZXQgdjEyID0gaSArIDEyLCB2MTMgPSBpICsgMTMsIHYxNCA9 IGkgKyAxNCwgdjE1ID0gaSArIDE1OworKyAgY29uc3QgciA9IChidWZbaSAmIDYzXSAlIDY1NTM1 KSB8IDA7CisrICAvLyBLZWVwIGV2ZXJ5IGxvY2FsIGxpdmUgdG8gdGhlIHJldHVybiB3aXRob3V0 IGFsdGVyaW5nIHIuCisrICBjb25zdCBsaXZlID0gKHYwIF4gdjEgXiB2MiBeIHYzIF4gdjQgXiB2 NSBeIHY2IF4gdjcgXgorKyAgICAgICAgICAgICAgICB2OCBeIHY5IF4gdjEwIF4gdjExIF4gdjEy IF4gdjEzIF4gdjE0IF4gdjE1KSAmIDA7CisrICByZXR1cm4gciArIGxpdmU7CisrfQorKworK2Nv bnN0IGJ1ZiA9IG5ldyBJbnQzMkFycmF5KDY0KTsKKytmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5s ZW5ndGg7IGkrKykgeworKyAgYnVmW2ldID0gTWF0aC5pbXVsKGksIDI2NTQ0MzU3NjEpIHwgMDsK Kyt9CisrZm9yIChsZXQgaXRlciA9IDA7IGl0ZXIgPCA1MDAwOyBpdGVyKyspIHsKKysgIGZvciAo bGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykgeworKyAgICBhc3NlcnRFcShwcmVzc3VyZShidWYsIGkp LCByZWZtb2QoYnVmW2kgJiA2M10sIDY1NTM1KSk7CisrICB9CisrfQorZGlmZiAtLWdpdCBhL2pz L3NyYy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLXBvdzItbmVnYXRpdmUtZGl2aWRlbmQuanMgYi9q cy9zcmMvaml0LXRlc3QvdGVzdHMvaW9uL21vZC1wb3cyLW5lZ2F0aXZlLWRpdmlkZW5kLmpzCitu ZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi45OTA1Y2M0YThmMzYKKy0t LSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9pb24vbW9kLXBvdzItbmVn YXRpdmUtZGl2aWRlbmQuanMKK0BAIC0wLDAgKzEsNzEgQEAKKysvLyBSZWdyZXNzaW9uIHRlc3Qg Zm9yIGEgUFBDNjQgSW9uIG1pc2NvbXBpbGUgb2YgaW50ZWdlciBtb2R1bG8gYnkgYSBjb25zdGFu dAorKy8vIHBvd2VyIG9mIHR3byAoZS5nLiA2NTUzNikgd2l0aCBhIG5lZ2F0aXZlIGRpdmlkZW5k LgorKy8vCisrLy8gbG93ZXJNb2RJIHJvdXRlcyBgeCAlIDJebmAgdG8gTE1vZFBvd1R3b0ksIHdo b3NlIGNvZGVnZW4gdGVzdGVkIHRoZSBzaWduIG9mCisrLy8gdGhlIGRpdmlkZW5kIHdpdGggYnJh bmNoUHRyIChhIDY0LWJpdCBjb21wYXJlKS4gV2hlbiB0aGUgaW50MzIgZGl2aWRlbmQgd2FzCisr Ly8gaGVsZCB6ZXJvLWV4dGVuZGVkIGluIGl0cyByZWdpc3RlciwgdGhlIDY0LWJpdCB0ZXN0IG1p c2NsYXNzaWZpZWQgYSBuZWdhdGl2ZQorKy8vIHZhbHVlIGFzIG5vbi1uZWdhdGl2ZSBhbmQgdG9v ayB0aGUgdW5tYXNrZWQgcG9zaXRpdmUgcGF0aCwgcmV0dXJuaW5nCisrLy8gYHggJiAoMl5uIC0g MSlgIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgKG5lZ2F0aXZlKSBgeCAlIDJebmAuIEZpeGVkIGJ5 IHVzaW5nIGEKKysvLyAzMi1iaXQgc2lnbiB0ZXN0IChicmFuY2gzMikuCisrLy8KKysvLyBUaGUg cmVmZXJlbmNlIHVzZXMgYSBub24tY29uc3RhbnQgZGl2aXNvciwgd2hpY2ggbG93ZXJzIHRvIHRo ZSBkaXZpZGUtYmFzZWQKKysvLyBtb2R1bG8gcGF0aCAoTE1vZEkpLCBpbmRlcGVuZGVudCBvZiBM TW9kUG93VHdvSS4KKysKKytmdW5jdGlvbiByZWZtb2QoeCwgZCkgeworKyAgcmV0dXJuICh4ICUg ZCkgfCAwOworK30KKysKKytmdW5jdGlvbiBtb2QyNTYoeCkgeyByZXR1cm4gKHggJSAyNTYpIHwg MDsgfQorK2Z1bmN0aW9uIG1vZDEwMjQoeCkgeyByZXR1cm4gKHggJSAxMDI0KSB8IDA7IH0KKytm dW5jdGlvbiBtb2Q0MDk2KHgpIHsgcmV0dXJuICh4ICUgNDA5NikgfCAwOyB9CisrZnVuY3Rpb24g bW9kNjU1MzYoeCkgeyByZXR1cm4gKHggJSA2NTUzNikgfCAwOyB9CisrZnVuY3Rpb24gbW9kMTA0 ODU3Nih4KSB7IHJldHVybiAoeCAlIDEwNDg1NzYpIHwgMDsgfQorK2Z1bmN0aW9uIG1vZDEwNzM3 NDE4MjQoeCkgeyByZXR1cm4gKHggJSAxMDczNzQxODI0KSB8IDA7IH0KKysKKytjb25zdCBjYXNl cyA9IFsKKysgIFttb2QyNTYsIDI1Nl0sCisrICBbbW9kMTAyNCwgMTAyNF0sCisrICBbbW9kNDA5 NiwgNDA5Nl0sCisrICBbbW9kNjU1MzYsIDY1NTM2XSwKKysgIFttb2QxMDQ4NTc2LCAxMDQ4NTc2 XSwKKysgIFttb2QxMDczNzQxODI0LCAxMDczNzQxODI0XSwKKytdOworKworKy8vIEhlYXZ5IG9u IG5lZ2F0aXZlIGRpdmlkZW5kcyAodGhlIGJyb2tlbiBwYXRoKSwgcGx1cyBib3VuZGFyeSB2YWx1 ZXMuCisrY29uc3QgaW5wdXRzID0gW107CisrZm9yIChsZXQgaSA9IDE7IGkgPD0gNjQ7IGkrKykg eworKyAgaW5wdXRzLnB1c2goLU1hdGguaW11bChpLCAyNjU0NDM1NzYxKSB8IDApOworKyAgaW5w dXRzLnB1c2goLShpICogMTY4KSk7CisrICBpbnB1dHMucHVzaCgtKGkgKiA3MDAwMSkpOworKyAg aW5wdXRzLnB1c2goTWF0aC5pbXVsKGksIDQwNTAzKSB8IDApOworK30KKytpbnB1dHMucHVzaCgw LCAtMSwgMSwgLTE2OCwgLTY1NTM1LCAtNjU1MzYsIC02NTUzNywgMTY4LAorKyAgICAgICAgICAg IDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMHg3ZmZmZmZmZik7CisrCisrZm9yIChsZXQgaXRl ciA9IDA7IGl0ZXIgPCAzMDAwOyBpdGVyKyspIHsKKysgIGZvciAoY29uc3QgW2ZuLCBkXSBvZiBj YXNlcykgeworKyAgICBmb3IgKGNvbnN0IHggb2YgaW5wdXRzKSB7CisrICAgICAgYXNzZXJ0RXEo Zm4oeCksIHJlZm1vZCh4LCBkKSk7CisrICAgIH0KKysgIH0KKyt9CisrCisrLy8gUmVnaXN0ZXIt cHJlc3N1cmUgdmFyaWFudDogYSBuZWdhdGl2ZSBkaXZpZGVuZCBwcm9kdWNlZCBhdCBydW50aW1l CisrLy8gKGZsb2F0LT5pbnQpIHdpdGggbWFueSBsaXZlIGxvY2FscywgbWlycm9yaW5nIHRoZSBz aGFwZSB0aGF0IGV4cG9zZWQgdGhlIGJ1Zy4KKytmdW5jdGlvbiBwcmVzc3VyZShzZWVkKSB7Cisr ICBsZXQgdjAgPSBzZWVkLCB2MSA9IHNlZWQgKyAxLCB2MiA9IHNlZWQgKyAyLCB2MyA9IHNlZWQg KyAzLCB2NCA9IHNlZWQgKyA0OworKyAgbGV0IHY1ID0gc2VlZCArIDUsIHY2ID0gc2VlZCArIDYs IHY3ID0gc2VlZCArIDcsIHY4ID0gc2VlZCArIDgsIHY5ID0gc2VlZCArIDk7CisrICBsZXQgdjEw ID0gc2VlZCArIDEwLCB2MTEgPSBzZWVkICsgMTEsIHYxMiA9IHNlZWQgKyAxMiwgdjEzID0gc2Vl ZCArIDEzOworKyAgbGV0IGQwID0gc2VlZCAqIDAuNSwgZDEgPSBzZWVkICogMS41LCBkMiA9IC1z ZWVkICogMi41OworKyAgY29uc3QgbmVnID0gKE1hdGguZnJvdW5kKC0oTWF0aC5hYnMoc2VlZCkg KyAwLjcpKSB8IDApOworKyAgY29uc3QgciA9IChuZWcgJSA2NTUzNikgfCAwOworKyAgY29uc3Qg bGl2ZSA9ICh2MCBeIHYxIF4gdjIgXiB2MyBeIHY0IF4gdjUgXiB2NiBeIHY3IF4gdjggXiB2OSBe CisrICAgICAgICAgICAgICAgIHYxMCBeIHYxMSBeIHYxMiBeIHYxMyBeIChkMCB8IDApIF4gKGQx IHwgMCkgXiAoZDIgfCAwKSkgJiAwOworKyAgcmV0dXJuIHIgKyBsaXZlOworK30KKytmb3IgKGxl dCBpdGVyID0gMDsgaXRlciA8IDUwMDA7IGl0ZXIrKykgeworKyAgZm9yIChsZXQgcyA9IDE7IHMg PD0gMjAwOyBzKyspIHsKKysgICAgY29uc3QgZXhwZWN0ID0gKChNYXRoLmZyb3VuZCgtKHMgKyAw LjcpKSB8IDApICUgNjU1MzYpIHwgMDsKKysgICAgYXNzZXJ0RXEocHJlc3N1cmUocyksIGV4cGVj dCk7CisrICB9CisrfQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy9tYXRoLW1p bi1tYXgtY29ybmVyLWNhc2VzLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL21hdGgtbWluLW1h eC1jb3JuZXItY2FzZXMuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAw MDAuLjdhYzJjNTljYWVmZgorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL21hdGgtbWluLW1heC1jb3JuZXItY2FzZXMuanMKK0BAIC0wLDAgKzEsNTAgQEAKKysvLyBN YXRoLm1pbiAvIE1hdGgubWF4IGNvcm5lciBjYXNlcy4gRXhlcmNpc2VzIHRoZSBQT1dFUjkgeHNt aW5qZHAgLworKy8vIHhzbWF4amRwIEotZm9ybSBmYXN0IHBhdGggb24gUFBDNjQgKGFuZCB0aGUg ZmNtcHUvYnJhbmNoIGZhbGxiYWNrIG9uCisrLy8gUE9XRVI4IGZvcmNlZCk7IG90aGVyIGJhY2tl bmRzIGFscmVhZHkgY292ZXIgdGhpcyB2aWEgc2hhcmVkIGZwIHRlc3RzCisrLy8gYnV0IHRoZSB0 cnV0aCB0YWJsZSBpcyBzbWFsbCBhbmQgd29ydGggcGlubmluZyBleHBsaWNpdGx5LgorKy8vCisr Ly8gSlMgc2VtYW50aWNzIChFQ01BLTI2Mik6CisrLy8gICAtIE1hdGgubWF4KC0wLCArMCkgPT09 ICswOyBNYXRoLm1pbigtMCwgKzApID09PSAtMAorKy8vICAgLSBNYXRoLm1heCgtMCwgLTApID09 PSAtMDsgTWF0aC5taW4oKzAsICswKSA9PT0gKzAKKysvLyAgIC0gQW55IE5hTiBvcGVyYW5kIOKG kiBOYU4KKysvLyAgIC0gwrFJbmYgYW5kIG9yZGluYXJ5IG51bWVyaWNzIGJ5IHZhbHVlCisrCisr ZnVuY3Rpb24gb2JqZWN0SXNQb3NpdGl2ZVplcm8odikgeworKyAgcmV0dXJuIHYgPT09IDAgJiYg T2JqZWN0LmlzKHYsIDApOworK30KKytmdW5jdGlvbiBvYmplY3RJc05lZ2F0aXZlWmVybyh2KSB7 CisrICByZXR1cm4gdiA9PT0gMCAmJiBPYmplY3QuaXModiwgLTApOworK30KKysKKysvLyBEaXJl Y3QgY2FsbHMg4oCUIHRoZXNlIGdldCBpbmxpbmVkIGJ5IElvbiBhcyBNTWluTWF4IGludHJpbnNp Y3MsIHdoaWNoCisrLy8gZW1pdCB0aGUgcmVsZXZhbnQgbWluL21heCBoZWxwZXIuCisrZnVuY3Rp b24gY2hlY2soKSB7CisrICAvLyBNYXggY29ybmVyIGNhc2VzLgorKyAgYXNzZXJ0RXEob2JqZWN0 SXNQb3NpdGl2ZVplcm8oTWF0aC5tYXgoLTAsICswKSksIHRydWUpOworKyAgYXNzZXJ0RXEob2Jq ZWN0SXNQb3NpdGl2ZVplcm8oTWF0aC5tYXgoKzAsIC0wKSksIHRydWUpOworKyAgYXNzZXJ0RXEo b2JqZWN0SXNOZWdhdGl2ZVplcm8oTWF0aC5tYXgoLTAsIC0wKSksIHRydWUpOworKyAgYXNzZXJ0 RXEob2JqZWN0SXNQb3NpdGl2ZVplcm8oTWF0aC5tYXgoKzAsICswKSksIHRydWUpOworKyAgYXNz ZXJ0RXEoTnVtYmVyLmlzTmFOKE1hdGgubWF4KE5hTiwgNSkpLCB0cnVlKTsKKysgIGFzc2VydEVx KE51bWJlci5pc05hTihNYXRoLm1heCg1LCBOYU4pKSwgdHJ1ZSk7CisrICBhc3NlcnRFcShOdW1i ZXIuaXNOYU4oTWF0aC5tYXgoTmFOLCBOYU4pKSwgdHJ1ZSk7CisrICBhc3NlcnRFcShNYXRoLm1h eCgtSW5maW5pdHksIDUpLCA1KTsKKysgIGFzc2VydEVxKE1hdGgubWF4KEluZmluaXR5LCA1KSwg SW5maW5pdHkpOworKyAgYXNzZXJ0RXEoTWF0aC5tYXgoMSwgMiksIDIpOworKyAgYXNzZXJ0RXEo TWF0aC5tYXgoLTEsIC0yKSwgLTEpOworKyAgYXNzZXJ0RXEoTWF0aC5tYXgoMS41LCAyLjUpLCAy LjUpOworKworKyAgLy8gTWluIGNvcm5lciBjYXNlcy4KKysgIGFzc2VydEVxKG9iamVjdElzTmVn YXRpdmVaZXJvKE1hdGgubWluKC0wLCArMCkpLCB0cnVlKTsKKysgIGFzc2VydEVxKG9iamVjdElz TmVnYXRpdmVaZXJvKE1hdGgubWluKCswLCAtMCkpLCB0cnVlKTsKKysgIGFzc2VydEVxKG9iamVj dElzTmVnYXRpdmVaZXJvKE1hdGgubWluKC0wLCAtMCkpLCB0cnVlKTsKKysgIGFzc2VydEVxKG9i amVjdElzUG9zaXRpdmVaZXJvKE1hdGgubWluKCswLCArMCkpLCB0cnVlKTsKKysgIGFzc2VydEVx KE51bWJlci5pc05hTihNYXRoLm1pbihOYU4sIDUpKSwgdHJ1ZSk7CisrICBhc3NlcnRFcShOdW1i ZXIuaXNOYU4oTWF0aC5taW4oNSwgTmFOKSksIHRydWUpOworKyAgYXNzZXJ0RXEoTWF0aC5taW4o LUluZmluaXR5LCA1KSwgLUluZmluaXR5KTsKKysgIGFzc2VydEVxKE1hdGgubWluKEluZmluaXR5 LCA1KSwgNSk7CisrICBhc3NlcnRFcShNYXRoLm1pbigxLCAyKSwgMSk7CisrfQorKworKy8vIFJ1 biBjb2xkIChCYXNlbGluZSkgYW5kIGhvdCAoSW9uKS4KKytjaGVjaygpOworK2ZvciAobGV0IGkg PSAwOyBpIDwgNTAwMDA7IGkrKykgY2hlY2soKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRl c3QvdGVzdHMvd2FzbS9hdG9taWNpdHkuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9h dG9taWNpdHkuanMKK2luZGV4IDM0MzI3ZWM5NTc0MS4uYWMxNTE2MDgzMzI1IDEwMDY0NAorLS0t IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vYXRvbWljaXR5LmpzCisrKysgYi9qcy9zcmMv aml0LXRlc3QvdGVzdHMvd2FzbS9hdG9taWNpdHkuanMKK0BAIC04LDcgKzgsMTEgQEAKKyBjb25z dCBERUJVRyA9IDA7CisgCisgLy8gVGhlIGxvbmdlciB3ZSBydW4sIHRoZSBiZXR0ZXIsIHJlYWxs eSwgYnV0IHdlIGRvbid0IHdhbnQgdG8gdGltZSBvdXQuCistY29uc3QgSVRFUkFUSU9OUyA9IDEw MDAwMDsKKysvLyBSZWFsIFBQQzY0IGhhcmR3YXJlIHJldHJpZXMgbHdhcngvc3R3Y3guIHJlc2Vy dmF0aW9uIGxvb3BzIHVuZGVyCisrLy8gY29udGVudGlvbiwgd2hpY2ggbWFrZXMgdGhlIGRlZmF1 bHQgY291bnQgZXhjZWVkIGppdC10ZXN0J3MgMTUwIHMKKysvLyBidWRnZXQgb24gUE9XRVI4IGFu ZCAobGVzcyBzbykgUE9XRVI5L1BPV0VSMTAuIFF1YXJ0ZXIgdGhlIGNvdW50CisrLy8gdGhlcmUg dG8ga2VlcCBjb3ZlcmFnZSB3aGlsZSBmaXR0aW5nIHRoZSBkZWZhdWx0IGJ1ZGdldC4KKytjb25z dCBJVEVSQVRJT05TID0gZ2V0QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2NCIpID8gMjUwMDAgOiAx MDAwMDA7CisgCisgLy8gSWYgeW91IGNoYW5nZSBOVU1XT1JLRVJTIHlvdSBtdXN0IGFsc28gY2hh bmdlIHRoZSB0YWJsZXMgZm9yIElOSVQsIFZBTCwgYW5kCisgLy8gUkVTVUxUIGZvciBhbGwgdGhl IG9wZXJhdGlvbnMsIGJlbG93LCBieSBhZGRpbmcgb3IgcmVtb3ZpbmcgYml0cy4KK0BAIC0zOSw3 ICs0Myw3IEBAIGlmIChnZXRDb3JlQ291bnQoKSA8IE5VTUFHRU5UUykgeworIAorIGlmIChnZXRC dWlsZENvbmZpZ3VyYXRpb24oImFybS1zaW11bGF0b3IiKSB8fCBnZXRCdWlsZENvbmZpZ3VyYXRp b24oImFybTY0LXNpbXVsYXRvciIpIHx8CisgICAgIGdldEJ1aWxkQ29uZmlndXJhdGlvbigibWlw czY0LXNpbXVsYXRvciIpIHx8IGdldEJ1aWxkQ29uZmlndXJhdGlvbigicmlzY3Y2NC1zaW11bGF0 b3IiKSB8fAorLSAgICBnZXRCdWlsZENvbmZpZ3VyYXRpb24oImxvb25nNjQtc2ltdWxhdG9yIikp CisrICAgIGdldEJ1aWxkQ29uZmlndXJhdGlvbigibG9vbmc2NC1zaW11bGF0b3IiKSB8fCBnZXRC dWlsZENvbmZpZ3VyYXRpb24oInBwYzY0LXNpbXVsYXRvciIpKQorIHsKKyAgICAgaWYgKERFQlVH ID4gMCkKKyAgICAgICAgIHByaW50KCJBdG9taWNpdHkgdGVzdCBkaXNhYmxlZCBvbiBzaW11bGF0 b3IiKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUt aW5saW5pbmcuanMgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5p bmcuanMKK2luZGV4IDkxZWM3MTBlNGU0Ni4uYTdkM2IzMjExNTE1IDEwMDY0NAorLS0tIGEvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vZXhjZXNzaXZlLWlubGluaW5nLmpzCisrKysgYi9qcy9z cmMvaml0LXRlc3QvdGVzdHMvd2FzbS9leGNlc3NpdmUtaW5saW5pbmcuanMKK0BAIC03NCwyMyAr NzQsMjYgQEAgYXNzZXJ0RXEodGllcjJjb2RlQnl0ZXNVc2VkID4gMjAwMCwgdHJ1ZSk7CisgCisg Ly8gQnV0IG5vdCBhbiBleGNlc3NpdmUgYW1vdW50LiAgVGhpcyBpcyB0aGUgYXNzZXJ0aW9uIHRo YXQgY2hlY2tzIHRoYXQKKyAvLyB0aGUgaW5saW5pbmctYnVkZ2V0IGN1dG9mZiBtZWNoYW5pc20g aXMgd29ya2luZy4KKy1hc3NlcnRFcSh0aWVyMmNvZGVCeXRlc1VzZWQgPCAxNTAwMCwgdHJ1ZSk7 CisrLy8gUFBDNjQgZ2VuZXJhdGVzIGxhcmdlciBjb2RlIGR1ZSB0byBmaXhlZC13aWR0aCA0LWJ5 dGUgaW5zdHJ1Y3Rpb25zLAorKy8vIG11bHRpLWluc3RydWN0aW9uIGJyYW5jaCBzdGFuemFzLCBh bmQgbG9uZ2VyIGNvbnN0YW50LWxvYWRpbmcgc2VxdWVuY2VzLgorK2xldCB0aWVyMmxpbWl0ID0g Z2V0QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2NCIpID8gMjUwMDAgOiAxNTAwMDsKKythc3NlcnRF cSh0aWVyMmNvZGVCeXRlc1VzZWQgPCB0aWVyMmxpbWl0LCB0cnVlKTsKKyAKKyAvLyBUaGUgdGhy ZXNob2xkcyBhYm92ZSBhcmUgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBtZWFzdXJlbWVudHMuCisg Ly8KKyAvLyB0aWVyMWNvZGVCeXRlc1VzZWQgKGJhc2VsaW5lIHNpemUpCisgLy8KKy0vLyAgICAg eDY0ICAgICAgeDMyICAgIGFybTY0ICAgIGFybTMyCisrLy8gICAgIHg2NCAgICAgIHgzMiAgICBh cm02NCAgICBhcm0zMiAgICBwcGM2NAorIC8vCistLy8gICAgMTM3OCAgICAgMTAxMCAgICAgMTQw OCAgICAgMTAwOCAgICAtLWVuYWJsZS1kZWJ1ZyBidWlsZAorLS8vICAgIDEyMTggICAgICA4NjYg ICAgIDEyNDggICAgICA4NTYgICAgLS1kaXNhYmxlLWRlYnVnIGJ1aWxkCisrLy8gICAgMTM3OCAg ICAgMTAxMCAgICAgMTQwOCAgICAgMTAwOCAgICAgMjczNiAgICAtLWVuYWJsZS1kZWJ1ZyBidWls ZAorKy8vICAgIDEyMTggICAgICA4NjYgICAgIDEyNDggICAgICA4NTYgICAgICAgICAgICAtLWRp c2FibGUtZGVidWcgYnVpbGQKKyAvLworIC8vIHRpZXIyY29kZUJ5dGVzVXNlZCAob3B0aW1pemVk IHNpemUpLCB3aXRoIGlubGluZS1zaXplIGJ1ZGdldGluZyBlbmFibGVkCisgLy8KKy0vLyAgICAg eDY0ICAgICAgeDMyICAgIGFybTY0ICAgIGFybTMyCisrLy8gICAgIHg2NCAgICAgIHgzMiAgICBh cm02NCAgICBhcm0zMiAgICBwcGM2NAorIC8vCistLy8gICAgNTE4NiAgICAgNjk5NCAgICAgNzEz NiAgICAgNTQ3MiAgICAtLWVuYWJsZS1kZWJ1ZyBidWlsZAorLS8vICAgIDM2OTggICAgIDM3MzAg ICAgIDU0NzIgICAgIDM4ODggICAgLS1kaXNhYmxlLWRlYnVnIGJ1aWxkCisrLy8gICAgNTE4NiAg ICAgNjk5NCAgICAgNzEzNiAgICAgNTQ3MiAgICAxNzQwOCAgICAtLWVuYWJsZS1kZWJ1ZyBidWls ZAorKy8vICAgIDM2OTggICAgIDM3MzAgICAgIDU0NzIgICAgIDM4ODggICAgICAgICAgICAtLWRp c2FibGUtZGVidWcgYnVpbGQKKyAvLworIC8vIHRpZXIyY29kZUJ5dGVzVXNlZCAob3B0aW1pemVk IHNpemUpLCB3aXRoIGlubGluZS1zaXplIGJ1ZGdldGluZyBkaXNhYmxlZAorIC8vCitAQCAtMTA4 LDcgKzExMSw3IEBAIGFzc2VydEVxKHRpZXIyY29kZUJ5dGVzVXNlZCA8IDE1MDAwLCB0cnVlKTsK KyAvLyAoMikgdGhlIG9wdGltaXplZCBzaXplIHdpbGwgYmUgYXQgbGVhc3QgMjAwMCBieXRlcwor IC8vCisgLy8gKDMpIGlmIHRoZSBpbmxpbmUtYnVkZ2V0IG1lY2hhbmlzbSBpcyB3b3JraW5nIGFz IGludGVuZGVkLCB0aGUgb3B0aW1pemVkCistLy8gICAgIHNpemUgd2lsbCBiZSBsZXNzIHRoYW4g MTUwMDAgYnl0ZXMKKysvLyAgICAgc2l6ZSB3aWxsIGJlIGxlc3MgdGhhbiAxNTAwMCBieXRlcyAo MjUwMDAgb24gUFBDNjQpCisgLy8KKyAvLworIC8vIE5vdGUgKGZvciBmdXR1cmUgdGVzdGluZyk6 IGlubGluZS1zaXplIGJ1ZGdldGluZyB3YXMgZGlzYWJsZWQgYnkgY2hhbmdpbmcKK2RpZmYgLS1n aXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMgYi9q cy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMKK2luZGV4IDc1 MjQ4YzZlNmE1Ni4uYzA4ZTQ5YmNjNmU0IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL3dhc20vbWVtb3J5LW9vYi1tZXNzYWdlLmpzCisrKysgYi9qcy9zcmMvaml0LXRlc3QvdGVz dHMvd2FzbS9tZW1vcnktb29iLW1lc3NhZ2UuanMKK0BAIC04LDggKzgsMTYgQEAgY29uc3QgaGFz T2Zmc2V0TWVzc2FnZSA9IHdhc21IdWdlTWVtb3J5RW5hYmxlZCgpOworIAorIGZ1bmN0aW9uIG9v YlBhdHRlcm4obWVtSWR4LCBieXRlT2Zmc2V0KSB7CisgICAgIGlmIChoYXNPZmZzZXRNZXNzYWdl KSB7CisrICAgICAgICAvLyBUaGUgcmVwb3J0ZWQgYWRkcmVzcyBpcyB3aGF0ZXZlciB0aGUga2Vy bmVsIHJldHVybmVkIGluCisrICAgICAgICAvLyBzaWdpbmZvLnNpX2FkZHIgZm9yIHRoZSBmYXVs dGluZyBpbnN0cnVjdGlvbi4gTW9zdCBiYWNrZW5kcyBlbWl0CisrICAgICAgICAvLyB0aGUgd2Fz bSBhY2Nlc3MgZGlyZWN0bHkgc28gc2lfYWRkciBlcXVhbHMgYnl0ZU9mZnNldC4gUFBDNjQgZW1p dHMKKysgICAgICAgIC8vIGEgMS1ieXRlIHByb2JpbmcgbG9hZCBhdCBieXRlT2Zmc2V0ICsgKHNp emUgLSAxKSBiZWZvcmUgZWFjaAorKyAgICAgICAgLy8gbXVsdGktYnl0ZSBhY2Nlc3MgKHRvIGVu Zm9yY2Ugd2FzbS1zcGVjIGF0b21pY2l0eSBvbiBQT1dFUiBJU0EpLAorKyAgICAgICAgLy8gc28g c2lfYWRkciB0aGVyZSBjYW4gYmUgdXAgdG8gMTUgYnl0ZXMgcGFzdCBieXRlT2Zmc2V0LgorKyAg ICAgICAgY29uc3Qgb2Zmc2V0cyA9IFtdOworKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx NjsgKytpKSBvZmZzZXRzLnB1c2goYCR7Ynl0ZU9mZnNldCArIGl9YCk7CisgICAgICAgICByZXR1 cm4gbmV3IFJlZ0V4cCgKKy0gICAgICAgICAgICBgb3V0IG9mIGJvdW5kczogbWVtb3J5ICR7bWVt SWR4fSBhY2Nlc3MgYXQgbWVtb3J5IGFkZHJlc3MgJHtieXRlT2Zmc2V0fWAKKysgICAgICAgICAg ICBgb3V0IG9mIGJvdW5kczogbWVtb3J5ICR7bWVtSWR4fSBhY2Nlc3MgYXQgbWVtb3J5IGFkZHJl c3MgKD86JHtvZmZzZXRzLmpvaW4oJ3wnKX0pYAorICAgICAgICAgKTsKKyAgICAgfQorICAgICBy ZXR1cm4gL2luZGV4IG91dCBvZiBib3VuZHMvOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVz dC90ZXN0cy93YXNtL3BwYzY0LWFyZ29uMi10aWVyaW5nLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL3dhc20vcHBjNjQtYXJnb24yLXRpZXJpbmcuanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAwMDAuLjA0ZGFkOTI0MDUzOQorLS0tIC9kZXYvbnVsbAorKysrIGIvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcHBjNjQtYXJnb24yLXRpZXJpbmcuanMKK0BAIC0wLDAg KzEsMTI0IEBACisrLy8gVGVzdCBmb3Igd2FzbSB0aWVyaW5nIGNvcnJlY3RuZXNzIHdpdGggYXJn b24yLXN0eWxlIFNJTUQgY29tcHV0YXRpb24uCisrLy8gVGhlIGFyZ29uMiBmQmxhTWthIGZ1bmN0 aW9uIHVzZXMgaTY0eDIuZXh0bXVsX2xvd19pMzJ4NF91LCBpNjR4Mi5zaGwsCisrLy8gaTY0eDIu YWRkLCB2MTI4LnhvciwgdjEyOC5vciwgaTY0eDIuc2hyX3UsIGFuZCBpOHgxNi5zaHVmZmxlLgor Ky8vIEEgdGllcmluZyBidWcgY2FuIGNhdXNlIGhhc2ggYW5kIHZlcmlmeSB0byBwcm9kdWNlIGRp ZmZlcmVudCByZXN1bHRzCisrLy8gd2hlbiB0aWVyLXVwIGhhcHBlbnMgYmV0d2VlbiB0aGVtLgor Ky8vCisrLy8gVGhpcyB0ZXN0IHJ1bnMgdGhlIGNvbXB1dGF0aW9uIHVuZGVyIGJvdGggYmFzZWxp bmUgYW5kIG9wdGltaXppbmcKKysvLyBjb21waWxlcnMgYW5kIHZlcmlmaWVzIHRoZXkgcHJvZHVj ZSBpZGVudGljYWwgcmVzdWx0cy4KKysKKyt2YXIgbW9kID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVs ZSh3YXNtVGV4dFRvQmluYXJ5KGAKKysgIChtb2R1bGUKKysgICAgKG1lbW9yeSAoZXhwb3J0ICJt ZW0iKSAxMCkKKysgICAgOzsgQXJnb24yIGZCbGFNa2E6IGEgKyBiICsgMiAqIHRydW5jMzIoYSkg KiB0cnVuYzMyKGIpCisrICAgIDs7IHRoZW4gcm90YXRpb25zIGJ5IDMyLCAyNCwgMTYsIDYzCisr ICAgIChmdW5jICRHX3JvdW5kIChwYXJhbSBpMzIpCisrICAgICAgKGxvY2FsIHYxMjggdjEyOCB2 MTI4IHYxMjggdjEyOCB2MTI4IHYxMjggdjEyOCB2MTI4KQorKyAgICAgIChsb2NhbC5zZXQgMSAo djEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAwKSkpKQorKyAgICAg IChsb2NhbC5zZXQgMiAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25z dCAxNikpKSkKKysgICAgICAobG9jYWwuc2V0IDMgKHYxMjgubG9hZCAoaTMyLmFkZCAobG9jYWwu Z2V0IDApIChpMzIuY29uc3QgMzIpKSkpCisrICAgICAgKGxvY2FsLnNldCA0ICh2MTI4LmxvYWQg KGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDQ4KSkpKQorKyAgICAgIChsb2NhbC5z ZXQgNSAodjEyOC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCA2NCkpKSkK KysgICAgICAobG9jYWwuc2V0IDYgKHYxMjgubG9hZCAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChp MzIuY29uc3QgODApKSkpCisrICAgICAgKGxvY2FsLnNldCA3ICh2MTI4LmxvYWQgKGkzMi5hZGQg KGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDk2KSkpKQorKyAgICAgIChsb2NhbC5zZXQgOCAodjEy OC5sb2FkIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkzMi5jb25zdCAxMTIpKSkpCisrCisrICAg ICAgOzsgZkJsYU1rYSh2MCwgdjIpICsgcm90cjMyCisrICAgICAgKGxvY2FsLnNldCAxIChpNjR4 Mi5hZGQgKGk2NHgyLmFkZCAobG9jYWwuZ2V0IDEpIChsb2NhbC5nZXQgMykpCisrICAgICAgICAo aTY0eDIuc2hsIChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UKKysgICAgICAgICAgKGk4eDE2LnNo dWZmbGUgMCAxIDIgMyA4IDkgMTAgMTEgMCAxIDIgMyA4IDkgMTAgMTEgKGxvY2FsLmdldCAxKSAo bG9jYWwuZ2V0IDEpKQorKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAx MSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDMpIChsb2NhbC5nZXQgMykpKQorKyAgICAg ICAgICAoaTMyLmNvbnN0IDEpKSkpCisrICAgICAgKGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9j YWwuZ2V0IDcpIChsb2NhbC5nZXQgMSkpKQorKyAgICAgIChsb2NhbC5zZXQgNyAodjEyOC5vciAo aTY0eDIuc2hsIChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCAzMikpIChpNjR4Mi5zaHJfdSAobG9j YWwuZ2V0IDkpIChpMzIuY29uc3QgMzIpKSkpCisrCisrICAgICAgOzsgZkJsYU1rYSh2NCwgdjYp ICsgcm90cjI0CisrICAgICAgKGxvY2FsLnNldCA1IChpNjR4Mi5hZGQgKGk2NHgyLmFkZCAobG9j YWwuZ2V0IDUpIChsb2NhbC5nZXQgNykpCisrICAgICAgICAoaTY0eDIuc2hsIChpNjR4Mi5leHRt dWxfbG93X2kzMng0X3UKKysgICAgICAgICAgKGk4eDE2LnNodWZmbGUgMCAxIDIgMyA4IDkgMTAg MTEgMCAxIDIgMyA4IDkgMTAgMTEgKGxvY2FsLmdldCA1KSAobG9jYWwuZ2V0IDUpKQorKyAgICAg ICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAo bG9jYWwuZ2V0IDcpIChsb2NhbC5nZXQgNykpKQorKyAgICAgICAgICAoaTMyLmNvbnN0IDEpKSkp CisrICAgICAgKGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9jYWwuZ2V0IDMpIChsb2NhbC5nZXQg NSkpKQorKyAgICAgIChsb2NhbC5zZXQgMyAodjEyOC5vciAoaTY0eDIuc2hsIChsb2NhbC5nZXQg OSkgKGkzMi5jb25zdCA0MCkpIChpNjR4Mi5zaHJfdSAobG9jYWwuZ2V0IDkpIChpMzIuY29uc3Qg MjQpKSkpCisrCisrICAgICAgOzsgZkJsYU1rYSh2MCwgdjIpICsgcm90cjE2CisrICAgICAgKGxv Y2FsLnNldCAxIChpNjR4Mi5hZGQgKGk2NHgyLmFkZCAobG9jYWwuZ2V0IDEpIChsb2NhbC5nZXQg MykpCisrICAgICAgICAoaTY0eDIuc2hsIChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UKKysgICAg ICAgICAgKGk4eDE2LnNodWZmbGUgMCAxIDIgMyA4IDkgMTAgMTEgMCAxIDIgMyA4IDkgMTAgMTEg KGxvY2FsLmdldCAxKSAobG9jYWwuZ2V0IDEpKQorKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAw IDEgMiAzIDggOSAxMCAxMSAwIDEgMiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDMpIChsb2NhbC5n ZXQgMykpKQorKyAgICAgICAgICAoaTMyLmNvbnN0IDEpKSkpCisrICAgICAgKGxvY2FsLnNldCA5 ICh2MTI4LnhvciAobG9jYWwuZ2V0IDcpIChsb2NhbC5nZXQgMSkpKQorKyAgICAgIChsb2NhbC5z ZXQgNyAodjEyOC5vciAoaTY0eDIuc2hsIChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCA0OCkpIChp NjR4Mi5zaHJfdSAobG9jYWwuZ2V0IDkpIChpMzIuY29uc3QgMTYpKSkpCisrCisrICAgICAgOzsg ZkJsYU1rYSh2NCwgdjYpICsgcm90cjYzCisrICAgICAgKGxvY2FsLnNldCA1IChpNjR4Mi5hZGQg KGk2NHgyLmFkZCAobG9jYWwuZ2V0IDUpIChsb2NhbC5nZXQgNykpCisrICAgICAgICAoaTY0eDIu c2hsIChpNjR4Mi5leHRtdWxfbG93X2kzMng0X3UKKysgICAgICAgICAgKGk4eDE2LnNodWZmbGUg MCAxIDIgMyA4IDkgMTAgMTEgMCAxIDIgMyA4IDkgMTAgMTEgKGxvY2FsLmdldCA1KSAobG9jYWwu Z2V0IDUpKQorKyAgICAgICAgICAoaTh4MTYuc2h1ZmZsZSAwIDEgMiAzIDggOSAxMCAxMSAwIDEg MiAzIDggOSAxMCAxMSAobG9jYWwuZ2V0IDcpIChsb2NhbC5nZXQgNykpKQorKyAgICAgICAgICAo aTMyLmNvbnN0IDEpKSkpCisrICAgICAgKGxvY2FsLnNldCA5ICh2MTI4LnhvciAobG9jYWwuZ2V0 IDMpIChsb2NhbC5nZXQgNSkpKQorKyAgICAgIChsb2NhbC5zZXQgMyAodjEyOC5vciAoaTY0eDIu c2hsIChsb2NhbC5nZXQgOSkgKGkzMi5jb25zdCAxKSkgKGk2NHgyLnNocl91IChsb2NhbC5nZXQg OSkgKGkzMi5jb25zdCA2MykpKSkKKysKKysgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9j YWwuZ2V0IDApIChpMzIuY29uc3QgMCkpIChsb2NhbC5nZXQgMSkpCisrICAgICAgKHYxMjguc3Rv cmUgKGkzMi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDE2KSkgKGxvY2FsLmdldCAyKSkK KysgICAgICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgMzIp KSAobG9jYWwuZ2V0IDMpKQorKyAgICAgICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQg MCkgKGkzMi5jb25zdCA0OCkpIChsb2NhbC5nZXQgNCkpCisrICAgICAgKHYxMjguc3RvcmUgKGkz Mi5hZGQgKGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDY0KSkgKGxvY2FsLmdldCA1KSkKKysgICAg ICAodjEyOC5zdG9yZSAoaTMyLmFkZCAobG9jYWwuZ2V0IDApIChpMzIuY29uc3QgODApKSAobG9j YWwuZ2V0IDYpKQorKyAgICAgICh2MTI4LnN0b3JlIChpMzIuYWRkIChsb2NhbC5nZXQgMCkgKGkz Mi5jb25zdCA5NikpIChsb2NhbC5nZXQgNykpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5hZGQg KGxvY2FsLmdldCAwKSAoaTMyLmNvbnN0IDExMikpIChsb2NhbC5nZXQgOCkpKQorKworKyAgICAo ZnVuYyAoZXhwb3J0ICJoYXNoIikgKHBhcmFtIGkzMikgKHJlc3VsdCBpNjQpCisrICAgICAgKGxv Y2FsIGkzMikKKysgICAgICA7OyBJbml0IHdpdGggQmxha2UyYiBJVgorKyAgICAgICh2MTI4LnN0 b3JlIChpMzIuY29uc3QgMCkgKHYxMjguY29uc3QgaTY0eDIgMHg2YTA5ZTY2N2YzYmNjOTA4IDB4 YmI2N2FlODU4NGNhYTczYikpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAxNikgKHYx MjguY29uc3QgaTY0eDIgMHgzYzZlZjM3MmZlOTRmODJiIDB4YTU0ZmY1M2E1ZjFkMzZmMSkpCisr ICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAzMikgKHYxMjguY29uc3QgaTY0eDIgMHg1MTBl NTI3ZmFkZTY4MmQxIDB4OWIwNTY4OGMyYjNlNmMxZikpCisrICAgICAgKHYxMjguc3RvcmUgKGkz Mi5jb25zdCA0OCkgKHYxMjguY29uc3QgaTY0eDIgMHgxZjgzZDlhYmZiNDFiZDZiIDB4NWJlMGNk MTkxMzdlMjE3OSkpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCA2NCkgKHYxMjguY29u c3QgaTY0eDIgMHgwMTIzNDU2Nzg5YWJjZGVmIDB4ZmVkY2JhOTg3NjU0MzIxMCkpCisrICAgICAg KHYxMjguc3RvcmUgKGkzMi5jb25zdCA4MCkgKHYxMjguY29uc3QgaTY0eDIgMHhkZWFkYmVlZmNh ZmViYWJlIDB4MTEyMjMzNDQ1NTY2Nzc4OCkpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25z dCA5NikgKHYxMjguY29uc3QgaTY0eDIgMHhhYWJiY2NkZDExMjIzMzQ0IDB4NTU2Njc3ODg5OWFh YmJjYykpCisrICAgICAgKHYxMjguc3RvcmUgKGkzMi5jb25zdCAxMTIpICh2MTI4LmNvbnN0IGk2 NHgyIDB4ZGRlZWZmMDAxMTIyMzM0NCAweDU1NjY3Nzg4OTlhYWJiY2MpKQorKyAgICAgIChsb2Nh bC5zZXQgMSAoaTMyLmNvbnN0IDApKQorKyAgICAgIChibG9jayAobG9vcAorKyAgICAgICAgKGNh bGwgJEdfcm91bmQgKGkzMi5jb25zdCAwKSkKKysgICAgICAgIChsb2NhbC5zZXQgMSAoaTMyLmFk ZCAobG9jYWwuZ2V0IDEpIChpMzIuY29uc3QgMSkpKQorKyAgICAgICAgKGJyX2lmIDEgKGkzMi5n ZV91IChsb2NhbC5nZXQgMSkgKGxvY2FsLmdldCAwKSkpCisrICAgICAgICAoYnIgMCkpKQorKyAg ICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDApKQorKyAgICAgICAgKGk2NC54b3Ig KGk2NC5sb2FkIChpMzIuY29uc3QgOCkpCisrICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAo aTMyLmNvbnN0IDE2KSkKKysgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25z dCAyNCkpCisrICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCAzMikp CisrICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDQwKSkKKysg ICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA0OCkpCisrICAg ICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA1NikpCisrICAg ICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAoaTMyLmNvbnN0IDY0KSkKKysg ICAgICAgICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCA3Mikp CisrICAgICAgICAgICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25z dCA4MCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQueG9yIChpNjQubG9hZCAo aTMyLmNvbnN0IDg4KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaTY0LnhvciAo aTY0LmxvYWQgKGkzMi5jb25zdCA5NikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCAxMDQpKQorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaTY0LnhvciAoaTY0LmxvYWQgKGkzMi5jb25zdCAxMTIpKQorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpNjQubG9hZCAoaTMyLmNvbnN0IDEy MCkpKSkpKSkpKSkpKSkpKSkpKQorKyAgKQorK2ApKTsKKysKKyt2YXIgaW5zdCA9IG5ldyBXZWJB c3NlbWJseS5JbnN0YW5jZShtb2QpOworKworKy8vIEdldCBhIHJlZmVyZW5jZSByZXN1bHQgZnJv bSB0aGUgZmlyc3QgY2FsbC4KKyt2YXIgcmVmZXJlbmNlID0gaW5zdC5leHBvcnRzLmhhc2goMTAw KTsKKysKKysvLyBSdW4gbWFueSB0aW1lcyB0byB0cmlnZ2VyIHRpZXItdXAsIHRoZW4gdmVyaWZ5 IHJlc3VsdCBzdGF5cyB0aGUgc2FtZS4KKyt2YXIgcGFzcyA9IHRydWU7CisrZm9yICh2YXIgaSA9 IDA7IGkgPCAxMDAwOyBpKyspIHsKKysgICAgdmFyIHIgPSBpbnN0LmV4cG9ydHMuaGFzaCgxMDAp OworKyAgICBpZiAociAhPT0gcmVmZXJlbmNlKSB7CisrICAgICAgICBwYXNzID0gZmFsc2U7Cisr ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRpZXJpbmcgbWlzbWF0Y2ggYXQgaXRlcmF0aW9uICIg KyBpICsKKysgICAgICAgICAgICAiOiBnb3QgMHgiICsgQmlnSW50LmFzVWludE4oNjQsIHIpLnRv U3RyaW5nKDE2KSArCisrICAgICAgICAgICAgIiwgZXhwZWN0ZWQgMHgiICsgQmlnSW50LmFzVWlu dE4oNjQsIHJlZmVyZW5jZSkudG9TdHJpbmcoMTYpKTsKKysgICAgfQorK30KKysKKythc3NlcnRF cShwYXNzLCB0cnVlKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9w cGM2NC1jb21wYXJlLXNlbGVjdC1iZW5jaC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k ZXggMDAwMDAwMDAwMDAwLi5jMTFjZTcxM2Y1MTQKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzCitAQCAt MCwwICsxLDcwIEBACisrLy8gfGppdC10ZXN0fCBza2lwLWlmOiB0cnVlCisrLy8KKysvLyBCZW5j aG1hcmsgb25seSwgbm90IGEgY29ycmVjdG5lc3MgdGVzdC4gSW52b2tlIG1hbnVhbGx5IGFzIHNo b3duIGJlbG93LgorKy8vCisrLy8gTWljcm9iZW5jaG1hcmsgZm9yIHdhc20gY29tcGFyZStzZWxl Y3QgZnVzaW9uIG9uIFBQQzY0LgorKy8vCisrLy8gUnVuIHdpdGg6CisrLy8gICAkSlMgLS13YXNt LWNvbXBpbGVyPW9wdGltaXppbmcgXAorKy8vICAgICAgIGpzL3NyYy9qaXQtdGVzdC90ZXN0cy93 YXNtL3BwYzY0LWNvbXBhcmUtc2VsZWN0LWJlbmNoLmpzCisrLy8KKysvLyBQcmludHMgdGltaW5n cyBmb3IgZm91ciB2YXJpYW50cyAoaTMyLCBpNjQsIGYzMiwgZjY0KSB0aGF0IGV4ZXJjaXNlIGEK KysvLyB0aWdodCBsb29wIG9mIE4gc2VsZWN0LW9uLWNvbXBhcmUgb3BlcmF0aW9ucy4gVXNlZCB0 byBkZWNpZGUgd2hldGhlcgorKy8vIHNwZWNpYWxpemluZyBsb3dlcldhc21Db21wYXJlQW5kU2Vs ZWN0IGJleW9uZCBJbnQzMiBpcyB3b3J0aCB0aGUgY29kZS4KKysvLworKy8vIFRoZSBrZXJuZWwg aXMgYSAxMC1zdGFnZSBzZWxlY3QgY2hhaW4gc28gdGhlIHBlci1vcCBvdmVyaGVhZCBkb21pbmF0 ZXMKKysvLyB0aGUgbG9vcCBmcmFtZS4gRWFjaCBpdGVyYXRpb24gdG91Y2hlcyAxMCBjb21wYXJl K3NlbGVjdCBvcHMgcGx1cworKy8vIH50cml2aWFsIGFkZHJlc3MgbWF0aC4KKysKKytjb25zdCBO X0lURVJTID0gMV8wMDBfMDAwOworKworK2Z1bmN0aW9uIGJ1aWxkTW9kdWxlKGtpbmQpIHsKKysg IGNvbnN0IHR5cGVzID0ge2kzMjogWydpMzInLCAnaTMyJywgJ2kzMi5sdF9zJ10sCisrICAgICAg ICAgICAgICAgICB1MzI6IFsnaTMyJywgJ2kzMicsICdpMzIubHRfdSddLAorKyAgICAgICAgICAg ICAgICAgaTY0OiBbJ2k2NCcsICdpNjQnLCAnaTY0Lmx0X3MnXSwKKysgICAgICAgICAgICAgICAg IGYzMjogWydmMzInLCAnaTMyJywgJ2YzMi5sdCddLAorKyAgICAgICAgICAgICAgICAgZjY0OiBb J2Y2NCcsICdpMzInLCAnZjY0Lmx0J119W2tpbmRdOworKyAgY29uc3QgW3R5LCBpdGVyVHksIGNt cE9wXSA9IHR5cGVzOworKyAgLy8gTG9hZCBhLCBiOyBjb21wdXRlIGNoYWluIG9mIChiIDwgYSA/ IGIgOiBhKSAxMCB0aW1lcyBwZXIgaXRlci4KKysgIGNvbnN0IHN0YWdlID0gYAorKyAgICAobG9j YWwuc2V0ICRhCisrICAgICAgKHNlbGVjdCAocmVzdWx0ICR7dHl9KQorKyAgICAgICAgKGxvY2Fs LmdldCAkYikgKGxvY2FsLmdldCAkYSkKKysgICAgICAgICgke2NtcE9wfSAobG9jYWwuZ2V0ICRi KSAobG9jYWwuZ2V0ICRhKSkpKWA7CisrICBjb25zdCBib2R5ID0gQXJyYXkoMTApLmZpbGwoc3Rh Z2UpLmpvaW4oJ1xuJyk7CisrICBjb25zdCB0ZXh0ID0gYAorKyAgICAobW9kdWxlCisrICAgICAg KGZ1bmMgKGV4cG9ydCAicnVuIikgKHBhcmFtICRuIGkzMikgKHJlc3VsdCAke3R5fSkKKysgICAg ICAgIChsb2NhbCAkaSBpMzIpIChsb2NhbCAkYSAke3R5fSkgKGxvY2FsICRiICR7dHl9KQorKyAg ICAgICAgKGxvY2FsLnNldCAkYSAoJHt0eX0uY29uc3QgJHtraW5kID09PSAnZjMyJyB8fCBraW5k ID09PSAnZjY0JyA/ICczLjE0JyA6ICcxMjM0NSd9KSkKKysgICAgICAgIChsb2NhbC5zZXQgJGIg KCR7dHl9LmNvbnN0ICR7a2luZCA9PT0gJ2YzMicgfHwga2luZCA9PT0gJ2Y2NCcgPyAnMi43MScg OiAnNjc4OTAnfSkpCisrICAgICAgICAobG9vcCAkTAorKyAgICAgICAgICAke2JvZHl9CisrICAg ICAgICAgIChsb2NhbC5zZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAx KSkpCisrICAgICAgICAgIChicl9pZiAkTCAoaTMyLmx0X3MgKGxvY2FsLmdldCAkaSkgKGxvY2Fs LmdldCAkbikpKSkKKysgICAgICAgIChsb2NhbC5nZXQgJGEpKSlgOworKyAgcmV0dXJuIG5ldyBX ZWJBc3NlbWJseS5Nb2R1bGUod2FzbVRleHRUb0JpbmFyeSh0ZXh0KSk7CisrfQorKworK2Z1bmN0 aW9uIGJlbmNoKGtpbmQpIHsKKysgIGNvbnN0IGluc3QgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu Y2UoYnVpbGRNb2R1bGUoa2luZCkpOworKyAgLy8gV2FybXVwIOKAlCBlbnN1cmUgSW9uIGNvbXBp bGVzLgorKyAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIGluc3QuZXhwb3J0cy5ydW4oTl9J VEVSUyk7CisrICBjb25zdCB0MCA9IGRhdGVOb3coKTsKKysgIGNvbnN0IHJlcyA9IGluc3QuZXhw b3J0cy5ydW4oTl9JVEVSUyk7CisrICBjb25zdCB0MSA9IGRhdGVOb3coKTsKKysgIHJldHVybiB7 bXM6IHQxIC0gdDAsIHJlc3VsdDogcmVzfTsKKyt9CisrCisrY29uc3Qga2luZHMgPSBbJ2kzMics ICd1MzInLCAnaTY0JywgJ2YzMicsICdmNjQnXTsKKytjb25zdCBydW5zID0gNTsKKytwcmludChg XG53YXNtIGNvbXBhcmUrc2VsZWN0IG1pY3JvYmVuY2ggKCR7Tl9JVEVSUy50b0xvY2FsZVN0cmlu ZygpfSBpdGVycywgMTAgb3BzL2l0ZXIpOmApOworK3ByaW50KGAgIEVhY2ggdGltaW5nIGlzIHRo ZSBiZXN0IG9mICR7cnVuc30gcnVucy5cbmApOworK2ZvciAoY29uc3Qga2luZCBvZiBraW5kcykg eworKyAgY29uc3Qgc2FtcGxlcyA9IFtdOworKyAgZm9yIChsZXQgaSA9IDA7IGkgPCBydW5zOyBp KyspIHNhbXBsZXMucHVzaChiZW5jaChraW5kKS5tcyk7CisrICBzYW1wbGVzLnNvcnQoKGEsIGIp ID0+IGEgLSBiKTsKKysgIGNvbnN0IGJlc3QgPSBzYW1wbGVzWzBdOworKyAgY29uc3QgbWVkaWFu ID0gc2FtcGxlc1socnVucyAvIDIpIHwgMF07CisrICBwcmludChgICAke2tpbmQucGFkRW5kKDQp fSBiZXN0PSR7YmVzdC50b0ZpeGVkKDEpfW1zICBtZWRpYW49JHttZWRpYW4udG9GaXhlZCgxKX1t cyAgKHNhbXBsZXM6ICR7c2FtcGxlcy5tYXAocyA9PiBzLnRvRml4ZWQoMCkpLmpvaW4oJywnKX0p YCk7CisrfQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4 dG11bC1hbGlhcy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3BwYzY0LWV4dG11bC1h bGlhcy5qcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMmFhOTUw Nzc1MWI2CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9w cGM2NC1leHRtdWwtYWxpYXMuanMKK0BAIC0wLDAgKzEsMTA3IEBACisrLy8gUmVncmVzc2lvbiB0 ZXN0IGZvciBQUEM2NCBpNjR4Mi5leHRtdWxfe2xvdyxoaWdofV9pMzJ4NF97cyx1fSB3aGVuIHRo ZQorKy8vIElvbiByZWdpc3RlciBhbGxvY2F0b3IgcGlja3MgZGVzdCA9PSByaHMuCisrLy8KKysv LyBPbiBQUEM2NCBMRSwgdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiBleHRyYWN0ZWQgbGFuZXMgdmlh IG10dnNyZC9tZnZzcmQgYW5kCisrLy8gd3JvdGUgdGhlIGxvdy1sYW5lIHByb2R1Y3QgdG8gZGVz dCBiZWZvcmUgcmVhZGluZyByaHMgZm9yIHRoZSBoaWdoIGxhbmUuCisrLy8gYG10dnNyZCBYVCwg UkFgIGxlYXZlcyBEVzEgb2YgWFQgdW5kZWZpbmVkIChQT1dFUjkgemVyb3MgaXQpLCBzbyB3aGVu CisrLy8gZGVzdCBhbGlhc2VkIHJocyB0aGUgaGlnaC1sYW5lIGV4dHJhY3QgZnJvbSByaHMgcmVh ZCBnYXJiYWdlLCBwcm9kdWNpbmcKKysvLyB6ZXJvIGluIHRoZSBoaWdoIGk2NCBsYW5lLiBPbiBQ T1dFUjggdGhlIEV4dHJhY3RMYW5lVG9HUFIgZmFsbGJhY2sKKysvLyBhZGRpdGlvbmFsbHkgY2xv YmJlcmVkIFNjcmF0Y2hTaW1kMTI4UmVnIGJldHdlZW4gdGhlIHR3byBleHRyYWN0cy4KKysvLwor Ky8vIFRoZSBsb29wIGJlbG93LCBkaXNjb3ZlcmVkIHZpYSB3YXNtLXJlZHVjZSBmcm9tIGFyZ29u Mi53YXNtLCByZWxpYWJseQorKy8vIHJlcHJvZHVjZWQgdGhlIG1pc2NvbXBpbGU6IHRoZSByZXN1 bHQncyBoaWdoIGk2NCBsYW5lIHdlbnQgdG8gMCBvbgorKy8vIFBPV0VSOSBJb24gLyBnYXJiYWdl IG9uIFBPV0VSOCBJb24sIHdoaWxlIGJhc2VsaW5lIGtlcHQgdGhlIGNvcnJlY3QKKysvLyB2YWx1 ZSAobGFuZTEgPSA0OCo0OCA9IDIzMDQgaW4gdGhlIGZpbmFsIGl0ZXJhdGlvbikuCisrCisrdmFy IG1vZCA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUod2FzbVRleHRUb0JpbmFyeShgCisrICAobW9k dWxlCisrICAgIChtZW1vcnkgKGV4cG9ydCAibWVtIikgMSkKKysgICAgKGZ1bmMgKGV4cG9ydCAi cnVuX3UiKSAocGFyYW0gJG91dCBpMzIpCisrICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICR2 NCB2MTI4KSAobG9jYWwgJHY1IHYxMjgpIChsb2NhbCAkdjkgdjEyOCkKKysgICAgICAobG9vcAor KyAgICAgICAgKGxvY2FsLnNldCAkdjkKKysgICAgICAgICAgKGk2NHgyLmFkZAorKyAgICAgICAg ICAgICh2MTI4LmNvbnN0IGkzMng0IDEgMCAwIDApCisrICAgICAgICAgICAgKGk2NHgyLmV4dG11 bF9sb3dfaTMyeDRfdSAobG9jYWwuZ2V0ICR2NSkgKGxvY2FsLmdldCAkdjkpKSkpCisrICAgICAg ICAobG9jYWwuc2V0ICR2NCAobG9jYWwuZ2V0ICR2OSkpCisrICAgICAgICAobG9jYWwuc2V0ICR2 NSAobG9jYWwuZ2V0ICR2NCkpCisrICAgICAgICAodjEyOC5zdG9yZSAoaTMyLmNvbnN0IDApIChs b2NhbC5nZXQgJHY1KSkKKysgICAgICAgIChsb2NhbC5zZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdl dCAkaSkgKGkzMi5jb25zdCAxKSkpCisrICAgICAgICAoYnJfaWYgMCAoaTMyLm5lIChsb2NhbC5n ZXQgJGkpIChpMzIuY29uc3QgOCkpKSkKKysgICAgICAodjEyOC5zdG9yZSAobG9jYWwuZ2V0ICRv dXQpIChsb2NhbC5nZXQgJHY5KSkpCisrCisrICAgIChmdW5jIChleHBvcnQgInJ1bl9zIikgKHBh cmFtICRvdXQgaTMyKQorKyAgICAgIChsb2NhbCAkaSBpMzIpIChsb2NhbCAkdiB2MTI4KQorKyAg ICAgIChsb2NhbC5zZXQgJHYgKHYxMjguY29uc3QgaTMyeDQgMiAzIDUgNykpCisrICAgICAgKGxv b3AKKysgICAgICAgIDs7IEZvcmNlIGRlc3Q9PXJocyBhbGlhc2luZzogdiA9IGV4dG11bF9sb3df aTMyeDRfcyhjb25zdCwgdikuCisrICAgICAgICAobG9jYWwuc2V0ICR2CisrICAgICAgICAgIChp NjR4Mi5leHRtdWxfbG93X2kzMng0X3MKKysgICAgICAgICAgICAodjEyOC5jb25zdCBpMzJ4NCAy IDMgNSA3KQorKyAgICAgICAgICAgIChsb2NhbC5nZXQgJHYpKSkKKysgICAgICAgIChsb2NhbC5z ZXQgJGkgKGkzMi5hZGQgKGxvY2FsLmdldCAkaSkgKGkzMi5jb25zdCAxKSkpCisrICAgICAgICAo YnJfaWYgMCAoaTMyLm5lIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgMikpKSkKKysgICAgICAo djEyOC5zdG9yZSAobG9jYWwuZ2V0ICRvdXQpIChsb2NhbC5nZXQgJHYpKSkKKysKKysgICAgKGZ1 bmMgKGV4cG9ydCAicnVuX2hpZ2hfdSIpIChwYXJhbSAkb3V0IGkzMikKKysgICAgICAobG9jYWwg JGkgaTMyKSAobG9jYWwgJHYgdjEyOCkKKysgICAgICAobG9jYWwuc2V0ICR2ICh2MTI4LmNvbnN0 IGkzMng0IDAgMCAyIDMpKQorKyAgICAgIChsb29wCisrICAgICAgICAobG9jYWwuc2V0ICR2Cisr ICAgICAgICAgIChpNjR4Mi5leHRtdWxfaGlnaF9pMzJ4NF91CisrICAgICAgICAgICAgKHYxMjgu Y29uc3QgaTMyeDQgMCAwIDIgMykKKysgICAgICAgICAgICAobG9jYWwuZ2V0ICR2KSkpCisrICAg ICAgICAobG9jYWwuc2V0ICRpIChpMzIuYWRkIChsb2NhbC5nZXQgJGkpIChpMzIuY29uc3QgMSkp KQorKyAgICAgICAgKGJyX2lmIDAgKGkzMi5uZSAobG9jYWwuZ2V0ICRpKSAoaTMyLmNvbnN0IDIp KSkpCisrICAgICAgKHYxMjguc3RvcmUgKGxvY2FsLmdldCAkb3V0KSAobG9jYWwuZ2V0ICR2KSkp CisrCisrICAgIChmdW5jIChleHBvcnQgInJ1bl9oaWdoX3MiKSAocGFyYW0gJG91dCBpMzIpCisr ICAgICAgKGxvY2FsICRpIGkzMikgKGxvY2FsICR2IHYxMjgpCisrICAgICAgKGxvY2FsLnNldCAk diAodjEyOC5jb25zdCBpMzJ4NCAwIDAgMiAzKSkKKysgICAgICAobG9vcAorKyAgICAgICAgKGxv Y2FsLnNldCAkdgorKyAgICAgICAgICAoaTY0eDIuZXh0bXVsX2hpZ2hfaTMyeDRfcworKyAgICAg ICAgICAgICh2MTI4LmNvbnN0IGkzMng0IDAgMCAyIDMpCisrICAgICAgICAgICAgKGxvY2FsLmdl dCAkdikpKQorKyAgICAgICAgKGxvY2FsLnNldCAkaSAoaTMyLmFkZCAobG9jYWwuZ2V0ICRpKSAo aTMyLmNvbnN0IDEpKSkKKysgICAgICAgIChicl9pZiAwIChpMzIubmUgKGxvY2FsLmdldCAkaSkg KGkzMi5jb25zdCAyKSkpKQorKyAgICAgICh2MTI4LnN0b3JlIChsb2NhbC5nZXQgJG91dCkgKGxv Y2FsLmdldCAkdikpKSkKKytgKSk7CisrCisrZnVuY3Rpb24gcnVuQW5kQ2hlY2soaW5zdCkgewor KyAgaW5zdC5leHBvcnRzLnJ1bl91KDApOworKyAgLy8gQWZ0ZXIgOCBpdGVyYXRpb25zLCB0aGUg dmFsdWUgaW4gbWVtb3J5IHNob3VsZCBoYXZlIGxhbmUxID09IDIzMDQgPSAweDkwMC4KKysgIC8v IEJ5dGVzIDgtMTUgKGk2NCBsYW5lIDEsIGxpdHRsZS1lbmRpYW4pID0gMHgwMDAwMDAwMDAwMDAw OTAwLgorKyAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGluc3QuZXhwb3J0cy5tZW0uYnVmZmVy LCAwLCAxNik7CisrICB2YXIgaGV4ID0gQXJyYXkuZnJvbShidWYpLm1hcChiID0+IGIudG9TdHJp bmcoMTYpLnBhZFN0YXJ0KDIsJzAnKSkuam9pbignJyk7CisrICAvLyBFeHBlY3QgYnl0ZXMgOC05 ID0gIjAwIDA5IiBhbmQgYnl0ZXMgMTAtMTUgPSAiMDAgMDAgMDAgMDAgMDAgMDAiLgorKyAgYXNz ZXJ0RXEoaGV4LnNsaWNlKDE2LCAzMiksICIwMDA5MDAwMDAwMDAwMDAwIik7CisrCisrICBpbnN0 LmV4cG9ydHMucnVuX3MoMTYpOworKyAgLy8gQWZ0ZXIgMiBpdGVyYXRpb25zIG9mIHYgPSBleHRt dWxfbG93X3MoY29uc3QoMiwzLDUsNyksIHYpIHN0YXJ0aW5nIHY9KDIsMyw1LDcpOgorKyAgLy8g ICBpdGVyIDE6IGk2NHgyIGxhbmUwID0gMioyID0gNCwgbGFuZTEgPSAzKjMgPSA5LgorKyAgLy8g ICAgICAgICAgIHYgYmVjb21lcyBpMzJ4NCBbNCwgMCwgOSwgMF0gKGVhY2ggaTY0IGxhbmUgb2Nj dXBpZXMgdHdvIGkzMiBsYW5lcykuCisrICAvLyAgIGl0ZXIgMjogZXh0bXVsX2xvd19zIHJlYWRz IGkzMiBsYW5lcyAwLCAxIG9mIHYgPSAoNCwgMCkuCisrICAvLyAgICAgICAgICAgaTY0IGxhbmUw ID0gMio0ID0gODsgaTY0IGxhbmUxID0gMyowID0gMC4KKysgIHZhciBidWYyID0gbmV3IFVpbnQ4 QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIsIDE2LCAxNik7CisrICB2YXIgaGV4MiA9IEFy cmF5LmZyb20oYnVmMikubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwnMCcpKS5q b2luKCcnKTsKKysgIGFzc2VydEVxKGhleDIsICIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMCIpOworKworKyAgaW5zdC5leHBvcnRzLnJ1bl9oaWdoX3UoMzIpOworKyAgLy8gdiA9ICgw LCAwLCAyLCAzKS4gZXh0bXVsX2hpZ2ggcGlja3MgbGFuZXMgMiBhbmQgMy4KKysgIC8vICAgaXRl ciAxOiBsYW5lMl9wcm9kID0gMioyID0gNDsgbGFuZTNfcHJvZCA9IDMqMyA9IDkuIFJlc3VsdCBz dG9yZWQgYXQgYnl0ZXMgMC03IChsYW5lMl9wcm9kKSBhbmQgOC0xNSAobGFuZTNfcHJvZCkuCisr ICAvLyAgIGl0ZXIgMjogdiBub3cgaGFzIGk2NHgyIGxhbmUwID0gNCwgbGFuZTEgPSA5LCBpLmUu IGkzMng0IGxhbmVzIFs0LCAwLCA5LCAwXS4KKysgIC8vICAgICAgICAgICBleHRtdWxfaGlnaF91 KGNvbnN0KDAsMCwyLDMpLCB2KSByZWFkcyBsYW5lcyAyLCAzIG9mIGJvdGg6CisrICAvLyAgICAg ICAgICAgY29uc3QgbGFuZTIgPSAyLCBsYW5lMyA9IDM7IHYgbGFuZTIgPSA5LCBsYW5lMyA9IDAu CisrICAvLyAgICAgICAgICAgcmVzdWx0OiBsYW5lMl9wcm9kID0gMio5ID0gMTggYXQgYnl0ZXMg MC03OyBsYW5lM19wcm9kID0gMyowID0gMCBhdCBieXRlcyA4LTE1LgorKyAgdmFyIGJ1ZjMgPSBu ZXcgVWludDhBcnJheShpbnN0LmV4cG9ydHMubWVtLmJ1ZmZlciwgMzIsIDE2KTsKKysgIHZhciBo ZXgzID0gQXJyYXkuZnJvbShidWYzKS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgy LCcwJykpLmpvaW4oJycpOworKyAgYXNzZXJ0RXEoaGV4MywgIjEyMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwIik7CisrCisrICBpbnN0LmV4cG9ydHMucnVuX2hpZ2hfcyg0OCk7CisrICB2 YXIgYnVmNCA9IG5ldyBVaW50OEFycmF5KGluc3QuZXhwb3J0cy5tZW0uYnVmZmVyLCA0OCwgMTYp OworKyAgdmFyIGhleDQgPSBBcnJheS5mcm9tKGJ1ZjQpLm1hcChiID0+IGIudG9TdHJpbmcoMTYp LnBhZFN0YXJ0KDIsJzAnKSkuam9pbignJyk7CisrICBhc3NlcnRFcShoZXg0LCAiMTIwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKTsKKyt9CisrCisrcnVuQW5kQ2hlY2sobmV3IFdlYkFz c2VtYmx5Lkluc3RhbmNlKG1vZCkpOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJlci5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93 YXNtL3BwYzY0LXNpbWQtdnItY2xvYmJlci5qcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMDAwMC4uZDVmNzlhMTg0MGE2CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMv aml0LXRlc3QvdGVzdHMvd2FzbS9wcGM2NC1zaW1kLXZyLWNsb2JiZXIuanMKK0BAIC0wLDAgKzEs MTc5IEBACisrLy8gfGppdC10ZXN0fCBza2lwLWlmOiAhd2FzbVNpbWRFbmFibGVkKCkKKysvLwor Ky8vIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIFBQQzY0IFNJTUQgaGVscGVycyB0aGF0IHVzZSBWUjEu LlZSNSBhcyB1bmRlY2xhcmVkCisrLy8gc2NyYXRjaCBhbmQgc2lsZW50bHkgY29ycnVwdCBsaXZl IHdhc20gdjEyOCB2YWx1ZXMgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvcgorKy8vIGhhcyBwbGFjZWQg aW4gdGhvc2UgVlJzLgorKy8vCisrLy8gQmFja2dyb3VuZDogUFBDNjQgU2ltZDEyOCBsaXZlcyBp biBWUjAuLlZSMzEuIFZSMCBpcyBub24tYWxsb2NhdGFibGUKKysvLyAoPSBTY3JhdGNoU2ltZDEy OFJlZyk7IFZSMS4uVlIzMSBhcmUgYWxsb2NhdGFibGUuIFRoZSBoZWxwZXJzIGJlbG93CisrLy8g aGlzdG9yaWNhbGx5IHVzZWQgVlIxLi5WUjUgYXMgdW5kZWNsYXJlZCBzY3JhdGNoOgorKy8vCisr Ly8gICBuZWdJbnQ4eDE2LCBuZWdJbnQxNng4ICAgICAgICAgICAgICAgICAgICA6IGNsb2JiZXIg VlIxIChhbGwgQ1BVcykKKysvLyAgIG5lZ0ludDMyeDQsIG5lZ0ludDY0eDIgKFBPV0VSOCBmYWxs YmFjaykgIDogY2xvYmJlciBWUjEgKFBPV0VSOCBvbmx5KQorKy8vICAgZXh0QWRkUGFpcndpc2VJ bnQ4eDE2ICAoc2lnbmVkL3Vuc2lnbmVkKSAgOiBjbG9iYmVyIFZSMSwgVlIyLCBWUjMKKysvLyAg IGV4dEFkZFBhaXJ3aXNlSW50MTZ4OCAgKHNpZ25lZC91bnNpZ25lZCkgIDogY2xvYmJlciBWUjEs IFZSMiwgVlIzCisrLy8gICB1bnNpZ25lZFdpZGVuSGlnaEludDMyeDQgICAgICAgICAgICAgICAg ICA6IGNsb2JiZXIgVlIxCisrLy8KKysvLyBFYWNoIHRlc3Q6CisrLy8gICAtIGxvYWRzIGBuTGl2 ZWAgInByZXNlcnZlIiB2MTI4IHZhbHVlcyBmcm9tIG1lbW9yeSBhdCBvZmZzZXRzIDE2Li4xNisx NipuTGl2ZQorKy8vICAgLSBsb2FkcyBPTkUgYWRkaXRpb25hbCAiaW5wdXQiIHYxMjggPSByZXBl YXQoMHgxOCkgYXQgb2Zmc2V0IDEyOAorKy8vICAgLSBhcHBsaWVzIHRoZSBzdXNwZWN0IGhlbHBl ciB0byB0aGUgaW5wdXQKKysvLyAgIC0gc3RvcmVzIHRoZSBuTGl2ZSBwcmVzZXJ2ZWQgdmFsdWVz IGJhY2sgdG8gbWVtb3J5IGF0IG9mZnNldHMgMC4uMTYqbkxpdmUKKysvLyAgIC0gc3RvcmVzIHRo ZSBoZWxwZXIgcmVzdWx0IGF0IG9mZnNldCAxNipuTGl2ZQorKy8vCisrLy8gV2l0aG91dCB0aGUg Zml4LCBvbmUgb2YgdGhlIHByZXNlcnZlZCBsb2NhbHMgKHdoaWNoZXZlciB0aGUgYWxsb2NhdG9y CisrLy8gcGxhY2VkIGluIHRoZSBjbG9iYmVyZWQgVlIpIHJlYWRzIGJhY2sgYXMgdGhlIHN0YWdl ZCBpbnB1dCB2YWx1ZSAoMHgxOCkKKysvLyBpbnN0ZWFkIG9mIGl0cyBvcmlnaW5hbC4gV2l0aCB0 aGUgZml4ICh0aGUgaGVscGVyIHVzaW5nIFNjcmF0Y2hTaW1kMTI4U2NvcGUKKysvLyBvciBwcm9w ZXIgVlItbmFtZXNwYWNlIGVtaXQpLCBhbGwgcHJlc2VydmVkIGxvY2FscyByZXRhaW4gdGhlaXIg dmFsdWVzLgorKworK2NvbnN0IFBSRVNFUlZFX1BBVFRFUk5TID0gWzB4QTEsIDB4QjIsIDB4QzMs IDB4RDQsIDB4RTUsIDB4RjYsIDB4MDcsIDB4MjldOworK2NvbnN0IElOUFVUX0JZVEUgPSAweDE4 OworKworK2Z1bmN0aW9uIGluaXQobWVtKSB7CisrICAvLyBTbG90cyBhdCBvZmZzZXQgMTYsIDMy LCAuLi4sIDE2KzE2KjcgaG9sZCB0aGUgcHJlc2VydmUgcGF0dGVybnMuCisrICBmb3IgKGxldCBz bG90ID0gMDsgc2xvdCA8IFBSRVNFUlZFX1BBVFRFUk5TLmxlbmd0aDsgc2xvdCsrKSB7CisrICAg IGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgIG1lbVsxNiArIHNsb3QgKiAx NiArIGldID0gUFJFU0VSVkVfUEFUVEVSTlNbc2xvdF07CisrICAgIH0KKysgIH0KKysgIC8vIFRo ZSBoZWxwZXIgaW5wdXQgaXMgYXQgb2Zmc2V0IDEyOCAoPSAxNiArIDE2KjcgKyAxNiA9IDE0ND8g bm8sIDE2ICsgMTYqOCA9IDE0NCkuCisrICAvLyBVc2UgYSBmaXhlZCBvZmZzZXQgUEFTVCB0aGUg cHJlc2VydmUgYXJlYS4gV2l0aCBuTGl2ZSBtYXggNywgcHJlc2VydmUgdXNlcworKyAgLy8gMTYu LigxNisxNio3LTEpID0gMTYuLjEyNy4gSW5wdXQgZ29lcyBhdCAxNDQgdG8gbGVhdmUgYSAxNi1i eXRlIGdhcC4KKysgIGNvbnN0IElOUFVUX09GRlNFVCA9IDE0NDsKKysgIGZvciAobGV0IGkgPSAw OyBpIDwgMTY7IGkrKykgbWVtW0lOUFVUX09GRlNFVCArIGldID0gSU5QVVRfQllURTsKKyt9Cisr CisrZnVuY3Rpb24gcmVwZWF0KGJ5dGUpIHsKKysgIGNvbnN0IGEgPSBuZXcgQXJyYXkoMTYpOwor KyAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgaSsrKSBhW2ldID0gYnl0ZTsKKysgIHJldHVybiBh OworK30KKysKKysvLyBWZXJpZnkgbkxpdmUgcHJlc2VydmVkIHNsb3RzIG1hdGNoIFBSRVNFUlZF X1BBVFRFUk5TIGF0IG91dHB1dCBvZmZzZXRzCisrLy8gMC4uMTYqbkxpdmUsIGFuZCB0aGF0IHRo ZSByZXN1bHQgc2xvdCBhdCAxNipuTGl2ZSBtYXRjaGVzIGBleHBlY3RlZFJlc3VsdGAuCisrZnVu Y3Rpb24gY2hlY2sob3BOYW1lLCBtZW0sIG5MaXZlLCBleHBlY3RlZFJlc3VsdCkgeworKyAgZm9y IChsZXQgc2xvdCA9IDA7IHNsb3QgPCBuTGl2ZTsgc2xvdCsrKSB7CisrICAgIGZvciAobGV0IGkg PSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgIGNvbnN0IGdvdCA9IG1lbVtzbG90ICogMTYgKyBp XTsKKysgICAgICBjb25zdCB3YW50ID0gUFJFU0VSVkVfUEFUVEVSTlNbc2xvdF07CisrICAgICAg YXNzZXJ0RXEoZ290LCB3YW50LAorKyAgICAgICAgICAgICAgIGAke29wTmFtZX06IGxpdmUgc2xv dCAke3Nsb3R9IGJ5dGUgJHtpfTogZ290IDB4JHtnb3QudG9TdHJpbmcoMTYpfSwgZXhwZWN0ZWQg MHgke3dhbnQudG9TdHJpbmcoMTYpfSAoYWxsb2NhdG9yLWNsb2JiZXJlZCBWUj8pYCk7CisrICAg IH0KKysgIH0KKysgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICBjb25zdCBn b3QgPSBtZW1bbkxpdmUgKiAxNiArIGldOworKyAgICBjb25zdCB3YW50ID0gZXhwZWN0ZWRSZXN1 bHRbaV07CisrICAgIGFzc2VydEVxKGdvdCwgd2FudCwKKysgICAgICAgICAgICAgYCR7b3BOYW1l fTogcmVzdWx0IGJ5dGUgJHtpfTogZ290IDB4JHtnb3QudG9TdHJpbmcoMTYpfSwgZXhwZWN0ZWQg MHgke3dhbnQudG9TdHJpbmcoMTYpfWApOworKyAgfQorK30KKysKKysvLyBCdWlsZCBhIHdhc20g bW9kdWxlIHRoYXQ6CisrLy8gIC0gbG9hZHMgYG5MaXZlYCBwcmVzZXJ2ZSB2MTI4IGxvY2FscyBm cm9tIG1lbW9yeSBhdCBvZmZzZXRzIDE2Li4xNipuTGl2ZQorKy8vICAtIGxvYWRzIE9ORSBpbnB1 dCB2MTI4IGZyb20gb2Zmc2V0IDE0NAorKy8vICAtIGFwcGxpZXMgYG9wYCB0byB0aGUgaW5wdXQK KysvLyAgLSBzdG9yZXMgYWxsIGBuTGl2ZSArIDFgIHYxMjggdmFsdWVzIGJhY2sgdG8gbWVtb3J5 IGF0IG9mZnNldHMgMC4uMTYqbkxpdmUKKytmdW5jdGlvbiBidWlsZE1vZHVsZShvcCwgbkxpdmUp IHsKKysgIGNvbnN0IGxvY2FsRGVjbHMgPSBbXTsKKysgIGNvbnN0IGluaXRMb2FkcyA9IFtdOwor KyAgY29uc3QgZmluYWxTdG9yZXMgPSBbXTsKKysgIGZvciAobGV0IGkgPSAwOyBpIDwgbkxpdmU7 IGkrKykgeworKyAgICBsb2NhbERlY2xzLnB1c2goYChsb2NhbCAkdiR7aX0gdjEyOClgKTsKKysg ICAgaW5pdExvYWRzLnB1c2goYChsb2NhbC5zZXQgJHYke2l9ICh2MTI4LmxvYWQgKGkzMi5jb25z dCAkezE2ICsgaSAqIDE2fSkpKWApOworKyAgICBmaW5hbFN0b3Jlcy5wdXNoKGAodjEyOC5zdG9y ZSAoaTMyLmNvbnN0ICR7aSAqIDE2fSkgKGxvY2FsLmdldCAkdiR7aX0pKWApOworKyAgfQorKyAg Ly8gVGhlIGhlbHBlciBpbnB1dCArIHJlc3VsdC4KKysgIGxvY2FsRGVjbHMucHVzaChgKGxvY2Fs ICRpbnB1dCB2MTI4KWApOworKyAgaW5pdExvYWRzLnB1c2goYChsb2NhbC5zZXQgJGlucHV0ICh2 MTI4LmxvYWQgKGkzMi5jb25zdCAxNDQpKSlgKTsKKysgIGZpbmFsU3RvcmVzLnB1c2goYCh2MTI4 LnN0b3JlIChpMzIuY29uc3QgJHtuTGl2ZSAqIDE2fSkgKGxvY2FsLmdldCAkaW5wdXQpKWApOwor KworKyAgY29uc3QgdGV4dCA9IGAKKysgICAgKG1vZHVsZQorKyAgICAgIChtZW1vcnkgKGV4cG9y dCAibWVtIikgMSkKKysgICAgICAoZnVuYyAoZXhwb3J0ICJydW4iKQorKyAgICAgICAgJHtsb2Nh bERlY2xzLmpvaW4oJ1xuICAgICAgICAnKX0KKysgICAgICAgICR7aW5pdExvYWRzLmpvaW4oJ1xu ICAgICAgICAnKX0KKysgICAgICAgIChsb2NhbC5zZXQgJGlucHV0ICgke29wfSAobG9jYWwuZ2V0 ICRpbnB1dCkpKQorKyAgICAgICAgJHtmaW5hbFN0b3Jlcy5qb2luKCdcbiAgICAgICAgJyl9Cisr ICAgICAgKQorKyAgICApYDsKKysgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKHdhc21U ZXh0VG9CaW5hcnkodGV4dCkpOworK30KKysKKytmdW5jdGlvbiBydW5PbmUob3BOYW1lLCBvcCwg bkxpdmUsIGV4cGVjdGVkUmVzdWx0KSB7CisrICBjb25zdCBtb2QgPSBidWlsZE1vZHVsZShvcCwg bkxpdmUpOworKyAgY29uc3QgaW5zdCA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2QpOwor KyAgY29uc3QgbWVtID0gbmV3IFVpbnQ4QXJyYXkoaW5zdC5leHBvcnRzLm1lbS5idWZmZXIpOwor KyAgLy8gUnVuIG1hbnkgdGltZXMgc28gQmFzZWxpbmUgKyBJb24gYm90aCBzZWUgaXQuCisrICBm b3IgKGxldCB3YXJtID0gMDsgd2FybSA8IDUwOyB3YXJtKyspIHsKKysgICAgaW5pdChtZW0pOwor KyAgICBpbnN0LmV4cG9ydHMucnVuKCk7CisrICAgIGNoZWNrKG9wTmFtZSwgbWVtLCBuTGl2ZSwg ZXhwZWN0ZWRSZXN1bHQpOworKyAgfQorK30KKysKKysvLyAtLS0tIE5lZ2F0ZSBoZWxwZXJzIC0t LS0KKysvLworKy8vIElucHV0IGxhbmUgPSAweDE4ID0gMjQuIG5lZygyNCkgPSAtMjQuCisrLy8g aTh4MTYubmVnIDogLTI0IG1vZCAyNTYgPSAyMzIgPSAweEU4IHBlciBieXRlLgorKy8vIGkxNng4 Lm5lZyA6IGxhbmUgPSAweDE4MTggPSA2MTY4LCBuZWcgPSAtNjE2OCBtb2QgNjU1MzYgPSAweEU3 RTguCisrLy8gICAgICAgICAgICAgTWVtb3J5IExFOiBwZXIgaTE2IGxhbmUgYnl0ZXMgMHhFOCAw eEU3LgorKy8vIGkzMng0Lm5lZyA6IGxhbmUgPSAweDE4MTgxODE4ID0gNDA0MjMyMjE2LCBuZWcg PSAweEU3RTdFN0U4LgorKy8vICAgICAgICAgICAgIE1lbW9yeSBMRTogcGVyIGkzMiBsYW5lIGJ5 dGVzIDB4RTggMHhFNyAweEU3IDB4RTcuCisrLy8gaTY0eDIubmVnIDogbGFuZSA9IDB4MTgxODE4 MTgxODE4MTgxOCwgbmVnID0gMHhFN0U3RTdFN0U3RTdFN0U4LgorKy8vICAgICAgICAgICAgIE1l bW9yeSBMRTogcGVyIGk2NCBsYW5lIGJ5dGVzIDB4RTggMHhFNyAweEU3IDB4RTcgMHhFNyAweEU3 IDB4RTcgMHhFNy4KKysKKytydW5PbmUoImk4eDE2Lm5lZyIsICJpOHgxNi5uZWciLCA0LCByZXBl YXQoMHhFOCkpOworK3J1bk9uZSgiaTE2eDgubmVnIiwgImkxNng4Lm5lZyIsIDQsCisrICAgICAg IFsweEU4LDB4RTcsIDB4RTgsMHhFNywgMHhFOCwweEU3LCAweEU4LDB4RTcsCisrICAgICAgICAw eEU4LDB4RTcsIDB4RTgsMHhFNywgMHhFOCwweEU3LCAweEU4LDB4RTddKTsKKytydW5PbmUoImkz Mng0Lm5lZyIsICJpMzJ4NC5uZWciLCA0LAorKyAgICAgICBbMHhFOCwweEU3LDB4RTcsMHhFNywg MHhFOCwweEU3LDB4RTcsMHhFNywKKysgICAgICAgIDB4RTgsMHhFNywweEU3LDB4RTcsIDB4RTgs MHhFNywweEU3LDB4RTddKTsKKytydW5PbmUoImk2NHgyLm5lZyIsICJpNjR4Mi5uZWciLCA0LAor KyAgICAgICBbMHhFOCwweEU3LDB4RTcsMHhFNywweEU3LDB4RTcsMHhFNywweEU3LAorKyAgICAg ICAgMHhFOCwweEU3LDB4RTcsMHhFNywweEU3LDB4RTcsMHhFNywweEU3XSk7CisrCisrLy8gLS0t LSBleHRBZGRQYWlyd2lzZSBoZWxwZXJzIC0tLS0KKysvLworKy8vIGV4dGFkZF9wYWlyd2lzZSBy ZWFkcyBhZGphY2VudCBwYWlycyBhbmQgd2lkZW5zLXRoZW4tc3VtcyB0aGVtLgorKy8vIElucHV0 ID0gcmVwZWF0KDB4MTgpID0gMjQuCisrLy8gaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2X3Mg OiAyNCArIDI0ID0gNDggPSAweDAwMzAgcGVyIGkxNiBsYW5lLgorKy8vICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1lbW9yeSBMRTogMHgzMCAweDAwIHBlciBsYW5lIMOXIDggbGFu ZXMuCisrLy8gaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2X3UgOiBzYW1lIHNpbmNlIGlucHV0 IGlzIHBvc2l0aXZlLgorKy8vIGkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4OF9zIDogaTE2IGxh bmUgPSAweDE4MTggPSA2MTY4LCBzdW0gPSAxMjMzNiA9IDB4MDAwMDMwMzAuCisrLy8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5IExFOiAweDMwIDB4MzAgMHgwMCAweDAw IHBlciBsYW5lIMOXIDQgbGFuZXMuCisrLy8gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3Ug OiBzYW1lIHNpbmNlIGlucHV0IGlzIHBvc2l0aXZlLgorKworK3J1bk9uZSgiaTE2eDguZXh0YWRk X3BhaXJ3aXNlX2k4eDE2X3MiLAorKyAgICAgICAiaTE2eDguZXh0YWRkX3BhaXJ3aXNlX2k4eDE2 X3MiLCA0LAorKyAgICAgICBbMHgzMCwweDAwLCAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCww eDAwLAorKyAgICAgICAgMHgzMCwweDAwLCAweDMwLDB4MDAsIDB4MzAsMHgwMCwgMHgzMCwweDAw XSk7CisrCisrcnVuT25lKCJpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfdSIsCisrICAgICAg ICJpMTZ4OC5leHRhZGRfcGFpcndpc2VfaTh4MTZfdSIsIDQsCisrICAgICAgIFsweDMwLDB4MDAs IDB4MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDAsCisrICAgICAgICAweDMwLDB4MDAsIDB4 MzAsMHgwMCwgMHgzMCwweDAwLCAweDMwLDB4MDBdKTsKKysKKytydW5PbmUoImkzMng0LmV4dGFk ZF9wYWlyd2lzZV9pMTZ4OF9zIiwKKysgICAgICAgImkzMng0LmV4dGFkZF9wYWlyd2lzZV9pMTZ4 OF9zIiwgNCwKKysgICAgICAgWzB4MzAsMHgzMCwweDAwLDB4MDAsIDB4MzAsMHgzMCwweDAwLDB4 MDAsCisrICAgICAgICAweDMwLDB4MzAsMHgwMCwweDAwLCAweDMwLDB4MzAsMHgwMCwweDAwXSk7 CisrCisrcnVuT25lKCJpMzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfdSIsCisrICAgICAgICJp MzJ4NC5leHRhZGRfcGFpcndpc2VfaTE2eDhfdSIsIDQsCisrICAgICAgIFsweDMwLDB4MzAsMHgw MCwweDAwLCAweDMwLDB4MzAsMHgwMCwweDAwLAorKyAgICAgICAgMHgzMCwweDMwLDB4MDAsMHgw MCwgMHgzMCwweDMwLDB4MDAsMHgwMF0pOworKworKy8vIC0tLS0gdW5zaWduZWRXaWRlbkhpZ2hJ bnQzMng0IC0tLS0KKysvLworKy8vIGk2NHgyLmV4dGVuZF9oaWdoX2kzMng0X3U6IHRha2UgdGhl IGhpZ2ggdHdvIGkzMiBsYW5lcyAobGFuZXMgMiBhbmQgMykgb2YKKysvLyB0aGUgaW5wdXQsIHpl cm8tZXh0ZW5kIGVhY2ggdG8gaTY0LCBsYXkgdGhlbSBvdXQgYXMgaTY0eDIuCisrLy8gSW5wdXQg bGFuZSA9IDB4MTgxODE4MTggKHBvc2l0aXZlLCA9NDA0MjMyMjE2KS4KKysvLyBSZXN1bHQ6IHR3 byBpNjQgbGFuZXMsIGVhY2ggPSAweDAwMDAwMDAwMTgxODE4MTguCisrLy8gTWVtb3J5IExFOiBw ZXIgaTY0IGxhbmUgYnl0ZXMgMHgxOCAweDE4IDB4MTggMHgxOCAweDAwIDB4MDAgMHgwMCAweDAw LgorKworK3J1bk9uZSgiaTY0eDIuZXh0ZW5kX2hpZ2hfaTMyeDRfdSIsCisrICAgICAgICJpNjR4 Mi5leHRlbmRfaGlnaF9pMzJ4NF91IiwgNCwKKysgICAgICAgWzB4MTgsMHgxOCwweDE4LDB4MTgs MHgwMCwweDAwLDB4MDAsMHgwMCwKKysgICAgICAgIDB4MTgsMHgxOCwweDE4LDB4MTgsMHgwMCww eDAwLDB4MDAsMHgwMF0pOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNt L3Byb2ZpbGluZy5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3Byb2ZpbGluZy5qcwor aW5kZXggZjQ4NzJiMDdjZGU4Li5jY2Q5NjkwYTI2MmYgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9wcm9maWxpbmcuanMKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL3Byb2ZpbGluZy5qcworQEAgLTExNyw2ICsxMTcsMTMgQEAgZm9yIChsZXQgdHlwZSBv ZiBbJ2YzMicsICdmNjQnXSkgeworICAgICAgICAgaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigi YXJtNjQiKSkgeworICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgfQorKyAgICAgICAg Ly8gUFBDNjQgaW5saW5lcyBjZWlsL2Zsb29yL3RydW5jIGFzIGZyaXAvZnJpbS9mcml6IChzZWUK KysgICAgICAgIC8vIEFzc2VtYmxlci1wcGM2NC5oIEhhc1JvdW5kSW5zdHJ1Y3Rpb24pLCBzbyBu byBidWlsdGluIHRodW5rCisrICAgICAgICAvLyBmcmFtZXMgZXhpc3QgdG8gcHJvZmlsZS4gYG5l YXJlc3RgIHN0aWxsIGdvZXMgdGhyb3VnaCB0aGUKKysgICAgICAgIC8vIHRodW5rIGJlY2F1c2Ug UFBDNjQncyBmcmluIGlzIG5vdCBJRUVFIHJvdW5kLXRvLWV2ZW4uCisrICAgICAgICBpZiAoZ2V0 QnVpbGRDb25maWd1cmF0aW9uKCJwcGM2NCIpICYmIGZ1bmMgIT09ICduZWFyZXN0JykgeworKyAg ICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorICAgICAgICAgdGVzdChgKG1vZHVsZQor ICAgICAgICAgICAgIChmdW5jIChleHBvcnQgIiIpIChwYXJhbSAke3R5cGV9KSAocmVzdWx0ICR7 dHlwZX0pCisgICAgICAgICAgICAgICAgIGxvY2FsLmdldCAwCitkaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6LmpzIGIv anMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1wcGM2NC1leHRyYWN0LWxhbmUtY3R6 LmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi5lMmNmNWRlZjU0 MWUKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jl c3MtcHBjNjQtZXh0cmFjdC1sYW5lLWN0ei5qcworQEAgLTAsMCArMSw0OSBAQAorKy8vIHxqaXQt dGVzdHwgLS13YXNtLWNvbXBpbGVyPW9wdGltaXppbmc7IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJs ZWQoKQorKy8vCisrLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBhIFBQQzY0IGkzMng0LmV4dHJhY3Rf bGFuZSBjYW5vbmljYWxpemF0aW9uIGJ1Zy4KKysvLworKy8vIEV4dHJhY3RMYW5lVG9HUFIgbGVh dmVzIHRoZSBhZGphY2VudCBsYW5lIGluIHRoZSBoaWdoIDMyIGJpdHMgb2YgdGhlIEdQUiBmb3IK KysvLyB0aGUgdW5zaGlmdGVkIGxhbmVzICgwIGFuZCAyKSwgc28gZXh0cmFjdExhbmVJbnQzMng0 IG11c3Qgc2lnbi1leHRlbmQgaXRzIGkzMgorKy8vIHJlc3VsdCAoYXMgdGhlIGk4eDE2L2kxNng4 IGV4dHJhY3RzIGRvKS4gV2l0aG91dCB0aGF0LCBhIGNvbnN1bWVyIHRoYXQgcmVhZHMKKysvLyB0 aGUgZnVsbCA2NC1iaXQgcmVnaXN0ZXIgc2VlcyBnYXJiYWdlIGluIHRoZSBoaWdoIGhhbGYuIFRo ZSBQT1dFUjggaTMyLmN0egorKy8vIGVtdWxhdGlvbiBpcyBzdWNoIGEgY29uc3VtZXI6IGl0cyA2 NC1iaXQgbmVnL2FuZC4gemVyby1jaGVjayBkaXNhZ3JlZXMgd2l0aAorKy8vIGl0cyAzMi1iaXQg Y250bHp3LCBzbyBjdHogb2YgYSB6ZXJvIGxhbmUgc2l0dGluZyBuZXh0IHRvIGEgbm9uemVybyBu ZWlnaGJvdXIKKysvLyByZXR1cm5lZCAtMSBpbnN0ZWFkIG9mIDMyLgorKy8vCisrLy8gVGhlIHZl Y3RvciBjb21lcyBmcm9tIG1lbW9yeSAocnVudGltZSwgbm90IGNvbnN0YW50LWZvbGRhYmxlKSBh bmQgaXMgcGFzc2VkCisrLy8gdGhyb3VnaCBhIFNJTUQgb3Agc28gdGhlIGV4dHJhY3QgaXMgYSBn ZW51aW5lIHZlY3Rvci1yZWdpc3RlciBleHRyYWN0LiBSdW4KKysvLyB1bmRlciBNT1pfUFBDNjRf Rk9SQ0VfUE9XRVI4PTEgdG8gZXhlcmNpc2UgdGhlIGVtdWxhdGVkIGN0eiBwYXRoOyBpbiBldmVy eQorKy8vIG90aGVyIG1vZGUgdGhpcyBpcyBzaW1wbHkgYSBjb3JyZWN0bmVzcyBjaGVjay4KKysK Kytjb25zdCBpbnMgPSB3YXNtRXZhbFRleHQoYChtb2R1bGUKKysgIChtZW1vcnkgKGV4cG9ydCAi bWVtIikgMSkKKysgIChmdW5jICR2IChyZXN1bHQgdjEyOCkKKysgICAgOzsgaWRlbnRpdHkgQU5E IGtlZXBzIHRoZSB2YWx1ZSBpbiBhIHZlY3RvciByZWdpc3RlciBhbmQgZm9yY2VzIGEgcmVhbAor KyAgICA7OyBleHRyYWN0TGFuZUludDMyeDQgcmF0aGVyIHRoYW4gYW4gZXh0cmFjdC1vZi1sb2Fk IGZvbGQuCisrICAgICh2MTI4LmFuZCAodjEyOC5sb2FkIChpMzIuY29uc3QgMCkpICh2MTI4LmNv bnN0IGkzMng0IC0xIC0xIC0xIC0xKSkpCisrICAoZnVuYyAoZXhwb3J0ICJjdHowIikgKHJlc3Vs dCBpMzIpIChpMzIuY3R6IChpMzJ4NC5leHRyYWN0X2xhbmUgMCAoY2FsbCAkdikpKSkKKysgIChm dW5jIChleHBvcnQgImN0ejEiKSAocmVzdWx0IGkzMikgKGkzMi5jdHogKGkzMng0LmV4dHJhY3Rf bGFuZSAxIChjYWxsICR2KSkpKQorKyAgKGZ1bmMgKGV4cG9ydCAiY3R6MiIpIChyZXN1bHQgaTMy KSAoaTMyLmN0eiAoaTMyeDQuZXh0cmFjdF9sYW5lIDIgKGNhbGwgJHYpKSkpCisrICAoZnVuYyAo ZXhwb3J0ICJjdHozIikgKHJlc3VsdCBpMzIpIChpMzIuY3R6IChpMzJ4NC5leHRyYWN0X2xhbmUg MyAoY2FsbCAkdikpKSkKKysgIChmdW5jIChleHBvcnQgInNleHQwIikgKHJlc3VsdCBpNjQpIChp NjQuZXh0ZW5kX2kzMl9zIChpMzJ4NC5leHRyYWN0X2xhbmUgMCAoY2FsbCAkdikpKSkKKysgIChm dW5jIChleHBvcnQgInNleHQyIikgKHJlc3VsdCBpNjQpIChpNjQuZXh0ZW5kX2kzMl9zIChpMzJ4 NC5leHRyYWN0X2xhbmUgMiAoY2FsbCAkdikpKSkKKyspYCkuZXhwb3J0czsKKysKKytjb25zdCBt ZW0gPSBuZXcgSW50MzJBcnJheShpbnMubWVtLmJ1ZmZlcik7CisrZnVuY3Rpb24gc2V0TGFuZXMo YSwgYiwgYywgZCkgeyBtZW1bMF0gPSBhOyBtZW1bMV0gPSBiOyBtZW1bMl0gPSBjOyBtZW1bM10g PSBkOyB9CisrCisrLy8gRWFjaCBsYW5lID0gMCBzdXJyb3VuZGVkIGJ5IG5vbnplcm8gbmVpZ2hi b3VyczogY3R6IG11c3QgYmUgMzIsIG5ldmVyIC0xLgorK3NldExhbmVzKDAsIC0xLCAtMSwgLTEp OyBhc3NlcnRFcShpbnMuY3R6MCgpLCAzMik7Cisrc2V0TGFuZXMoLTEsIDAsIC0xLCAtMSk7IGFz c2VydEVxKGlucy5jdHoxKCksIDMyKTsKKytzZXRMYW5lcygtMSwgLTEsIDAsIC0xKTsgYXNzZXJ0 RXEoaW5zLmN0ejIoKSwgMzIpOworK3NldExhbmVzKC0xLCAtMSwgLTEsIDApOyBhc3NlcnRFcShp bnMuY3R6MygpLCAzMik7CisrCisrLy8gTm9uemVybyBsYW5lczogY3R6IG9mIHRoZSBsYW5lIHZh bHVlLCByZWdhcmRsZXNzIG9mIG5laWdoYm91cnMuCisrc2V0TGFuZXMoMHgxMCwgLTEsIDB4MTAw MDAwLCAtMSk7CisrYXNzZXJ0RXEoaW5zLmN0ejAoKSwgNCk7CisrYXNzZXJ0RXEoaW5zLmN0ejIo KSwgMjApOworKworKy8vIEEgbmVnYXRpdmUgbGFuZSBtdXN0IHNpZ24tZXh0ZW5kIGNvcnJlY3Rs eSAodGhlIGNhbm9uaWNhbGl6YXRpb24gaXMgZXh0c3cpLgorK3NldExhbmVzKC0yLCA3LCAtMywg Nyk7CisrYXNzZXJ0RXEoaW5zLnNleHQwKCksIC0ybik7CisrYXNzZXJ0RXEoaW5zLnNleHQyKCks IC0zbik7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy1w cGM2NC1zZWxlY3QtY29uZGl0aW9uLmpzIGIvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVn cmVzcy1wcGM2NC1zZWxlY3QtY29uZGl0aW9uLmpzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k ZXggMDAwMDAwMDAwMDAwLi5jMzg5NzVkY2U4NTkKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3Ny Yy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtc2VsZWN0LWNvbmRpdGlvbi5qcwor QEAgLTAsMCArMSwzMCBAQAorKy8vIHxqaXQtdGVzdHwgLS13YXNtLWNvbXBpbGVyPW9wdGltaXpp bmc7IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJsZWQoKQorKy8vCisrLy8gUmVncmVzc2lvbiB0ZXN0 IGZvciBhIFBQQzY0IHdhc20gSW9uIG1pc2NvbXBpbGUgb2YgYHNlbGVjdGAgd2l0aCBhIDMyLWJp dAorKy8vIGNvbmRpdGlvbi4gdmlzaXRXYXNtU2VsZWN0IHRlc3RlZCB0aGUgaTMyIGNvbmRpdGlv biB3aXRoIGEgNjQtYml0IGNvbXBhcmUKKysvLyAoY21wZGkgLyBicmFuY2hUZXN0UHRyKS4gV2hl biB0aGUgY29uZGl0aW9uIHdhcyB6ZXJvIGluIGl0cyBsb3cgMzIgYml0cyBidXQKKysvLyBoYWQg Z2FyYmFnZSBpbiB0aGUgaGlnaCAzMiBiaXRzIChhcyBjYW4gaGFwcGVuIHVuZGVyIHJlZ2lzdGVy IHByZXNzdXJlKSwgdGhlCisrLy8gNjQtYml0IHRlc3QgcmVhZCBpdCBhcyBub24temVybyBhbmQg c2VsZWN0IHJldHVybmVkIHRoZSB3cm9uZyBvcGVyYW5kLgorKy8vCisrLy8gSGVyZSB0aGUgY29u ZGl0aW9uIGAkeDNgIGlzIDA7IGBzZWxlY3QoJHg4LCAtOTUyODA5ODI4LCAkeDMpYCBtdXN0IHRo ZXJlZm9yZQorKy8vIHJldHVybiAtOTUyODA5ODI4LiBUaGUgc3Vycm91bmRpbmcgU0lNRCBzaHVm ZmxlL2JpdHNlbGVjdC9zd2l6emxlIGNoYWluCisrLy8gc3VwcGxpZXMgdGhlIHYxMjggcmVnaXN0 ZXIgcHJlc3N1cmUgdGhhdCBleHBvc2VkIHRoZSBidWcuCisrCisrY29uc3Qgd2F0ID0gYChtb2R1 bGUgKGZ1bmMgKGV4cG9ydCAiZiIpIChyZXN1bHQgaTY0KQorKyAgKGxvY2FsICR4MyBpMzIpKGxv Y2FsICR4NyBpMzIpKGxvY2FsICR4OCBpMzIpCisrICAobG9jYWwgJHcwIHYxMjgpKGxvY2FsICR3 MSB2MTI4KShsb2NhbCAkdzIgdjEyOCkobG9jYWwgJHczIHYxMjgpCisrICAobG9jYWwgJHc0IHYx MjgpKGxvY2FsICR3NSB2MTI4KShsb2NhbCAkdzYgdjEyOCkobG9jYWwgJHc3IHYxMjgpCisrICAo bG9jYWwuc2V0ICR3MCAodjEyOC5jb25zdCBpMzJ4NCAxNzA4NDQzNDU0IDE1MzIyMTg2OTUgMjEw NzQyMzYxMCAtMTI2NTc3NTAwNSkpCisrICAobG9jYWwuc2V0ICR3MiAodjEyOC5jb25zdCBpMzJ4 NCAtNzUyMzEyMzU1IC02MjU1MzA1NzIgLTg0NDY2NjUwMCA4MzIwMzY0MDgpKQorKyAgKGxvY2Fs LnNldCAkdzcgKHYxMjguY29uc3QgaTMyeDQgMTE1MDAzNDk2IC05NzA0NDExMTcgLTQzMjI1OTM1 IDE4NzQxMjgyMDQpKQorKyAgKGxvY2FsLnNldCAkdzQgKGk4eDE2LnNodWZmbGUgMTUgMTggMTMg MiA2IDIyIDIwIDggMTkgMTAgMTIgOCAxMSA1IDYgMjggKGxvY2FsLmdldCAkdzcpIChsb2NhbC5n ZXQgJHczKSkpCisrICAobG9jYWwuc2V0ICR3NiAodjEyOC5iaXRzZWxlY3QgKGxvY2FsLmdldCAk dzQpIChsb2NhbC5nZXQgJHcwKSAobG9jYWwuZ2V0ICR3NykpKQorKyAgKGxvY2FsLnNldCAkdzEg KHYxMjguY29uc3QgaTMyeDQgLTE2MzUwMjUyNjQgLTYyOTc4NDEzMiAxNTE3ODY5ODUyIDE2NTE3 NzE4MjUpKQorKyAgKGxvY2FsLnNldCAkdzcgKHYxMjguYml0c2VsZWN0IChsb2NhbC5nZXQgJHc2 KSAobG9jYWwuZ2V0ICR3MikgKGxvY2FsLmdldCAkdzIpKSkKKysgIChsb2NhbC5zZXQgJHc2IChp OHgxNi5zd2l6emxlIChsb2NhbC5nZXQgJHcxKSAobG9jYWwuZ2V0ICR3NykpKQorKyAgKGxvY2Fs LnNldCAkeDMgKGkzMng0LmV4dHJhY3RfbGFuZSAyIChsb2NhbC5nZXQgJHc2KSkpCisrICAobG9j YWwuc2V0ICR4NyAoc2VsZWN0IChsb2NhbC5nZXQgJHg4KSAoaTMyLmNvbnN0IC05NTI4MDk4Mjgp IChsb2NhbC5nZXQgJHgzKSkpCisrICAoaTY0LmV4dGVuZF9pMzJfcyAobG9jYWwuZ2V0ICR4Nykp KSlgOworKworK2NvbnN0IGlucyA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShuZXcgV2ViQXNz ZW1ibHkuTW9kdWxlKHdhc21UZXh0VG9CaW5hcnkod2F0KSkpOworK2Fzc2VydEVxKGlucy5leHBv cnRzLmYoKSwgLTk1MjgwOTgyOG4pOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQtdGVzdC90ZXN0 cy93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJhcC1leGl0LXNpbWQtc2F2ZS5qcyBiL2pzL3NyYy9qaXQt dGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MtcHBjNjQtdHJhcC1leGl0LXNpbWQtc2F2ZS5qcworbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uNDg4N2Y4ZGYxMTljCistLS0g L2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9yZWdyZXNzLXBwYzY0 LXRyYXAtZXhpdC1zaW1kLXNhdmUuanMKK0BAIC0wLDAgKzEsNjQgQEAKKysvLyB8aml0LXRlc3R8 IGV4aXRzdGF0dXM6IDA7IHNraXAtaWY6ICF3YXNtU2ltZEVuYWJsZWQoKQorKy8vCisrLy8gUmVn cmVzc2lvbiB0ZXN0IGZvciB0aGUgUFBDNjQgd2FzbSB0cmFwIGV4aXQgbG9zaW5nIGxpdmUgdjEy OCBzdGF0ZS4KKysvLworKy8vIE9uIFBQQzY0LCBkb3VibGVzIGxpdmUgaW4gdGhlIEZQUnMgKFZT UjAtMzEpIHdoaWxlIHdhc20gdjEyOCB2YWx1ZXMgbGl2ZSBpbgorKy8vIHRoZSBWUnMgKFZTUjMy LTYzKSAtLSBkaXNqb2ludCBwaHlzaWNhbCBwb29scy4gVGhlIHRyYXAgZXhpdCdzCisrLy8gUmVn c1RvUHJlc2VydmUgdXNlZCBBbGxEb3VibGVNYXNrIG9ubHksIHNvIGEgdHJhcCBmaXJpbmcgd2hp bGUgYSB2MTI4IHdhcworKy8vIGxpdmUgcmVzdW1lZCB3aXRoIHdoYXRldmVyIHRoZSBDKysgaW50 ZXJydXB0IHBhdGgncyBsaWJjIGxlZnQgaW4gdGhlIFZScworKy8vIChnbGliYydzIG1pc2FsaWdu ZWQgdmVjdG9yIG1lbWNweSBsZWF2ZXMgbHZzbCBhbGlnbm1lbnQtY29udHJvbCBieXRlCisrLy8g cGF0dGVybnMgdGhlcmUpLiBJbnRlcnJ1cHQgY2hlY2tzIGZpcmUgdmlhIHRyYXBzIGF0IGxvb3Ag YmFjay1lZGdlcywgd2hlcmUKKysvLyBhIGxvb3AtY2FycmllZCB2MTI4IGFjY3VtdWxhdG9yIGlz IGV4YWN0bHkgd2hhdCBpcyBsaXZlLgorKy8vCisrLy8gVGhlIGxvb3AgYmVsb3cga2VlcHMgYW4g aTMyeDQgYWNjdW11bGF0b3IgbGl2ZSBhY3Jvc3MgZXZlcnkgYmFjay1lZGdlIHdoaWxlCisrLy8g aW50ZXJydXB0cyBmaXJlIHJlcGVhdGVkbHk7IHRoZSBjYWxsYmFjayBkb2VzIGxhcmdlIG1pc2Fs aWduZWQgY29waWVzIHRvCisrLy8gcHVsbCBsaWJjJ3MgdmVjdG9yIG1lbWNweSB0aHJvdWdoIHRo ZSBWUnMuIE9uIGFuIHVuZml4ZWQgYnVpbGQgKHJlYWwKKysvLyBzaWxpY29uOyB0aGUgc2ltdWxh dG9yJ3MgVlJzIGFyZSBpbnN1bGF0ZWQgZnJvbSBuYXRpdmUgbGliYykgdGhlCisrLy8gYWNjdW11 bGF0b3IgY29tZXMgYmFjayBob2xkaW5nIGdhcmJhZ2UgYW5kIHRoZSBmaW5hbCBsYW5lIHZhbHVl cyBhcmUgd3JvbmcuCisrCisrY29uc3QgaW5zID0gd2FzbUV2YWxUZXh0KGAobW9kdWxlCisrICAo ZnVuYyAoZXhwb3J0ICJydW4iKSAocGFyYW0gJG4gaTMyKSAocmVzdWx0IGkzMikKKysgICAgKGxv Y2FsICRhY2MgdjEyOCkKKysgICAgKGJsb2NrICRkb25lCisrICAgICAgKGxvb3AgJHRvcAorKyAg ICAgICAgKGJyX2lmICRkb25lIChpMzIuZXF6IChsb2NhbC5nZXQgJG4pKSkKKysgICAgICAgIChs b2NhbC5zZXQgJGFjYyAoaTMyeDQuYWRkIChsb2NhbC5nZXQgJGFjYykgKHYxMjguY29uc3QgaTMy eDQgMSAyIDMgNCkpKQorKyAgICAgICAgKGxvY2FsLnNldCAkbiAoaTMyLnN1YiAobG9jYWwuZ2V0 ICRuKSAoaTMyLmNvbnN0IDEpKSkKKysgICAgICAgIChiciAkdG9wKSkpCisrICAgIDs7IEZvbGQg dGhlIGZvdXIgbGFuZXMgc28gYW55IGxhbmUgY29ycnVwdGlvbiBzaG93cyB1cC4KKysgICAgKGkz Mi54b3IKKysgICAgICAoaTMyLnhvciAoaTMyeDQuZXh0cmFjdF9sYW5lIDAgKGxvY2FsLmdldCAk YWNjKSkKKysgICAgICAgICAgICAgICAoaTMyLnJvdGwgKGkzMng0LmV4dHJhY3RfbGFuZSAxIChs b2NhbC5nZXQgJGFjYykpIChpMzIuY29uc3QgOCkpKQorKyAgICAgIChpMzIueG9yIChpMzIucm90 bCAoaTMyeDQuZXh0cmFjdF9sYW5lIDIgKGxvY2FsLmdldCAkYWNjKSkgKGkzMi5jb25zdCAxNikp CisrICAgICAgICAgICAgICAgKGkzMi5yb3RsIChpMzJ4NC5leHRyYWN0X2xhbmUgMyAobG9jYWwu Z2V0ICRhY2MpKSAoaTMyLmNvbnN0IDI0KSkpKSkKKyspYCkuZXhwb3J0czsKKysKKysvLyBNaXNh bGlnbmVkIGJpZyBjb3BpZXMgZHJpdmUgZ2xpYmMncyBsdnNsL3ZwZXJtIG1lbWNweSBwYXRoIG9u IFBQQy4KKytjb25zdCBiaWcgPSBuZXcgVWludDhBcnJheSgxIDw8IDIwKTsKKytjb25zdCBzcmMg PSBiaWcuc3ViYXJyYXkoMSwgKDEgPDwgMTkpICsgMSk7CisrY29uc3QgZHN0ID0gbmV3IFVpbnQ4 QXJyYXkoMSA8PCAxOSk7CisrCisrbGV0IGZpcmVzID0gMDsKKytmdW5jdGlvbiBvbkludGVycnVw dCgpIHsKKysgIGZpcmVzKys7CisrICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAg ICBkc3Quc2V0KHNyYyk7CisrICB9CisrICBpZiAoZmlyZXMgPCAyNSkgeworKyAgICB0aW1lb3V0 KDAuMDIsIG9uSW50ZXJydXB0KTsKKysgIH0KKysgIHJldHVybiB0cnVlOworK30KKysKKytmdW5j dGlvbiBleHBlY3RlZChuKSB7CisrICBjb25zdCByID0gKHgsIGspID0+ICgoeCA8PCBrKSB8ICh4 ID4+PiAoMzIgLSBrKSkpIHwgMDsKKysgIGNvbnN0IGwgPSBbbiB8IDAsICgyICogbikgfCAwLCAo MyAqIG4pIHwgMCwgKDQgKiBuKSB8IDBdOworKyAgcmV0dXJuICgobFswXSBeIHIobFsxXSwgOCkp IF4gKHIobFsyXSwgMTYpIF4gcihsWzNdLCAyNCkpKSB8IDA7CisrfQorKworK2NvbnN0IE4gPSAx IDw8IDI2OworK3RpbWVvdXQoMC4wMiwgb25JbnRlcnJ1cHQpOworK2NvbnN0IGdvdCA9IGlucy5y dW4oTik7CisrLy8gQ2FuY2VsIGFueSBwZW5kaW5nIHdhdGNoZG9nIGJlZm9yZSBmaW5pc2hpbmcu CisrdGltZW91dCgtMSk7CisrYXNzZXJ0RXEoZ290LCBleHBlY3RlZChOKSk7CitkaWZmIC0tZ2l0 IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1 Y2UtYW5kLWJyYW5jaC5qcyBiL2pzL3NyYy9qaXQtdGVzdC90ZXN0cy93YXNtL3JlZ3Jlc3MvYnVn LXBwYzY0LXNpbWQtcmVkdWNlLWFuZC1icmFuY2guanMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0Citp bmRleCAwMDAwMDAwMDAwMDAuLmI3ZWMwZDk1NDhiYgorLS0tIC9kZXYvbnVsbAorKysrIGIvanMv c3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vcmVncmVzcy9idWctcHBjNjQtc2ltZC1yZWR1Y2UtYW5k LWJyYW5jaC5qcworQEAgLTAsMCArMSw3IEBACisrLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBhIFBQ QzY0LXNwZWNpZmljIHdhc20gSW9uIGNyYXNoIGluCisrLy8gQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtUmVkdWNlQW5kQnJhbmNoU2ltZDEyOCDigJQgaXQgY2FsbGVkCisrLy8gTEJsb2NrOjpsYWJl bCgpIGRpcmVjdGx5IG9uIHRoZSBicmFuY2ggdGFyZ2V0cyB3aXRob3V0IGdvaW5nIHRocm91Z2gK KysvLyBza2lwVHJpdmlhbEJsb2NrcygpLCBzbyBhIHRyaXZpYWwgZ290by1vbmx5IHN1Y2Nlc3Nv ciB0cmlwcGVkCisrLy8gTEJsb2NrOjpsYWJlbCgpJ3MgIWlzVHJpdmlhbCgpIGFzc2VydGlvbi4g UmVkdWNlZCBmcm9tIGdyYW50a290LmNvbS9wb2x5CisrLy8gd2l0aCB3YXNtLXJlZHVjZS4gVHJp Z2dlcnMgdGhlIGJ1ZyB1bmRlciAtLXdhc20tY29tcGlsZXI9b3B0aW1pemluZy4KKytuZXcgV2Vi QXNzZW1ibHkuTW9kdWxlKG9zLmZpbGUucmVhZEZpbGUoc2NyaXB0ZGlyICsgIi9idWctcHBjNjQt c2ltZC1yZWR1Y2UtYW5kLWJyYW5jaC53YXNtIiwgImJpbmFyeSIpKTsKK2RpZmYgLS1naXQgYS9q cy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1ZzE5NDY2MTguanMgYi9qcy9zcmMvaml0 LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1ZzE5NDY2MTguanMKK2luZGV4IGNjMDJkMGQ4ZGZkNy4u ZmNmM2EyYTM1ZTgyIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2lt ZC9idWcxOTQ2NjE4LmpzCisrKysgYi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2J1 ZzE5NDY2MTguanMKK0BAIC00OCw3ICs0OCwxMiBAQCBmb3IgKGxldCBvcCBvZiBbImYzMng0LnJl bGF4ZWRfbWluIiwgImYzMng0LnJlbGF4ZWRfbWF4IiwKKyAgICAgLy8gYmFzZWxpbmUuCisgICAg IGxldCByZXN1bHQxID0gaS5leHBvcnRzLnZhcmlhbnQxKCk7CisgICAgIGxldCByZXN1bHQyID0g aS5leHBvcnRzLnZhcmlhbnQyKCk7CistICAgIGlmIChnZXRCdWlsZENvbmZpZ3VyYXRpb24oImFy bTY0IikpIHsKKysgICAgaWYgKGdldEJ1aWxkQ29uZmlndXJhdGlvbigicHBjNjQiKSkgeworKyAg ICAgIC8vIFBQQzY0OiB4dm1pbnNwL3h2bWF4c3AgYWx3YXlzIHJldHVybnMgdGhlIG5vbi1OYU4g b3BlcmFuZCwKKysgICAgICAvLyByZWdhcmRsZXNzIG9mIG9wZXJhbmQgb3JkZXIuIEJvdGggdmFy aWFudHMgZ2l2ZSB6ZXJvIChub24tTmFOKS4KKysgICAgICBhc3NlcnRFcShyZXN1bHQxLCAwKTsK KysgICAgICBhc3NlcnRFcShyZXN1bHQyLCAwKTsKKysgICAgfSBlbHNlIGlmIChnZXRCdWlsZENv bmZpZ3VyYXRpb24oImFybTY0IikpIHsKKyAgICAgICAvLyBUaGUgcmVsYXhlZF9taW4vbWF4IG9w ZXJhdGlvbiBhcHBlYXJzIHRvIHByb3BhZ2F0ZSBOYU5zIHN5bW1ldHJpY2FsbHkKKyAgICAgICAv LyBmcm9tIGVpdGhlciBhcmcKKyAgICAgICBhc3NlcnRFcShyZXN1bHQxLCA2NTUzNSk7CitkaWZm IC0tZ2l0IGEvanMvc3JjL2ppdC10ZXN0L3Rlc3RzL3dhc20vc2ltZC9pb24tYW5hbHlzaXMuanMg Yi9qcy9zcmMvaml0LXRlc3QvdGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFseXNpcy5qcworaW5kZXgg ZDEyYWY2ZTZmYmM5Li4zMzVmODMxZmY2YTkgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0LXRlc3Qv dGVzdHMvd2FzbS9zaW1kL2lvbi1hbmFseXNpcy5qcworKysrIGIvanMvc3JjL2ppdC10ZXN0L3Rl c3RzL3dhc20vc2ltZC9pb24tYW5hbHlzaXMuanMKK0BAIC0xMiw2ICsxMiw3IEBACisgLy8gZ2Vu ZXJhdGVzIHRoZSBleHBlY3RlZCByZXN1bHQuCisgCisgdmFyIGlzQXJtNjQgPSBnZXRCdWlsZENv bmZpZ3VyYXRpb24oImFybTY0Iik7CisrdmFyIGlzUFBDNjQgPSBnZXRCdWlsZENvbmZpZ3VyYXRp b24oInBwYzY0Iik7CisgCisgLy8gMzItYml0IHBlcm11dGF0aW9uIHRoYXQgaXMgbm90IGEgcm90 YXRpb24uCisgbGV0IHBlcm0zMng0X3BhdHRlcm4gPSBbNCwgNSwgNiwgNywgMTIsIDEzLCAxNCwg MTUsIDgsIDksIDEwLCAxMSwgMCwgMSwgMiwgM107CitAQCAtODQ2LDcgKzg0Nyw3IEBAIGZvciAo IGxldCBbdHkxMjgsc2l6ZV0gb2YgW1snaTh4MTYnLDFdLCBbJ2kxNng4JywyXSwgWydpMzJ4NCcs NF1dICkgeworICAgICBsZXQgb3BzID0geyBhbGxfdHJ1ZTogYWxsVHJ1ZSwgYW55X3RydWU6IGFu eVRydWUsIGJpdG1hc2sgfTsKKyAKKyAgICAgZm9yICggbGV0IG9wIG9mIFsnYW55X3RydWUnLCAn YWxsX3RydWUnLCAnYml0bWFzayddICkgeworLSAgICAgICAgbGV0IGZvbGRlZCA9IG9wICE9ICdi aXRtYXNrJyB8fCAoc2l6ZSA9PSAyICYmICFpc0FybTY0KTsKKysgICAgICAgIGxldCBmb2xkZWQg PSBvcCAhPSAnYml0bWFzaycgfHwgKHNpemUgPT0gMiAmJiAhaXNBcm02NCAmJiAhaXNQUEM2NCk7 CisgICAgICAgICBsZXQgb3BlcmF0aW9uID0gb3AgPT0gJ2FueV90cnVlJyA/ICd2MTI4LmFueV90 cnVlJyA6IGAke3R5MTI4fS4ke29wfWA7CisgICAgICAgICBsZXQgcG9zaXRpdmUgPQorICAgICAg ICAgICAgIHdhc21Db21waWxlKAorQEAgLTg5OCwxMiArODk5LDEyIEBAIGZvciAoIGxldCBbdHkx Mjgsc2l6ZV0gb2YgW1snaTh4MTYnLDFdLCBbJ2kxNng4JywyXSwgWydpMzJ4NCcsNF1dICkgewor IAorIC8vIEJpdHNlbGVjdCB3aXRoIGNvbnN0YW50IG1hc2sgZm9sZGVkIGludG8gc2h1ZmZsZSBv cGVyYXRpb24KKyAKKy1pZiAoIWlzQXJtNjQpIHsKKytpZiAoIWlzQXJtNjQgJiYgIWlzUFBDNjQp IHsKKyAgIHdhc21Db21waWxlKGAKKyAgIChtb2R1bGUgKGZ1bmMgKHBhcmFtIHYxMjgpIChwYXJh bSB2MTI4KSAocmVzdWx0IHYxMjgpCisgICAgICh2MTI4LmJpdHNlbGVjdCAobG9jYWwuZ2V0IDAp IChsb2NhbC5nZXQgMSkgKHYxMjguY29uc3QgaTh4MTYgMCAtMSAtMSAwIDAgMCAwIDAgLTEgLTEg LTEgLTEgLTEgLTEgMCAwKSkpKQorICAgYCk7CistICAgICAgYXNzZXJ0RXEod2FzbVNpbWRBbmFs eXNpcygpLCAic2h1ZmZsZSAtPiBibGVuZCA4eDE2Iik7ICAKKysgICAgICBhc3NlcnRFcSh3YXNt U2ltZEFuYWx5c2lzKCksICJzaHVmZmxlIC0+IGJsZW5kIDh4MTYiKTsKKyB9CisgCisgLy8gTGli cmFyeQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQXNzZW1ibGVyLmggYi9qcy9zcmMvaml0L0Fz c2VtYmxlci5oCitpbmRleCA5N2MyZTMzNzYyNWIuLmNiNzI0NDc3NjYwNSAxMDA2NDQKKy0tLSBh L2pzL3NyYy9qaXQvQXNzZW1ibGVyLmgKKysrKyBiL2pzL3NyYy9qaXQvQXNzZW1ibGVyLmgKK0BA IC0xOSw2ICsxOSw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvQXNzZW1ibGVyLWxvb25n NjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAjICBpbmNsdWRlICJq aXQvcmlzY3Y2NC9Bc3NlbWJsZXItcmlzY3Y2NC5oIgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9QUEM2NCkKKysjICBpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCisgI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKKyAjICBpbmNsdWRlICJqaXQvd2FzbTMyL0Fz c2VtYmxlci13YXNtMzIuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKK2RpZmYg LS1naXQgYS9qcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwIGIvanMvc3JjL2ppdC9CYXNlbGluZUlD LmNwcAoraW5kZXggYzM1NjUzOGEwMjRlLi41YWI2MzE4MzhmMGUgMTAwNjQ0CistLS0gYS9qcy9z cmMvaml0L0Jhc2VsaW5lSUMuY3BwCisrKysgYi9qcy9zcmMvaml0L0Jhc2VsaW5lSUMuY3BwCitA QCAtMTIwLDYgKzEyMCw4IEBAIEFsbG9jYXRhYmxlR2VuZXJhbFJlZ2lzdGVyU2V0IEJhc2VsaW5l SUNBdmFpbGFibGVHZW5lcmFsUmVncyhzaXplX3QgbnVtSW5wdXRzKSB7CisgICBNT1pfQVNTRVJU KCFyZWdzLmhhcyhQc2V1ZG9TdGFja1BvaW50ZXIpKTsKKyAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFz KFJlYWxTdGFja1BvaW50ZXIpKTsKKyAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFzKElDVGFpbENhbGxS ZWcpKTsKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICByZWdzLnRha2UoSUNU YWlsQ2FsbFJlZyk7CisgI2VuZGlmCisgICByZWdzLnRha2UoSUNTdHViUmVnKTsKKyAKK2RpZmYg LS1naXQgYS9qcy9zcmMvaml0L0NhY2hlSVJDb21waWxlci5jcHAgYi9qcy9zcmMvaml0L0NhY2hl SVJDb21waWxlci5jcHAKK2luZGV4IDRlYjk1MmU0OTdlMy4uZWU0ODg4NDk1MTAzIDEwMDY0NAor LS0tIGEvanMvc3JjL2ppdC9DYWNoZUlSQ29tcGlsZXIuY3BwCisrKysgYi9qcy9zcmMvaml0L0Nh Y2hlSVJDb21waWxlci5jcHAKK0BAIC0xMDMwMiw2ICsxMDMwMiwxNCBAQCBib29sIENhY2hlSVJD b21waWxlcjo6ZW1pdENvbmNhdFN0cmluZ3NSZXN1bHQoU3RyaW5nT3BlcmFuZElkIGxoc0lkLAor ICAgICBsaXZlUmVncy5hZGQoSUNUYWlsQ2FsbFJlZyk7CisgI2VuZGlmCisgICAgIGxpdmVSZWdz LnRha2VVbmNoZWNrZWQob3V0cHV0LnZhbHVlUmVnKCkpOworKworKyNpZmRlZiBKU19DT0RFR0VO X1BQQzY0CisrICAgIC8vIE9uIFBQQzY0LCBMUiBpcyBhbiBTUFIsIG5vdCBhIEdQUiwgc28gSUNU YWlsQ2FsbFJlZyBpcyBhIHJlZ3VsYXIKKysgICAgLy8gR1BSIHRoYXQgZG9lcyBub3Qgc2hhZG93 IExSLiBUaGUgaW5uZXIgYmN0cmwgd2lsbCBjbG9iYmVyIExSLCBzbworKyAgICAvLyBzYXZlL3Jl c3RvcmUgaXQgZXhwbGljaXRseS4KKysgICAgbWFzbS54c19tZmxyKHIwKTsKKysgICAgbWFzbS5w dXNoKHIwKTsKKysjZW5kaWYKKyAgICAgbWFzbS5QdXNoUmVnc0luTWFzayhsaXZlUmVncyk7Cisg CisgICAgIC8vIFRoZSBzdHViIGV4cGVjdHMgbGhzIGluIENhbGxUZW1wUmVnMCBhbmQgcmhzIGlu IENhbGxUZW1wUmVnMS4KK0BAIC0xMDMyMiwxMSArMTAzMzAsMTkgQEAgYm9vbCBDYWNoZUlSQ29t cGlsZXI6OmVtaXRDb25jYXRTdHJpbmdzUmVzdWx0KFN0cmluZ09wZXJhbmRJZCBsaHNJZCwKKyAg ICAgbWFzbS5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6WmVybywgQ2FsbFRlbXBSZWc1LCBDYWxs VGVtcFJlZzUsICZ2bUNhbGwpOworICAgICBtYXNtLnRhZ1ZhbHVlKEpTVkFMX1RZUEVfU1RSSU5H LCBDYWxsVGVtcFJlZzUsIG91dHB1dC52YWx1ZVJlZygpKTsKKyAgICAgbWFzbS5Qb3BSZWdzSW5N YXNrKGxpdmVSZWdzKTsKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgICBtYXNtLnBvcChy MCk7CisrICAgIG1hc20ueHNfbXRscihyMCk7CisrI2VuZGlmCisgICAgIG1hc20uanVtcCgmZG9u ZSk7CisgCisgICAgIG1hc20uYmluZCgmdm1DYWxsKTsKKyAgICAgbWFzbS5zZXRGcmFtZVB1c2hl ZChmcmFtZVB1c2hlZCk7CisgICAgIG1hc20uUG9wUmVnc0luTWFzayhsaXZlUmVncyk7CisrI2lm ZGVmIEpTX0NPREVHRU5fUFBDNjQKKysgICAgbWFzbS5wb3AocjApOworKyAgICBtYXNtLnhzX210 bHIocjApOworKyNlbmRpZgorICAgfQorIAorICAgeworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv Q29kZUdlbmVyYXRvci5jcHAgYi9qcy9zcmMvaml0L0NvZGVHZW5lcmF0b3IuY3BwCitpbmRleCBh MWMwMTQwOWU5ZjcuLjJhMmM2MDA3YWVjMCAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvQ29kZUdl bmVyYXRvci5jcHAKKysrKyBiL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5jcHAKK0BAIC0yNTE5 LDYgKzI1MTksMTIgQEAgc3RhdGljIGJvb2wgUHJlcGFyZUFuZEV4ZWN1dGVSZWdFeHAoTWFjcm9B c3NlbWJsZXImIG1hc20sIFJlZ2lzdGVyIHJlZ2V4cCwKKyAgIG1hc20uY29tcHV0ZUVmZmVjdGl2 ZUFkZHJlc3MoQWRkcmVzcyhGcmFtZVBvaW50ZXIsIGlvT2Zmc2V0KSwgdGVtcDIpOworICAgbWFz bS5QdXNoUmVnc0luTWFzayh2b2xhdGlsZVJlZ3MpOworICAgbWFzbS5zZXR1cFVuYWxpZ25lZEFC SUNhbGwodGVtcDMpOworKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyB0ZW1w MSBhbGlhc2VzIGFyZ3JlZ3Mgb24gdGhpcyBwbGF0Zm9ybSwgc28gd2UgbmVlZCB0byByZXVzZSB0 ZW1wMworKyAgLy8gb3Igd2UnbGwgc3RvbXAgb24gdGhlIGNvZGUgcG9pbnRlciB3aGVuIHdlIHBh c3MgdGhlIGZpcnN0IEFCSSBhcmd1bWVudC4KKysgIG1hc20ubW92ZVB0cihjb2RlUG9pbnRlciwg dGVtcDMpOworKyAgY29kZVBvaW50ZXIgPSB0ZW1wMzsKKysjZW5kaWYKKyAgIG1hc20ucGFzc0FC SUFyZyh0ZW1wMik7CisgICBtYXNtLmNhbGxXaXRoQUJJKGNvZGVQb2ludGVyKTsKKyAgIG1hc20u c3RvcmVDYWxsSW50MzJSZXN1bHQodGVtcDEpOworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvQ29k ZUdlbmVyYXRvci5oIGIvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9yLmgKK2luZGV4IDU4YzA0N2Rl YTQxYi4uMzc4MWI5NTk1ZGZkIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9Db2RlR2VuZXJhdG9y LmgKKysrKyBiL2pzL3NyYy9qaXQvQ29kZUdlbmVyYXRvci5oCitAQCAtMjMsNiArMjMsOCBAQAor ICMgIGluY2x1ZGUgImppdC9sb29uZzY0L0NvZGVHZW5lcmF0b3ItbG9vbmc2NC5oIgorICNlbGlm IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0Nv ZGVHZW5lcmF0b3ItcmlzY3Y2NC5oIgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK KysjICBpbmNsdWRlICJqaXQvcHBjNjQvQ29kZUdlbmVyYXRvci1wcGM2NC5oIgorICNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgaW5jbHVkZSAiaml0L3dhc20zMi9Db2RlR2Vu ZXJhdG9yLXdhc20zMi5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAt LWdpdCBhL2pzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcCBiL2pzL3NyYy9q aXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcAoraW5kZXggZTFiZDFiZDA0NWVmLi44ODY5 N2MwNjkwN2MgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0VmZmVjdGl2ZUFkZHJlc3NBbmFseXNp cy5jcHAKKysrKyBiL2pzL3NyYy9qaXQvRWZmZWN0aXZlQWRkcmVzc0FuYWx5c2lzLmNwcAorQEAg LTYwLDcgKzYwLDcgQEAgc3RhdGljIGJvb2wgT2Zmc2V0SXNTbWFsbEVub3VnaChpbnQzMl90IGlt bSkgeworICAgLy8gYG1vdm4gI2ltbWAuICBhcm0zMiBpcyBzaW1pbGFyLgorICAgcmV0dXJuIGlt bSA+PSAtMHhGRkZGICYmIGltbSA8PSAweEZGRkY7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmlu ZWQoSlNfQ09ERUdFTl9NSVBTNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIHJldHVybiBpbW0gPj0gLTB4RkZGICYmIGlt bSA8PSAweEZGRjsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fTk9ORSkKKyAgIHJldHVybiB0cnVlOworZGlmZiAtLWdpdCBhL2pzL3NyYy9q aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9qcy9zcmMvaml0L0V4ZWN1dGFibGVBbGxvY2F0 b3IuY3BwCitpbmRleCAzNDBhNjM5NjRiNTIuLmM5MzM2ZmU4ZWM0ZSAxMDA2NDQKKy0tLSBhL2pz L3NyYy9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKKysrKyBiL2pzL3NyYy9qaXQvRXhlY3V0 YWJsZUFsbG9jYXRvci5jcHAKK0BAIC0zMDYsMTMgKzMwNiwxOSBAQCB2b2lkIEV4ZWN1dGFibGVB bGxvY2F0b3I6OnBvaXNvbkNvZGUoSlNSdW50aW1lKiBydCwKKyAgICAgfQorICAgfQorIAorLSAg Ly8gTWFrZSB0aGUgcG9vbHMgZXhlY3V0YWJsZSBhZ2FpbiBhbmQgZHJvcCByZWZlcmVuY2VzLiBX ZSBkb24ndCBmbHVzaCB0aGUKKy0gIC8vIElDYWNoZSBoZXJlIHRvIG5vdCBhZGQgZXh0cmEgb3Zl cmhlYWQuCisrICAvLyBNYWtlIHRoZSBwb29scyBleGVjdXRhYmxlIGFnYWluIGFuZCBkcm9wIHJl ZmVyZW5jZXMuIE9uIGFyY2hpdGVjdHVyZXMgd2l0aAorKyAgLy8gaW5jb2hlcmVudCBJQ2FjaGUg KFBQQzY0KSwgd2UgbXVzdCBmbHVzaCB0byBwcmV2ZW50IHN0YWxlIGluc3RydWN0aW9uCisrICAv LyBleGVjdXRpb24gd2hlbiBjb2RlIHJlZ2lvbnMgYXJlIHJldXNlZCBhZnRlciBzd2VlcGluZy4K KyAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aCgpOyBpKyspIHsKKyAgICAg RXhlY3V0YWJsZVBvb2wqIHBvb2wgPSByYW5nZXNbaV0ucG9vbDsKKyAgICAgaWYgKHBvb2wtPmlz TWFya2VkKCkpIHsKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgICAgIHJlcHJvdGVjdFBv b2wocnQsIHBvb2wsIFByb3RlY3Rpb25TZXR0aW5nOjpFeGVjdXRhYmxlLAorKyAgICAgICAgICAg ICAgICAgICAgTXVzdEZsdXNoSUNhY2hlOjpZZXMpOworKyNlbHNlCisgICAgICAgcmVwcm90ZWN0 UG9vbChydCwgcG9vbCwgUHJvdGVjdGlvblNldHRpbmc6OkV4ZWN1dGFibGUsCisgICAgICAgICAg ICAgICAgICAgICBNdXN0Rmx1c2hJQ2FjaGU6Ok5vKTsKKysjZW5kaWYKKyAgICAgICBwb29sLT51 bm1hcmsoKTsKKyAgICAgfQorICAgICBwb29sLT5yZWxlYXNlKCk7CitkaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9GbHVzaElDYWNoZS5jcHAgYi9qcy9zcmMvaml0L0ZsdXNoSUNhY2hlLmNwcAoraW5k ZXggZDNiMTY1N2E2YmUyLi45NTkwNjg3Yzk4MDMgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L0Zs dXNoSUNhY2hlLmNwcAorKysrIGIvanMvc3JjL2ppdC9GbHVzaElDYWNoZS5jcHAKK0BAIC0xMyw3 ICsxMyw4IEBACisgIyAgaW5jbHVkZSAiaml0L2FybTY0L3ZpeGwvU2ltdWxhdG9yLXZpeGwuaCIK KyAjZW5kaWYKKyAKKy0jaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fQVJNNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIAor ICMgIGlmZGVmIF9fbGludXhfXworICMgICAgaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorZGlm ZiAtLWdpdCBhL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaCBiL2pzL3NyYy9qaXQvRmx1c2hJQ2Fj aGUuaAoraW5kZXggYWY3OWRhMzU2ZWU1Li41ODM5NmY2MmFlMGQgMTAwNjQ0CistLS0gYS9qcy9z cmMvaml0L0ZsdXNoSUNhY2hlLmgKKysrKyBiL2pzL3NyYy9qaXQvRmx1c2hJQ2FjaGUuaAorQEAg LTIxLDcgKzIxLDcgQEAgaW5saW5lIHZvaWQgRmx1c2hJQ2FjaGUodm9pZCogY29kZSwgc2l6ZV90 IHNpemUpIHsKKyB9CisgI2VsaWYgKGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9BUk02NCkpIHx8ICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQp IHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX1BQQzY0KQorIAorIC8vIEludmFsaWRhdGUgdGhlIGdpdmVuIGNvZGUgcmFu Z2UgZnJvbSB0aGUgaWNhY2hlLiBUaGlzIHdpbGwgYWxzbyBmbHVzaCB0aGUKKyAvLyBleGVjdXRp b24gY29udGV4dCBmb3IgdGhpcyBjb3JlLiBJZiB0aGlzIGNvZGUgaXMgdG8gYmUgZXhlY3V0ZWQg b24gYW5vdGhlcgorQEAgLTM3LDcgKzM3LDcgQEAgaW5saW5lIHZvaWQgRmx1c2hJQ2FjaGUodm9p ZCogY29kZSwgc2l6ZV90IHNpemUpIHsgTU9aX0NSQVNIKCk7IH0KKyAjICBlcnJvciAiVW5rbm93 biBhcmNoaXRlY3R1cmUhIgorICNlbmRpZgorIAorLSNpZiAoZGVmaW5lZChKU19DT0RFR0VOX1g4 NikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkpIHx8ICAgICAgXAorKyNpZiAoZGVmaW5lZChK U19DT0RFR0VOX1g4NikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkpIHx8ICAgIFwKKyAgICAg ZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQp IHx8IFwKKyAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgCitAQCAtNTUsMTAgKzU1 LDExIEBAIGlubGluZSB2b2lkIEZsdXNoRXhlY3V0aW9uQ29udGV4dCgpIHsgTU9aX0NSQVNIKCk7 IH0KKyBpbmxpbmUgYm9vbCBDYW5GbHVzaEV4ZWN1dGlvbkNvbnRleHRGb3JBbGxUaHJlYWRzKCkg eyBNT1pfQ1JBU0goKTsgfQorIGlubGluZSB2b2lkIEZsdXNoRXhlY3V0aW9uQ29udGV4dEZvckFs bFRocmVhZHMoKSB7IE1PWl9DUkFTSCgpOyB9CisgCistI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorKyNlbGlmIGRlZmluZWQoSlNfQ09E RUdFTl9BUk0pIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgXAorKyAgICBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCisgCistLy8gQVJNIGFuZCBBUk02NCBtdXN0IGZsdXNoIHRoZSBp bnN0cnVjdGlvbiBwaXBlbGluZSBvZiB0aGUgY3VycmVudCBjb3JlCistLy8gYmVmb3JlIGV4ZWN1 dGluZyBuZXdseSBKSVQnZWQgY29kZS4gVGhpcyB3aWxsIHJlbW92ZSBhbnkgc3RhbGUgZGF0YSBm cm9tCisrLy8gQVJNLCBBUk02NCwgYW5kIFBQQzY0IG11c3QgZmx1c2ggdGhlIGluc3RydWN0aW9u IHBpcGVsaW5lIG9mIHRoZSBjdXJyZW50CisrLy8gY29yZSBiZWZvcmUgZXhlY3V0aW5nIG5ld2x5 IEpJVCdlZCBjb2RlLiBUaGlzIHdpbGwgcmVtb3ZlIGFueSBzdGFsZSBkYXRhIGZyb20KKyAvLyB0 aGUgcGlwZWxpbmUgdGhhdCBtYXkgaGF2ZSByZWZlcmVuY2VkIGludmFsaWRhdGVkIGluc3RydWN0 aW9ucy4KKyAvLworIC8vIGBGbHVzaElDYWNoZWAgd2lsbCBwZXJmb3JtIHRoaXMgZm9yIHRoZSB0 aHJlYWQgdGhhdCBjb21waWxlcyB0aGUgY29kZSwgYnV0CitkaWZmIC0tZ2l0IGEvanMvc3JjL2pp dC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlwZS5weSBiL2pzL3NyYy9qaXQvR2VuZXJhdGVBQklGdW5j dGlvblR5cGUucHkKK2luZGV4IDA0YmUxMGQxZGUyYS4uODE1NDI3ZWM2NzcxIDEwMDY0NAorLS0t IGEvanMvc3JjL2ppdC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlwZS5weQorKysrIGIvanMvc3JjL2pp dC9HZW5lcmF0ZUFCSUZ1bmN0aW9uVHlwZS5weQorQEAgLTUzOCw2ICs1MzgsMTAyIEBAIGRlZiBy aXNjdjY0X3NpbXVsYXRvcl9kaXNwYXRjaChmdW5jX3R5cGVzKToKKyAgICAgcmV0dXJuIGNvbnRl bnRzCisgCisgCisrIyBQUEM2NCBFTEZ2MiBBQkk6IDggaW50IGFyZyByZWdzIChyMy1yMTApLCAx MyBGUCBhcmcgcmVncyAoZjEtZjEzKS4KKysjIEVhY2ggZmxvYXRpbmctcG9pbnQgYXJndW1lbnQg Y29uc3VtZXMgQk9USCBhIGZsb2F0LWFyZyBzbG90IEFORCBhCisrIyBnZW5lcmFsLXB1cnBvc2Ut cmVnaXN0ZXIgc2hhZG93IHNsb3QgKGNhcHBlZCBhdCA4IEdQUiBzbG90cyksIG1hdGNoaW5nCisr IyB3aGF0IEdDQyBhbmQgdGhlIEpJVCdzIEFCSUFyZ0dlbmVyYXRvciBkbyBmb3IgRUxGdjIgUFBD NjRMRS4gV2l0aG91dAorKyMgdGhlIHNoYWRvdywgaW50ZWdlciBhcmdzIGZvbGxvd2luZyBhIGZs b2F0IGdvIHRvIHRoZSB3cm9uZyByZWdpc3RlcgorKyMgYXQgdGhlIGNhbGwgYm91bmRhcnksIHBy b2R1Y2luZyBhIHVzZS1hZnRlci1mcmVlIC8gd3JvbmctcG9pbnRlciBjcmFzaAorKyMgaW4gdGhl IEMgY2FsbGVlLiAoVmVyaWZpZWQgZW1waXJpY2FsbHkgYnkgZGlzYXNzZW1ibGluZworKyMgTnVt YmVyQmlnSW50Q29tcGFyZShkb3VibGUsIEJpZ0ludCopIG9uIHJlYWwgUFBDNjQ6IEJpZ0ludCog aXMgcmVhZAorKyMgZnJvbSByNCwgbm90IHIzLikKKytkZWYgcHBjNjRfYXJncyhmdW5jX3R5cGUp OgorKyAgICBjb250ZW50cyA9ICIiCisrICAgIG51bUludEFyZ1JlZ3MgPSA4CisrICAgIG51bUZs b2F0QXJnUmVncyA9IDEzCisrICAgIGludFJlZ0luZGV4ID0gMAorKyAgICBmbG9hdFJlZ0luZGV4 ID0gMAorKyAgICBzdGFja09mZnNldCA9IDAKKysgICAgZm9yIGksIGFyZyBpbiBlbnVtZXJhdGUo ZnVuY190eXBlWyJhcmdzIl0pOgorKyAgICAgICAgaWYgaSAhPSAwOgorKyAgICAgICAgICAgIGNv bnRlbnRzICs9ICIsICIKKysKKysgICAgICAgIGlmIGFyZyA9PSAiR2VuZXJhbCI6CisrICAgICAg ICAgICAgaWYgaW50UmVnSW5kZXggPT0gbnVtSW50QXJnUmVnczoKKysgICAgICAgICAgICAgICAg Y29udGVudHMgKz0gZiJzcF9be3N0YWNrT2Zmc2V0fV0iCisrICAgICAgICAgICAgICAgIHN0YWNr T2Zmc2V0ICs9IDEKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBjb250ZW50 cyArPSBmImF7aW50UmVnSW5kZXh9XyIKKysgICAgICAgICAgICAgICAgaW50UmVnSW5kZXggKz0g MQorKyAgICAgICAgZWxpZiBhcmcgPT0gIkludDMyIjoKKysgICAgICAgICAgICBpZiBpbnRSZWdJ bmRleCA9PSBudW1JbnRBcmdSZWdzOgorKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmIkkz MihzcF9be3N0YWNrT2Zmc2V0fV0pIgorKyAgICAgICAgICAgICAgICBzdGFja09mZnNldCArPSAx CisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJJMzIo YXtpbnRSZWdJbmRleH1fKSIKKysgICAgICAgICAgICAgICAgaW50UmVnSW5kZXggKz0gMQorKyAg ICAgICAgZWxpZiBhcmcgPT0gIkludDY0IjoKKysgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA9 PSBudW1JbnRBcmdSZWdzOgorKyAgICAgICAgICAgICAgICBjb250ZW50cyArPSBmInNwX1t7c3Rh Y2tPZmZzZXR9XSIKKysgICAgICAgICAgICAgICAgc3RhY2tPZmZzZXQgKz0gMQorKyAgICAgICAg ICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiYXtpbnRSZWdJbmRleH1f IgorKyAgICAgICAgICAgICAgICBpbnRSZWdJbmRleCArPSAxCisrICAgICAgICBlbGlmIGFyZyA9 PSAiRmxvYXQzMiI6CisrICAgICAgICAgICAgaWYgZmxvYXRSZWdJbmRleCA9PSBudW1GbG9hdEFy Z1JlZ3M6CisrICAgICAgICAgICAgICAgIGNvbnRlbnRzICs9IGYiKm1vemlsbGE6OkJpdHdpc2VD YXN0PGZsb2F0Kj4oc3BfW3tzdGFja09mZnNldH1dKSIKKysgICAgICAgICAgICAgICAgc3RhY2tP ZmZzZXQgKz0gMQorKyAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgIGNvbnRlbnRz ICs9IGYiZntmbG9hdFJlZ0luZGV4fV9zIgorKyAgICAgICAgICAgICAgICBmbG9hdFJlZ0luZGV4 ICs9IDEKKysgICAgICAgICAgICAjIEVMRnYyOiBGUCBhcmcgYWxzbyBjb25zdW1lcyBhIEdQUiBz aGFkb3cgc2xvdC4KKysgICAgICAgICAgICBpZiBpbnRSZWdJbmRleCA8IG51bUludEFyZ1JlZ3M6 CisrICAgICAgICAgICAgICAgIGludFJlZ0luZGV4ICs9IDEKKysgICAgICAgIGVsaWYgYXJnID09 ICJGbG9hdDY0IjoKKysgICAgICAgICAgICBpZiBmbG9hdFJlZ0luZGV4ID09IG51bUZsb2F0QXJn UmVnczoKKysgICAgICAgICAgICAgICAgY29udGVudHMgKz0gZiJtb3ppbGxhOjpCaXR3aXNlQ2Fz dDxkb3VibGU+KHNwX1t7c3RhY2tPZmZzZXR9XSkiCisrICAgICAgICAgICAgICAgIHN0YWNrT2Zm c2V0ICs9IDEKKysgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICBjb250ZW50cyAr PSBmImZ7ZmxvYXRSZWdJbmRleH1fZCIKKysgICAgICAgICAgICAgICAgZmxvYXRSZWdJbmRleCAr PSAxCisrICAgICAgICAgICAgIyBFTEZ2MjogRlAgYXJnIGFsc28gY29uc3VtZXMgYSBHUFIgc2hh ZG93IHNsb3QuCisrICAgICAgICAgICAgaWYgaW50UmVnSW5kZXggPCBudW1JbnRBcmdSZWdzOgor KyAgICAgICAgICAgICAgICBpbnRSZWdJbmRleCArPSAxCisrICAgIGFzc2VydCBpbnRSZWdJbmRl eCA8PSBudW1JbnRBcmdSZWdzCisrICAgIGFzc2VydCBmbG9hdFJlZ0luZGV4IDw9IG51bUZsb2F0 QXJnUmVncworKyAgICByZXR1cm4gY29udGVudHMKKysKKysKKytkZWYgcHBjNjRfc2ltdWxhdG9y X2Rpc3BhdGNoKGZ1bmNfdHlwZXMpOgorKyAgICBjb250ZW50cyA9ICIiCisrICAgIGZvciBmdW5j X3R5cGUgaW4gZnVuY190eXBlczoKKysgICAgICAgIGFyZ3MgPSBwcGM2NF9hcmdzKGZ1bmNfdHlw ZSkKKysgICAgICAgIGNvbnRlbnRzICs9IGYiY2FzZSBqczo6aml0OjpBcmdzX3tmdW5jX3R5cGVf bmFtZShmdW5jX3R5cGUpfToge3tcXFxuIgorKyAgICAgICAgY29udGVudHMgKz0gZiIgIGF1dG8g dGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDxQcm90b3R5cGVfe2Z1bmNfdHlwZV9uYW1lKGZ1bmNf dHlwZSl9PihuYXRpdmVGbik7XFxcbiIKKysgICAgICAgIHJldCA9IGZ1bmNfdHlwZVsicmV0Il0K KysgICAgICAgIGlmIHJldCA9PSAiVm9pZCI6CisrICAgICAgICAgICAgY29udGVudHMgKz0gZiIg IHRhcmdldCh7YXJnc30pO1xcXG4iCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGNvbnRl bnRzICs9IGYiICBhdXRvIHJldCA9IHRhcmdldCh7YXJnc30pO1xcXG4iCisrICAgICAgICBpZiBy ZXQgPT0gIlZvaWQiOgorKyAgICAgICAgICAgIHBhc3MKKysgICAgICAgIGVsaWYgcmV0ID09ICJH ZW5lcmFsIjoKKysgICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxsUmVzdWx0KHJldCk7 XFxcbiIKKysgICAgICAgIGVsaWYgcmV0ID09ICJJbnQzMiI6CisrICAgICAgICAgICAgY29udGVu dHMgKz0gIiAgc2V0Q2FsbFJlc3VsdChJNjQocmV0KSk7XFxcbiIKKysgICAgICAgIGVsaWYgcmV0 ID09ICJJbnQ2NCI6CisrICAgICAgICAgICAgY29udGVudHMgKz0gIiAgc2V0Q2FsbFJlc3VsdChy ZXQpO1xcXG4iCisrICAgICAgICBlbGlmIHJldCA9PSAiRmxvYXQzMiI6CisrICAgICAgICAgICAg Y29udGVudHMgKz0gIiAgc2V0Q2FsbFJlc3VsdEZsb2F0KHJldCk7XFxcbiIKKysgICAgICAgIGVs aWYgcmV0ID09ICJGbG9hdDY0IjoKKysgICAgICAgICAgICBjb250ZW50cyArPSAiICBzZXRDYWxs UmVzdWx0RG91YmxlKHJldCk7XFxcbiIKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgcmFp c2UgVmFsdWVFcnJvcihmIlVua25vd24gcmV0IHR5cGU6IHtyZXR9IikKKysgICAgICAgIGNvbnRl bnRzICs9ICIgIGJyZWFrO1xcXG4iCisrICAgICAgICBjb250ZW50cyArPSAifVxcXG4iCisrICAg IHJldHVybiBjb250ZW50cworKworKworIGRlZiBtYWluKGNfb3V0LCB5YW1sX3BhdGgpOgorICAg ICBmdW5jX3R5cGVzID0gbG9hZF95YW1sKHlhbWxfcGF0aCkKKyAKK0BAIC01ODEsNCArNjc3LDgg QEAgZGVmIG1haW4oY19vdXQsIHlhbWxfcGF0aCk6CisgICAgIGNvbnRlbnRzICs9IHJpc2N2NjRf c2ltdWxhdG9yX2Rpc3BhdGNoKGZ1bmNfdHlwZXMpCisgICAgIGNvbnRlbnRzICs9ICJcbiIKKyAK KysgICAgY29udGVudHMgKz0gIiNkZWZpbmUgQUJJX0ZVTkNUSU9OX1RZUEVfUFBDNjRfU0lNX0RJ U1BBVENIIFxcXG4iCisrICAgIGNvbnRlbnRzICs9IHBwYzY0X3NpbXVsYXRvcl9kaXNwYXRjaChm dW5jX3R5cGVzKQorKyAgICBjb250ZW50cyArPSAiXG4iCisrCisgICAgIGdlbmVyYXRlX2hlYWRl cihjX291dCwgImppdF9BQklGdW5jdGlvblR5cGVHZW5lcmF0ZWRfaCIsIGNvbnRlbnRzKQorZGlm ZiAtLWdpdCBhL2pzL3NyYy9qaXQvSml0Q29udGV4dC5jcHAgYi9qcy9zcmMvaml0L0ppdENvbnRl eHQuY3BwCitpbmRleCA3OWIyMmQ5ZjI0OWYuLmQzOTlkZGQzNmZkNCAxMDA2NDQKKy0tLSBhL2pz L3NyYy9qaXQvSml0Q29udGV4dC5jcHAKKysrKyBiL2pzL3NyYy9qaXQvSml0Q29udGV4dC5jcHAK K0BAIC0xMjEsNiArMTIxLDEwIEBAIGJvb2wgaml0OjpJbml0aWFsaXplSml0KCkgeworICAgUlZG bGFnczo6SW5pdCgpOworICNlbmRpZgorIAorKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICBQ UEM2NEZsYWdzOjpJbml0KCk7CisrI2VuZGlmCisrCisgI2lmbmRlZiBKU19DT0RFR0VOX05PTkUK KyAgIE1PWl9BU1NFUlQoanM6OmppdDo6Q1BVRmxhZ3NIYXZlQmVlbkNvbXB1dGVkKCkpOworICNl bmRpZgorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvSml0RnJhbWVzLmNwcCBiL2pzL3NyYy9qaXQv Sml0RnJhbWVzLmNwcAoraW5kZXggMzY1M2FmM2EyMWY0Li5iYmQxMzc2ZGVjNjkgMTAwNjQ0Cist LS0gYS9qcy9zcmMvaml0L0ppdEZyYW1lcy5jcHAKKysrKyBiL2pzL3NyYy9qaXQvSml0RnJhbWVz LmNwcAorQEAgLTE4MjQsNyArMTgyNCwxMiBAQCBWYWx1ZSBTbmFwc2hvdEl0ZXJhdG9yOjphbGxv Y2F0aW9uVmFsdWUoY29uc3QgUlZhbHVlQWxsb2NhdGlvbiYgYWxsb2MsCisgICAgICAgcmV0dXJu IERvdWJsZVZhbHVlKGZyb21SZWdpc3Rlcjxkb3VibGU+KGFsbG9jLmZwdVJlZygpKSk7CisgCisg ICAgIGNhc2UgUlZhbHVlQWxsb2NhdGlvbjo6RkxPQVQzMl9SRUc6CisrI2lmIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgICAgcmV0 dXJuIEZsb2F0MzJWYWx1ZSgKKysgICAgICAgICAgZmxvYXQoZnJvbVJlZ2lzdGVyPGRvdWJsZT4o YWxsb2MuZnB1UmVnKCkuYXNEb3VibGUoKSkpKTsKKysjZWxzZQorICAgICAgIHJldHVybiBGbG9h dDMyVmFsdWUoZnJvbVJlZ2lzdGVyPGZsb2F0PihhbGxvYy5mcHVSZWcoKSkpOworKyNlbmRpZgor IAorICAgICBjYXNlIFJWYWx1ZUFsbG9jYXRpb246OkZMT0FUMzJfU1RBQ0s6CisgICAgICAgcmV0 dXJuIEZsb2F0MzJWYWx1ZShSZWFkRnJhbWVGbG9hdDMyU2xvdChmcF8sIGFsbG9jLnN0YWNrT2Zm c2V0KCkpKTsKK0BAIC0yNjI1LDcgKzI2MzAsMTIgQEAgdWludHB0cl90IE1hY2hpbmVTdGF0ZTo6 cmVhZChSZWdpc3RlciByZWcpIGNvbnN0IHsKKyAKKyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyBU IE1hY2hpbmVTdGF0ZTo6cmVhZChGbG9hdFJlZ2lzdGVyIHJlZykgY29uc3QgeworKyNpZiBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyAg Ly8gUFBDNjQvUklTQ1Y2NCBhbHdheXMgc3RvcmUgRmxvYXRSZWdpc3RlcnMgYXMgNjQtYml0IGRv dWJsZXMuCisrICBNT1pfQVNTRVJUKHJlZy5zaXplKCkgPj0gc2l6ZW9mKFQpKTsKKysjZWxzZQor ICAgTU9aX0FTU0VSVChyZWcuc2l6ZSgpID09IHNpemVvZihUKSk7CisrI2VuZGlmCisgCisgI2lm ICFkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIp CisgICBpZiAoc3RhdGVfLmlzPEJhaWxvdXRTdGF0ZT4oKSkgeworZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQvSml0RnJhbWVzLmggYi9qcy9zcmMvaml0L0ppdEZyYW1lcy5oCitpbmRleCBhYzcwMDVh NWZjZmMuLjQ5MDgzNGU2MmZlYyAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvSml0RnJhbWVzLmgK KysrKyBiL2pzL3NyYy9qaXQvSml0RnJhbWVzLmgKK0BAIC0zMjIsNiArMzIyLDE2IEBAIGVudW0g Y2xhc3MgRXhjZXB0aW9uUmVzdW1lS2luZCA6IGludDMyX3QgeworIAorIC8vIERhdGEgbmVlZGVk IHRvIHJlY292ZXIgZnJvbSBhbiBleGNlcHRpb24uCisgc3RydWN0IFJlc3VtZUZyb21FeGNlcHRp b24geworKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBUaGlzIHN0cnVjdCBp cyBidWlsdCBvbiB0aGUgc3RhY2sgYXMgcGFydCBvZiBleGNlcHRpb24gcmV0dXJucy4gQmVjYXVz ZQorKyAgLy8gaXQgZ29lcyByaWdodCBvbiB0b3Agb2YgdGhlIHN0YWNrLCBhbiBBQkktY29tcGxp YW50IHJvdXRpbmUgY2FuIHdyZWNrCisrICAvLyBpdCwgc28gd2UgaW1wbGVtZW50IGEgbWluaW11 bSBQb3dlciBJU0EgbGlua2FnZSBhcmVhIChmb3VyIGRvdWJsZXdvcmRzKS4KKysgIHZvaWQqIF9w cGNfc3BfOworKyAgdm9pZCogX3BwY19jcl87CisrICB2b2lkKiBfcHBjX2xyXzsKKysgIHZvaWQq IF9wcGNfdG9jXzsKKysjZW5kaWYKKysKKyAgIHVpbnQ4X3QqIGZyYW1lUG9pbnRlcjsKKyAgIHVp bnQ4X3QqIHN0YWNrUG9pbnRlcjsKKyAgIHVpbnQ4X3QqIHRhcmdldDsKK0BAIC0zNzMsNyArMzgz LDcgQEAgc3RydWN0IFJlc3VtZUZyb21FeGNlcHRpb24geworICAgfQorIH07CisgCistI2lmIGRl ZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKysjaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgc3RhdGljX2Fzc2VydChzaXplb2YoUmVzdW1l RnJvbUV4Y2VwdGlvbikgJSAxNiA9PSAwLAorICAgICAgICAgICAgICAgIlJlc3VtZUZyb21FeGNl cHRpb24gc2hvdWxkIGJlIGFsaWduZWQiKTsKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9qcy9zcmMv aml0L0xJUi5jcHAgYi9qcy9zcmMvaml0L0xJUi5jcHAKK2luZGV4IDJmODlmYjQwNzM0OS4uYTlm NjM0YjdmY2MxIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9MSVIuY3BwCisrKysgYi9qcy9zcmMv aml0L0xJUi5jcHAKK0BAIC03NzksOCArNzc5LDggQEAgYm9vbCBMTW92ZUdyb3VwOjphZGQoTEFs bG9jYXRpb24gZnJvbSwgTEFsbG9jYXRpb24gdG8sIExEZWZpbml0aW9uOjpUeXBlIHR5cGUpIHsK KyAgICAgLy8gQ29kZUdlbmVyYXRvclNoYXJlZDo6Q29kZUdlbmVyYXRvclNoYXJlZCBhbmQgaW4g Z2VuZXJhbCBldmVyeXdoZXJlCisgICAgIC8vIFNpbWRNZW1vcnlBaWdubWVudCBpcyB1c2VkLiAg TGlrZWx5LCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIHdpbGwgcmV0dXJuLgorICMgICBpZiBkZWZp bmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBcCistICAg ICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKy0gICAgICAvLyBObyBuZWVkIGZvciBhbnkg Y2hlY2sgb24geDg2L3g2NC9hcm02NC4KKysgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAgICAgLy8gTm8gbmVlZCBmb3IgYW55 IGNoZWNrIG9uIHg4Ni94NjQvYXJtNjQvcHBjNjQuCisgIyAgIGVsc2UKKyAjICAgICBlcnJvciAi TmVlZCB0byBjb25zaWRlciBTSU1EIGFsaWdubWVudCBvbiB0aGlzIHRhcmdldC4iCisgICAgICAg Ly8gVGhlIGZvbGxvd2luZyBjb2RlIG1heSBiZSBvZiB1c2UgaWYgd2UgbmVlZCBhbGlnbm1lbnQg Y2hlY2tzIG9uCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9MSVIuaCBiL2pzL3NyYy9qaXQvTElS LmgKK2luZGV4IDNmNGVmZWRhNzk1NS4uMzM1NGNiOTZiMGNiIDEwMDY0NAorLS0tIGEvanMvc3Jj L2ppdC9MSVIuaAorKysrIGIvanMvc3JjL2ppdC9MSVIuaAorQEAgLTIwMCw3ICsyMDAsNyBAQCBj bGFzcyBMVXNlIDogcHVibGljIExBbGxvY2F0aW9uIHsKKyAgIHN0YXRpYyBjb25zdCB1aW50MzJf dCBQT0xJQ1lfQklUUyA9IDM7CisgICBzdGF0aWMgY29uc3QgdWludDMyX3QgUE9MSUNZX1NISUZU ID0gMDsKKyAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBQT0xJQ1lfTUFTSyA9ICgxIDw8IFBPTElD WV9CSVRTKSAtIDE7CistI2lmZGVmIEpTX0NPREVHRU5fQVJNNjQKKysjaWYgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICBzdGF0aWMgY29u c3QgdWludDMyX3QgUkVHX0JJVFMgPSA3OworICNlbHNlCisgICBzdGF0aWMgY29uc3QgdWludDMy X3QgUkVHX0JJVFMgPSA2OworQEAgLTYxOSwxMiArNjE5LDE4IEBAIGNsYXNzIExEZWZpbml0aW9u IHsKKyAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIChUeXBlKSgoYml0c18gPj4gVFlQRV9T SElGVCkgJiBUWVBFX01BU0spOyB9CisgCisgICBzdGF0aWMgYm9vbCBpc0Zsb2F0UmVnQ29tcGF0 aWJsZShUeXBlIHR5cGUsIEZsb2F0UmVnaXN0ZXIgcmVnKSB7CisrI2lmIGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgIGlmICh0eXBl ID09IEZMT0FUMzIgfHwgdHlwZSA9PSBET1VCTEUpIHsKKysgICAgICByZXR1cm4gcmVnLmlzU2lu Z2xlKCkgfHwgcmVnLmlzRG91YmxlKCk7CisrICAgIH0KKysjZWxzZQorICAgICBpZiAodHlwZSA9 PSBGTE9BVDMyKSB7CisgICAgICAgcmV0dXJuIHJlZy5pc1NpbmdsZSgpOworICAgICB9CisgICAg IGlmICh0eXBlID09IERPVUJMRSkgeworICAgICAgIHJldHVybiByZWcuaXNEb3VibGUoKTsKKyAg ICAgfQorKyNlbmRpZgorICAgICBNT1pfQVNTRVJUKHR5cGUgPT0gU0lNRDEyOCk7CisgICAgIHJl dHVybiByZWcuaXNTaW1kMTI4KCk7CisgICB9CitAQCAtMjI5Miw2ICsyMjk4LDggQEAgQW55UmVn aXN0ZXIgTEFsbG9jYXRpb246OnRvQW55UmVnaXN0ZXIoKSBjb25zdCB7CisgIyAgaW5jbHVkZSAi aml0L2xvb25nNjQvTElSLWxvb25nNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklT Q1Y2NCkKKyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9MSVItcmlzY3Y2NC5oIgorKyNlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysjICBpbmNsdWRlICJqaXQvcHBjNjQvTElSLXBwYzY0 LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkKKyAjICBpbmNsdWRlICJqaXQv bWlwcy1zaGFyZWQvTElSLW1pcHMtc2hhcmVkLmgiCisgIyAgaW5jbHVkZSAiaml0L21pcHM2NC9M SVItbWlwczY0LmgiCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9MSVJPcHMueWFtbCBiL2pzL3Ny Yy9qaXQvTElST3BzLnlhbWwKK2luZGV4IDMxNWZmNWZkNTM0OC4uN2ZiZWE5ZTJlYmVjIDEwMDY0 NAorLS0tIGEvanMvc3JjL2ppdC9MSVJPcHMueWFtbAorKysrIGIvanMvc3JjL2ppdC9MSVJPcHMu eWFtbAorQEAgLTIyMTAsNyArMjIxMCw3IEBACisgICAgIG9sZHZhbDogV29yZFNpemVkCisgICAg IG5ld3ZhbDogV29yZFNpemVkCisgICAjIE5lZWRzIGFkZGl0aW9uYWwgdGVtcHMgb24gTEwvU0Mg cGxhdGZvcm1zIHRvIGV4dHJhY3QvaW5zZXJ0IGJpdHMgb2Ygd29yZC4KKy0jaWYgZGVmaW5lZChK U19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NW NjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIG51bV90ZW1wczogNAorICNlbHNl CisgICBudW1fdGVtcHM6IDEKK0BAIC0yMjI0LDcgKzIyMjQsNyBAQAorICAgICBpbmRleDogV29y ZFNpemVkCisgICAgIHZhbHVlOiBXb3JkU2l6ZWQKKyAgICMgTmVlZHMgYWRkaXRpb25hbCB0ZW1w cyBvbiBMTC9TQyBwbGF0Zm9ybXMgdG8gZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgorLSNp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgbnVtX3RlbXBz OiA0CisgI2Vsc2UKKyAgIG51bV90ZW1wczogMQorQEAgLTIyMzgsNyArMjIzOCw3IEBACisgICAg IGluZGV4OiBXb3JkU2l6ZWQKKyAgICAgdmFsdWU6IFdvcmRTaXplZAorICAgIyBOZWVkcyBhZGRp dGlvbmFsIHRlbXBzIG9uIExML1NDIHBsYXRmb3JtcyB0byBleHRyYWN0L2luc2VydCBiaXRzIG9m IHdvcmQuCistI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjaWYgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisg ICBudW1fdGVtcHM6IDQKKyAjZWxzZQorICAgbnVtX3RlbXBzOiAyCitAQCAtMjI1NSw3ICsyMjU1 LDcgQEAKKyAgICMgTmVlZHMgYWRkaXRpb25hbCB0ZW1wcyBvbiBMTC9TQyBwbGF0Zm9ybXMgdG8g ZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgorICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJN KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCisgICBudW1fdGVtcHM6IDEKKy0jZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICBudW1fdGVtcHM6 IDMKKyAjZW5kaWYKKyAgIG1pcl9vcDogQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcAorQEAg LTMwNjYsNyArMzA2Niw3IEBACisgICBvcGVyYW5kczoKKyAgICAgcHRyOiBXb3JkU2l6ZWQKKyAg ICAgbWVtb3J5QmFzZTogV29yZFNpemVkCistI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0 KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCisgICBudW1fdGVtcHM6IDEKKyAjZW5kaWYKKyAgIG1pcl9vcDogdHJ1ZQor QEAgLTMwNzgsNyArMzA3OCw3IEBACisgICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAorICNpZmRl ZiBKU19DT0RFR0VOX0FSTQorICAgbnVtX3RlbXBzOiAyCistI2VsaWYgZGVmaW5lZChKU19DT0RF R0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9SSVNDVjY0KQorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgbnVtX3RlbXBzOiAxCisgI2VuZGlmCisg ICBtaXJfb3A6IFdhc21Mb2FkCitAQCAtMzA4OCw3ICszMDg4LDcgQEAKKyAgICAgcHRyOiBXb3Jk U2l6ZWQKKyAgICAgdmFsdWU6IFdvcmRTaXplZAorICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQK Ky0jaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9S SVNDVjY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIG51bV90ZW1w czogMQorICNlbmRpZgorICAgbWlyX29wOiB0cnVlCitAQCAtMzA5OCw3ICszMDk4LDcgQEAKKyAg ICAgcHRyOiBXb3JkU2l6ZWQKKyAgICAgdmFsdWU6IEludDY0CisgICAgIG1lbW9yeUJhc2U6IFdv cmRTaXplZAorLSNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAg bnVtX3RlbXBzOiAxCisgI2VuZGlmCisgICBtaXJfb3A6IFdhc21TdG9yZQorQEAgLTMxMjgsNyAr MzEyOCw3IEBACisgICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAorICNpZmRlZiBKU19DT0RFR0VO X1g4NgorICAgbnVtX3RlbXBzOiAxCistI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KQorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQorICAgIyBUZW1wIHRoYXQgbWF5IGJlIHVzZWQgb24gTEwvU0MgcGxh dGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBiaXRzIG9mIHdvcmQuCisgICBudW1fdGVtcHM6IDMK KyAjZW5kaWYKK0BAIC0zMTQyLDcgKzMxNDIsNyBAQAorICAgICBtZW1vcnlCYXNlOiBXb3JkU2l6 ZWQKKyAjaWZkZWYgSlNfQ09ERUdFTl9YODYKKyAgIG51bV90ZW1wczogMQorLSNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgICMgVGVtcCB0aGF0IG1h eSBiZSB1c2VkIG9uIExML1NDIHBsYXRmb3JtcyBmb3IgZXh0cmFjdC9pbnNlcnQgYml0cyBvZiB3 b3JkLgorICAgbnVtX3RlbXBzOiAzCisgI2VuZGlmCitAQCAtMzE1NCw3ICszMTU0LDcgQEAKKyAg ICAgcHRyOiBXb3JkU2l6ZWQKKyAgICAgdmFsdWU6IFdvcmRTaXplZAorICAgICBtZW1vcnlCYXNl OiBXb3JkU2l6ZWQKKy0jaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChK U19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKKyAgICMgVGVtcCB0aGF0IG1heSBiZSB1c2VkIG9uIExML1NDIHBsYXRmb3JtcyBmb3IgZXh0 cmFjdC9pbnNlcnQgYml0cyBvZiB3b3JkLgorICAgbnVtX3RlbXBzOiAzCisgI2VsaWZkZWYgSlNf Q09ERUdFTl9YODYKK0BAIC0zMTcxLDcgKzMxNzEsNyBAQAorICAgICBwdHI6IFdvcmRTaXplZAor ICAgICB2YWx1ZTogV29yZFNpemVkCisgICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAorLSNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgIyBUZW1wIHRoYXQg bWF5IGJlIHVzZWQgb24gTEwvU0MgcGxhdGZvcm1zIGZvciBleHRyYWN0L2luc2VydCBiaXRzIG9m IHdvcmQuCisgICBudW1fdGVtcHM6IDMKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCitA QCAtNDQyNCw2ICs0NDI0LDY0IEBACisgICBtaXJfb3A6IFdhc21BdG9taWNFeGNoYW5nZUhlYXAK KyAjZW5kaWYKKyAKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKy0gbmFtZTogRGl2T3JNb2RJ NjQKKysgIGdlbl9ib2lsZXJwbGF0ZTogZmFsc2UKKysKKystIG5hbWU6IFVEaXZPck1vZAorKyAg Z2VuX2JvaWxlcnBsYXRlOiBmYWxzZQorKworKy0gbmFtZTogVURpdk9yTW9kSTY0CisrICBnZW5f Ym9pbGVycGxhdGU6IGZhbHNlCisrCisrLSBuYW1lOiBNb2RNYXNrSQorKyAgcmVzdWx0X3R5cGU6 IFdvcmRTaXplZAorKyAgb3BlcmFuZHM6CisrICAgIGlucHV0OiBXb3JkU2l6ZWQKKysgIGFyZ3Vt ZW50czoKKysgICAgc2hpZnQ6IGludDMyX3QKKysgIG51bV90ZW1wczogMgorKyAgbWlyX29wOiBN b2QKKysKKystIG5hbWU6IFdhc21UcnVuY2F0ZVRvSW50NjQKKysgIHJlc3VsdF90eXBlOiBJbnQ2 NAorKyAgb3BlcmFuZHM6CisrICAgIGlucHV0OiBXb3JkU2l6ZWQKKysgIG1pcl9vcDogdHJ1ZQor KworKy0gbmFtZTogSW50NjRUb0Zsb2F0aW5nUG9pbnQKKysgIHJlc3VsdF90eXBlOiBXb3JkU2l6 ZWQKKysgIG9wZXJhbmRzOgorKyAgICBpbnB1dDogSW50NjQKKysgIG1pcl9vcDogdHJ1ZQorKwor Ky0gbmFtZTogV2FzbUNvbXBhcmVFeGNoYW5nZUk2NAorKyAgcmVzdWx0X3R5cGU6IEludDY0Cisr ICBvcGVyYW5kczoKKysgICAgcHRyOiBXb3JkU2l6ZWQKKysgICAgb2xkVmFsdWU6IEludDY0Cisr ICAgIG5ld1ZhbHVlOiBJbnQ2NAorKyAgICBtZW1vcnlCYXNlOiBXb3JkU2l6ZWQKKysgIG1pcl9v cDogV2FzbUNvbXBhcmVFeGNoYW5nZUhlYXAKKysKKystIG5hbWU6IFdhc21BdG9taWNCaW5vcEk2 NAorKyAgcmVzdWx0X3R5cGU6IEludDY0CisrICBvcGVyYW5kczoKKysgICAgcHRyOiBXb3JkU2l6 ZWQKKysgICAgdmFsdWU6IEludDY0CisrICAgIG1lbW9yeUJhc2U6IFdvcmRTaXplZAorKyAgbnVt X3RlbXBzNjQ6IDEKKysgIG1pcl9vcDogV2FzbUF0b21pY0Jpbm9wSGVhcAorKworKy0gbmFtZTog V2FzbUF0b21pY0V4Y2hhbmdlSTY0CisrICByZXN1bHRfdHlwZTogSW50NjQKKysgIG9wZXJhbmRz OgorKyAgICBwdHI6IFdvcmRTaXplZAorKyAgICB2YWx1ZTogSW50NjQKKysgICAgbWVtb3J5QmFz ZTogV29yZFNpemVkCisrICBtaXJfb3A6IFdhc21BdG9taWNFeGNoYW5nZUhlYXAKKysjZW5kaWYK KysKKyAjaWZkZWYgSlNfQ09ERUdFTl9SSVNDVjY0CisgLSBuYW1lOiBVRGl2CisgICByZXN1bHRf dHlwZTogV29yZFNpemVkCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9MYWJlbC5oIGIvanMvc3Jj L2ppdC9MYWJlbC5oCitpbmRleCAwNjFiZjk3OGQyNmYuLjJhNDlkZWQ5Yzk2NyAxMDA2NDQKKy0t LSBhL2pzL3NyYy9qaXQvTGFiZWwuaAorKysrIGIvanMvc3JjL2ppdC9MYWJlbC5oCitAQCAtMjMs NyArMjMsNyBAQCBzdHJ1Y3QgTGFiZWxCYXNlIHsKKyAgIHVpbnQzMl90IG9mZnNldF8gOiAzMTsK KyAKKyAjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X0xPT05HNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisg IHB1YmxpYzoKKyAjZW5kaWYKKyAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBJTlZBTElEX09GRlNF VCA9IDB4N2ZmZmZmZmY7ICAvLyBVSU5UMzFfTUFYLgorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv TG93ZXJpbmcuY3BwIGIvanMvc3JjL2ppdC9Mb3dlcmluZy5jcHAKK2luZGV4IDljMWM0YjBkZjQ5 MS4uZTNmZTcxZWE5YzgzIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9Mb3dlcmluZy5jcHAKKysr KyBiL2pzL3NyYy9qaXQvTG93ZXJpbmcuY3BwCitAQCAtMTE3NCw3ICsxMTc0LDcgQEAgdm9pZCBM SVJHZW5lcmF0b3I6OnZpc2l0VGVzdChNVGVzdCogdGVzdCkgeworIAorICNpZiBkZWZpbmVkKEVO QUJMRV9XQVNNX1NJTUQpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoZGVm aW5lZChKU19DT0RFR0VOX1g4NikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgXAorLSAg ICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSkKKysgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9B Uk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KSkKKyAgIC8vIENoZWNrIGlmIHRoZSBv cGVyYW5kIGZvciB0aGlzIHRlc3QgaXMgYW4gYW55X3RydWUvYWxsX3RydWUgU0lNRCBvcGVyYXRp b24uCisgICAvLyBJZiBpdCBpcywgd2Ugd2FudCB0byBlbWl0IGFuIExXYXNtUmVkdWNlQW5kQnJh bmNoU2ltZDEyOCBub2RlIHRvIGF2b2lkCisgICAvLyBnZW5lcmF0aW5nIGFuIGludGVybWVkaWF0 ZSBib29sZWFuIHJlc3VsdC4KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L0xvd2VyaW5nLmggYi9q cy9zcmMvaml0L0xvd2VyaW5nLmgKK2luZGV4IGI0ZjEzMzc1OGViNi4uZDk3M2E2ODk4OWI1IDEw MDY0NAorLS0tIGEvanMvc3JjL2ppdC9Mb3dlcmluZy5oCisrKysgYi9qcy9zcmMvaml0L0xvd2Vy aW5nLmgKK0BAIC0yMyw2ICsyMyw4IEBACisgIyAgaW5jbHVkZSAiaml0L2xvb25nNjQvTG93ZXJp bmctbG9vbmc2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGlu Y2x1ZGUgImppdC9yaXNjdjY0L0xvd2VyaW5nLXJpc2N2NjQuaCIKKysjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0Lmgi CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKKyAjICBpbmNsdWRlICJqaXQvd2Fz bTMyL0xvd2VyaW5nLXdhc20zMi5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQor ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmggYi9qcy9zcmMvaml0 L01hY3JvQXNzZW1ibGVyLWlubC5oCitpbmRleCA0NzQ3YTIyZTE3MWIuLmQ3Mzg1ZGY4OTVkNSAx MDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgKKysrKyBiL2pzL3Ny Yy9qaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgKK0BAIC0zOSw2ICszOSw4IEBACisgIyAgaW5jbHVk ZSAiaml0L2xvb25nNjQvTWFjcm9Bc3NlbWJsZXItbG9vbmc2NC1pbmwuaCIKKyAjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9NYWNyb0Fz c2VtYmxlci1yaXNjdjY0LWlubC5oIgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK KysjICBpbmNsdWRlICJqaXQvcHBjNjQvTWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmgiCisgI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikKKyAjICBpbmNsdWRlICJqaXQvd2FzbTMyL01h Y3JvQXNzZW1ibGVyLXdhc20zMi1pbmwuaCIKKyAjZWxpZiAhZGVmaW5lZChKU19DT0RFR0VOX05P TkUpCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5jcHAgYi9qcy9zcmMv aml0L01hY3JvQXNzZW1ibGVyLmNwcAoraW5kZXggZWI5NWQ2YzllMmM0Li41YjI4ZTgxMWM4OGQg MTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L01hY3JvQXNzZW1ibGVyLmNwcAorKysrIGIvanMvc3Jj L2ppdC9NYWNyb0Fzc2VtYmxlci5jcHAKK0BAIC02MTI4LDcgKzYxMjgsNyBAQCBzdGF0aWMgdm9p ZCBNb3ZlRGF0YUJsb2NrKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdpc3RlciBiYXNlLCBpbnQz Ml90IGZyb20sCisgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHNjcmF0Y2ggPSBBQklOb25B cmdSZWcwOworICAgbWFzbS5wdXNoKHNjcmF0Y2gpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMobWFzbSk7CisgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworICNl bGlmICFkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKK0BAIC02MzE1LDYgKzYzMTUsMTIgQEAgc3Rh dGljIHZvaWQgQ29sbGFwc2VXYXNtRnJhbWVGYXN0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorIAor ICNpZmRlZiBKU19VU0VfTElOS19SRUdJU1RFUgorICAgLy8gUkEgaXMgYWxyZWFkeSBpbiBpdHMg cGxhY2UsIGp1c3QgbW92ZSBzdGFjay4KKysjICBpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAv LyBQUEM2NCdzIExSIGlzIG5vdCBhIEdQUiwgc28gV2FzbVRhaWxDYWxsUkFTY3JhdGNoUmVnIGlz IGEgbm9ybWFsIEdQUgorKyAgLy8gKHIxNCkuIFdlIG11c3QgZXhwbGljaXRseSBtb3ZlIGl0IHRv IExSIHNvIHRoZSBjYWxsZWUncyBwcm9sb2d1ZQorKyAgLy8gKHB1c2hSZXR1cm5BZGRyZXNzKSBz YXZlcyB0aGUgY29ycmVjdCByZXR1cm4gYWRkcmVzcy4KKysgIG1hc20ueHNfbXRscih0ZW1wRm9y UkEpOworKyMgIGVuZGlmCisgICBtYXNtLmFkZFRvU3RhY2tQdHIoSW1tMzIoZnJhbWVQdXNoZWRB dFN0YXJ0ICsgbmV3QXJnRGVzdCkpOworICNlbHNlCisgICAvLyBQdXNoIFJBIHRvIG5ldyBmcmFt ZTogc3RvcmUgUkEsIHJlc3RvcmUgdGVtcCwgYW5kIG1vdmUgc3RhY2suCitAQCAtNjQ2Myw2ICs2 NDY5LDEyIEBAIHN0YXRpYyB2b2lkIENvbGxhcHNlV2FzbUZyYW1lU2xvdyhNYWNyb0Fzc2VtYmxl ciYgbWFzbSwKKyAjaWZkZWYgSlNfVVNFX0xJTktfUkVHSVNURVIKKyAgIG1hc20uZnJlZVN0YWNr KHJlc2VydmVkKTsKKyAgIC8vIFJBIGlzIGFscmVhZHkgaW4gaXRzIHBsYWNlLCBqdXN0IG1vdmUg c3RhY2suCisrIyAgaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgLy8gUFBDNjQncyBMUiBpcyBu b3QgYSBHUFIsIHNvIFdhc21UYWlsQ2FsbFJBU2NyYXRjaFJlZyBpcyBhIG5vcm1hbCBHUFIKKysg IC8vIChyMTQpLiBXZSBtdXN0IGV4cGxpY2l0bHkgbW92ZSB0aGUgdHJhbXBvbGluZSBhZGRyZXNz IHRvIExSIHNvIHRoZQorKyAgLy8gY2FsbGVlIHJldHVybnMgdG8gdGhlIHRyYW1wb2xpbmUuCisr ICBtYXNtLnhzX210bHIodGVtcEZvclJBKTsKKysjICBlbmRpZgorICAgbWFzbS5hZGRUb1N0YWNr UHRyKEltbTMyKGZyYW1lUHVzaGVkQXRTdGFydCArIG5ld0FyZ0Rlc3QpKTsKKyAjZWxzZQorICAg Ly8gUHVzaCBSQSB0byBuZXcgZnJhbWU6IHN0b3JlIFJBLCByZXN0b3JlIHRlbXAsIGFuZCBtb3Zl IHN0YWNrLgorQEAgLTg1MjcsNyArODUzOSw3IEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRlYnVn QXNzZXJ0Q2Fub25pY2FsSW50MzIoUmVnaXN0ZXIgcikgeworICAgICBicmVha3BvaW50KCk7Cisg ICAgIGJpbmQoJm9rKTsKKyAjICAgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0gICAgICAgIGRlZmluZWQoSlNfQ09E RUdFTl9SSVNDVjY0KQorKyAgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgICAgTGFiZWwgb2s7CisgICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKyAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKK0BAIC0xMDU2Nyw2ICsxMDU3OSwxNSBAQCB2b2lkIE1hY3JvQXNzZW1ibGVy OjpvcmRlcmVkSGFzaFRhYmxlTG9va3VwKFJlZ2lzdGVyIHNldE9yTWFwT2JqLAorICAgdW5ib3hJ bnQzMihBZGRyZXNzKHNldE9yTWFwT2JqLCBUYWJsZU9iamVjdDo6b2Zmc2V0T2ZMaXZlQ291bnQo KSksIHRlbXAxKTsKKyAgIGJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIHRlbXAxLCB0ZW1w MSwgJm5vdEZvdW5kKTsKKyAKKysjaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgLy8g SWYgdGhpcyB3YXMgcHJlY2VkZWQgYnkgYSBNb3ZlR3JvdXAgaW5zdHJ1Y3Rpb24sIHRoZSBoYXNo IG1heSBoYXZlIGJlZW4KKysgIC8vIGxvYWRlZCBhbGdlYnJhaWNhbGx5IHNpbmNlIGl0J3MgYW4g SW50MzIgKGFuZCB0aHVzIHNpZ24tZXh0ZW5kZWQpOyB0aGUKKysgIC8vIG9wZXJhdGlvbiBkb2Vz bid0IGtub3cgdG8ga2VlcCB0aGUgdXBwZXIgYml0cyBjbGVhciwgZmFpbGluZyB0aGUgYXNzZXJ0 LgorKyAgaWYgKGlzQmlnSW50ID09IElzQmlnSW50OjpObykgeworKyAgICBhc19ybGRpY2woaGFz aCwgaGFzaCwgMCwgMzIpOworKyAgfQorKyNlbmRpZgorKworICNpZmRlZiBERUJVRworICAgUHVz aFJlZ3NJbk1hc2soTGl2ZVJlZ2lzdGVyU2V0KFJlZ2lzdGVyU2V0OjpWb2xhdGlsZSgpKSk7Cisg CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9NYWNyb0Fzc2VtYmxlci5oIGIvanMvc3JjL2ppdC9N YWNyb0Fzc2VtYmxlci5oCitpbmRleCA2YzA4YmI1NTRjYTguLjc1NGU4NjQyYmI1NyAxMDA2NDQK Ky0tLSBhL2pzL3NyYy9qaXQvTWFjcm9Bc3NlbWJsZXIuaAorKysrIGIvanMvc3JjL2ppdC9NYWNy b0Fzc2VtYmxlci5oCitAQCAtMjMsNiArMjMsOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0 L01hY3JvQXNzZW1ibGVyLWxvb25nNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklT Q1Y2NCkKKyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9NYWNyb0Fzc2VtYmxlci1yaXNjdjY0Lmgi CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2 NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNN MzIpCisgIyAgaW5jbHVkZSAiaml0L3dhc20zMi9NYWNyb0Fzc2VtYmxlci13YXNtMzIuaCIKKyAj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKK0BAIC05Myw4ICs5NSw5IEBACisgLy8gICB9 CisgLy8gICAvLy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVyX3N0eWxlCisgCistI2RlZmluZSBB TExfQVJDSCBtaXBzNjQsIGFybSwgYXJtNjQsIHg4NiwgeDY0LCBsb29uZzY0LCByaXNjdjY0LCB3 YXNtMzIKKy0jZGVmaW5lIEFMTF9TSEFSRURfQVJDSCBhcm0sIGFybTY0LCBsb29uZzY0LCBtaXBz NjQsIHJpc2N2NjQsIHg4Nl9zaGFyZWQsIHdhc20zMgorKyNkZWZpbmUgQUxMX0FSQ0ggbWlwczY0 LCBhcm0sIGFybTY0LCB4ODYsIHg2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHdhc20zMgor KyNkZWZpbmUgQUxMX1NIQVJFRF9BUkNIIFwKKysgIGFybSwgYXJtNjQsIGxvb25nNjQsIG1pcHM2 NCwgcmlzY3Y2NCwgcHBjNjQsIHg4Nl9zaGFyZWQsIHdhc20zMgorIAorIC8vICogSG93IHRoaXMg bWFjcm8gd29ya3M6CisgLy8KK0BAIC0xNDAsNiArMTQzLDcgQEAKKyAjZGVmaW5lIERFRklORURf T05fbWlwczY0CisgI2RlZmluZSBERUZJTkVEX09OX2xvb25nNjQKKyAjZGVmaW5lIERFRklORURf T05fcmlzY3Y2NAorKyNkZWZpbmUgREVGSU5FRF9PTl9wcGM2NAorICNkZWZpbmUgREVGSU5FRF9P Tl93YXNtMzIKKyAjZGVmaW5lIERFRklORURfT05fbm9uZQorIAorQEAgLTE2OSw2ICsxNzMsOSBA QAorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIHVuZGVmIERFRklORURf T05fcmlzY3Y2NAorICMgIGRlZmluZSBERUZJTkVEX09OX3Jpc2N2NjQgZGVmaW5lCisrI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIHVuZGVmIERFRklORURfT05fcHBjNjQKKysj ICBkZWZpbmUgREVGSU5FRF9PTl9wcGM2NCBkZWZpbmUKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fV0FTTTMyKQorICMgIHVuZGVmIERFRklORURfT05fd2FzbTMyCisgIyAgZGVmaW5lIERFRklO RURfT05fd2FzbTMyIGRlZmluZQorQEAgLTU2Miw3ICs1NjksNyBAQCBjbGFzcyBNYWNyb0Fzc2Vt YmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIHZvaWQgUG9wKGNvbnN0 IFJlZ2lzdGVyNjQgcmVnKTsKKyAgIHZvaWQgUG9wRmxhZ3MoKSBERUZJTkVEX09OKHg4Nl9zaGFy ZWQpOworICAgdm9pZCBQb3BTdGFja1B0cigpCistICAgICAgREVGSU5FRF9PTihhcm0sIG1pcHM2 NCwgeDg2X3NoYXJlZCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyKTsKKysgICAgICBERUZJTkVE X09OKGFybSwgbWlwczY0LCB4ODZfc2hhcmVkLCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgd2Fz bTMyKTsKKyAKKyAgIC8vIE1vdmUgdGhlIHN0YWNrIHBvaW50ZXIgYmFzZWQgb24gdGhlIHJlcXVl c3RlZCBhbW91bnQuCisgICB2b2lkIGFkanVzdFN0YWNrKGludCBhbW91bnQpOworQEAgLTYyMCw5 ICs2MjcsOSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKKyAKKyAgIC8vIFRoZXNlIGRvIG5vdCBhZGp1c3QgZnJhbWVQdXNoZWQoKS4KKyAg IHZvaWQgcHVzaFJldHVybkFkZHJlc3MoKQorLSAgICAgIERFRklORURfT04obWlwczY0LCBhcm0s IGFybTY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOworKyAgICAgIERFRklORURfT04obWlw czY0LCBhcm0sIGFybTY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCwgd2FzbTMyKTsKKyAgIHZv aWQgcG9wUmV0dXJuQWRkcmVzcygpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJt NjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQs IGFybSwgYXJtNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0LCB3YXNtMzIpOworIAorICAgLy8g VXNlZnVsIGZvciBkZWFsaW5nIHdpdGggdHdvLXZhbHVlZCByZXR1cm5zLgorICAgdm9pZCBtb3Zl UmVnUGFpcihSZWdpc3RlciBzcmMwLCBSZWdpc3RlciBzcmMxLCBSZWdpc3RlciBkc3QwLCBSZWdp c3RlciBkc3QxLAorQEAgLTY0MSw3ICs2NDgsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1 YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIENvZGVPZmZzZXQgZmFySnVtcFdpdGhQ YXRjaCgpIFBFUl9TSEFSRURfQVJDSDsKKyAgIHZvaWQgcGF0Y2hGYXJKdW1wKENvZGVPZmZzZXQg ZmFySnVtcCwgdWludDMyX3QgdGFyZ2V0T2Zmc2V0KSBQRVJfU0hBUkVEX0FSQ0g7CisgICBzdGF0 aWMgdm9pZCBwYXRjaEZhckp1bXAodWludDhfdCogZmFySnVtcCwgdWludDhfdCogdGFyZ2V0KQor LSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDg2X3NoYXJlZCwgbG9vbmc2NCwgbWlwczY0 LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg4Nl9zaGFyZWQsIGxv b25nNjQsIG1pcHM2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8gRW1pdCBhIG5vcCB0aGF0 IGNhbiBiZSBwYXRjaGVkIHRvIGFuZCBmcm9tIGEgbm9wIGFuZCBhIGNhbGwgd2l0aCBpbnQzMgor ICAgLy8gcmVsYXRpdmUgZGlzcGxhY2VtZW50LgorQEAgLTY2Nyw5ICs2NzQsOSBAQCBjbGFzcyBN YWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIHRh cmdldCBiZWhhdmlvdXIgaXMgb25seSBwcm92aWRlZCBmb3IgYG5gIGluIHRoZSByYW5nZSAwIC4u IDJeMzEtMQorICAgLy8gaW5jbHVzaXZlLgorICAgQ29kZU9mZnNldCBtb3ZlMzJXaXRoUGF0Y2go UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybSwgYXJtNjQs IGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm0sIGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAgIHZvaWQg cGF0Y2hNb3ZlMzIoQ29kZU9mZnNldCBvZmZzZXQsIEltbTMyIG4pCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm0sIGFybTY0LCBsb29uZzY0LCBtaXBzNjQsIHJpc2N2NjQpOworKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtLCBhcm02NCwgbG9vbmc2NCwgbWlwczY0LCBy aXNjdjY0LCBwcGM2NCk7CisgCisgIHB1YmxpYzoKKyAgIC8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQEAgLTExNzQsMTMg KzExODEsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJT cGVjaWZpYyB7CisgICBpbmxpbmUgdm9pZCBtdWxQdHIoSW1tV29yZCByaHMsIFJlZ2lzdGVyIHNy Y0Rlc3QpIFBFUl9BUkNIOworIAorICAgaW5saW5lIHZvaWQgbXVsNjQoY29uc3QgUmVnaXN0ZXI2 NCYgcmhzLCBjb25zdCBSZWdpc3RlcjY0JiBzcmNEZXN0KQorLSAgICAgIERFRklORURfT04oeDY0 LCBhcm02NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKHg2 NCwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworICAgaW5saW5lIHZv aWQgbXVsNjQoY29uc3QgT3BlcmFuZCYgc3JjLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0KSBERUZJ TkVEX09OKHg2NCk7CisgICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBPcGVyYW5kJiBzcmMsIGNv bnN0IFJlZ2lzdGVyNjQmIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZWdpc3Rl ciB0ZW1wKSBERUZJTkVEX09OKHg2NCk7CisgICBpbmxpbmUgdm9pZCBtdWw2NChJbW02NCBpbW0s IGNvbnN0IFJlZ2lzdGVyNjQmIGRlc3QpIFBFUl9BUkNIOworICAgaW5saW5lIHZvaWQgbXVsNjQo SW1tNjQgaW1tLCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0LCBjb25zdCBSZWdpc3RlciB0ZW1wKQor LSAgICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4NiwgeDY0LCBhcm0sIG1pcHM2NCwgbG9vbmc2NCwgcmlz Y3Y2NCwgcHBjNjQpOworICAgaW5saW5lIHZvaWQgbXVsNjQoY29uc3QgUmVnaXN0ZXI2NCYgc3Jj LCBjb25zdCBSZWdpc3RlcjY0JiBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVn aXN0ZXIgdGVtcCkgUEVSX0FSQ0g7CisgICBpbmxpbmUgdm9pZCBtdWw2NChjb25zdCBSZWdpc3Rl cjY0JiBzcmMxLCBjb25zdCBSZWdpc3RlcjY0JiBzcmMyLAorQEAgLTEyMDIsMTEgKzEyMDksMTEg QEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7 CisgICAvLyBPbiBBUk0sIHRoZSBjaGlwIG11c3QgaGF2ZSBoYXJkd2FyZSBkaXZpc2lvbiBpbnN0 cnVjdGlvbnMuCisgICBpbmxpbmUgdm9pZCBxdW90aWVudDMyKFJlZ2lzdGVyIGxocywgUmVnaXN0 ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlz VW5zaWduZWQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQsIGxvb25nNjQs IHJpc2N2NjQsIHdhc20zMik7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGFybSwgYXJtNjQs IGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcXVv dGllbnQ2NChSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKQorLSAgICAgIERFRklORURfT04o YXJtNjQsIGxvb25nNjQsIG1pcHM2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02 NCwgbG9vbmc2NCwgbWlwczY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyBBcyBhYm92ZSwg YnV0IGxocyBhbmQgZGVzdCBtdXN0IGJlIGVheCBhbmQgdGVtcEVkeCBtdXN0IGJlIGVkeC4KKyAg IGlubGluZSB2b2lkIHF1b3RpZW50MzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lz dGVyIGRlc3QsCitAQCAtMTIxOSwxMSArMTIyNiwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIE9uIEFSTSwgdGhlIGNoaXAg bXVzdCBoYXZlIGhhcmR3YXJlIGRpdmlzaW9uIGluc3RydWN0aW9ucy4KKyAgIGlubGluZSB2b2lk IHJlbWFpbmRlcjMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKQorLSAgICAgIERFRklO RURfT04obWlwczY0LCBhcm0sIGFybTY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOworKyAg ICAgIERFRklORURfT04obWlwczY0LCBhcm0sIGFybTY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNt MzIsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHJlbWFpbmRlcjY0KFJlZ2lzdGVyIGxocywg UmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBpc1Vuc2lnbmVkKQorLSAgICAgIERFRklORURfT04oYXJtNjQsIGxvb25nNjQsIG1pcHM2 NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgbG9vbmc2NCwgbWlwczY0LCBy aXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyBBcyBhYm92ZSwgYnV0IGxocyBhbmQgZGVzdCBtdXN0 IGJlIGVheCBhbmQgdGVtcEVkeCBtdXN0IGJlIGVkeC4KKyAgIGlubGluZSB2b2lkIHJlbWFpbmRl cjMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAorQEAgLTIwODAs NyArMjA4Nyw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgeworICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICB2b2lkIGJyYW5jaFZhbHVl SXNOdXJzZXJ5Q2VsbEltcGwoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHZhbHVlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBsYWJl bCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2 NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2 NjQsIHBwYzY0KTsKKyAKKyAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgaW5saW5lIHZvaWQg YnJhbmNoVGVzdFVuZGVmaW5lZEltcGwoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFQmIHQsIExhYmVs KiBsYWJlbCkKK0BAIC0yMjQ1LDcgKzIyNTIsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1 YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIGZyb20gYWxsIHRoZSBvdGhlciBy ZWdpc3RlcnMsIG9uIGFsbCBzdXBwb3J0ZWQgdGFyZ2V0cy4KKyAgIGlubGluZSB2b2lkIHdhc21B ZGRTdWJJMTI4SEk2NChSZWdpc3RlciBsaHNMbywgUmVnaXN0ZXIgbGhzSGksIFJlZ2lzdGVyIHJo c0xvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJoc0hpLCBS ZWdpc3RlciBvdXRwdXQsIGJvb2wgaXNBZGQpCistICAgICAgREVGSU5FRF9PTih4NjQsIGFybTY0 LCByaXNjdjY0LCBsb29uZzY0LCBtaXBzNjQpOworKyAgICAgIERFRklORURfT04oeDY0LCBhcm02 NCwgcmlzY3Y2NCwgbG9vbmc2NCwgbWlwczY0LCBwcGM2NCk7CisgCisgICAvLyBQcm9kdWNlcyB0 aGUgdG9wIDY0IGJpdHMgb2YgdGhlIDEyOC1iaXQgdmFsdWUgYFJBWCAqd2lkZW4gcmhzYC4gIFRo ZSByZXN1bHQKKyAgIC8vIHdpbGwgYmUgaW4gUkFYLiAgUkRYIGlzIHRyYXNoZWQuICBgcmhzYCBt YXkgbm90IGJlIFJBWCBvciBSRFguICBDYWxsZXJzCitAQCAtMjI1Niw3ICsyMjYzLDcgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAv LyB3aGF0IHRoZSByZWdpc3RlcnMgbWF5IGJlLgorICAgaW5saW5lIHZvaWQgd2FzbU11bEk2NFdp ZGVISTY0KFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBvdXRwdXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NpZ25lZCkKKy0gICAgICBERUZJ TkVEX09OKGFybTY0LCByaXNjdjY0LCBsb29uZzY0LCBtaXBzNjQpOworKyAgICAgIERFRklORURf T04oYXJtNjQsIHJpc2N2NjQsIGxvb25nNjQsIG1pcHM2NCwgcHBjNjQpOworIAorICAgLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisgICAvLyBDYW5vbmljYWxpemF0aW9uIHByaW1pdGl2ZXMuCitAQCAtMjM1 NSw2OCArMjM2Miw2OCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2Vt YmxlclNwZWNpZmljIHsKKyAgIC8vIE1vdmVzCisgCisgICBpbmxpbmUgdm9pZCBtb3ZlU2ltZDEy OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIC8vIENvbnN0YW50cworIAorICAgaW5saW5lIHZvaWQgbG9hZENv bnN0YW50U2ltZDEyOChjb25zdCBTaW1kQ29uc3RhbnQmIHYsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBTcGxhdAorIAorICAgaW5saW5l IHZvaWQgc3BsYXRYMTYoUmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3BsYXRYMTYodWludDMyX3Qg c3JjTGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKyAgICAgICBE RUZJTkVEX09OKGFybTY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHNwbGF0WDgoUmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAg aW5saW5lIHZvaWQgc3BsYXRYOCh1aW50MzJfdCBzcmNMYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KQorICAgICAgIERFRklORURfT04oYXJtNjQpOworIAorICAgaW5s aW5lIHZvaWQgc3BsYXRYNChSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzcGxhdFg0KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgc3BsYXRYMihSZWdpc3RlcjY0IHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0KTsKKysgICAgICBERUZJ TkVEX09OKHg4NiwgeDY0LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3BsYXRY MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIC8vIEV4dHJhY3QgbGFuZSBhcyBzY2FsYXIuICBGbG9hdCBleHRy YWN0aW9uIGRvZXMgbm90IGNhbm9uaWNhbGl6ZSB0aGUgdmFsdWUuCisgCisgICBpbmxpbmUgdm9p ZCBleHRyYWN0TGFuZUludDh4MTYodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgdW5zaWduZWRFeHRyYWN0TGFuZUludDh4MTYodWludDMyX3QgbGFuZSwg RmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlu bGluZSB2b2lkIGV4dHJhY3RMYW5lSW50MTZ4OCh1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVy IHNyYywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OCh1aW50MzJf dCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgZXh0cmFjdExhbmVJbnQzMng0KHVpbnQzMl90IGxhbmUsIEZsb2F0 UmVnaXN0ZXIgc3JjLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dHJhY3RMYW5lSW50NjR4Mih1aW50MzJf dCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlcjY0IGRlc3QpIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0KTsKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGRlc3QpIERFRklORURfT04o eDg2LCB4NjQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBleHRyYWN0TGFuZUZs b2F0MzJ4NCh1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBleHRyYWN0TGFuZUZsb2F0NjR4Mih1aW50 MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICAvLyBSZXBsYWNlIGxhbmUgdmFsdWUKKyAKK0BAIC0yNDI1LDIxICsyNDMyLDIxIEBA IGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewor IAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQ4eDE2KHVuc2lnbmVkIGxhbmUsIFJlZ2lz dGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQg cmVwbGFjZUxhbmVJbnQxNng4KHVuc2lnbmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdp c3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgcmVwbGFj ZUxhbmVJbnQxNng4KHVuc2lnbmVkIGxhbmUsIFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQzMng0KHVuc2ln bmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQzMng0KHVuc2lnbmVkIGxh bmUsIFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgcmVwbGFjZUxhbmVJbnQ2NHgyKHVuc2lnbmVkIGxhbmUsIEZsb2F0UmVnaXN0ZXIg bGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgcmhzLCBG bG9hdFJlZ2lzdGVyIGRlc3QpCitAQCAtMjQ0Nyw3ICsyNDU0LDcgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICBpbmxpbmUgdm9p ZCByZXBsYWNlTGFuZUludDY0eDIodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXI2NCByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2LCB4NjQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Niwg eDY0LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDMy eDQodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQor QEAgLTI0NTUsNyArMjQ2Miw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3Jv QXNzZW1ibGVyU3BlY2lmaWMgeworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDMy eDQodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDY0eDIodW5zaWdu ZWQgbGFuZSwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQorQEAgLTI0NjMs NyArMjQ3MCw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgeworIAorICAgaW5saW5lIHZvaWQgcmVwbGFjZUxhbmVGbG9hdDY0eDIodW5zaWdu ZWQgbGFuZSwgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgLy8gU2h1ZmZsZSAtIGJsZW5kIGFuZCBwZXJtdXRlIHdpdGggaW1tZWRpYXRlIGlu ZGljZXMsIGFuZCBpdHMgbWFueQorICAgLy8gc3BlY2lhbGl6YXRpb25zLiAgTGFuZSB2YWx1ZXMg b3RoZXIgdGhhbiB0aG9zZSBtZW50aW9uZWQgYXJlIGlsbGVnYWwuCitAQCAtMjQ3MSwxMSArMjQ3 OCwxMSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNp ZmljIHsKKyAgIC8vIGxhbmUgdmFsdWVzIDAuLjMxCisgICBpbmxpbmUgdm9pZCBzaHVmZmxlSW50 OHgxNihjb25zdCB1aW50OF90IGxhbmVzWzE2XSwgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc2h1ZmZsZUludDh4MTYoY29uc3Qg dWludDhfdCBsYW5lc1sxNl0sIEZsb2F0UmVnaXN0ZXIgbGhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBMYW5lIHZhbHVlcyBtdXN0IGJlIDAgKHNl bGVjdCBmcm9tIGxocykgb3IgRkYgKHNlbGVjdCBmcm9tIHJocykuCisgICAvLyBUaGUgYmVoYXZp b3IgaXMgdW5kZWZpbmVkIGZvciBsYW5lIHZhbHVlcyB0aGF0IGFyZSBuZWl0aGVyIDAgbm9yIEZG LgorQEAgLTI1MDIsMzkgKzI1MDksMzkgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMg TWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gd29ya3Mg ZWZmZWN0aXZlbHkgZm9yIEk4eDE2LCBJMTZ4OCwgSTMyeDQsIGFuZCBJNjR4Mi4KKyAgIGlubGlu ZSB2b2lkIGxhbmVTZWxlY3RTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbWFzaywgRmxvYXRSZWdpc3Rl ciBsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJo cywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIGludGVybGVhdmVIaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGlu ZSB2b2lkIGludGVybGVhdmVIaWdoSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IGludGVybGVhdmVIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGludGVy bGVhdmVIaWdoSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGludGVybGVhdmVM b3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBpbnRlcmxlYXZlTG93SW50MTZ4 OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgaW50ZXJsZWF2ZUxvd0ludDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIGludGVybGVhdmVMb3dJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICAvLyBQZXJtdXRlIC0gcGVybXV0ZSB3aXRoIGltbWVkaWF0ZSBpbmRpY2VzLgorIAorQEAgLTI1 NDQsNyArMjU1MSw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1i bGVyU3BlY2lmaWMgeworIAorICAgLy8gbGFuZSB2YWx1ZXMgMC4uNworICAgaW5saW5lIHZvaWQg cGVybXV0ZUludDE2eDgoY29uc3QgdWludDE2X3QgbGFuZXNbOF0sIEZsb2F0UmVnaXN0ZXIgc3Jj LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgLy8gbGFuZSB2YWx1ZXMg MC4uMyBbc2ljXS4KKyAgIGlubGluZSB2b2lkIHBlcm11dGVIaWdoSW50MTZ4OChjb25zdCB1aW50 MTZfdCBsYW5lc1s0XSwgRmxvYXRSZWdpc3RlciBzcmMsCitAQCAtMjU2Miw4MCArMjU2OSw4MCBA QCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsK KyAgIC8vICAgbG93XzE2X2J5dGVzX29mKChsaHMgKysgcmhzKSA+PiBzaGlmdCo4KSwgc2hpZnQg bXVzdCBiZSA8IDE2CisgICBpbmxpbmUgdm9pZCBjb25jYXRBbmRSaWdodFNoaWZ0U2ltZDEyOChG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIHVpbnQzMl90IHNoaWZ0 KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFJvdGF0ZSByaWdodCBieSBp bW1lZGlhdGUgY291bnQ6CisgICAvLyAgIGxvd18xNl9ieXRlc19vZigoc3JjICsrIHNyYykgPj4g c2hpZnQqOCksIHNoaWZ0IG11c3QgYmUgPCAxNgorICAgaW5saW5lIHZvaWQgcm90YXRlUmlnaHRT aW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2hpZnQpIERFRklORURfT04oYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0KSBERUZJ TkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBTaGlmdCBieXRlcyB3aXRoIGltbWVkaWF0 ZSBjb3VudCwgc2hpZnRpbmcgaW4gemVyb2VzLiAgU2hpZnQgY291bnQgMC4uMTUuCisgCisgICBp bmxpbmUgdm9pZCBsZWZ0U2hpZnRTaW1kMTI4KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNy YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRT aW1kMTI4KEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICAvLyBaZXJvIGV4dGVuZCBpbnQgdmFsdWVzLgorIAorICAgaW5saW5lIHZv aWQgemVyb0V4dGVuZDh4MTZUbzE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgICBpbmxpbmUgdm9pZCB6ZXJvRXh0 ZW5kOHgxNlRvMzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAgIGlubGluZSB2b2lkIHplcm9FeHRlbmQ4eDE2VG82 NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworICAgaW5saW5lIHZvaWQgemVyb0V4dGVuZDE2eDhUbzMyeDQoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgICBpbmxpbmUgdm9pZCB6ZXJvRXh0ZW5kMTZ4OFRvNjR4MihGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAgIGlu bGluZSB2b2lkIHplcm9FeHRlbmQzMng0VG82NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gUmV2ZXJz ZSBieXRlcyBpbiBsYW5lcy4KKyAKKyAgIGlubGluZSB2b2lkIHJldmVyc2VJbnQxNng4KEZsb2F0 UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBj NjQpOworIAorICAgaW5saW5lIHZvaWQgcmV2ZXJzZUludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCByZXZlcnNlSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFN3aXp6bGUgLSBw ZXJtdXRlIHdpdGggdmFyaWFibGUgaW5kaWNlcy4gIGByaHNgIGhvbGRzIHRoZSBsYW5lcyBwYXJh bWV0ZXIuCisgCisgICBpbmxpbmUgdm9pZCBzd2l6emxlSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBzd2l6emxlSW50OHgxNlJl bGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBJbnRlZ2VyIEFkZAorIAorICAgaW5saW5lIHZvaWQg YWRkSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgYWRkSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGFkZEludDE2eDgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGFkZEludDE2eDgoRmxvYXRSZWdp c3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBp bmxpbmUgdm9pZCBhZGRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCBhZGRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29u c3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgYWRkSW50NjR4MihG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYWRkSW50NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVk KTsKK0BAIC0yNjQzLDEzICsyNjUwLDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGlj IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gSW50ZWdlciBTdWJ0cmFjdAorIAorICAg aW5saW5lIHZvaWQgc3ViSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCistICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgc3ViSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHN1YkludDE2eDgo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHN1YkludDE2 eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJl ZCk7CitAQCAtMjY1OCwyNCArMjY2NSwyNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZv aWQgc3ViSW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5l IHZvaWQgc3ViSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiBy aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5F RF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHN1YkludDY0eDIoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEludGVnZXIgTXVsdGlwbHkKKyAKKyAgIGlu bGluZSB2b2lkIG11bEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAg IGlubGluZSB2b2lkIG11bEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25z dGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBtdWxJbnQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtdWxJbnQzMng0 KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OworQEAgLTI2OTEsMTAwICsyNjk4LDEwMCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAKKyAgIGlubGluZSB2b2lkIG11bEludDY0eDIo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCistICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVE X09OKGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBOb3RlIGZvciB0aGUgZXh0TXVsIG9wY29kZXMs IHRoZSBOeE0gZGVzaWduYXRpb24gaXMgZm9yIHRoZSBpbnB1dCBsYW5lczsKKyAgIC8vIHRoZSBv dXRwdXQgbGFuZXMgYXJlIHR3aWNlIGFzIHdpZGUuCisgICBpbmxpbmUgdm9pZCBleHRNdWxMb3dJ bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Cisg CisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dE11bExvd0ludDh4MTYoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Cisg CisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dE11bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIGV4dE11bExvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgZXh0TXVsSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0 TXVsTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkRXh0 TXVsSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgZXh0TXVsTG93 SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBleHRNdWxIaWdoSW50MzJ4NChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRFeHRNdWxMb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIg bGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRFeHRNdWxIaWdoSW50MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBxMTVNdWxyU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gSW50 ZWdlciBOZWdhdGUKKyAKKyAgIGlubGluZSB2b2lkIG5lZ0ludDh4MTYoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCBuZWdJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbmVn SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG5lZ0ludDY0eDIoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICAvLyBTYXR1cmF0aW5nIGludGVnZXIgYWRkCisgCisgICBpbmxpbmUgdm9pZCBhZGRT YXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCBhZGRTYXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3Rh bnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRT YXRJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRTYXRJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBhZGRTYXRJbnQxNng4KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBhZGRTYXRJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRTYXRJbnQxNng4KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRBZGRTYXRJbnQxNng4KEZsb2F0UmVnaXN0ZXIg bGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CitA QCAtMjc5MiwyNyArMjc5OSwyNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNy b0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIFNhdHVyYXRpbmcgaW50ZWdlciBzdWJ0cmFjdAor IAorICAgaW5saW5lIHZvaWQgc3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVy IGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlu bGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2 b2lkIHVuc2lnbmVkU3ViU2F0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQg c3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVn aXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAg aW5saW5lIHZvaWQgc3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENv bnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVk U3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkU3ViU2F0 SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQpOworQEAgLTI4MjAsNDAgKzI4MjcsNDAgQEAgY2xhc3MgTWFjcm9B c3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBMYW5lLXdp c2UgaW50ZWdlciBtaW5pbXVtCisgCisgICBpbmxpbmUgdm9pZCBtaW5JbnQ4eDE2KEZsb2F0UmVn aXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5JbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAor ICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgdW5zaWduZWRNaW5JbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3Rh bnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5JbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5J bnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25z dCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUg dm9pZCBtaW5JbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCBtaW5JbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQm IHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQzMng0 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRNaW5JbnQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CitA QCAtMjg2MSw0MCArMjg2OCw0MCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNy b0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIExhbmUtd2lzZSBpbnRlZ2VyIG1heGltdW0KKyAK KyAgIGlubGluZSB2b2lkIG1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIG1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNp bWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25l ZE1heEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDh4MTYo RmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEludDE2eDgoRmxvYXRSZWdpc3RlciBs aHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUg dm9pZCB1bnNpZ25lZE1heEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25l ZE1heEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEludDMyeDQoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEludDMyeDQoRmxv YXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7Cisg CisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZE1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCB1bnNpZ25lZE1heEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25z dGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKK0BAIC0yOTAzLDI1ICsyOTEwLDI1IEBA IGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgewor IAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRBdmVyYWdlSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCB1bnNpZ25lZEF2ZXJhZ2VJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBG bG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8v IExhbmUtd2lzZSBpbnRlZ2VyIGFic29sdXRlIHZhbHVlCisgCisgICBpbmxpbmUgdm9pZCBhYnNJ bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYWJzSW50MTZ4OChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIGFic0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9p ZCBhYnNJbnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gTGVmdCBzaGlmdCBieSBzY2FsYXIuIElt bWVkaWF0ZXMgYW5kIHZhcmlhYmxlIHNoaWZ0cyBtdXN0IGhhdmUgYmVlbgorICAgLy8gbWFza2Vk OyBzaGlmdHMgb2YgemVybyB3aWxsIHdvcmsgYnV0IG1heSBvciBtYXkgbm90IGdlbmVyYXRlIGNv ZGUuCitAQCAtMjkzMCw0MSArMjkzNyw0MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1Ymxp YyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5s aW5lIHZvaWQgbGVmdFNoaWZ0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhz LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IGxlZnRTaGlmdEludDh4MTYoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MTZ4OChSZWdp c3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lzdGVy IGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIGxlZnRTaGlmdEludDE2eDgoSW1tMzIgY291bnQsIEZsb2F0UmVn aXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbGVm dFNoaWZ0SW50MzJ4NChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKyAgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50 MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGxlZnRTaGlmdEludDMyeDQoSW1t MzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgbGVmdFNoaWZ0SW50NjR4MihSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0 ZXIgbGhzRGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5l IHZvaWQgbGVmdFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGxl ZnRTaGlmdEludDY0eDIoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCwgcHBjNjQpOworIAorICAgLy8gUmlnaHQgc2hpZnQgYnkgc2NhbGFyLiBJbW1lZGlhdGVz IGFuZCB2YXJpYWJsZSBzaGlmdHMgbXVzdCBoYXZlIGJlZW4KKyAgIC8vIG1hc2tlZDsgc2hpZnRz IG9mIHplcm8gd2lsbCB3b3JrIGJ1dCBtYXkgb3IgbWF5IG5vdCBnZW5lcmF0ZSBjb2RlLgorQEAg LTI5NzMsODIgKzI5ODAsODIgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9p ZCByaWdodFNoaWZ0SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmln aHRTaGlmdEludDh4MTYoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDh4 MTYoUmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkKKyAgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0 SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IHVuc2lnbmVkUmlnaHRTaGlmdEludDh4MTYoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3Jj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmln aHRTaGlmdEludDE2eDgoUmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCisgICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOwor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJ TkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50MTZ4 OChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChSZWdpc3RlciBy aHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQp OworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgUmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlm dEludDE2eDgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDMyeDQoUmVn aXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCisgICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHJpZ2h0U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCByaWdodFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxv YXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIg bGhzRGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZv aWQgdW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIg cmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDMyeDQoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDY0eDIoUmVnaXN0ZXIgcmhzLCBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBy aWdodFNoaWZ0SW50NjR4MihJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVk LCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgcmlnaHRTaGlmdEludDY0eDIoRmxv YXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIo UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCisgICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIo RmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25l ZFJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFNpZ24gcmVwbGljYXRpb24gb3Bl cmF0aW9uCisgCitAQCAtMzA2Nyw0NyArMzA3NCw0NyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIEJpdHdpc2UgYW5kLCBvciwg eG9yLCBub3QKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdpc2VBbmRTaW1kMTI4KEZsb2F0UmVnaXN0 ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgYml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGlu ZSB2b2lkIGJpdHdpc2VBbmRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBTaW1kQ29u c3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdp c2VPclNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXR3aXNlT3JTaW1k MTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGJpdHdpc2VPclNpbWQxMjgoRmxvYXRSZWdpc3Rl ciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisg ICBpbmxpbmUgdm9pZCBiaXR3aXNlWG9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRS ZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOwor KyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGlu ZSB2b2lkIGJpdHdpc2VYb3JTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVy IHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXR3aXNl WG9yU2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXR3aXNlTm90U2ltZDEyOChG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQs IHBwYzY0KTsKKyAKKyAgIC8vIEJpdHdpc2UgQU5EIHdpdGggY29tcGxpbWVudDogZGVzdCA9IGxo cyAmIH5yaHMsIG5vdGUgb25seSBhcm02NCBjYW4gZG8gaXQuCisgICBpbmxpbmUgdm9pZCBiaXR3 aXNlQW5kTm90U2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3Qp IERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBsaHNEZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICAv LyBCaXR3aXNlIEFORCB3aXRoIGNvbXBsZW1lbnQ6IGRlc3QgPSB+bGhzICYgcmhzLCBub3RlIHRo aXMgaXMgbm90IHdoYXQgV2FzbQorICAgLy8gd2FudHMgYnV0IHdoYXQgdGhlIHg4NiBoYXJkd2Fy ZSBvZmZlcnMuICBIZW5jZSB0aGUgbmFtZS4KKyAKKyAgIGlubGluZSB2b2lkIGJpdHdpc2VOb3RB bmRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgYml0d2lzZU5vdEFuZFNp bWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorQEAgLTMxMjAs MzQgKzMxMjcsMzQgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJs ZXJTcGVjaWZpYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHRlbXApIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBi aXR3aXNlU2VsZWN0U2ltZDEyOChGbG9hdFJlZ2lzdGVyIG9uVHJ1ZSwgRmxvYXRSZWdpc3RlciBv bkZhbHNlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBtYXNrRGVzdCkgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIG1hc2tEZXN0KSBERUZJTkVEX09OKGFybTY0LCBwcGM2 NCk7CisgCisgICAvLyBQb3B1bGF0aW9uIGNvdW50CisgCisgICBpbmxpbmUgdm9pZCBwb3BjbnRJ bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgREVGSU5FRF9PTih4ODZfc2hh cmVkKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHBvcGNudElu dDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICAv LyBBbnkgbGFuZSB0cnVlLCBpZSwgYW55IGJpdCBzZXQKKyAKKyAgIGlubGluZSB2b2lkIGFueVRy dWVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEFsbCBsYW5lcyB0cnVlCisgCisgICBpbmxpbmUgdm9p ZCBhbGxUcnVlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKKy0gICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBhbGxUcnVlSW50MTZ4OChG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCBhbGxUcnVlSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywg UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBhbGxUcnVlSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBCaXRtYXNrLCBpZSBleHRyYWN0IGFu ZCBjb21wcmVzcyBoaWdoIGJpdHMgb2YgYWxsIGxhbmVzCisgCitAQCAtMzE1NSwzMSArMzE2Miwz MSBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmlj IHsKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgYml0 bWFza0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCistICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQp OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJ TkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50MTZ4OChG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgYml0bWFza0ludDE2eDgoRmxvYXRSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIg ZGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQg Yml0bWFza0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJt NjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBE RUZJTkVEX09OKGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBiaXRtYXNrSW50NjR4 MihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkKKyAgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgYml0bWFza0ludDY0eDIoRmxvYXRSZWdpc3Rl ciBzcmMsIFJlZ2lzdGVyIGRlc3QsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHRlbXApIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSBERUZJTkVEX09OKGFybTY0LCBwcGM2NCk7Cisg CisgICAvLyBDb21wYXJpc29ucyAoaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQpCisgCisgICBp bmxpbmUgdm9pZCBjb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9h dFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAg ICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBPbiB4ODZf c2hhcmVkLCBsaW1pdGVkIHRvICE9LCA9PSwgPD0sID4KKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJ bnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAorQEAg LTMxODksMTUgKzMxOTYsMTUgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9B c3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBPbiBhcm02NCwgdXNlIGFueSBpbnRlZ2VyIGNvbXBh cmlzb24gY29uZGl0aW9uLgorICAgaW5saW5lIHZvaWQgY29tcGFyZUludDh4MTYoQXNzZW1ibGVy OjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQxNng4KEFz c2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvICE9 LCA9PSwgPD0sID4KKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29u ZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAorQEAgLTMyMDcsNyArMzIxNCw3IEBAIGNs YXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAg Ly8gT24geDg2X3NoYXJlZCwgbGltaXRlZCB0byAhPSwgPT0sIDw9LCA+CisgICBpbmxpbmUgdm9p ZCBjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVy IHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBjb21wYXJl SW50MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVyIGxocywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNpbWRDb25zdGFudCYgcmhzLCBGbG9h dFJlZ2lzdGVyIGRlc3QpCitAQCAtMzIxNiw3ICszMjIzLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJs ZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBPbiBhcm02NCwgdXNl IGFueSBpbnRlZ2VyIGNvbXBhcmlzb24gY29uZGl0aW9uLgorICAgaW5saW5lIHZvaWQgY29tcGFy ZUludDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdp c3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IGNvbXBhcmVGb3JFcXVhbGl0eUludDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorQEAgLTMyMzAsMTUgKzMyMzcsMTUgQEAgY2xhc3MgTWFjcm9B c3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAgICAgREVGSU5F RF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVJbnQ2NHgyKEFzc2Vt Ymxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSBERUZJTkVEX09OKGFybTY0KTsK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgY29tcGFyZUludDY0eDIo QXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBkZXN0 KQorLSAgICAgIERFRklORURfT04oYXJtNjQpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHBw YzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpDb25k aXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICAvLyBPbiB4ODZfc2hhcmVkLCBsaW1pdGVkIHRvID09LCAhPSwgPCwgPD0KKyAgIGlu bGluZSB2b2lkIGNvbXBhcmVGbG9hdDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwgRmxv YXRSZWdpc3RlciBsaHMsCitAQCAtMzI0OSwxMSArMzI1NiwxMSBAQCBjbGFzcyBNYWNyb0Fzc2Vt YmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIC8vIE9uIGFybTY0LCB1 c2UgYW55IGZsb2F0LXBvaW50IGNvbXBhcmlzb24gY29uZGl0aW9uLgorICAgaW5saW5lIHZvaWQg Y29tcGFyZUZsb2F0MzJ4NChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBGbG9hdFJlZ2lzdGVy IGxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBp bmxpbmUgdm9pZCBjb21wYXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZs b2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7Cisr ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gT24g eDg2X3NoYXJlZCwgbGltaXRlZCB0byA9PSwgIT0sIDwsIDw9CisgICBpbmxpbmUgdm9pZCBjb21w YXJlRmxvYXQ2NHgyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhz LAorQEAgLTMyNjQsNyArMzI3MSw3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1h Y3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gT24gYXJtNjQsIHVzZSBhbnkgZmxvYXQtcG9p bnQgY29tcGFyaXNvbiBjb25kaXRpb24uCisgICBpbmxpbmUgdm9pZCBjb21wYXJlRmxvYXQ2NHgy KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIgbGhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBk ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIExvYWQKKyAKK0BAIC0z MjczLDkyICszMjgwLDkyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNz ZW1ibGVyU3BlY2lmaWMgeworIAorICAgaW5saW5lIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkVW5h bGlnbmVkU2ltZDEyOChjb25zdCBBZGRyZXNzJiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRV bmFsaWduZWRTaW1kMTI4KGNvbnN0IEJhc2VJbmRleCYgc3JjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZf c2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gU3RvcmUKKyAKKyAgIGlubGluZSBGYXVs dGluZ0NvZGVPZmZzZXQgc3RvcmVVbmFsaWduZWRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QWRkcmVzcyYgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg RmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlVW5hbGlnbmVkU2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNy YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEJhc2VJbmRleCYgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAv LyBGbG9hdGluZyBwb2ludCBuZWdhdGlvbgorIAorICAgaW5saW5lIHZvaWQgbmVnRmxvYXQzMng0 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbmVnRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgLy8gRmxvYXRpbmcgcG9pbnQgYWJzb2x1dGUgdmFsdWUKKyAKKyAgIGlubGluZSB2b2lkIGFi c0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGFic0Zsb2F0NjR4MihGbG9h dFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2 X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIC8vIE5hTi1wcm9wYWdhdGluZyBtaW5pbXVtCisgCisgICBpbmxpbmUgdm9p ZCBtaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3Rl ciB0ZW1wMSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAy KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQpOworIAorICAg aW5saW5lIHZvaWQgbWluRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVy IGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgREVGSU5FRF9PTihh cm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWluRmxvYXQzMng0KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgbWluRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJo cywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04oYXJtNjQpOworKyAg ICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1pbkZsb2F0 NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFybTY0KTsKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04o YXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIE5hTi1wcm9wYWdhdGluZyBtYXhpbXVtCisgCisgICBp bmxpbmUgdm9pZCBtYXhGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxv YXRSZWdpc3RlciB0ZW1wMSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIHRlbXAyKSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcDIpIERFRklORURfT04oeDg2X3NoYXJlZCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgbWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9h dFJlZ2lzdGVyIGxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgREVG SU5FRF9PTihhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4RmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oYXJtNjQpOworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTihhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVtcDEsCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wMikgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIG1heEZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KQorLSAgICAgIERFRklORURfT04oYXJt NjQpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lk IG1heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKGFy bTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEZsb2F0aW5nIGFkZAorIAorICAgaW5s aW5lIHZvaWQgYWRkRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOwor IAorICAgaW5saW5lIHZvaWQgYWRkRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBjb25zdCBT aW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUgdm9pZCBhZGRG bG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBhZGRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYg cmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTih4ODZfc2hhcmVkKTsKK0BAIC0zMzY2LDEzICszMzczLDEzIEBAIGNsYXNzIE1hY3Jv QXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gRmxvYXRp bmcgc3VidHJhY3QKKyAKKyAgIGlubGluZSB2b2lkIHN1YkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHN1YkZsb2F0MzJ4NChGbG9h dFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwor IAorICAgaW5saW5lIHZvaWQgc3ViRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgc3ViRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhz LCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CitAQCAtMzM4MCwxMyAr MzM4NywxMyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNw ZWNpZmljIHsKKyAgIC8vIEZsb2F0aW5nIGRpdmlzaW9uCisgCisgICBpbmxpbmUgdm9pZCBkaXZG bG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBkaXZGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRDb25zdGFudCYg cmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVG SU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIGRpdkZsb2F0NjR4MihGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGRpdkZsb2F0 NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9z aGFyZWQpOworQEAgLTMzOTQsMTMgKzM0MDEsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBw dWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAvLyBGbG9hdGluZyBNdWx0aXBseQor IAorICAgaW5saW5lIHZvaWQgbXVsRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbXVsRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhz LCBjb25zdCBTaW1kQ29uc3RhbnQmIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCk7CisgCisgICBpbmxpbmUg dm9pZCBtdWxGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCBtdWxGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIGNvbnN0IFNpbWRD b25zdGFudCYgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKK0BAIC0zNDA4LDkxICszNDE1LDkxIEBAIGNs YXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAg Ly8gUGFpcndpc2UgYWRkCisgCisgICBpbmxpbmUgdm9pZCBleHRBZGRQYWlyd2lzZUludDh4MTYo RmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50OHgx NihGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBleHRBZGRQYWlyd2lzZUludDE2eDgoRmxvYXRSZWdpc3RlciBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFy bTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisg ICBpbmxpbmUgdm9pZCB1bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50MTZ4OChGbG9hdFJlZ2lzdGVy IHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBGbG9h dGluZyBzcXVhcmUgcm9vdAorIAorICAgaW5saW5lIHZvaWQgc3FydEZsb2F0MzJ4NChGbG9hdFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIHNxcnRGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBJ bnRlZ2VyIHRvIGZsb2F0aW5nIHBvaW50IHdpdGggcm91bmRpbmcKKyAKKyAgIGlubGluZSB2b2lk IGNvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1 bnNpZ25lZENvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGNv bnZlcnRJbnQzMng0VG9GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNp Z25lZENvbnZlcnRJbnQzMng0VG9GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBk ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIEZsb2F0aW5nIHBvaW50 IHRvIGludGVnZXIgd2l0aCBzYXR1cmF0aW9uCisgCisgICBpbmxpbmUgdm9pZCB0cnVuY1NhdEZs b2F0MzJ4NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1 bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciB0ZW1wKQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFRy dW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTihhcm02NCk7CisrICAgICAgREVGSU5FRF9PTihhcm02NCwgcHBj NjQpOworIAorICAgaW5saW5lIHZvaWQgdHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkKKy0gICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0 LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFRydW5jU2F0RmxvYXQ2NHgyVG9J bnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkKKy0g ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB0cnVuY0Zsb2F0MzJ4 NFRvSW50MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkVHJ1bmNGbG9hdDMy eDRUb0ludDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQor LSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04o eDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHRydW5jRmxvYXQ2 NHgyVG9JbnQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAg REVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRUcnVuY0Zsb2F0 NjR4MlRvSW50MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp CistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gRmxvYXRpbmcgcG9pbnQgbmFy cm93aW5nCisgCisgICBpbmxpbmUgdm9pZCBjb252ZXJ0RmxvYXQ2NHgyVG9GbG9hdDMyeDQoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4 Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBw cGM2NCk7CisgCisgICAvLyBGbG9hdGluZyBwb2ludCB3aWRlbmluZworIAorICAgaW5saW5lIHZv aWQgY29udmVydEZsb2F0MzJ4NFRvRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgLy8gSW50ZWdl ciB0byBpbnRlZ2VyIG5hcnJvd2luZworIAorQEAgLTM1MDAsNjUgKzM1MDcsNjUgQEAgY2xhc3Mg TWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZf c2hhcmVkKTsKKyAKKyAgIGlubGluZSB2b2lkIG5hcnJvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkTmFycm93SW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVE X09OKHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWROYXJyb3dJbnQxNng4 KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgREVGSU5FRF9PTih4ODZfc2hhcmVkKTsKKyAKKyAgIGlu bGluZSB2b2lkIG5hcnJvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERF RklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0 KTsKKyAKKyAgIGlubGluZSB2b2lkIHVuc2lnbmVkTmFycm93SW50MzJ4NChGbG9hdFJlZ2lzdGVy IGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQpOwor IAorICAgaW5saW5lIHZvaWQgdW5zaWduZWROYXJyb3dJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAg Ly8gSW50ZWdlciB0byBpbnRlZ2VyIHdpZGVuaW5nCisgCisgICBpbmxpbmUgdm9pZCB3aWRlbkxv d0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB3aWRlbkhpZ2hJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwg cHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5zaWduZWRXaWRlbkxvd0ludDh4MTYoRmxvYXRS ZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9z aGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2 NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCB3aWRlbkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCB3aWRlbkhpZ2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVG SU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgdW5z aWduZWRXaWRlbkxvd0ludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25l ZFdpZGVuSGlnaEludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB3aWRlbkxvd0lu dDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuTG93SW50MzJ4 NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJt NjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHdpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCB1bnNpZ25lZFdpZGVuSGlnaEludDMyeDQoRmxvYXRSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7Cisg CisgICAvLyBDb21wYXJlLWJhc2VkIG1pbmltdW0vbWF4aW11bQorICAgLy8KK0BAIC0zNTcwLDQ3 ICszNTc3LDQ3IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVy U3BlY2lmaWMgeworIAorICAgaW5saW5lIHZvaWQgcHNldWRvTWluRmxvYXQzMng0KEZsb2F0UmVn aXN0ZXIgcmhzT3JSaHNEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgbGhzT3JMaHNEZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIHBzZXVkb01pbkZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAg ICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2 b2lkIHBzZXVkb01pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc09yTGhzRGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBwc2V1ZG9NaW5G bG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBwc2V1ZG9NYXhGbG9hdDMyeDQoRmxv YXRSZWdpc3RlciByaHNPclJoc0Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgcHNldWRvTWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7 CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5s aW5lIHZvaWQgcHNldWRvTWF4RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgcmhzT3JSaHNEZXN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JMaHNE ZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHBzZXVk b01heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAg IERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3No YXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8vIFdpZGVuaW5nL3BhaXJ3aXNlIGludGVnZXIg ZG90IHByb2R1Y3QKKyAKKyAgIGlubGluZSB2b2lkIHdpZGVuRG90SW50MTZ4OChGbG9hdFJlZ2lz dGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIERFRklORURf T04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHdpZGVuRG90 SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgY29uc3QgU2ltZENvbnN0YW50JiByaHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSBERUZJTkVEX09O KHg4Nl9zaGFyZWQpOworIAorICAgaW5saW5lIHZvaWQgZG90SW50OHgxNkludDd4MTYoRmxvYXRS ZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJl ZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsK KyAKKyAgIGlubGluZSB2b2lkIGRvdEludDh4MTZJbnQ3eDE2VGhlbkFkZChGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KQorQEAgLTM2MTgsODEgKzM2MjUsODEgQEAgY2xh c3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisg ICBpbmxpbmUgdm9pZCBkb3RJbnQ4eDE2SW50N3gxNlRoZW5BZGQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxvYXRSZWdpc3RlciB0ZW1wKQorLSAgICAgIERFRklO RURfT04oYXJtNjQpOworKyAgICAgIERFRklORURfT04oYXJtNjQsIHBwYzY0KTsKKyAKKyAgIC8v IEZsb2F0aW5nIHBvaW50IHJvdW5kaW5nCisgCisgICBpbmxpbmUgdm9pZCBjZWlsRmxvYXQzMng0 KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgY2VpbEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAK KyAgIGlubGluZSB2b2lkIGZsb29yRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgZmxvb3JGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkK Ky0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09O KHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCB0cnVuY0Zsb2F0 MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklO RURfT04oeDg2X3NoYXJlZCwgYXJtNjQpOworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwg YXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIHRydW5jRmxvYXQ2NHgyKEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hh cmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQp OworIAorICAgaW5saW5lIHZvaWQgbmVhcmVzdEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywg RmxvYXRSZWdpc3RlciBkZXN0KQorLSAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQp OworKyAgICAgIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBwYzY0KTsKKyAKKyAgIGlu bGluZSB2b2lkIG5lYXJlc3RGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICAvLyBGbG9hdGluZyBt dWx0aXBseS1hY2N1bXVsYXRlOiBzcmNEZXN0IFsrLV09IHNyYzEgKiBzcmMyCisgCisgICBpbmxp bmUgdm9pZCBmbWFGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNy YzIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGZubWFGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMx LCBGbG9hdFJlZ2lzdGVyIHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgc3JjRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCBmbWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNy YzIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpIERFRklORURfT04oeDg2X3NoYXJlZCwgYXJtNjQsIHBw YzY0KTsKKyAKKyAgIGlubGluZSB2b2lkIGZubWFGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMx LCBGbG9hdFJlZ2lzdGVyIHNyYzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgc3JjRGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsK KysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxp bmUgdm9pZCBtaW5GbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lz dGVyIHNyY0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAg ICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZv aWQgbWluRmxvYXQzMng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVE X09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9h dDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpCist ICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4 ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWF4RmxvYXQzMng0 UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJ TkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQs IGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUgdm9pZCBtaW5GbG9hdDY0eDJSZWxheGVkKEZs b2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpCistICAgICAgREVGSU5FRF9P Tih4ODZfc2hhcmVkLCBhcm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02 NCwgcHBjNjQpOworIAorICAgaW5saW5lIHZvaWQgbWluRmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFy ZWQsIGFybTY0KTsKKysgICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7 CisgCisgICBpbmxpbmUgdm9pZCBtYXhGbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QpCistICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBh cm02NCk7CisrICAgICAgREVGSU5FRF9PTih4ODZfc2hhcmVkLCBhcm02NCwgcHBjNjQpOworIAor ICAgaW5saW5lIHZvaWQgbWF4RmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysg ICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgICBpbmxpbmUg dm9pZCBxMTVNdWxySW50MTZ4OFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0 ZXIgcmhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0KTsKKysgICAgICBE RUZJTkVEX09OKHg4Nl9zaGFyZWQsIGFybTY0LCBwcGM2NCk7CisgCisgIHB1YmxpYzoKKyAgIC8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorQEAgLTM3MTcsMTAgKzM3MjQsMTAgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgCisgICAvLyB0ZW1wIHJl cXVpcmVkIG9uIHg4NiBhbmQgeDY0OyBtdXN0IGJlIHVuZGVmaW5lZCBvbiBtaXBzNjQgYW5kIGxv b25nNjQuCisgICB2b2lkIGNvbnZlcnRVSW50NjRUb0Zsb2F0MzIoUmVnaXN0ZXI2NCBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCwgUmVnaXN0ZXIgdGVtcCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0 LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgeDY0LCB4ODYpOworKyAgICAgIERF RklORURfT04oYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcHBjNjQsIHJpc2N2NjQsIHdhc20zMiwg eDY0LCB4ODYpOworIAorICAgdm9pZCBjb252ZXJ0SW50NjRUb0Zsb2F0MzIoUmVnaXN0ZXI2NCBz cmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkKKy0gICAgICBERUZJTkVEX09OKGFybTY0LCBtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwgeDY0LCB4ODYpOworKyAgICAgIERFRklORURfT04o YXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcHBjNjQsIHJpc2N2NjQsIHdhc20zMiwgeDY0LCB4ODYp OworIAorICAgYm9vbCBjb252ZXJ0VUludDY0VG9Eb3VibGVOZWVkc1RlbXAoKSBQRVJfQVJDSDsK KyAKK0BAIC0zODAxLDE2ICszODA4LDE2IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGlj IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgLy8gU2NhbGFyOjpJbnQ2NC4KKyAgIHZvaWQg d2FzbUxvYWQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBt ZW1vcnlCYXNlLAorICAgICAgICAgICAgICAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNj cmF0Y2gsIEFueVJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgbG9vbmc2 NCwgcmlzY3Y2NCwgbWlwczY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgbG9vbmc2NCwgcmlz Y3Y2NCwgbWlwczY0LCBwcGM2NCk7CisgICB2b2lkIHdhc21Mb2FkSTY0KGNvbnN0IHdhc206Ok1l bW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVnaXN0ZXIgbWVtb3J5QmFzZSwKKyAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoLCBSZWdpc3RlcjY0IG91 dHB1dCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsK KysgICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7 CisgICB2b2lkIHdhc21TdG9yZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3Ms IEFueVJlZ2lzdGVyIHZhbHVlLAorICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFz ZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJTY3JhdGNoKQorLSAgICAgIERFRklORURfT04o YXJtLCBsb29uZzY0LCByaXNjdjY0LCBtaXBzNjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBs b29uZzY0LCByaXNjdjY0LCBtaXBzNjQsIHBwYzY0KTsKKyAgIHZvaWQgd2FzbVN0b3JlSTY0KGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgUmVnaXN0ZXI2NCB2YWx1ZSwKKyAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVn aXN0ZXIgcHRyU2NyYXRjaCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgbWlwczY0LCBsb29uZzY0LCByaXNj djY0LCBwcGM2NCk7CisgCisgICAvLyBUaGVzZSBhY2NlcHQgZ2VuZXJhbCBtZW1vcnlCYXNlICsg cHRyICsgb2Zmc2V0IChpbiBgYWNjZXNzYCk7IHRoZSBvZmZzZXQgaXMKKyAgIC8vIGFsd2F5cyBz bWFsbGVyIHRoYW4gdGhlIGd1YXJkIHJlZ2lvbi4gIFRoZXkgd2lsbCBpbnNlcnQgYW4gYWRkaXRp b25hbCBhZGQKK0BAIC0zODg5LDExICszODk2LDExIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCB3YXNtVHJ1bmNhdGVEb3Vi bGVUb0ludDY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNTYXR1cmF0aW5nLCBMYWJlbCogb29s RW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9vbFJlam9p biwgRmxvYXRSZWdpc3RlciB0ZW1wRG91YmxlKQorLSAgICAgIERFRklORURfT04oYXJtNjQsIHg4 NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMik7CisrICAgICAgREVGSU5F RF9PTihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2FzbTMyLCBw cGM2NCk7CisgICB2b2lkIHdhc21UcnVuY2F0ZURvdWJsZVRvVUludDY0KEZsb2F0UmVnaXN0ZXIg aW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBE b3VibGUpCistICAgICAgREVGSU5FRF9PTihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgd2FzbTMyKTsKKysgICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwg bWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIsIHBwYzY0KTsKKyAgIHZvaWQgb29sV2Fz bVRydW5jYXRlQ2hlY2tGNjRUb0k2NChGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91 dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVuY0ZsYWdzIGZs YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206OlRy YXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjLAorQEAgLTM5MDIsMTEgKzM5MDksMTEgQEAgY2xhc3Mg TWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lk IHdhc21UcnVuY2F0ZUZsb2F0MzJUb0ludDY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVy NjQgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0 dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpCistICAgICAg REVGSU5FRF9PTihhcm02NCwgeDg2LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgd2Fz bTMyKTsKKysgICAgICBERUZJTkVEX09OKGFybTY0LCB4ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0 LCByaXNjdjY0LCB3YXNtMzIsIHBwYzY0KTsKKyAgIHZvaWQgd2FzbVRydW5jYXRlRmxvYXQzMlRv VUludDY0KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsIExhYmVsKiBvb2xF bnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xSZWpv aW4sIEZsb2F0UmVnaXN0ZXIgdGVtcERvdWJsZSkKKy0gICAgICBERUZJTkVEX09OKGFybTY0LCB4 ODYsIHg2NCwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCB3YXNtMzIpOworKyAgICAgIERFRklO RURfT04oYXJtNjQsIHg4NiwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHdhc20zMiwg cHBjNjQpOworICAgdm9pZCBvb2xXYXNtVHJ1bmNhdGVDaGVja0YzMlRvSTY0KEZsb2F0UmVnaXN0 ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRydW5jRmxhZ3MgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsCitAQCAtNDIy MCw3ICs0MjI3LDggQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJs ZXJTcGVjaWZpYyB7CisgICAvLyBjb252ZW50aW9uLCB3aGljaCByZXF1aXJlcyBwcmVkaWN0YWJs ZSBoaWdoIGJpdHMuICBJbiBwcmFjdGljZSwgdGhpcyBtZWFucworICAgLy8gdGhhdCB0aGUgMzIt Yml0IHZhbHVlIHdpbGwgYmUgemVyby1leHRlbmRlZCBvciBzaWduLWV4dGVuZGVkIHRvIDY0IGJp dHMgYXMKKyAgIC8vIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhdGZvcm0uCistICB2b2lkIHdpZGVu SW50MzIoUmVnaXN0ZXIgcikgREVGSU5FRF9PTihhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQpOworKyAgdm9pZCB3aWRlbkludDMyKFJlZ2lzdGVyIHIpCisrICAgICAgREVGSU5F RF9PTihhcm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAg IC8vIEFzIGVudGVyRmFrZUV4aXRGcmFtZSgpLCBidXQgdXNpbmcgcmVnaXN0ZXIgY29udmVudGlv bnMgYXBwcm9wcmlhdGUgZm9yCisgICAvLyB3YXNtIHN0dWJzLgorQEAgLTQyODcsMTMgKzQyOTUs MTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZp YyB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVy IGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmVwbGFjZW1lbnQs IFJlZ2lzdGVyIHZhbHVlVGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9m ZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVG SU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlw czY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGNvbXBhcmVFeGNoYW5n ZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgZXhwZWN0ZWQsCisgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciByZXBsYWNlbWVudCwgUmVnaXN0ZXIgdmFsdWVU ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0 ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIHg4NjogYGV4cGVjdGVkYCBhbmQgYG91dHB1dGAgbXVz dCBiZSBlZHg6ZWF4OyBgcmVwbGFjZW1lbnRgIGlzIGVjeDplYnguCisgICAvLyB4NjQ6IGBvdXRw dXRgIG11c3QgYmUgcmF4LgorQEAgLTQzMDMsMTIgKzQzMTEsMTIgQEAgY2xhc3MgTWFjcm9Bc3Nl bWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICB2b2lkIGNvbXBhcmVF eGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0ZWQsIFJlZ2lzdGVyNjQgcmVw bGFjZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KQor LSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwg cmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGNvbXBhcmVFeGNoYW5nZTY0 KFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBleHBlY3RlZCwgUmVnaXN0ZXI2NCByZXBsYWNlbWVu dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpCistICAgICAg REVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0LCBsb29uZzY0LCByaXNjdjY0 KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIHg2NCwgeDg2LCBtaXBzNjQsIGxvb25n NjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIEV4Y2hhbmdlIHdpdGggbWVtb3J5LiAgUmV0 dXJuIHRoZSB2YWx1ZSBpbml0aWFsbHkgaW4gbWVtb3J5LgorICAgLy8gTUlQUzogYHZhbHVlVGVt cGAsIGBvZmZzZXRUZW1wYCBhbmQgYG1hc2tUZW1wYCBtdXN0IGJlIGRlZmluZWQgZm9yIDgtYml0 CitAQCAtNDMyNSwxMiArNDMzMywxMiBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBN YWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgIHZvaWQgYXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpU eXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLCBSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBw cGM2NCk7CisgCisgICB2b2lkIGF0b21pY0V4Y2hhbmdlKFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5j aHJvbml6YXRpb24gc3luYywKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4 JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3Rl ciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOwor KyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisg ICAvLyB4ODY6IGB2YWx1ZWAgbXVzdCBiZSBlY3g6ZWJ4OyBgb3V0cHV0YCBtdXN0IGJlIGVkeDpl YXguCisgICAvLyBBUk06IGB2YWx1ZWAgYW5kIGBvdXRwdXRgIG11c3QgYmUgZGlzdGluY3QgYW5k IChldmVuLG9kZCkgcGFpcnMuCitAQCAtNDMzOCwxMSArNDM0NiwxMSBAQCBjbGFzcyBNYWNyb0Fz c2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAKKyAgIHZvaWQgYXRv bWljRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgQWRkcmVzcyYgbWVtLAor ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0 cHV0KQorLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9v bmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4Niwg bWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0V4Y2hh bmdlNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0cHV0KQor LSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwgeDY0LCB4ODYsIG1pcHM2NCwgbG9vbmc2NCwg cmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIHg4NiwgbWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICAvLyBSZWFkLW1vZGlmeS13cml0ZSB3 aXRoIG1lbW9yeS4gIFJldHVybiB0aGUgdmFsdWUgaW4gbWVtb3J5IGJlZm9yZSB0aGUKKyAgIC8v IG9wZXJhdGlvbi4KK0BAIC00Mzc2LDEyICs0Mzg0LDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVy IDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCBhdG9taWNGZXRjaE9w KFNjYWxhcjo6VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCisg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwg UmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNl dFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0ZldGNoT3AoU2Nh bGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKyAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJl Z2lzdGVyIHZhbHVlVGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRU ZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURf T04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwg bG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8geDg2OgorICAgLy8gICBgdGVtcGAg bXVzdCBiZSBlY3g6ZWJ4OyBgb3V0cHV0YCBtdXN0IGJlIGVkeDplYXguCitAQCAtNDM5NSw3ICs0 NDAzLDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7CisgCisgICB2b2lkIGF0b21pY0ZldGNoT3A2NChTeW5jaHJvbml6YXRpb24gc3luYywg QXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpCist ICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2 NCk7CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCB4NjQsIG1pcHM2NCwgbG9vbmc2NCwg cmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCBhdG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0 aW9uIHN5bmMsIEF0b21pY09wIG9wLCBjb25zdCBBZGRyZXNzJiB2YWx1ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3Rl cjY0IG91dHB1dCkKK0BAIC00NDAzLDcgKzQ0MTEsNyBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxlciA6 IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAKKyAgIHZvaWQgYXRvbWljRmV0Y2hP cDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0 IHRlbXAsIFJlZ2lzdGVyNjQgb3V0cHV0KQorLSAgICAgIERFRklORURfT04oYXJtLCBhcm02NCwg eDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04oYXJtLCBh cm02NCwgeDY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQg YXRvbWljRmV0Y2hPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwgY29uc3Qg QWRkcmVzcyYgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgm IG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkKK0BAIC00NDIxLDE0ICs0 NDI5LDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3Bl Y2lmaWMgeworIAorICAgdm9pZCBhdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXphdGlvbiBzeW5j LCBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2NCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCkKKy0gICAgICBERUZJTkVEX09O KGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9P Tihhcm0sIGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZv aWQgYXRvbWljRWZmZWN0T3A2NChTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJl Z2lzdGVyNjQgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4 JiBtZW0pIERFRklORURfT04oeDY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRWZmZWN0T3A2NChTeW5j aHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCkK Ky0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7 CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQs IHBwYzY0KTsKKyAKKyAgIC8vIDY0LWJpdCBhdG9taWMgbG9hZC4gT24gNjQtYml0IHN5c3RlbXMs IHVzZSByZWd1bGFyIGxvYWQgd2l0aAorICAgLy8gU3luY2hyb25pemF0aW9uOjpMb2FkLCBub3Qg dGhpcyBtZXRob2QuCitAQCAtNDQ4MSwxNCArNDQ4OSwxNCBAQCBjbGFzcyBNYWNyb0Fzc2VtYmxl ciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciByZXBsYWNlbWVudCwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tU ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkKKy0gICAg ICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9P TihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgd2FzbUNvbXBh cmVFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIGV4cGVj dGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBS ZWdpc3RlciB2YWx1ZVRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg b2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCBy aXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBj NjQpOworIAorICAgdm9pZCB3YXNtQXRvbWljRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVtb3J5QWNj ZXNzRGVzYyYgYWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVz cyYgbWVtLCBSZWdpc3RlciB2YWx1ZSwgUmVnaXN0ZXIgb3V0cHV0KQorQEAgLTQ1MDIsMTMgKzQ1 MTAsMTMgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVj aWZpYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJl Z2lzdGVyIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVU ZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQs IHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgd2FzbUF0b21pY0V4Y2hhbmdlKGNvbnN0IHdh c206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQp CistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERF RklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIHdh c21BdG9taWNGZXRjaE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRv bWljT3Agb3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25z dCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyIHRlbXAsCitAQCAtNDUyOSwxMyArNDUzNywxNCBAQCBj bGFzcyBNYWNyb0Fzc2VtYmxlciA6IHB1YmxpYyBNYWNyb0Fzc2VtYmxlclNwZWNpZmljIHsKKyAg IHZvaWQgd2FzbUF0b21pY0ZldGNoT3AoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNj ZXNzLCBBdG9taWNPcCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFs dWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSBERUZJTkVEX09OKG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG91dHB1dCkKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBj NjQpOworIAorICAgdm9pZCB3YXNtQXRvbWljRmV0Y2hPcChjb25zdCB3YXNtOjpNZW1vcnlBY2Nl c3NEZXNjJiBhY2Nlc3MsIEF0b21pY09wIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciB2YWx1ZSwgY29uc3QgQmFzZUluZGV4JiBtZW0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkKKy0g ICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5F RF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIC8vIFJlYWQtbW9k aWZ5LXdyaXRlIHdpdGggbWVtb3J5LiAgUmV0dXJuIG5vIHZhbHVlLgorICAgLy8KK0BAIC00NTYy LDEzICs0NTcxLDEzIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1i bGVyU3BlY2lmaWMgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUs IGNvbnN0IEFkZHJlc3MmIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG1hc2tUZW1wKQorLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0 LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwg cHBjNjQpOworIAorICAgdm9pZCB3YXNtQXRvbWljRWZmZWN0T3AoY29uc3Qgd2FzbTo6TWVtb3J5 QWNjZXNzRGVzYyYgYWNjZXNzLCBBdG9taWNPcCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5kZXgmIG1lbSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKQorLSAgICAgIERFRklO RURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgLy8gNjQtYml0IHdpZGUgb3BlcmF0 aW9ucy4KKyAKK0BAIC00NjI2LDEyICs0NjM1LDEyIEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCB3YXNtQXRvbWljRmV0Y2hP cDY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Agb3AsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3QgQWRkcmVz cyYgbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgdGVtcCwgUmVn aXN0ZXI2NCBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBzNjQsIGxv b25nNjQsIHJpc2N2NjQsIHg2NCk7CisrICAgICAgREVGSU5FRF9PTihhcm0sIGFybTY0LCBtaXBz NjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0LCB4NjQpOworIAorICAgdm9pZCB3YXNtQXRvbWlj RmV0Y2hPcDY0KGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywgQXRvbWljT3Ag b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3Qg QmFzZUluZGV4JiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0 ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkKKy0gICAgICBERUZJTkVEX09OKGFybSwgYXJtNjQsIG1p cHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgeDY0KTsKKysgICAgICBERUZJTkVEX09OKGFybSwgYXJt NjQsIG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHg2NCk7CisgCisgICB2b2lkIHdh c21BdG9taWNGZXRjaE9wNjQoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBB dG9taWNPcCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiB2 YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAorQEAgLTQ2ODQsMTQgKzQ2OTMsMTQgQEAgY2xhc3Mg TWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZpYyB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRl bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lz dGVyIG1hc2tUZW1wLCBSZWdpc3RlciB0ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBB bnlSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJp c2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2 NCk7CisgCisgICB2b2lkIGNvbXBhcmVFeGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUs IFN5bmNocm9uaXphdGlvbiBzeW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBC YXNlSW5kZXgmIG1lbSwgUmVnaXN0ZXIgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHJlcGxhY2VtZW50LCBSZWdpc3RlciB2YWx1ZVRlbXAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLCBS ZWdpc3RlciB0ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRw dXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAg IERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lk IGF0b21pY0V4Y2hhbmdlSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9u IHN5bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdp c3RlciB2YWx1ZSwgUmVnaXN0ZXIgdGVtcCwKK0BAIC00NzA1LDEzICs0NzE0LDEzIEBAIGNsYXNz IE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsIFJl Z2lzdGVyIHZhbHVlVGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZz ZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpCistICAgICAgREVGSU5FRF9PTihtaXBzNjQs IGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCBy aXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0V4Y2hhbmdlSlMoU2NhbGFyOjpUeXBl IGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQmFzZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlLAorICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwgQW55 UmVnaXN0ZXIgb3V0cHV0KQorLSAgICAgIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNj djY0KTsKKysgICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQp OworIAorICAgdm9pZCBhdG9taWNGZXRjaE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3lu Y2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwg UmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJlc3MmIG1lbSwKK0BAIC00NzM3LDEzICs0NzQ2LDEz IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDogcHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMg eworICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLCBj b25zdCBBZGRyZXNzJiBtZW0sCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1 ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICBSZWdp c3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwgQW55UmVnaXN0ZXIgb3V0cHV0KQorLSAgICAg IERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICBERUZJTkVEX09O KG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCBhdG9taWNGZXRj aE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAg ICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJh c2VJbmRleCYgbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1w LCBSZWdpc3RlciBvZmZzZXRUZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg bWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsIEFueVJlZ2lzdGVyIG91dHB1dCkKKy0gICAgICBERUZJ TkVEX09OKG1pcHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCk7CisrICAgICAgREVGSU5FRF9PTihtaXBz NjQsIGxvb25nNjQsIHJpc2N2NjQsIHBwYzY0KTsKKyAKKyAgIHZvaWQgYXRvbWljRWZmZWN0T3BK UyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEFkZHJl c3MmIG1lbSwKK0BAIC00NzY0LDEyICs0NzczLDE0IEBAIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog cHVibGljIE1hY3JvQXNzZW1ibGVyU3BlY2lmaWMgeworICAgdm9pZCBhdG9taWNFZmZlY3RPcEpT KFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorICAgICAgICAg ICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwgY29uc3QgQWRkcmVz cyYgbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVn aXN0ZXIgb2Zmc2V0VGVtcCwKKy0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNr VGVtcCkgREVGSU5FRF9PTihtaXBzNjQsIGxvb25nNjQsIHJpc2N2NjQpOworKyAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wKQorKyAgICAgIERFRklORURfT04obWlwczY0 LCBsb29uZzY0LCByaXNjdjY0LCBwcGM2NCk7CisgCisgICB2b2lkIGF0b21pY0VmZmVjdE9wSlMo U2NhbGFyOjpUeXBlIGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5k ZXgmIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJl Z2lzdGVyIG9mZnNldFRlbXAsCistICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFz a1RlbXApIERFRklORURfT04obWlwczY0LCBsb29uZzY0LCByaXNjdjY0KTsKKysgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCkKKysgICAgICBERUZJTkVEX09OKG1pcHM2 NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQpOworIAorICAgdm9pZCBhdG9taWNJc0xvY2tGcmVl SlMoUmVnaXN0ZXIgdmFsdWUsIFJlZ2lzdGVyIG91dHB1dCk7CisgCitAQCAtNTkyOCw3ICs1OTM5 LDcgQEAgY2xhc3MgTWFjcm9Bc3NlbWJsZXIgOiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJTcGVjaWZp YyB7CisgICBpbmxpbmUgdm9pZCBhZGRTdGFja1B0clRvKFQgdCk7CisgCisgICB2b2lkIHN1YkZy b21TdGFja1B0cihJbW0zMiBpbW0zMikKKy0gICAgICBERUZJTkVEX09OKG1pcHM2NCwgbG9vbmc2 NCwgcmlzY3Y2NCwgd2FzbTMyLCBhcm0sIHg4NiwgeDY0KTsKKysgICAgICBERUZJTkVEX09OKG1p cHM2NCwgbG9vbmc2NCwgcmlzY3Y2NCwgcHBjNjQsIHdhc20zMiwgYXJtLCB4ODYsIHg2NCk7Cisg ICB2b2lkIHN1YkZyb21TdGFja1B0cihSZWdpc3RlciByZWcpOworIAorICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9Nb3ZlRW1pdHRlci5oIGIvanMvc3Jj L2ppdC9Nb3ZlRW1pdHRlci5oCitpbmRleCA2NDI4MjljMDcwZDYuLjNhODgzYzU5NmNhMCAxMDA2 NDQKKy0tLSBhL2pzL3NyYy9qaXQvTW92ZUVtaXR0ZXIuaAorKysrIGIvanMvc3JjL2ppdC9Nb3Zl RW1pdHRlci5oCitAQCAtMTcsNiArMTcsOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0L01v dmVFbWl0dGVyLWxvb25nNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK KyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9Nb3ZlRW1pdHRlci1yaXNjdjY0LmgiCisrI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9Nb3ZlRW1p dHRlci1wcGM2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgaW5j bHVkZSAiaml0L3dhc20zMi9Nb3ZlRW1pdHRlci13YXNtMzIuaCIKKyAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fTk9ORSkKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAg Yi9qcy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAKK2luZGV4IGQyZTFmMTI3MDBiZC4uOGU2MjI0 MDdhMGE4IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9Nb3ZlUmVzb2x2ZXIuY3BwCisrKysgYi9q cy9zcmMvaml0L01vdmVSZXNvbHZlci5jcHAKK0BAIC01Nyw2ICs1NywyMiBAQCBib29sIE1vdmVS ZXNvbHZlcjo6YWRkTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJh bmQmIHRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVPcDo6VHlwZSB0eXBlKSB7 CisgICAvLyBBc3NlcnQgdGhhdCB3ZSdyZSBub3QgZG9pbmcgbm8tb3AgbW92ZXMuCisgICBNT1pf QVNTRVJUKCEoZnJvbSA9PSB0bykpOworKyNpZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICAvLyBQ UEM2NCBGbG9hdFJlZ2lzdGVycyBleHBvc2UgU2luZ2xlL0RvdWJsZSBraW5kcyB0aGF0IGhhdmUg ZGlzdGluY3QgY29kZSgpCisrICAvLyB2YWx1ZXMgYnV0IHNoYXJlIG9uZSBwaHlzaWNhbCByZWdp c3Rlci4gVGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBjYW4gZW1pdCBhCisrICAvLyBtb3ZlIGJldHdl ZW4gdHdvIHN1Y2gga2luZC12aWV3cyBvZiB0aGUgc2FtZSBGUFIgKGUuZy4gZjItRG91YmxlIHRv CisrICAvLyBmMi1TaW5nbGUpOyB0aGVzZSBhcmUgbm8tb3BzIG9uIHRoZSBoYXJkd2FyZSwgYXJl IG5vdCBjYXVnaHQgYnkgdGhlCisrICAvLyAoZnJvbSA9PSB0bykgYXNzZXJ0IGFib3ZlLCBhbmQg d291bGQgb3RoZXJ3aXNlIHRyaXAgdGhlCisrICAvLyAhZnJvbSgpLmFsaWFzZXModG8oKSkgaW52 YXJpYW50IHRoZSByZXNvbHZlciByZWxpZXMgb24gbGF0ZXIuIERyb3AgdGhlbS4KKysgIC8vCisr ICAvLyBUaGlzIHdvdWxkIGJlIGNvcnJlY3QgZm9yIGFueSBiYWNrZW5kIHdob3NlIEZsb2F0UmVn aXN0ZXIgaGFzIG11bHRpcGxlCisrICAvLyBraW5kcyBhbGlhc2luZyBvbmUgcGh5c2ljYWwgcmVn aXN0ZXIsIGFuZCBjb3VsZCBiZSB1bi1nYXRlZCBpZiBhbm90aGVyCisrICAvLyBzdWNoIGJhY2tl bmQgbmVlZHMgaXQsIGJ1dCBpdCBpcyBzY29wZWQgdG8gUFBDNjQgc28gbW92ZSByZXNvbHV0aW9u IG9uCisrICAvLyB0aWVyLTEgcGxhdGZvcm1zIGlzIGxlZnQgdW5jaGFuZ2VkLgorKyAgaWYgKGZy b20uYWxpYXNlcyh0bykpIHsKKysgICAgcmV0dXJuIHRydWU7CisrICB9CisrI2VuZGlmCisgICBQ ZW5kaW5nTW92ZSogcG0gPSBtb3ZlUG9vbF8uYWxsb2NhdGUoZnJvbSwgdG8sIHR5cGUpOworICAg aWYgKCFwbSkgeworICAgICByZXR1cm4gZmFsc2U7CitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9S ZWdpc3RlckFsbG9jYXRvci5oIGIvanMvc3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCitpbmRl eCBlZGE5OTMzZjYzMjIuLjQyZTQ4MTExMDQ2YSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvUmVn aXN0ZXJBbGxvY2F0b3IuaAorKysrIGIvanMvc3JjL2ppdC9SZWdpc3RlckFsbG9jYXRvci5oCitA QCAtMjYyLDkgKzI2MiwxMCBAQCBjbGFzcyBSZWdpc3RlckFsbG9jYXRvciB7CisgIHB1YmxpYzoK KyAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUYWtlYWJsZVNldD4KKyAgIHN0YXRpYyB2b2lkIHRha2VX YXNtUmVnaXN0ZXJzKFRha2VhYmxlU2V0JiByZWdzKSB7CistI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgICAgXAorLSAgICBkZWZpbmVk KEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKKy0g ICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f QVJNKSB8fCAgICAgICAgIFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCAgICBcCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAorKyAgICBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCisgICAgIHJlZ3MudGFrZShIZWFwUmVnKTsKKyAjZW5kaWYKKyAg ICAgTU9aX0FTU0VSVCghcmVncy5oYXMoRnJhbWVQb2ludGVyKSk7CitkaWZmIC0tZ2l0IGEvanMv c3JjL2ppdC9SZWdpc3RlcnMuaCBiL2pzL3NyYy9qaXQvUmVnaXN0ZXJzLmgKK2luZGV4IGUwZDAy ZTJmYjYwZC4uNDIzNzc3Y2UzOGNkIDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9SZWdpc3RlcnMu aAorKysrIGIvanMvc3JjL2ppdC9SZWdpc3RlcnMuaAorQEAgLTIwLDYgKzIwLDggQEAKKyAjICBp bmNsdWRlICJqaXQvbG9vbmc2NC9BcmNoaXRlY3R1cmUtbG9vbmc2NC5oIgorICNlbGlmIGRlZmlu ZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMgIGluY2x1ZGUgImppdC9yaXNjdjY0L0FyY2hpdGVj dHVyZS1yaXNjdjY0LmgiCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyMgIGlu Y2x1ZGUgImppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fV0FTTTMyKQorICMgIGluY2x1ZGUgImppdC93YXNtMzIvQXJjaGl0ZWN0dXJlLXdh c20zMi5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAtLWdpdCBhL2pz L3NyYy9qaXQvU2FmZXBvaW50cy5jcHAgYi9qcy9zcmMvaml0L1NhZmVwb2ludHMuY3BwCitpbmRl eCA0MmUzMDVmMDUzYWYuLjhlM2EyNWMzYzVmZiAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvU2Fm ZXBvaW50cy5jcHAKKysrKyBiL2pzL3NyYy9qaXQvU2FmZXBvaW50cy5jcHAKK0BAIC02Myw2ICs2 MywxMSBAQCBzdGF0aWMgdm9pZCBXcml0ZUZsb2F0UmVnaXN0ZXJNYXNrKENvbXBhY3RCdWZmZXJX cml0ZXImIHN0cmVhbSwKKyAgICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZDY0KGJpdHMubG93KCkp OworICAgICAgIHN0cmVhbS53cml0ZVVuc2lnbmVkNjQoYml0cy5oaWdoKCkpOworICAgICAgIGJy ZWFrOworKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgY2FzZSAxNjoKKysg ICAgICBzdHJlYW0ud3JpdGVVbnNpZ25lZDY0KHN0YXRpY19jYXN0PHVpbnQ2NF90PihiaXRzKSk7 CisrICAgICAgc3RyZWFtLndyaXRlVW5zaWduZWQ2NChzdGF0aWNfY2FzdDx1aW50NjRfdD4oYml0 cyA+PiA2NCkpOworKyAgICAgIGJyZWFrOworICNlbHNlCisgICAgIGNhc2UgMToKKyAgICAgICBz dHJlYW0ud3JpdGVCeXRlKGJpdHMpOworQEAgLTg4LDYgKzkzLDEyIEBAIHN0YXRpYyBGbG9hdFJl Z2lzdGVyczo6U2V0VHlwZSBSZWFkRmxvYXRSZWdpc3Rlck1hc2soCisgICAgICAgdWludDY0X3Qg aGlnaCA9IHN0cmVhbS5yZWFkVW5zaWduZWQ2NCgpOworICAgICAgIHJldHVybiBCaXRzZXQxMjgo aGlnaCwgbG93KTsKKyAgICAgfQorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysg ICAgY2FzZSAxNjogeworKyAgICAgIHVpbnQ2NF90IGxvdyA9IHN0cmVhbS5yZWFkVW5zaWduZWQ2 NCgpOworKyAgICAgIHVpbnQ2NF90IGhpZ2ggPSBzdHJlYW0ucmVhZFVuc2lnbmVkNjQoKTsKKysg ICAgICByZXR1cm4gRmxvYXRSZWdpc3RlcnM6OlNldFR5cGUoaGlnaCkgPDwgNjQgfCBGbG9hdFJl Z2lzdGVyczo6U2V0VHlwZShsb3cpOworKyAgICB9CisgI2Vsc2UKKyAgICAgY2FzZSAxOgorICAg ICAgIHJldHVybiBzdHJlYW0ucmVhZEJ5dGUoKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L1No YXJlZElDSGVscGVycy1pbmwuaCBiL2pzL3NyYy9qaXQvU2hhcmVkSUNIZWxwZXJzLWlubC5oCitp bmRleCBlZWRjY2M4MzE3MzIuLjEwMDViMTQwZjFkZiAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQv U2hhcmVkSUNIZWxwZXJzLWlubC5oCisrKysgYi9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy1p bmwuaAorQEAgLTE5LDYgKzE5LDggQEAKKyAjICBpbmNsdWRlICJqaXQvbG9vbmc2NC9TaGFyZWRJ Q0hlbHBlcnMtbG9vbmc2NC1pbmwuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2 NCkKKyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9TaGFyZWRJQ0hlbHBlcnMtcmlzY3Y2NC1pbmwu aCIKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3Bw YzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVH RU5fV0FTTTMyKQorICMgIGluY2x1ZGUgImppdC93YXNtMzIvU2hhcmVkSUNIZWxwZXJzLXdhc20z Mi1pbmwuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkKK2RpZmYgLS1naXQgYS9q cy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5oIGIvanMvc3JjL2ppdC9TaGFyZWRJQ0hlbHBlcnMu aAoraW5kZXggMWViZDYxZTQ0NTA5Li5mMjcwM2M2Zjk4NmMgMTAwNjQ0CistLS0gYS9qcy9zcmMv aml0L1NoYXJlZElDSGVscGVycy5oCisrKysgYi9qcy9zcmMvaml0L1NoYXJlZElDSGVscGVycy5o CitAQCAtMTksNiArMTksOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0L1NoYXJlZElDSGVs cGVycy1sb29uZzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgIyAg aW5jbHVkZSAiaml0L3Jpc2N2NjQvU2hhcmVkSUNIZWxwZXJzLXJpc2N2NjQuaCIKKysjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrIyAgaW5jbHVkZSAiaml0L3BwYzY0L1NoYXJlZElD SGVscGVycy1wcGM2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgIyAg aW5jbHVkZSAiaml0L3dhc20zMi9TaGFyZWRJQ0hlbHBlcnMtd2FzbTMyLmgiCisgI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX05PTkUpCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9TaGFyZWRJQ1Jl Z2lzdGVycy5oIGIvanMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lzdGVycy5oCitpbmRleCBjM2FiODZi ZjBhODIuLjViMjcwZDBjMTY2YSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qaXQvU2hhcmVkSUNSZWdp c3RlcnMuaAorKysrIGIvanMvc3JjL2ppdC9TaGFyZWRJQ1JlZ2lzdGVycy5oCitAQCAtMTksNiAr MTksOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0L1NoYXJlZElDUmVnaXN0ZXJzLWxvb25n NjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAjICBpbmNsdWRlICJq aXQvcmlzY3Y2NC9TaGFyZWRJQ1JlZ2lzdGVycy1yaXNjdjY0LmgiCisrI2VsaWYgZGVmaW5lZChK U19DT0RFR0VOX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVy cy1wcGM2NC5oIgorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9XQVNNMzIpCisgIyAgaW5jbHVk ZSAiaml0L3dhc20zMi9TaGFyZWRJQ1JlZ2lzdGVycy13YXNtMzIuaCIKKyAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fTk9ORSkKK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L1NpbXVsYXRvci5oIGIv anMvc3JjL2ppdC9TaW11bGF0b3IuaAoraW5kZXggMzk1MDM3MTZmMTBkLi45ZjYwYmFmNTMxOTgg MTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L1NpbXVsYXRvci5oCisrKysgYi9qcy9zcmMvaml0L1Np bXVsYXRvci5oCitAQCAtMTUsNiArMTUsOCBAQAorICMgIGluY2x1ZGUgImppdC9sb29uZzY0L1Np bXVsYXRvci1sb29uZzY0LmgiCisgI2VsaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfUklTQ1Y2NCkK KyAjICBpbmNsdWRlICJqaXQvcmlzY3Y2NC9TaW11bGF0b3ItcmlzY3Y2NC5oIgorKyNlbGlmIGRl ZmluZWQoSlNfU0lNVUxBVE9SX1BQQzY0KQorKyMgIGluY2x1ZGUgImppdC9wcGM2NC9TaW11bGF0 b3ItcHBjNjQuaCIKKyAjZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUikKKyAjICBlcnJvciAiVW5l eHBlY3RlZCBzaW11bGF0b3IgcGxhdGZvcm0iCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9tb3ouYnVpbGQgYi9qcy9zcmMvaml0L21vei5idWlsZAoraW5kZXggNWI1ZGYzZTViN2Iy Li4zNmVmNjVkNjIyMWEgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L21vei5idWlsZAorKysrIGIv anMvc3JjL2ppdC9tb3ouYnVpbGQKK0BAIC0yMjgsNiArMjI4LDE4IEBAIGVsaWYgQ09ORklHWyJK U19DT0RFR0VOX0xPT05HNjQiXToKKyAgICAgXQorICAgICBpZiBDT05GSUdbIkpTX1NJTVVMQVRP Ul9MT09ORzY0Il06CisgICAgICAgICBVTklGSUVEX1NPVVJDRVMgKz0gWyJsb29uZzY0L1NpbXVs YXRvci1sb29uZzY0LmNwcCJdCisrZWxpZiBDT05GSUdbIkpTX0NPREVHRU5fUFBDNjQiXToKKysg ICAgVU5JRklFRF9TT1VSQ0VTICs9IFsKKysgICAgICAgICJwcGM2NC9BcmNoaXRlY3R1cmUtcHBj NjQuY3BwIiwKKysgICAgICAgICJwcGM2NC9Bc3NlbWJsZXItcHBjNjQuY3BwIiwKKysgICAgICAg ICJwcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmNwcCIsCisrICAgICAgICAicHBjNjQvTG93ZXJp bmctcHBjNjQuY3BwIiwKKysgICAgICAgICJwcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAi LAorKyAgICAgICAgInBwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmNwcCIsCisrICAgICAgICAicHBj NjQvVHJhbXBvbGluZS1wcGM2NC5jcHAiLAorKyAgICBdCisrICAgIGlmIENPTkZJR1siSlNfU0lN VUxBVE9SX1BQQzY0Il06CisrICAgICAgICBVTklGSUVEX1NPVVJDRVMgKz0gWyJwcGM2NC9TaW11 bGF0b3ItcHBjNjQuY3BwIl0KKyBlbGlmIENPTkZJR1siSlNfQ09ERUdFTl9SSVNDVjY0Il06Cisg ICAgIFVOSUZJRURfU09VUkNFUyArPSBbCisgICAgICAgICAicmlzY3Y2NC9BcmNoaXRlY3R1cmUt cmlzY3Y2NC5jcHAiLAorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJl LXBwYzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmNwcAorbmV3 IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uNTYzMjg2NTU1NmFjCistLS0g L2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5jcHAK K0BAIC0wLDAgKzEsMjIxIEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRl bnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRz PTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4g Mi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwor KyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIu MC8uICovCisrCisrI2luY2x1ZGUgImppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQuaCIKKysK KysjaWZuZGVmIEpTX1NJTVVMQVRPUgorKyMgIGluY2x1ZGUgPHN5cy9hdXh2Lmg+CisrI2VuZGlm CisrCisrI2luY2x1ZGUgImppdC9GbHVzaElDYWNoZS5oIiAgLy8ganM6OmppdDo6Rmx1c2hJQ2Fj aGUKKysjaW5jbHVkZSAiaml0L1JlZ2lzdGVyU2V0cy5oIgorKworK25hbWVzcGFjZSBqcyB7Cisr bmFtZXNwYWNlIGppdCB7CisrCisrUmVnaXN0ZXJzOjpDb2RlIFJlZ2lzdGVyczo6RnJvbU5hbWUo Y29uc3QgY2hhciogbmFtZSkgeworKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBUb3RhbDsgaSsr KSB7CisrICAgIGlmIChzdHJjbXAoR2V0TmFtZShpKSwgbmFtZSkgPT0gMCkgeworKyAgICAgIHJl dHVybiBDb2RlKGkpOworKyAgICB9CisrICB9CisrCisrICByZXR1cm4gSW52YWxpZDsKKyt9Cisr CisrRmxvYXRSZWdpc3RlcnM6OkNvZGUgRmxvYXRSZWdpc3RlcnM6OkZyb21OYW1lKGNvbnN0IGNo YXIqIG5hbWUpIHsKKysgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgVG90YWw7IGkrKykgeworKyAg ICBpZiAoc3RyY21wKEdldE5hbWUoaSksIG5hbWUpID09IDApIHsKKysgICAgICByZXR1cm4gQ29k ZShpKTsKKysgICAgfQorKyAgfQorKworKyAgcmV0dXJuIEludmFsaWQ7CisrfQorKworK0Zsb2F0 UmVnaXN0ZXJTZXQgRmxvYXRSZWdpc3Rlcjo6UmVkdWNlU2V0Rm9yUHVzaChjb25zdCBGbG9hdFJl Z2lzdGVyU2V0JiBzKSB7CisrICBTZXRUeXBlIGFsbCA9IHMuYml0cygpOworKyAgU2V0VHlwZSBz aW1kMTI4U2V0ID0KKysgICAgICAoYWxsID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6U2lt ZDEyOCkgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgJgorKyAgICAgIEZsb2F0UmVnaXN0 ZXJzOjpBbGxQaHlzTWFzazsKKysgIFNldFR5cGUgZG91YmxlU2V0ID0KKysgICAgICAoYWxsID4+ ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6RG91YmxlKSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3Rh bFBoeXMpKSAmCisrICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrOworKyAgU2V0VHlw ZSBzaW5nbGVTZXQgPQorKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpT aW5nbGUpICogRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpICYKKysgICAgICBGbG9hdFJlZ2lz dGVyczo6QWxsUGh5c01hc2s7CisrCisrICAvLyBTaW5nbGUrRG91YmxlIHNoYXJlIHBoeXNpY2Fs IEZQUnMgKHB1c2ggYXMgRG91YmxlLCA4LWJ5dGUgc2xvdCk7CisrICAvLyBTaW1kMTI4IGxpdmVz IGluIGl0cyBvd24gcGh5c2ljYWwgVlJzIChwdXNoIGFzIFNpbWQxMjgsIDE2LWJ5dGUKKysgIC8v IHNsb3QpLiBEaWZmZXJlbnQgcGh5c2ljYWwgcG9vbHMg4oCUIG5vIGRlZHVwLiBOb3RlIHRoYXQK KysgIC8vIHNpemVvZihGbG9hdFJlZ2lzdGVyczo6UmVnaXN0ZXJDb250ZW50KSBpcyA4IGJ5dGVz IChubyB2MTI4IGluIHRoZQorKyAgLy8gdW5pb24pLCBzbyBSZWdpc3RlckR1bXA6OkZQVUFycmF5 IGlzIDMyIMOXIDggPSAyNTYgYnl0ZXMsIG1hdGNoaW5nCisrICAvLyB0aGUgRmxvYXQtb25seSBs YXlvdXQgUHVzaFJlZ3NJbk1hc2sgcHJvZHVjZXMuCisrICBTZXRUeXBlIHNldDY0ID0gc2luZ2xl U2V0IHwgZG91YmxlU2V0OworKworKyAgU2V0VHlwZSByZWR1Y2VkID0KKysgICAgICAoc2ltZDEy OFNldCA8PCAodWludDMyX3QoRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpICoKKysgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpIHwKKysgICAgICAoc2V0NjQg PDwgKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpICogRmxvYXRSZWdpc3RlcnM6OlRv dGFsUGh5cykpOworKyAgcmV0dXJuIEZsb2F0UmVnaXN0ZXJTZXQocmVkdWNlZCk7CisrfQorKwor K3VpbnQzMl90IEZsb2F0UmVnaXN0ZXI6OkdldFB1c2hTaXplSW5CeXRlcyhjb25zdCBGbG9hdFJl Z2lzdGVyU2V0JiBzKSB7CisrICBTZXRUeXBlIGFsbCA9IHMuYml0cygpOworKyAgU2V0VHlwZSBz aW1kMTI4U2V0ID0KKysgICAgICAoYWxsID4+ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6U2lt ZDEyOCkgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgJgorKyAgICAgIEZsb2F0UmVnaXN0 ZXJzOjpBbGxQaHlzTWFzazsKKysgIFNldFR5cGUgZG91YmxlU2V0ID0KKysgICAgICAoYWxsID4+ ICh1aW50MzJfdChGbG9hdFJlZ2lzdGVyczo6RG91YmxlKSAqIEZsb2F0UmVnaXN0ZXJzOjpUb3Rh bFBoeXMpKSAmCisrICAgICAgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrOworKyAgU2V0VHlw ZSBzaW5nbGVTZXQgPQorKyAgICAgIChhbGwgPj4gKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpT aW5nbGUpICogRmxvYXRSZWdpc3RlcnM6OlRvdGFsUGh5cykpICYKKysgICAgICBGbG9hdFJlZ2lz dGVyczo6QWxsUGh5c01hc2s7CisrCisrICAvLyBOYXR1cmFsIHBlci1raW5kIHNsb3Qgc2l6ZXMu IFNlZSBSZWR1Y2VTZXRGb3JQdXNoIGNvbW1lbnQuCisrICBTZXRUeXBlIHNldDY0ID0gc2luZ2xl U2V0IHwgZG91YmxlU2V0OworKworKyAgdWludDMyX3QgY291bnQ2NCA9IHN0ZDo6cG9wY291bnQo c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNldDY0KSk7CisrICB1aW50MzJfdCBjb3VudDEyOCA9IHN0 ZDo6cG9wY291bnQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHNpbWQxMjhTZXQpKTsKKysKKysgIHJl dHVybiBjb3VudDY0ICogc2l6ZW9mKGRvdWJsZSkgKyBjb3VudDEyOCAqIDE2OworK30KKysKKyt1 aW50MzJfdCBGbG9hdFJlZ2lzdGVyOjpnZXRSZWdpc3RlckR1bXBPZmZzZXRJbkJ5dGVzKCkgewor KyAgLy8gU2ltZDEyOCBlbmNvZGluZyBpcyAzMi02MyDigJQgbWFzayBiYWNrIHRvIDAtMzEgZm9y IHRoZSBGUFVBcnJheS0KKysgIC8vIHJlbGF0aXZlIG9mZnNldC4gKEZQVUFycmF5IGhhcyAzMiBz bG90czsgU2ltZDEyOCBzaG91bGQgbmV2ZXIgYmUgaW4KKysgIC8vIGEgU2FmZXBvaW50U3RhdGUv QmFpbG91dFN0YXRlIGFueXdheS4pCisrICByZXR1cm4gKGVuY29kaW5nKCkgJiAzMSkgKiBzaXpl b2YoRmxvYXRSZWdpc3RlcnM6OlJlZ2lzdGVyQ29udGVudCk7CisrfQorKworK3N0YXRpYyBib29s IHNQT1dFUjlEZXRlY3RlZCA9IGZhbHNlOworK3N0YXRpYyBib29sIHNQT1dFUjEwRGV0ZWN0ZWQg PSBmYWxzZTsKKytzdGF0aWMgYm9vbCBzQ1BVRmxhZ3NDb21wdXRlZCA9IGZhbHNlOworKworKyNp Zm5kZWYgSlNfU0lNVUxBVE9SCisrLy8gQ2FjaGUgbGluZSBzaXplcywgZGV0ZWN0ZWQgYXQgc3Rh cnR1cCBmcm9tIEVMRiBhdXhpbGlhcnkgdmVjdG9yLgorKy8vIEZhbGxiYWNrIHRvIDMyIGJ5dGVz IChzYWZlIG1pbmltdW0gcGVyIEx1YUpJVC9MTFZNIGNvbXBpbGVyLXJ0KS4KKytzdGF0aWMgc2l6 ZV90IHNEQ2FjaGVMaW5lU2l6ZSA9IDA7Cisrc3RhdGljIHNpemVfdCBzSUNhY2hlTGluZVNpemUg PSAwOworKyNlbmRpZgorKworK3ZvaWQgUFBDNjRGbGFnczo6SW5pdCgpIHsKKysgIGlmIChzQ1BV RmxhZ3NDb21wdXRlZCkgeworKyAgICByZXR1cm47CisrICB9CisrI2lmbmRlZiBKU19TSU1VTEFU T1IKKysgIHVuc2lnbmVkIGxvbmcgaHdjYXAyID0gZ2V0YXV4dmFsKEFUX0hXQ0FQMik7CisrICAv LyBQUENfRkVBVFVSRTJfQVJDSF8zXzAwID0gMHgwMDgwMDAwMCAoSVNBIDMuMCAvIFBPV0VSOSkK KysgIHNQT1dFUjlEZXRlY3RlZCA9IChod2NhcDIgJiAweDAwODAwMDAwKSAhPSAwOworKyAgLy8g UFBDX0ZFQVRVUkUyX0FSQ0hfM18xID0gMHgwMDA0MDAwMCAoSVNBIDMuMSAvIFBPV0VSMTApCisr ICBzUE9XRVIxMERldGVjdGVkID0gKGh3Y2FwMiAmIDB4MDAwNDAwMDApICE9IDA7CisrICAvLyBB bGxvdyBmb3JjaW5nIFBPV0VSOCBtb2RlIGZvciB0ZXN0aW5nOiBNT1pfUFBDNjRfRk9SQ0VfUE9X RVI4PTEuCisrICAvLyBQMTAgaW1wbGllcyBQOTsgZG93bmdyYWRlIGNsZWFycyBib3RoLgorKyAg Y29uc3QgY2hhciogZm9yY2VQOCA9IGdldGVudigiTU9aX1BQQzY0X0ZPUkNFX1BPV0VSOCIpOwor KyAgaWYgKGZvcmNlUDggJiYgZm9yY2VQOFswXSA9PSAnMScpIHsKKysgICAgc1BPV0VSOURldGVj dGVkID0gZmFsc2U7CisrICAgIHNQT1dFUjEwRGV0ZWN0ZWQgPSBmYWxzZTsKKysgIH0KKysKKysg IHNpemVfdCBkY2FjaGUgPSBnZXRhdXh2YWwoQVRfRENBQ0hFQlNJWkUpOworKyAgc2l6ZV90IGlj YWNoZSA9IGdldGF1eHZhbChBVF9JQ0FDSEVCU0laRSk7CisrICBzRENhY2hlTGluZVNpemUgPSBk Y2FjaGUgPyBkY2FjaGUgOiAzMjsKKysgIHNJQ2FjaGVMaW5lU2l6ZSA9IGljYWNoZSA/IGljYWNo ZSA6IDMyOworKyNlbmRpZgorKyAgLy8gRk9SQ0VfUE9XRVI5LzEwIG9wdCBpbnRvIHRoZSBjb3Jy ZXNwb25kaW5nIElTQSBmYXN0IHBhdGhzLiBVc2VmdWwgdW5kZXIKKysgIC8vIHRoZSBzaW11bGF0 b3I7IG9uIHJlYWwgc2lsaWNvbiBiZWxvdyB0aGUgZ2F0ZWQgbGV2ZWwgdGhleSBhcmUgZm9vdC1n dW5zCisrICAvLyBiZWNhdXNlIHRoZSBDUFUgd2lsbCB0cmFwIG9uIHVuZGVmaW5lZCBvcHMuIE91 dHNpZGUgdGhlIEpTX1NJTVVMQVRPUgorKyAgLy8gZ3VhcmQgc28gdGhlIHNpbSBjYW4gb3B0IGlu IHZpYSBlbnYuCisrICAvLworKyAgLy8gRk9SQ0VfUE9XRVIxMCBhbHNvIGltcGxpZXMgRk9SQ0Vf UE9XRVI5IOKAlCB0aGlzIG1hdGNoZXMgd2hhdCByZWFsLVAxMAorKyAgLy8gc2lsaWNvbiBhZHZl cnRpc2VzIGluIGh3Y2FwMiAoYm90aCBBUkNIXzNfMDAgYW5kIEFSQ0hfM18xIGJpdHMgc2V0KSwg c28KKysgIC8vIHdlIGRvbid0IGFzayBzaW0gdXNlcnMgdG8gcGFzcyBib3RoIHZhcnMgc2VwYXJh dGVseS4KKysgIGNvbnN0IGNoYXIqIGZvcmNlUDkgPSBnZXRlbnYoIk1PWl9QUEM2NF9GT1JDRV9Q T1dFUjkiKTsKKysgIGlmIChmb3JjZVA5ICYmIGZvcmNlUDlbMF0gPT0gJzEnKSB7CisrICAgIHNQ T1dFUjlEZXRlY3RlZCA9IHRydWU7CisrICB9CisrICBjb25zdCBjaGFyKiBmb3JjZVAxMCA9IGdl dGVudigiTU9aX1BQQzY0X0ZPUkNFX1BPV0VSMTAiKTsKKysgIGlmIChmb3JjZVAxMCAmJiBmb3Jj ZVAxMFswXSA9PSAnMScpIHsKKysgICAgc1BPV0VSMTBEZXRlY3RlZCA9IHRydWU7CisrICAgIHNQ T1dFUjlEZXRlY3RlZCA9IHRydWU7CisrICB9CisrICBzQ1BVRmxhZ3NDb21wdXRlZCA9IHRydWU7 CisrfQorKworK2Jvb2wgSGFzUE9XRVI5KCkgeworKyAgTU9aX0FTU0VSVChzQ1BVRmxhZ3NDb21w dXRlZCk7CisrICByZXR1cm4gc1BPV0VSOURldGVjdGVkOworK30KKysKKytib29sIEhhc1BPV0VS MTAoKSB7CisrICBNT1pfQVNTRVJUKHNDUFVGbGFnc0NvbXB1dGVkKTsKKysgIHJldHVybiBzUE9X RVIxMERldGVjdGVkOworK30KKysKKytib29sIENQVUZsYWdzSGF2ZUJlZW5Db21wdXRlZCgpIHsg cmV0dXJuIHNDUFVGbGFnc0NvbXB1dGVkOyB9CisrCisrLy8gUGVyLWJpdCBmZWF0dXJlIGZsYWdz IHBhY2tlZCBpbnRvIHRoZSB3YXNtIGNvZGUgc2lnbmF0dXJlLiBBZGRpbmcgYQorKy8vIG5ldyBi aXQgKGUuZy4sIFBPV0VSMTAsIFZTWDQpIHNob3VsZCBiZSBhIDEtbGluZSBjaGFuZ2UgaGVyZSBw bHVzIGEKKysvLyBjb3JyZXNwb25kaW5nIEhhc1BPV0VSMTAoKS9Jc1ZTWDRBdmFpbGFibGUoKSBw cm9iZSBhYm92ZS4gVGhlIHZhbHVlCisrLy8gaXMgYWxzbyBhc3NlcnQtY2hlY2tlZCBpbnRvIGEg Zml4ZWQtd2lkdGggZmllbGQgaW4KKysvLyBqcy9zcmMvd2FzbS9XYXNtQ29tcGlsZS5jcHAg4oCU IGlmIHRoYXQgZmllbGQgZXZlciBvdmVyZmxvd3MsIHdpZGVuCisrLy8gaXQgdGhlcmUgYmVmb3Jl IGxhbmRpbmcgbW9yZSBiaXRzIGhlcmUuCisrdWludDMyX3QgR2V0UFBDNjRGbGFncygpIHsKKysg IHVpbnQzMl90IGZsYWdzID0gMDsKKysgIGlmIChzUE9XRVI5RGV0ZWN0ZWQpIHsKKysgICAgZmxh Z3MgfD0gUFBDNjRGbGFnX1BPV0VSOTsKKysgIH0KKysgIHJldHVybiBmbGFnczsKKyt9CisrCisr dm9pZCBGbHVzaElDYWNoZSh2b2lkKiBjb2RlLCBzaXplX3Qgc2l6ZSkgeworKyNpZiBkZWZpbmVk KEpTX1NJTVVMQVRPUikKKysgIGpzOjpqaXQ6OlNpbXVsYXRvclByb2Nlc3M6OkZsdXNoSUNhY2hl KGNvZGUsIHNpemUpOworKyNlbHNlCisrICAvLyBQUEM2NCBoYXMgaW5jb2hlcmVudCBJL0QgY2Fj aGVzLiBHQ0MncyBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSBpcyBhCisrICAvLyBuby1vcCBvbiBQ UEM2NCBMaW51eCwgc28gd2UgaW1wbGVtZW50IHRoZSBmbHVzaCBleHBsaWNpdGx5LgorKyAgLy8g VGhpcyBmb2xsb3dzIHRoZSBzYW1lIGFwcHJvYWNoIGFzIFFFTVUgKHV0aWwvY2FjaGVmbHVzaC5j KSBhbmQgdGhlCisrICAvLyBMaW51eCBrZXJuZWwgKGFyY2gvcG93ZXJwYy9tbS9jYWNoZWZsdXNo LmMpOgorKyAgLy8gICBkY2JzdCBsb29wIC0+IHN5bmMgLT4gaWNiaSBsb29wIC0+IHN5bmMgLT4g aXN5bmMKKysgIGlmICghc2l6ZSkgeworKyAgICByZXR1cm47CisrICB9CisrICBNT1pfQVNTRVJU KHNDUFVGbGFnc0NvbXB1dGVkLAorKyAgICAgICAgICAgICAiUFBDNjRGbGFnczo6SW5pdCBtdXN0 IHJ1biBiZWZvcmUgYW55IEZsdXNoSUNhY2hlIGNhbGwiKTsKKysKKysgIHVpbnRwdHJfdCBzdGFy dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlKTsKKysgIHVpbnRwdHJfdCBlbmQg PSBzdGFydCArIHNpemU7CisrCisrICAvLyBTdGVwIDE6IFdyaXRlIGJhY2sgZGF0YSBjYWNoZSB0 byBtZW1vcnkuCisrICBmb3IgKHVpbnRwdHJfdCBhZGRyID0gc3RhcnQgJiB+KHNEQ2FjaGVMaW5l U2l6ZSAtIDEpOyBhZGRyIDwgZW5kOworKyAgICAgICBhZGRyICs9IHNEQ2FjaGVMaW5lU2l6ZSkg eworKyAgICBhc20gdm9sYXRpbGUoImRjYnN0IDAsICUwIiA6IDogInIiKGFkZHIpIDogIm1lbW9y eSIpOworKyAgfQorKyAgYXNtIHZvbGF0aWxlKCJzeW5jIiA6OjogIm1lbW9yeSIpOworKworKyAg Ly8gU3RlcCAyOiBJbnZhbGlkYXRlIGluc3RydWN0aW9uIGNhY2hlLgorKyAgZm9yICh1aW50cHRy X3QgYWRkciA9IHN0YXJ0ICYgfihzSUNhY2hlTGluZVNpemUgLSAxKTsgYWRkciA8IGVuZDsKKysg ICAgICAgYWRkciArPSBzSUNhY2hlTGluZVNpemUpIHsKKysgICAgYXNtIHZvbGF0aWxlKCJpY2Jp IDAsICUwIiA6IDogInIiKGFkZHIpIDogIm1lbW9yeSIpOworKyAgfQorKyAgLy8gVGhlIGV4dHJh IHN5bmMgYmVmb3JlIGlzeW5jIG1hdGNoZXMgdGhlIExpbnV4IGtlcm5lbCBhbmQgUUVNVS4KKysg IC8vIEl0IGVuc3VyZXMgYWxsIGljYmkgb3BlcmF0aW9ucyBjb21wbGV0ZSBiZWZvcmUgdGhlIHBp cGVsaW5lIGZsdXNoLgorKyAgYXNtIHZvbGF0aWxlKCJzeW5jIiA6OjogIm1lbW9yeSIpOworKyAg YXNtIHZvbGF0aWxlKCJpc3luYyIgOjo6ICJtZW1vcnkiKTsKKysjZW5kaWYKKyt9CisrCisrdm9p ZCBGbHVzaEV4ZWN1dGlvbkNvbnRleHQoKSB7CisrI2lmICFkZWZpbmVkKEpTX1NJTVVMQVRPUikK KysgIC8vIFBQQzY0J3MgaXN5bmMgZmx1c2hlcyB0aGUgaW5zdHJ1Y3Rpb24gcGlwZWxpbmUgb24g dGhlIGN1cnJlbnQgY29yZSwKKysgIC8vIGVuc3VyaW5nIGFueSBwcmV2aW91c2x5IGludmFsaWRh dGVkIGljYWNoZSBlbnRyaWVzIGFyZSBkaXNjYXJkZWQgYW5kCisrICAvLyBpbnN0cnVjdGlvbnMg YXJlIHJlLWZldGNoZWQgZnJvbSBjb2hlcmVudCBtZW1vcnkuCisrICBhc20gdm9sYXRpbGUoImlz eW5jIiA6OjogIm1lbW9yeSIpOworKyNlbmRpZgorK30KKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0 CisrfSAgLy8gbmFtZXNwYWNlIGpzCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9BcmNo aXRlY3R1cmUtcHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvQXJjaGl0ZWN0dXJlLXBwYzY0LmgK K25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmVmYWFiMGIwYzg1NAor LS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9BcmNoaXRlY3R1cmUtcHBjNjQu aAorQEAgLTAsMCArMSw1ODEgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGlu ZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQg dHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBz dWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2 LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlz CisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwv Mi4wLy4gKi8KKysKKysjaWZuZGVmIGppdF9wcGM2NF9BcmNoaXRlY3R1cmVfcHBjNjRfaAorKyNk ZWZpbmUgaml0X3BwYzY0X0FyY2hpdGVjdHVyZV9wcGM2NF9oCisrCisrI2luY2x1ZGUgPGFsZ29y aXRobT4KKysjaW5jbHVkZSA8Yml0PgorKworKyNpbmNsdWRlICJqaXQvc2hhcmVkL0FyY2hpdGVj dHVyZS1zaGFyZWQuaCIKKysKKysjaW5jbHVkZSAianMvVXRpbGl0eS5oIgorKworK25hbWVzcGFj ZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrLy8gUFBDNjQgaGFzIDMyIDY0LWJpdCBnZW5l cmFsIHB1cnBvc2UgcmVnaXN0ZXJzLCByMCB0aHJvdWdoIHIzMS4KKysvLyBUaGUgcHJvZ3JhbSBj b3VudGVyIGlzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIGFzIGEgcmVnaXN0ZXIuCisrLy8gVGhl IGxpbmsgcmVnaXN0ZXIgKExSKSBhbmQgY291bnQgcmVnaXN0ZXIgKENUUikgYXJlIFNQUnMuCisr CisrLy8gUFBDNjQgRUxGdjIgR1BSIENvbnZlbnRpb246CisrLy8gIE5hbWUgICAgVXNhZ2UKKysv LyAgcjAgICAgICBWb2xhdGlsZSwgY2Fubm90IGJlIGJhc2UgcmVnaXN0ZXIgaW4gbG9hZC9zdG9y ZQorKy8vICByMSAgICAgIFN0YWNrIHBvaW50ZXIgKGNhbGxlZS1zYXZlZCkKKysvLyAgcjIgICAg ICBUT0MgcG9pbnRlciAocmVzZXJ2ZWQpCisrLy8gIHIzICAgICAgUmV0dXJuIHZhbHVlIC8gZmly c3QgYXJndW1lbnQKKysvLyAgcjQtcjEwICBBcmd1bWVudHMgMi04CisrLy8gIHIxMSAgICAgRW52 aXJvbm1lbnQgcG9pbnRlciAvIHNjcmF0Y2gKKysvLyAgcjEyICAgICBCcmFuY2ggdGFyZ2V0IC8g c2NyYXRjaAorKy8vICByMTMgICAgIFRocmVhZCBwb2ludGVyIChyZXNlcnZlZCwgVExTKQorKy8v ICByMTQtcjMxIENhbGxlZS1zYXZlZAorKworKy8vIFBQQzY0IEVMRnYyIEZQUiBDb252ZW50aW9u OgorKy8vICBmMCAgICAgIFNjcmF0Y2gKKysvLyAgZjEtZjEzICBBcmd1bWVudHMgLyB2b2xhdGls ZQorKy8vICBmMTQtZjMxIENhbGxlZS1zYXZlZAorKworK2NsYXNzIFJlZ2lzdGVycyB7CisrIHB1 YmxpYzoKKysgIGVudW0gUmVnaXN0ZXJJRCB7CisrICAgIHIwID0gMCwKKysgICAgcjEsCisrICAg IHIyLAorKyAgICByMywKKysgICAgcjQsCisrICAgIHI1LAorKyAgICByNiwKKysgICAgcjcsCisr ICAgIHI4LAorKyAgICByOSwKKysgICAgcjEwLAorKyAgICByMTEsCisrICAgIHIxMiwKKysgICAg cjEzLAorKyAgICByMTQsCisrICAgIHIxNSwKKysgICAgcjE2LAorKyAgICByMTcsCisrICAgIHIx OCwKKysgICAgcjE5LAorKyAgICByMjAsCisrICAgIHIyMSwKKysgICAgcjIyLAorKyAgICByMjMs CisrICAgIHIyNCwKKysgICAgcjI1LAorKyAgICByMjYsCisrICAgIHIyNywKKysgICAgcjI4LAor KyAgICByMjksCisrICAgIHIzMCwKKysgICAgcjMxLAorKyAgICBzcCA9IHIxLAorKyAgICBpbnZh bGlkX3JlZywKKysgIH07CisrICB0eXBlZGVmIHVpbnQ4X3QgQ29kZTsKKysgIHR5cGVkZWYgUmVn aXN0ZXJJRCBFbmNvZGluZzsKKysgIHR5cGVkZWYgdWludDMyX3QgU2V0VHlwZTsKKysKKysgIHN0 YXRpYyBjb25zdCBFbmNvZGluZyBTdGFja1BvaW50ZXIgPSBzcDsKKysgIHN0YXRpYyBjb25zdCBF bmNvZGluZyBJbnZhbGlkID0gaW52YWxpZF9yZWc7CisrCisrICB1bmlvbiBSZWdpc3RlckNvbnRl bnQgeworKyAgICB1aW50cHRyX3QgcjsKKysgIH07CisrCisrICBzdGF0aWMgdWludDMyX3QgU2V0 U2l6ZShTZXRUeXBlIHgpIHsgcmV0dXJuIHN0ZDo6cG9wY291bnQoeCk7IH0KKysgIHN0YXRpYyB1 aW50MzJfdCBGaXJzdEJpdChTZXRUeXBlIHgpIHsKKysgICAgTU9aX0FTU0VSVCh4KTsKKysgICAg cmV0dXJuIHN0ZDo6Y291bnRyX3plcm8oeCk7CisrICB9CisrICBzdGF0aWMgdWludDMyX3QgTGFz dEJpdChTZXRUeXBlIHgpIHsKKysgICAgTU9aX0FTU0VSVCh4KTsKKysgICAgcmV0dXJuIHN0ZDo6 Yml0X3dpZHRoKHgpIC0gMTsKKysgIH0KKysKKysgIHN0YXRpYyBjb25zdCBjaGFyKiBHZXROYW1l KHVpbnQzMl90IGNvZGUpIHsKKysgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IE5hbWVzW10g PSB7CisrICAgICAgICAicjAiLCAgInNwIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAi cjYiLCAgInI3IiwKKysgICAgICAgICJyOCIsICAicjkiLCAgInIxMCIsICJyMTEiLCAicjEyIiwg InIxMyIsICJyMTQiLCAicjE1IiwKKysgICAgICAgICJyMTYiLCAicjE3IiwgInIxOCIsICJyMTki LCAicjIwIiwgInIyMSIsICJyMjIiLCAicjIzIiwKKysgICAgICAgICJyMjQiLCAicjI1IiwgInIy NiIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAicjMxIn07CisrICAgIHN0YXRpY19hc3Nl cnQoVG90YWwgPT0gc3RkOjpzaXplKE5hbWVzKSwgIlRhYmxlIGlzIHRoZSBjb3JyZWN0IHNpemUi KTsKKysgICAgaWYgKGNvZGUgPj0gVG90YWwpIHsKKysgICAgICByZXR1cm4gImludmFsaWQiOwor KyAgICB9CisrICAgIHJldHVybiBOYW1lc1tjb2RlXTsKKysgIH0KKysKKysgIHN0YXRpYyBDb2Rl IEZyb21OYW1lKGNvbnN0IGNoYXIqIG5hbWUpOworKworKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90 IFRvdGFsID0gMzI7CisrICBzdGF0aWMgY29uc3QgdWludDMyX3QgVG90YWxQaHlzID0gMzI7Cisr ICBzdGF0aWMgY29uc3QgdWludDMyX3QgQWxsb2NhdGFibGUgPSAyNDsKKysKKysgIHN0YXRpYyBj b25zdCBTZXRUeXBlIEFsbE1hc2sgPSAweEZGRkZGRkZGOworKyAgc3RhdGljIGNvbnN0IFNldFR5 cGUgTm9uZU1hc2sgPSAweDA7CisrCisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBBcmdSZWdNYXNr ID0KKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMykgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyNCkg fCAoMVUgPDwgUmVnaXN0ZXJzOjpyNSkgfAorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnI2KSB8 ICgxVSA8PCBSZWdpc3RlcnM6OnI3KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnI4KSB8CisrICAgICAg KDFVIDw8IFJlZ2lzdGVyczo6cjkpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjEwKTsKKysKKysgIC8v IHIwLCByMTEsIHIxMiBhcmUgYWxzbyB2b2xhdGlsZSBidXQgaGFuZGxlZCBzZXBhcmF0ZWx5Lgor KyAgc3RhdGljIGNvbnN0IFNldFR5cGUgVm9sYXRpbGVNYXNrID0gQXJnUmVnTWFzazsKKysKKysg IC8vIEVMRnYyIGNhbGxlZS1zYXZlZCBHUFJzIGFyZSByMTQuLnIzMS4gcjIgKFRPQykgYW5kIHIx MyAoVExTKSBhcmUKKysgIC8vIGRlZGljYXRlZCByZWdpc3RlcnMsIE5PVCBnZW5lcmFsIGNhbGxl ZS1zYXZlZDogcjIgaXMgcmVzdG9yZWQgYnkgdGhlCisrICAvLyBQTFQtY2FsbCBsaW5rYWdlIGNv bnZlbnRpb24gKGBsZCByMiwgMjQocjEpYCBhZnRlciBldmVyeSBjcm9zcy1tb2R1bGUKKysgIC8v IGNhbGwpOyByMTMgaXMgdGhlIHRocmVhZCBwb2ludGVyIGFuZCBtdXN0IE5FVkVSIGJlIHdyaXR0 ZW4uIEluY2x1ZGluZworKyAgLy8gdGhlbSBoZXJlIHByZXZpb3VzbHkgbWFkZSBgUHVzaFJlZ3NJ bk1hc2soTm9uVm9sYXRpbGVNYXNrKWAgc2F2ZSBhbmQKKysgIC8vIHJlc3RvcmUgdGhlbSDigJQg d2FzdGVkIDE2IGJ5dGVzIHBlciB3YXNtLXN0dWIgZnJhbWUgYXQgYmVzdCwgbGF0ZW50CisrICAv LyBUTFMgY29ycnVwdGlvbiBpZiBzYXZlL3Jlc3RvcmUgd2VyZSBldmVyIG1pc29yZGVyZWQuIFZl cmlmaWVkIHRoYXQKKysgIC8vIG5vIEpJVC1lbWl0dGVkIGNvZGUgd3JpdGVzIHIyIG9yIHIxMyAo Ym90aCBhcmUgTm9uQWxsb2NhdGFibGUsIGFuZAorKyAgLy8gZ3JlcCBhY3Jvc3MganMvc3JjL2pp dC9wcGM2NC8gZmluZHMgbm8gYGFzXypgIHNpdGUgYXNzaWduaW5nIHRvCisrICAvLyB0aGVtKSwg c28gdGhleSdyZSBwcmVzZXJ2ZWQgYWNyb3NzIHRoZSBKSVQgYm9keSBmb3IgZnJlZS4KKysgIHN0 YXRpYyBjb25zdCBTZXRUeXBlIE5vblZvbGF0aWxlTWFzayA9CisrICAgICAgKDFVIDw8IFJlZ2lz dGVyczo6cjE0KSB8CisrICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjE1KSB8ICgxVSA8PCBSZWdp c3RlcnM6OnIxNikgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMTcpIHwKKysgICAgICAoMVUgPDwgUmVn aXN0ZXJzOjpyMTgpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjE5KSB8ICgxVSA8PCBSZWdpc3RlcnM6 OnIyMCkgfAorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIyMSkgfCAoMVUgPDwgUmVnaXN0ZXJz OjpyMjIpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjIzKSB8CisrICAgICAgKDFVIDw8IFJlZ2lzdGVy czo6cjI0KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIyNSkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMjYp IHwKKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMjcpIHwgKDFVIDw8IFJlZ2lzdGVyczo6cjI4 KSB8ICgxVSA8PCBSZWdpc3RlcnM6OnIyOSkgfAorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIz MCkgfCAoMVUgPDwgUmVnaXN0ZXJzOjpyMzEpOworKworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUg Tm9uQWxsb2NhdGFibGVNYXNrID0KKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMCkgfCAgIC8v IENhbm5vdCBiZSBiYXNlIGluIGxvYWQvc3RvcmUuCisrICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6 c3ApIHwgICAvLyBTdGFjayBwb2ludGVyLgorKyAgICAgICgxVSA8PCBSZWdpc3RlcnM6OnIyKSB8 ICAgLy8gVE9DIHBvaW50ZXIgKEVMRnYyKS4KKysgICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMTEp IHwgIC8vIFRoaXJkIHNjcmF0Y2guCisrICAgICAgKDFVIDw8IFJlZ2lzdGVyczo6cjEyKSB8ICAv LyBTZWNvbmQgc2NyYXRjaCAvIGFkZHJlc3NUZW1wUmVnaXN0ZXIuCisrICAgICAgKDFVIDw8IFJl Z2lzdGVyczo6cjEzKSB8ICAvLyBUaHJlYWQtbG9jYWwgc3RvcmFnZSAoRUxGdjIpLgorKyAgICAg ICgxVSA8PCBSZWdpc3RlcnM6OnIxNikgfCAgLy8gU2F2ZWQgc2NyYXRjaCByZWdpc3Rlci4KKysg ICAgICAoMVUgPDwgUmVnaXN0ZXJzOjpyMzEpOyAgIC8vIEZyYW1lIHBvaW50ZXIuCisrCisrICBz dGF0aWMgY29uc3QgU2V0VHlwZSBXcmFwcGVyTWFzayA9IFZvbGF0aWxlTWFzazsKKysKKysgIC8v IFJlZ2lzdGVycyByZXR1cm5lZCBmcm9tIGEgSlMgLT4gSlMgY2FsbC4KKysgIHN0YXRpYyBjb25z dCBTZXRUeXBlIEpTQ2FsbE1hc2sgPSAoMVUgPDwgUmVnaXN0ZXJzOjpyNSk7CisrCisrICAvLyBS ZWdpc3RlcnMgcmV0dXJuZWQgZnJvbSBhIEpTIC0+IEMgY2FsbC4KKysgIHN0YXRpYyBjb25zdCBT ZXRUeXBlIENhbGxNYXNrID0gKDFVIDw8IFJlZ2lzdGVyczo6cjMpOworKworKyAgc3RhdGljIGNv bnN0IFNldFR5cGUgQWxsb2NhdGFibGVNYXNrID0gQWxsTWFzayAmIH5Ob25BbGxvY2F0YWJsZU1h c2s7CisrfTsKKysKKyt0eXBlZGVmIHVpbnQzMl90IFBhY2tlZFJlZ2lzdGVyTWFzazsKKysKKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytjbGFzcyBUeXBlZFJlZ2lzdGVyU2V0OworKworK2NsYXNz IEZsb2F0UmVnaXN0ZXJzIHsKKysgcHVibGljOgorKyAgZW51bSBGUFJlZ2lzdGVySUQgeworKyAg ICBmMCA9IDAsCisrICAgIGYxLAorKyAgICBmMiwKKysgICAgZjMsCisrICAgIGY0LAorKyAgICBm NSwKKysgICAgZjYsCisrICAgIGY3LAorKyAgICBmOCwKKysgICAgZjksCisrICAgIGYxMCwKKysg ICAgZjExLAorKyAgICBmMTIsCisrICAgIGYxMywKKysgICAgZjE0LAorKyAgICBmMTUsCisrICAg IGYxNiwKKysgICAgZjE3LAorKyAgICBmMTgsCisrICAgIGYxOSwKKysgICAgZjIwLAorKyAgICBm MjEsCisrICAgIGYyMiwKKysgICAgZjIzLAorKyAgICBmMjQsCisrICAgIGYyNSwKKysgICAgZjI2 LAorKyAgICBmMjcsCisrICAgIGYyOCwKKysgICAgZjI5LAorKyAgICBmMzAsCisrICAgIGYzMSwK KysgIH07CisrCisrICAvLyBFaWdodCBiaXRzOiAoaW52YWxpZCA8PCA3KSB8IChraW5kIDw8IDUp IHwgZW5jb2RpbmcKKysgIHR5cGVkZWYgdWludDhfdCBDb2RlOworKyAgdHlwZWRlZiBGUFJlZ2lz dGVySUQgRW5jb2Rpbmc7CisrICAvLyAzIGtpbmRzIMOXIDMyIHJlZ3MgPSA5NiBiaXRzIG5lZWRl ZC4gVXNlIF9fdWludDEyOF90LgorKyAgdHlwZWRlZiBfX3VpbnQxMjhfdCBTZXRUeXBlOworKwor KyAgZW51bSBLaW5kIDogdWludDhfdCB7IERvdWJsZSwgU2luZ2xlLCBTaW1kMTI4LCBOdW1UeXBl cyB9OworKworKyAgc3RhdGljIGNvbnN0ZXhwciBDb2RlIEludmFsaWQgPSAweDgwOworKworKyAg c3RhdGljIGNvbnN0IGNoYXIqIEdldE5hbWUodWludDMyX3QgY29kZSkgeworKyAgICBzdGF0aWMg Y29uc3QgY2hhciogY29uc3QgTmFtZXNbXSA9IHsKKysgICAgICAgICJmMCIsICAiZjEiLCAgImYy IiwgICJmMyIsICAiZjQiLCAgImY1IiwgICJmNiIsICAiZjciLAorKyAgICAgICAgImY4IiwgICJm OSIsICAiZjEwIiwgImYxMSIsICJmMTIiLCAiZjEzIiwgImYxNCIsICJmMTUiLAorKyAgICAgICAg ImYxNiIsICJmMTciLCAiZjE4IiwgImYxOSIsICJmMjAiLCAiZjIxIiwgImYyMiIsICJmMjMiLAor KyAgICAgICAgImYyNCIsICJmMjUiLCAiZjI2IiwgImYyNyIsICJmMjgiLCAiZjI5IiwgImYzMCIs ICJmMzEifTsKKysgICAgc3RhdGljX2Fzc2VydChUb3RhbFBoeXMgPT0gc3RkOjpzaXplKE5hbWVz KSwgIlRhYmxlIGlzIHRoZSBjb3JyZWN0IHNpemUiKTsKKysgICAgaWYgKGNvZGUgPj0gVG90YWwp IHsKKysgICAgICByZXR1cm4gImludmFsaWQiOworKyAgICB9CisrICAgIHJldHVybiBOYW1lc1tj b2RlICUgVG90YWxQaHlzXTsKKysgIH0KKysKKysgIHN0YXRpYyBDb2RlIEZyb21OYW1lKGNvbnN0 IGNoYXIqIG5hbWUpOworKworKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IFRvdGFsUGh5cyA9IDMy OworKyAgc3RhdGljIGNvbnN0IHVpbnQzMl90IFRvdGFsID0gVG90YWxQaHlzICogTnVtVHlwZXM7 CisrICBzdGF0aWMgY29uc3QgdWludDMyX3QgQWxsb2NhdGFibGUgPSAzMTsgIC8vIFdpdGhvdXQg ZjAsIHRoZSBzY3JhdGNoIHJlZ2lzdGVyLgorKworKyAgc3RhdGljX2Fzc2VydChzaXplb2YoU2V0 VHlwZSkgKiA4ID49IFRvdGFsLAorKyAgICAgICAgICAgICAgICAiU2V0VHlwZSBzaG91bGQgYmUg bGFyZ2UgZW5vdWdoIHRvIGVudW1lcmF0ZSBhbGwgcmVnaXN0ZXJzLiIpOworKworKyAgc3RhdGlj IGNvbnN0IFNldFR5cGUgU3ByZWFkU2luZ2xlID0gU2V0VHlwZSgxKQorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgPDwgKHVpbnQzMl90KFNpbmdsZSkgKiBUb3RhbFBoeXMp OworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgU3ByZWFkRG91YmxlID0gU2V0VHlwZSgxKQorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKHVpbnQzMl90KERvdWJsZSkg KiBUb3RhbFBoeXMpOworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgU3ByZWFkU2ltZDEyOCA9IFNl dFR5cGUoMSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAodWlu dDMyX3QoU2ltZDEyOCkgKiBUb3RhbFBoeXMpOworKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgU3By ZWFkID0gU3ByZWFkU2luZ2xlIHwgU3ByZWFkRG91YmxlIHwgU3ByZWFkU2ltZDEyODsKKysKKysg IHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbFBoeXNNYXNrID0gKChTZXRUeXBlKDEpIDw8IFRvdGFs UGh5cykgLSAxKTsKKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbE1hc2sgPSBBbGxQaHlzTWFz ayAqIFNwcmVhZDsKKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbFNpbmdsZU1hc2sgPSBBbGxQ aHlzTWFzayAqIFNwcmVhZFNpbmdsZTsKKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbERvdWJs ZU1hc2sgPSBBbGxQaHlzTWFzayAqIFNwcmVhZERvdWJsZTsKKysgIHN0YXRpYyBjb25zdCBTZXRU eXBlIEFsbFNpbWQxMjhNYXNrID0gQWxsUGh5c01hc2sgKiBTcHJlYWRTaW1kMTI4OworKyAgc3Rh dGljIGNvbnN0IFNldFR5cGUgTm9uZU1hc2sgPSBTZXRUeXBlKDApOworKworKyAgLy8gRUxGdjI6 IGYxNC1mMzEgYXJlIG5vbi12b2xhdGlsZSAoY2FsbGVlLXNhdmVkKSBmb3Igc2NhbGFyIEZQLgor KyAgLy8gVGhlIHVwcGVyIDY0IGJpdHMgb2YgVlNSIDAtMzEgYXJlIHZvbGF0aWxlLCBzbyBTaW1k MTI4IHZpZXcgaXMgYWxsLXZvbGF0aWxlLgorKyAgc3RhdGljIGNvbnN0IFNldFR5cGUgTm9uVm9s YXRpbGVQaHlzTWFzayA9CisrICAgICAgU2V0VHlwZSgoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYx NCkgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYxNSkgfAorKyAgICAgICAgICAgICAgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMTYpIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMTcpIHwKKysg ICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjE4KSB8ICgxVSA8PCBGbG9hdFJl Z2lzdGVyczo6ZjE5KSB8CisrICAgICAgICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYy MCkgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyMSkgfAorKyAgICAgICAgICAgICAgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMjIpIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjMpIHwKKysg ICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjI0KSB8ICgxVSA8PCBGbG9hdFJl Z2lzdGVyczo6ZjI1KSB8CisrICAgICAgICAgICAgICAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYy NikgfCAoMVUgPDwgRmxvYXRSZWdpc3RlcnM6OmYyNykgfAorKyAgICAgICAgICAgICAgKDFVIDw8 IEZsb2F0UmVnaXN0ZXJzOjpmMjgpIHwgKDFVIDw8IEZsb2F0UmVnaXN0ZXJzOjpmMjkpIHwKKysg ICAgICAgICAgICAgICgxVSA8PCBGbG9hdFJlZ2lzdGVyczo6ZjMwKSB8ICgxVSA8PCBGbG9hdFJl Z2lzdGVyczo6ZjMxKSk7CisrICAvLyBTaW1kMTI4IGxpdmVzIGluIFZSLW5hbWVzcGFjZSAoVlNS MzItNjMgPSBWUjAtVlIzMSkuIFBlciBFTEZ2MiBBQkksCisrICAvLyBWUjIwLVZSMzEgYXJlIG5v bi12b2xhdGlsZSAoY2FsbGVlLXNhdmVkKS4gRW5jb2Rpbmcgc3RvcmFnZSBpcyAyMC0zMQorKyAg Ly8gd2l0aCBraW5kPVNpbWQxMjguCisrICBzdGF0aWMgY29uc3QgU2V0VHlwZSBTaW1kTm9uVm9s YXRpbGVQaHlzTWFzayA9CisrICAgICAgU2V0VHlwZSgoMVUgPDwgMjApIHwgKDFVIDw8IDIxKSB8 ICgxVSA8PCAyMikgfCAoMVUgPDwgMjMpIHwKKysgICAgICAgICAgICAgICgxVSA8PCAyNCkgfCAo MVUgPDwgMjUpIHwgKDFVIDw8IDI2KSB8ICgxVSA8PCAyNykgfAorKyAgICAgICAgICAgICAgKDFV IDw8IDI4KSB8ICgxVSA8PCAyOSkgfCAoMVUgPDwgMzApIHwgKDFVIDw8IDMxKSk7CisrICBzdGF0 aWMgY29uc3QgU2V0VHlwZSBOb25Wb2xhdGlsZU1hc2sgPQorKyAgICAgIE5vblZvbGF0aWxlUGh5 c01hc2sgKiAoU3ByZWFkU2luZ2xlIHwgU3ByZWFkRG91YmxlKSB8CisrICAgICAgU2ltZE5vblZv bGF0aWxlUGh5c01hc2sgKiBTcHJlYWRTaW1kMTI4OworKworKyAgc3RhdGljIGNvbnN0IFNldFR5 cGUgVm9sYXRpbGVNYXNrID0gQWxsTWFzayAmIH5Ob25Wb2xhdGlsZU1hc2s7CisrCisrICBzdGF0 aWMgY29uc3QgU2V0VHlwZSBXcmFwcGVyTWFzayA9IFZvbGF0aWxlTWFzazsKKysKKysgIC8vIGYw IGlzIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIChhbGwgdGhyZWUgdmlld3M6IHNpbmdsZSwgZG91Ymxl LCBzaW1kMTI4KS4KKysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIE5vbkFsbG9jYXRhYmxlTWFzayA9 CisrICAgICAgKFNldFR5cGUoMSkgPDwgRmxvYXRSZWdpc3RlcnM6OmYwKSAqIFNwcmVhZDsKKysK KysgIHN0YXRpYyBjb25zdCBTZXRUeXBlIEFsbG9jYXRhYmxlTWFzayA9IEFsbE1hc2sgJiB+Tm9u QWxsb2NhdGFibGVNYXNrOworKworKyAgdW5pb24gUmVnaXN0ZXJDb250ZW50IHsKKysgICAgZmxv YXQgczsKKysgICAgZG91YmxlIGQ7CisrICAgIC8vIE5vIHYxMjggaGVyZS4gU2ltZDEyOCBsaXZl cyBpbiBwaHlzaWNhbGx5LWRpc3RpbmN0IFZScyAoVlNSMzItNjMpCisrICAgIC8vIGFuZCBuZXZl ciByZWFjaGVzIFJlZ2lzdGVyRHVtcCAoYXNzZXJ0ZWQgYnkgU2FmZXBvaW50U3RhdGU7IGJhaWxv dXQKKysgICAgLy8gQWxsUmVncyBleGNsdWRlcyBTaW1kMTI4KS4gV2l0aCB2MTI4IGluIHRoZSB1 bmlvbiwgc2l6ZW9mIHdhcyAxNiwKKysgICAgLy8gZm9yY2luZyBQdXNoUmVnc0luTWFzayB0byBh IDE2LWJ5dGUgc3RyaWRlIHRoYXQgbWlzbWF0Y2hlZAorKyAgICAvLyBhZGRyZXNzT2ZSZWdpc3Rl cidzIDgtYnl0ZSB3YWxrIHZpYSAoKml0ZXIpLnNpemUoKS4KKysgIH07CisrCisrICBzdGF0aWMg Y29uc3RleHByIEVuY29kaW5nIGVuY29kaW5nKENvZGUgYykgeyByZXR1cm4gRW5jb2RpbmcoYyAm IDMxKTsgfQorKworKyAgc3RhdGljIGNvbnN0ZXhwciBLaW5kIGtpbmQoQ29kZSBjKSB7IHJldHVy biBLaW5kKChjID4+IDUpICYgMyk7IH0KKysKKysgIHN0YXRpYyBjb25zdGV4cHIgQ29kZSBmcm9t UGFydHModWludDMyX3QgZW5jb2RpbmcsIHVpbnQzMl90IGtpbmQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGludmFsaWQpIHsKKysgICAgcmV0dXJuIENvZGUo KGludmFsaWQgPDwgNykgfCAoa2luZCA8PCA1KSB8IGVuY29kaW5nKTsKKysgIH0KKyt9OworKwor Ky8vIFNwaWxsU2xvdFNpemUgbXVzdCBmaXQgdGhlIHdpZGVzdCByZWdpc3RlciBjbGFzcyAoU2lt ZDEyOCA9IDE2IGJ5dGVzKS4KKysvLyBXZSBjYW4ndCBkZXJpdmUgZnJvbSBzaXplb2YoRmxvYXRS ZWdpc3RlcnM6OlJlZ2lzdGVyQ29udGVudCkg4oCUIHRoYXQKKysvLyB1bmlvbiBpcyBzaXplZCBm b3IgRlBScyBvbmx5ICg4IGJ5dGVzIHNpbmNlIHYxMjggbGl2ZXMgaW4gZGlzdGluY3QKKysvLyBW UnMsIG5vdCBpbiB0aGUgRlBSIHVuaW9uKSwgc28gZGVyaXZpbmcgd291bGQgdW5kZXItcmVzZXJ2 ZSBmb3IKKysvLyBTaW1kMTI4IGN5Y2xlIGJyZWFrcy4gU3BpbGxTbG90U2l6ZSBpcyBjb25zdW1l ZCBvbmx5IGJ5IE1vdmVFbWl0dGVyCisrLy8gYW5kIGlzIG5vdCBwYXJ0IG9mIHRoZSBKSVQgZnJh bWUgbGF5b3V0LgorK3N0YXRpYyBjb25zdCB1aW50MzJfdCBTcGlsbFNsb3RTaXplID0gMTY7Cisr CisrLy8gUFBDNjQgRUxGdjIgQUJJOiB0aGUgY2FsbGVlIHNhdmVzIExSIGF0IFtjYWxsZXJfU1Ar MTZdLCBDUiBhdAorKy8vIFtjYWxsZXJfU1ArOF0sIGFuZCBtYXkgc2F2ZSBUT0MgYXQgW2NhbGxl cl9TUCsyNF0uIFJlc2VydmUgMzIgYnl0ZXMKKysvLyAodGhlIG1pbmltdW0gRUxGdjIgc3RhY2sg ZnJhbWUpIGFzIGEgc2hhZG93IGFyZWEgZm9yIGV2ZXJ5IEFCSSBjYWxsLgorK3N0YXRpYyBjb25z dGV4cHIgdWludDMyX3QgU2hhZG93U3RhY2tTcGFjZSA9IDMyOworK3N0YXRpYyBjb25zdCB1aW50 MzJfdCBTaXplT2ZSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsID0gMDsKKysKKysvLyBQUEM2NCBicmFu Y2ggaW5zdHJ1Y3Rpb25zIGhhdmUgYSAyNi1iaXQgc2lnbmVkIG9mZnNldCBmaWVsZCwgZ2l2aW5n IGEKKysvLyByYW5nZSBvZiArLy0gMzJNQi4gV2UgcmVkdWNlIHRoaXMgdG8gbGVhdmUgcm9vbSBm b3IganVtcCBpc2xhbmQgaW5zZXJ0aW9uLgorK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgSnVt cEltbWVkaWF0ZVJhbmdlID0gKDMyICogMTAyNCAqIDEwMjQpIC0gMzI7CisrCisrLy8gU2l6ZSBv ZiBlYWNoIGJhaWxvdXQgdGFibGUgZW50cnkgKGEgc2luZ2xlIGJsIGluc3RydWN0aW9uKS4KKytz dGF0aWMgY29uc3QgdWludDMyX3QgQkFJTE9VVF9UQUJMRV9FTlRSWV9TSVpFID0gNDsKKysKKysv LyBQUEM2NCBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzIChub3QgZXhwb3NlZCB0byB0aGUgYWxs b2NhdG9yKS4KKytlbnVtIFNQUmVnaXN0ZXJJRCB7CisrICBzcHJfeGVyID0gMSwKKysgIHNwcl9s ciA9IDgsCisrICBzcHJfY3RyID0gOSwKKysgIHNwcl92cnNhdmUgPSAyNTYsCisrICBpbnZhbGlk X3NwcmVnCisrfTsKKysKKysvLyBQUEM2NCBjb25kaXRpb24gcmVnaXN0ZXJzLgorK2VudW0gQ1Jl Z2lzdGVySUQgeyBjcjAgPSAwLCBjcjEsIGNyNSA9IDUsIGNyNiwgY3I3LCBpbnZhbGlkX2NyZWcg fTsKKysKKytzdHJ1Y3QgRmxvYXRSZWdpc3RlciB7CisrICB0eXBlZGVmIEZsb2F0UmVnaXN0ZXJz IENvZGVzOworKyAgdHlwZWRlZiBzaXplX3QgQ29kZTsKKysgIHR5cGVkZWYgQ29kZXM6OkVuY29k aW5nIEVuY29kaW5nOworKyAgdHlwZWRlZiBDb2Rlczo6U2V0VHlwZSBTZXRUeXBlOworKworKyAg c3RhdGljIHVpbnQzMl90IFNldFNpemUoU2V0VHlwZSB4KSB7CisrICAgIC8vIEZvbGQgYWxsIDMg a2luZHMgKFNpbmdsZSwgRG91YmxlLCBTaW1kMTI4KSBkb3duIHRvIHBoeXNpY2FsIG1hc2suCisr ICAgIFNldFR5cGUgcGh5cyA9ICh4ICYgRmxvYXRSZWdpc3RlcnM6OkFsbFBoeXNNYXNrKSB8Cisr ICAgICAgICAgICAgICAgICAgICgoeCA+PiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSAmIEZs b2F0UmVnaXN0ZXJzOjpBbGxQaHlzTWFzaykgfAorKyAgICAgICAgICAgICAgICAgICAoKHggPj4g KDIgKiBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlzKSkgJiBGbG9hdFJlZ2lzdGVyczo6QWxsUGh5 c01hc2spOworKyAgICByZXR1cm4gc3RkOjpwb3Bjb3VudChzdGF0aWNfY2FzdDx1aW50NjRfdD4o cGh5cykpOworKyAgfQorKworKyAgLy8gX191aW50MTI4X3QgaGVscGVycyBmb3IgRmlyc3RCaXQv TGFzdEJpdC4KKysgIHN0YXRpYyB1aW50MzJfdCBGaXJzdEJpdChTZXRUeXBlIHgpIHsKKysgICAg TU9aX0FTU0VSVCh4KTsKKysgICAgdWludDY0X3QgbG8gPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o eCk7CisrICAgIGlmIChsbykgeworKyAgICAgIHJldHVybiBzdGQ6OmNvdW50cl96ZXJvKGxvKTsK KysgICAgfQorKyAgICByZXR1cm4gNjQgKyBzdGQ6OmNvdW50cl96ZXJvKHN0YXRpY19jYXN0PHVp bnQ2NF90Pih4ID4+IDY0KSk7CisrICB9CisrICBzdGF0aWMgdWludDMyX3QgTGFzdEJpdChTZXRU eXBlIHgpIHsKKysgICAgTU9aX0FTU0VSVCh4KTsKKysgICAgdWludDY0X3QgaGkgPSBzdGF0aWNf Y2FzdDx1aW50NjRfdD4oeCA+PiA2NCk7CisrICAgIGlmIChoaSkgeworKyAgICAgIHJldHVybiA2 NCArIChzdGQ6OmJpdF93aWR0aChoaSkgLSAxKTsKKysgICAgfQorKyAgICByZXR1cm4gc3RkOjpi aXRfd2lkdGgoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHgpKSAtIDE7CisrICB9CisrCisrIHByaXZh dGU6CisrICB1aW50OF90IGVuY29kaW5nXzsKKysgIHVpbnQ4X3Qga2luZF87CisrICBib29sIGlu dmFsaWRfOworKworKyAgdHlwZWRlZiBDb2Rlczo6S2luZCBLaW5kOworKworKyBwdWJsaWM6Cisr ICBjb25zdGV4cHIgRmxvYXRSZWdpc3RlcihFbmNvZGluZyBlbmNvZGluZywgS2luZCBraW5kKQor KyAgICAgIDogZW5jb2RpbmdfKGVuY29kaW5nKSwga2luZF8oa2luZCksIGludmFsaWRfKGZhbHNl KSB7fQorKworKyAgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIoKQorKyAgICAgIDogZW5jb2Rpbmdf KDApLCBraW5kXyhGbG9hdFJlZ2lzdGVyczo6RG91YmxlKSwgaW52YWxpZF8odHJ1ZSkge30KKysK KysgIHN0YXRpYyBGbG9hdFJlZ2lzdGVyIEZyb21Db2RlKHVpbnQzMl90IGkpIHsKKysgICAgTU9a X0FTU0VSVChpIDwgQ29kZXM6OlRvdGFsKTsKKysgICAgcmV0dXJuIEZsb2F0UmVnaXN0ZXIoRmxv YXRSZWdpc3RlcnM6OmVuY29kaW5nKGkpLCBGbG9hdFJlZ2lzdGVyczo6a2luZChpKSk7CisrICB9 CisrCisrICBib29sIGlzU2luZ2xlKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlk Xyk7CisrICAgIHJldHVybiBraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlOworKyAgfQor KyAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaW52YWxpZF8pOwor KyAgICByZXR1cm4ga2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OkRvdWJsZTsKKysgIH0KKysgIGJv b2wgaXNTaW1kMTI4KCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7CisrICAg IHJldHVybiBraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyODsKKysgIH0KKysgIGJvb2wg aXNJbnZhbGlkKCkgY29uc3QgeyByZXR1cm4gaW52YWxpZF87IH0KKysKKysgIEZsb2F0UmVnaXN0 ZXIgYXNTaW5nbGUoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAg cmV0dXJuIEZsb2F0UmVnaXN0ZXIoRW5jb2RpbmcoZW5jb2RpbmdfKSwgRmxvYXRSZWdpc3RlcnM6 OlNpbmdsZSk7CisrICB9CisrICBGbG9hdFJlZ2lzdGVyIGFzRG91YmxlKCkgY29uc3QgeworKyAg ICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7CisrICAgIHJldHVybiBGbG9hdFJlZ2lzdGVyKEVuY29k aW5nKGVuY29kaW5nXyksIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUpOworKyAgfQorKyAgRmxvYXRS ZWdpc3RlciBhc1NpbWQxMjgoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsK KysgICAgcmV0dXJuIEZsb2F0UmVnaXN0ZXIoRW5jb2RpbmcoZW5jb2RpbmdfKSwgRmxvYXRSZWdp c3RlcnM6OlNpbWQxMjgpOworKyAgfQorKworKyAgY29uc3RleHByIHVpbnQzMl90IHNpemUoKSBj b25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAgaWYgKGtpbmRfID09IEZs b2F0UmVnaXN0ZXJzOjpEb3VibGUpIHsKKysgICAgICByZXR1cm4gc2l6ZW9mKGRvdWJsZSk7Cisr ICAgIH0KKysgICAgaWYgKGtpbmRfID09IEZsb2F0UmVnaXN0ZXJzOjpTaW5nbGUpIHsKKysgICAg ICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsKKysgICAgfQorKyAgICBNT1pfQVNTRVJUKGtpbmRfID09 IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KTsKKysgICAgcmV0dXJuIDE2OworKyAgfQorKworKyAg Y29uc3RleHByIENvZGUgY29kZSgpIGNvbnN0IHsKKysgICAgcmV0dXJuIENvZGVzOjpmcm9tUGFy dHMoZW5jb2RpbmdfLCBraW5kXywgaW52YWxpZF8pOworKyAgfQorKworKyAgY29uc3RleHByIEVu Y29kaW5nIGVuY29kaW5nKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7Cisr ICAgIC8vIFNpbWQxMjggbGl2ZXMgaW4gVlItbmFtZXNwYWNlIGF0IFZTUjMyLTYzICg9IFZSMC0z MSkuIFNpbmdsZS9Eb3VibGUKKysgICAgLy8gc2hhcmUgRlBSIG5hbWVzcGFjZSBhdCBWU1IwLTMx LiBUaGUgdW5pZmllZCBYWC1mb3JtIGVuY29kZXJzIHNwbGl0CisrICAgIC8vIHRoZSByZXN1bHQg aW50byBsb3ctNS1iaXQgVlJUL1ZSQS9WUkIgKyBUWC9BWC9CWCBiaXRzOyBWTVgKKysgICAgLy8g RmxvYXRSZWdpc3Rlci10YWtpbmcgZW5jb2RlcnMgbWFzayB3aXRoIGAmIDMxYCBmb3IgdGhlIHJh dyBWUgorKyAgICAvLyBmaWVsZC4gU28gMzIrRSBmbG93cyBjb3JyZWN0bHkgdGhyb3VnaCBib3Ro IHBhdGhzLgorKyAgICByZXR1cm4gRW5jb2RpbmcoZW5jb2RpbmdfICsKKysgICAgICAgICAgICAg ICAgICAgIChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCA/IDMyIDogMCkpOworKyAg fQorKworKyAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVnaXN0ZXJz OjpHZXROYW1lKGNvZGUoKSk7IH0KKysgIGJvb2wgdm9sYXRpbGVfKCkgY29uc3QgeworKyAgICBN T1pfQVNTRVJUKCFpbnZhbGlkXyk7CisrICAgIHJldHVybiAhISgoU2V0VHlwZSgxKSA8PCBjb2Rl KCkpICYgRmxvYXRSZWdpc3RlcnM6OlZvbGF0aWxlTWFzayk7CisrICB9CisrICBjb25zdGV4cHIg Ym9vbCBvcGVyYXRvciE9KEZsb2F0UmVnaXN0ZXIgb3RoZXIpIGNvbnN0IHsKKysgICAgcmV0dXJu IGNvZGUoKSAhPSBvdGhlci5jb2RlKCk7CisrICB9CisrICBjb25zdGV4cHIgYm9vbCBvcGVyYXRv cj09KEZsb2F0UmVnaXN0ZXIgb3RoZXIpIGNvbnN0IHsKKysgICAgcmV0dXJuIGNvZGUoKSA9PSBv dGhlci5jb2RlKCk7CisrICB9CisrCisrICBib29sIGFsaWFzZXMoRmxvYXRSZWdpc3RlciBvdGhl cikgY29uc3QgeworKyAgICAvLyBSZWdpc3Rlci1jbGFzcyBwYXJ0aXRpb246IHtTaW5nbGUsIERv dWJsZX0gc2hhcmUgRlBScyAoVlNSMC0zMSk7CisrICAgIC8vIFNpbWQxMjggbGl2ZXMgaW4gVlIt bmFtZXNwYWNlIChWU1IzMi02MykuIEZQUiBmNSAoU2luZ2xlL0RvdWJsZQorKyAgICAvLyBlbmNv ZGluZyA1KSBhbmQgVlIgdjUgKFNpbWQxMjggZW5jb2RpbmcgNSkgYXJlIGRpc3RpbmN0IHBoeXNp Y2FsCisrICAgIC8vIHJlZ2lzdGVycy4KKysgICAgaWYgKGVuY29kaW5nXyAhPSBvdGhlci5lbmNv ZGluZ18pIHJldHVybiBmYWxzZTsKKysgICAgYm9vbCBzZWxmU2ltZCA9IChraW5kXyA9PSBGbG9h dFJlZ2lzdGVyczo6U2ltZDEyOCk7CisrICAgIGJvb2wgb3RoZXJTaW1kID0gKG90aGVyLmtpbmRf ID09IEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KTsKKysgICAgcmV0dXJuIHNlbGZTaW1kID09IG90 aGVyU2ltZDsKKysgIH0KKysgIGJvb2wgZXF1aXYoRmxvYXRSZWdpc3RlciBvdGhlcikgY29uc3Qg eworKyAgICBNT1pfQVNTRVJUKCFpbnZhbGlkXyk7CisrICAgIHJldHVybiBraW5kXyA9PSBvdGhl ci5raW5kXzsKKysgIH0KKysKKysgIHVpbnQzMl90IG51bUFsaWFzZWQoKSBjb25zdCB7CisrICAg IHJldHVybiAoa2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpID8gMSA6IDI7CisrICB9 CisrICB1aW50MzJfdCBudW1BbGlnbmVkQWxpYXNlZCgpIHsgcmV0dXJuIG51bUFsaWFzZWQoKTsg fQorKworKyAgRmxvYXRSZWdpc3RlciBhbGlhc2VkKHVpbnQzMl90IGFsaWFzSWR4KSB7CisrICAg IE1PWl9BU1NFUlQoIWludmFsaWRfKTsKKysgICAgTU9aX0FTU0VSVChhbGlhc0lkeCA8IG51bUFs aWFzZWQoKSk7CisrICAgIGlmIChraW5kXyA9PSBGbG9hdFJlZ2lzdGVyczo6U2ltZDEyOCkgewor KyAgICAgIHJldHVybiAqdGhpczsKKysgICAgfQorKyAgICBLaW5kIG90aGVyS2luZCA9IChraW5k XyA9PSBGbG9hdFJlZ2lzdGVyczo6U2luZ2xlKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA/ IEZsb2F0UmVnaXN0ZXJzOjpEb3VibGUKKysgICAgICAgICAgICAgICAgICAgICAgICAgOiBGbG9h dFJlZ2lzdGVyczo6U2luZ2xlOworKyAgICBLaW5kIHNlbGVjdGVkS2luZCA9IChhbGlhc0lkeCA9 PSAwKSA/IEtpbmQoa2luZF8pIDogb3RoZXJLaW5kOworKyAgICByZXR1cm4gRmxvYXRSZWdpc3Rl cihFbmNvZGluZyhlbmNvZGluZ18pLCBzZWxlY3RlZEtpbmQpOworKyAgfQorKyAgRmxvYXRSZWdp c3RlciBhbGlnbmVkQWxpYXNlZCh1aW50MzJfdCBhbGlhc0lkeCkgeworKyAgICBNT1pfQVNTRVJU KGFsaWFzSWR4IDwgbnVtQWxpYXNlZCgpKTsKKysgICAgcmV0dXJuIGFsaWFzZWQoYWxpYXNJZHgp OworKyAgfQorKyAgU2V0VHlwZSBhbGlnbmVkT3JEb21pbmF0ZWRBbGlhc2VkU2V0KCkgY29uc3Qg eworKyAgICBpZiAoa2luZF8gPT0gRmxvYXRSZWdpc3RlcnM6OlNpbWQxMjgpIHsKKysgICAgICBy ZXR1cm4gU2V0VHlwZSgxKSA8PCAoKHVpbnQzMl90KEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4KSAq CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6VG90YWxQaHlz KSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nXyk7CisrICAgIH0KKysg ICAgcmV0dXJuIChDb2Rlczo6U3ByZWFkU2luZ2xlIHwgQ29kZXM6OlNwcmVhZERvdWJsZSkgPDwg ZW5jb2RpbmdfOworKyAgfQorKworKyAgc3RhdGljIGNvbnN0ZXhwciBSZWdUeXBlTmFtZSBEZWZh dWx0VHlwZSA9IFJlZ1R5cGVOYW1lOjpGbG9hdDY0OworKworKyAgdGVtcGxhdGUgPFJlZ1R5cGVO YW1lIE5hbWUgPSBEZWZhdWx0VHlwZT4KKysgIHN0YXRpYyBTZXRUeXBlIExpdmVBc0luZGV4YWJs ZVNldChTZXRUeXBlIHMpIHsKKysgICAgcmV0dXJuIFNldFR5cGUoMCk7CisrICB9CisrCisrICB0 ZW1wbGF0ZSA8UmVnVHlwZU5hbWUgTmFtZSA9IERlZmF1bHRUeXBlPgorKyAgc3RhdGljIFNldFR5 cGUgQWxsb2NhdGFibGVBc0luZGV4YWJsZVNldChTZXRUeXBlIHMpIHsKKysgICAgc3RhdGljX2Fz c2VydChOYW1lICE9IFJlZ1R5cGVOYW1lOjpBbnksICJBbGxvY2F0YWJsZSBzZXQgYXJlIG5vdCBp dGVyYWJsZSIpOworKyAgICByZXR1cm4gTGl2ZUFzSW5kZXhhYmxlU2V0PE5hbWU+KHMpOworKyAg fQorKworKyAgc3RhdGljIFR5cGVkUmVnaXN0ZXJTZXQ8RmxvYXRSZWdpc3Rlcj4gUmVkdWNlU2V0 Rm9yUHVzaCgKKysgICAgICBjb25zdCBUeXBlZFJlZ2lzdGVyU2V0PEZsb2F0UmVnaXN0ZXI+JiBz KTsKKysgIHN0YXRpYyB1aW50MzJfdCBHZXRQdXNoU2l6ZUluQnl0ZXMoY29uc3QgVHlwZWRSZWdp c3RlclNldDxGbG9hdFJlZ2lzdGVyPiYgcyk7CisrICB1aW50MzJfdCBnZXRSZWdpc3RlckR1bXBP ZmZzZXRJbkJ5dGVzKCk7CisrfTsKKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBGbG9hdFJlZ2lz dGVyOjpTZXRUeXBlCisrRmxvYXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5cGVO YW1lOjpGbG9hdDMyPihTZXRUeXBlIHNldCkgeworKyAgcmV0dXJuIHNldCAmIEZsb2F0UmVnaXN0 ZXJzOjpBbGxTaW5nbGVNYXNrOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBGbG9hdFJl Z2lzdGVyOjpTZXRUeXBlCisrRmxvYXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJlZ1R5 cGVOYW1lOjpGbG9hdDY0PihTZXRUeXBlIHNldCkgeworKyAgcmV0dXJuIHNldCAmIEZsb2F0UmVn aXN0ZXJzOjpBbGxEb3VibGVNYXNrOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBGbG9h dFJlZ2lzdGVyOjpTZXRUeXBlCisrRmxvYXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxlU2V0PFJl Z1R5cGVOYW1lOjpWZWN0b3IxMjg+KFNldFR5cGUgc2V0KSB7CisrICByZXR1cm4gc2V0ICYgRmxv YXRSZWdpc3RlcnM6OkFsbFNpbWQxMjhNYXNrOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGlu ZSBGbG9hdFJlZ2lzdGVyOjpTZXRUeXBlCisrRmxvYXRSZWdpc3Rlcjo6TGl2ZUFzSW5kZXhhYmxl U2V0PFJlZ1R5cGVOYW1lOjpBbnk+KFNldFR5cGUgc2V0KSB7CisrICByZXR1cm4gc2V0OworK30K KysKKytpbmxpbmUgYm9vbCBoYXNVbmFsaWFzZWREb3VibGUoKSB7IHJldHVybiBmYWxzZTsgfQor K2lubGluZSBib29sIGhhc011bHRpQWxpYXMoKSB7IHJldHVybiBmYWxzZTsgfQorKworKy8vIFBQ QzY0IGZlYXR1cmUgYml0cyBwYWNrZWQgaW50byB0aGUgdmFsdWUgR2V0UFBDNjRGbGFncygpIHJl dHVybnMsCisrLy8gd2hpY2ggZmVlZHMgd2FzbS9XYXNtQ29tcGlsZS5jcHAncyBwZXItYXJjaGl0 ZWN0dXJlIGNvZGUgc2lnbmF0dXJlLgorKy8vIERlZmluZWQgYXMgZW51bSBjb25zdGFudHMgKG5v dCBlbnVtIGNsYXNzKSBzbyBjYWxsZXJzIGNhbiBPUi9BTkQKKysvLyBmcmVlbHkuIE5ldyBiaXRz IHNob3VsZCByZW1haW4gYmFja3dhcmQtY29tcGF0aWJsZSDigJQgb2xkZXIgc2lnbmF0dXJlcwor Ky8vIG11c3Qga2VlcCBtZWFuaW5nIHRoZSBzYW1lIHNldCBvZiBmZWF0dXJlcy4KKytlbnVtIFBQ QzY0RmVhdHVyZUZsYWdzIDogdWludDMyX3QgeworKyAgUFBDNjRGbGFnX1BPV0VSOSA9IDF1IDw8 IDAsCisrICAvLyBGdXR1cmU6IFBQQzY0RmxhZ19QT1dFUjEwID0gMXUgPDwgMSwgUFBDNjRGbGFn X1ZTWDQgPSAxdSA8PCAyLCAuLi4KKyt9OworKworK3VpbnQzMl90IEdldFBQQzY0RmxhZ3MoKTsK KysKKytjbGFzcyBQUEM2NEZsYWdzIGZpbmFsIHsKKysgcHVibGljOgorKyAgUFBDNjRGbGFncygp ID0gZGVsZXRlOworKworKyAgLy8gUFBDNjRGbGFnczo6SW5pdCBpcyBjYWxsZWQgZnJvbSB0aGUg Sml0Q29udGV4dCBjb25zdHJ1Y3RvciB0byByZWFkIHRoZQorKyAgLy8gaGFyZHdhcmUgY2FwYWJp bGl0aWVzICh2aWEgZ2V0YXV4dmFsKEFUX0hXQ0FQMikpLiBJdCBtdXN0IGJlIGNhbGxlZAorKyAg Ly8gZXhhY3RseSBvbmNlLCBiZWZvcmUgSGFzUE9XRVI5KCkvSGFzUE9XRVIxMCgpIGFyZSB1c2Vk LgorKyAgc3RhdGljIHZvaWQgSW5pdCgpOworK307CisrCisrYm9vbCBIYXNQT1dFUjkoKTsKKyti b29sIEhhc1BPV0VSMTAoKTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNw YWNlIGpzCisrCisrI2VuZGlmIC8qIGppdF9wcGM2NF9BcmNoaXRlY3R1cmVfcHBjNjRfaCAqLwor ZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcCBiL2pzL3Ny Yy9qaXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu ZGV4IDAwMDAwMDAwMDAwMC4uNDgxMDcwYzRjNmQ1CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9z cmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5jcHAKK0BAIC0wLDAgKzEsMzAyOCBAQAorKy8q IC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJh c2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6 CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRo ZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBN UEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFp biBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNpbmNsdWRlICJq aXQvcHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCisrCisrI2luY2x1ZGUgIm1vemlsbGEvRGVidWdP bmx5LmgiCisrI2luY2x1ZGUgIm1vemlsbGEvTWF5YmUuaCIKKysKKysjaW5jbHVkZSAiZ2MvTWFy a2luZy5oIgorKyNpbmNsdWRlICJqaXQvQXV0b1dyaXRhYmxlSml0Q29kZS5oIgorKyNpbmNsdWRl ICJqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorKyNpbmNsdWRlICJqaXQvRmx1c2hJQ2FjaGUu aCIKKysKKyt1c2luZyBtb3ppbGxhOjpEZWJ1Z09ubHk7CisrCisrdXNpbmcgbmFtZXNwYWNlIGpz OworK3VzaW5nIG5hbWVzcGFjZSBqczo6aml0OworKworKy8vIEVMRnYyIEFCSTogOCBHUFJzIChy My1yMTApLCAxMyBGUFJzIChmMS1mMTMpLgorKy8vIEZQIGFyZ3VtZW50cyBhbHNvIGNvbnN1bWUg YSBHUFIgc2xvdCBwZXIgRUxGdjIgY29udmVudGlvbi4KKytBQklBcmcgQUJJQXJnR2VuZXJhdG9y OjpuZXh0KE1JUlR5cGUgdHlwZSkgeworKyAgc3dpdGNoICh0eXBlKSB7CisrICAgIGNhc2UgTUlS VHlwZTo6SW50MzI6CisrICAgIGNhc2UgTUlSVHlwZTo6SW50NjQ6CisrICAgIGNhc2UgTUlSVHlw ZTo6UG9pbnRlcjoKKysgICAgY2FzZSBNSVJUeXBlOjpXYXNtQW55UmVmOgorKyAgICBjYXNlIE1J UlR5cGU6Oldhc21BcnJheURhdGE6CisrICAgIGNhc2UgTUlSVHlwZTo6U3RhY2tSZXN1bHRzOiB7 CisrICAgICAgaWYgKGludFJlZ0luZGV4XyA+PSBOdW1JbnRBcmdSZWdzKSB7CisrICAgICAgICBj dXJyZW50XyA9IEFCSUFyZyhzdGFja09mZnNldF8pOworKyAgICAgICAgc3RhY2tPZmZzZXRfICs9 IHNpemVvZih1aW50cHRyX3QpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGN1 cnJlbnRfID0gQUJJQXJnKFJlZ2lzdGVyOjpGcm9tQ29kZShSZWdpc3RlcnM6OnIzICsgaW50UmVn SW5kZXhfKSk7CisrICAgICAgaW50UmVnSW5kZXhfKys7CisrICAgICAgYnJlYWs7CisrICAgIH0K KysgICAgY2FzZSBNSVJUeXBlOjpGbG9hdDMyOgorKyAgICBjYXNlIE1JUlR5cGU6OkRvdWJsZTog eworKyAgICAgIGlmIChmbG9hdFJlZ0luZGV4XyA9PSBOdW1GbG9hdEFyZ1JlZ3MpIHsKKysgICAg ICAgIGN1cnJlbnRfID0gQUJJQXJnKHN0YWNrT2Zmc2V0Xyk7CisrICAgICAgICBzdGFja09mZnNl dF8gKz0gc2l6ZW9mKGRvdWJsZSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAg Y3VycmVudF8gPSBBQklBcmcoRmxvYXRSZWdpc3RlcigKKysgICAgICAgICAgRmxvYXRSZWdpc3Rl cnM6OkVuY29kaW5nKEZsb2F0UmVnaXN0ZXJzOjpmMSArIGZsb2F0UmVnSW5kZXhfKSwKKysgICAg ICAgICAgdHlwZSA9PSBNSVJUeXBlOjpEb3VibGUgPyBGbG9hdFJlZ2lzdGVyczo6RG91YmxlCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRmxvYXRSZWdpc3RlcnM6OlNpbmds ZSkpOworKyAgICAgIGZsb2F0UmVnSW5kZXhfKys7CisrICAgICAgLy8gRUxGdjIgQUJJOiBlYWNo IEZQIGFyZyBhbHNvIGNvbnN1bWVzIGEgR1BSIHNsb3QgKHNoYWRvdykuCisrICAgICAgLy8gQ2Fw IGF0IE51bUludEFyZ1JlZ3Mgc28gc3Vic2VxdWVudCBpbnQgYXJncyBnbyB0byB0aGUgc3RhY2su CisrICAgICAgaWYgKGludFJlZ0luZGV4XyA8IE51bUludEFyZ1JlZ3MpIHsKKysgICAgICAgIGlu dFJlZ0luZGV4XysrOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IE1JUlR5cGU6OlNpbWQxMjg6IHsKKysgICAgICAvLyBQYXNzIHYxMjggaW4gRlAgcmVnaXN0ZXJz IChTaW1kMTI4IGtpbmQpLiBPbiBQUEM2NCBFTEZ2MiwgU0lNRAorKyAgICAgIC8vIHZhbHVlcyB1 c2UgdGhlIHNhbWUgVlNSIHJlZ2lzdGVyIGZpbGUgYXMgRlAgYXJncy4KKysgICAgICBpZiAoZmxv YXRSZWdJbmRleF8gPT0gTnVtRmxvYXRBcmdSZWdzKSB7CisrICAgICAgICBjdXJyZW50XyA9IEFC SUFyZyhzdGFja09mZnNldF8pOworKyAgICAgICAgc3RhY2tPZmZzZXRfICs9IDE2OworKyAgICAg ICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGN1cnJlbnRfID0gQUJJQXJnKEZsb2F0UmVnaXN0 ZXIoCisrICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpFbmNvZGluZyhGbG9hdFJlZ2lzdGVyczo6 ZjEgKyBmbG9hdFJlZ0luZGV4XyksCisrICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4 KSk7CisrICAgICAgZmxvYXRSZWdJbmRleF8rKzsKKysgICAgICBpZiAoaW50UmVnSW5kZXhfIDwg TnVtSW50QXJnUmVncykgeworKyAgICAgICAgaW50UmVnSW5kZXhfKys7CisrICAgICAgfQorKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJVbmV4 cGVjdGVkIGFyZ3VtZW50IHR5cGUiKTsKKysgIH0KKysgIHJldHVybiBjdXJyZW50XzsKKyt9Cisr CisrLy8gQ29uZGl0aW9uIGludmVyc2lvbiB0YWJsZXMuCisrQXNzZW1ibGVyOjpDb25kaXRpb24g QXNzZW1ibGVyOjpJbnZlcnRDb25kaXRpb24oQ29uZGl0aW9uIGNvbmQpIHsKKysgIHN3aXRjaCAo Y29uZCkgeworKyAgICBjYXNlIEVxdWFsOgorKyAgICAgIHJldHVybiBOb3RFcXVhbDsKKysgICAg Y2FzZSBOb3RFcXVhbDoKKysgICAgICByZXR1cm4gRXF1YWw7CisrICAgIGNhc2UgTGVzc1RoYW46 CisrICAgICAgcmV0dXJuIEdyZWF0ZXJUaGFuT3JFcXVhbDsKKysgICAgY2FzZSBMZXNzVGhhbk9y RXF1YWw6CisrICAgICAgcmV0dXJuIEdyZWF0ZXJUaGFuOworKyAgICBjYXNlIEdyZWF0ZXJUaGFu OgorKyAgICAgIHJldHVybiBMZXNzVGhhbk9yRXF1YWw7CisrICAgIGNhc2UgR3JlYXRlclRoYW5P ckVxdWFsOgorKyAgICAgIHJldHVybiBMZXNzVGhhbjsKKysgICAgY2FzZSBBYm92ZToKKysgICAg ICByZXR1cm4gQmVsb3dPckVxdWFsOworKyAgICBjYXNlIEFib3ZlT3JFcXVhbDoKKysgICAgICBy ZXR1cm4gQmVsb3c7CisrICAgIGNhc2UgQmVsb3c6CisrICAgICAgcmV0dXJuIEFib3ZlT3JFcXVh bDsKKysgICAgY2FzZSBCZWxvd09yRXF1YWw6CisrICAgICAgcmV0dXJuIEFib3ZlOworKyAgICBj YXNlIFplcm86CisrICAgICAgcmV0dXJuIE5vblplcm87CisrICAgIGNhc2UgTm9uWmVybzoKKysg ICAgICByZXR1cm4gWmVybzsKKysgICAgY2FzZSBTaWduZWQ6CisrICAgICAgcmV0dXJuIE5vdFNp Z25lZDsKKysgICAgY2FzZSBOb3RTaWduZWQ6CisrICAgICAgcmV0dXJuIFNpZ25lZDsKKysgICAg Y2FzZSBTT0JpdDoKKysgICAgICByZXR1cm4gTlNPQml0OworKyAgICBjYXNlIE5TT0JpdDoKKysg ICAgICByZXR1cm4gU09CaXQ7CisrICAgIGNhc2UgT3ZlcmZsb3c6CisrICAgICAgcmV0dXJuIE5v dE92ZXJmbG93OworKyAgICBjYXNlIE5vdE92ZXJmbG93OgorKyAgICAgIHJldHVybiBPdmVyZmxv dzsKKysgICAgY2FzZSBDYXJyeVNldDoKKysgICAgICByZXR1cm4gQ2FycnlDbGVhcjsKKysgICAg Y2FzZSBDYXJyeUNsZWFyOgorKyAgICAgIHJldHVybiBDYXJyeVNldDsKKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgY29uZGl0aW9uIik7CisrICB9CisrfQorKwor K0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIEFzc2VtYmxlcjo6SW52ZXJ0Q29uZGl0aW9uKERv dWJsZUNvbmRpdGlvbiBjb25kKSB7CisrICBzd2l0Y2ggKGNvbmQpIHsKKysgICAgY2FzZSBEb3Vi bGVPcmRlcmVkOgorKyAgICAgIHJldHVybiBEb3VibGVVbm9yZGVyZWQ7CisrICAgIGNhc2UgRG91 YmxlRXF1YWw6CisrICAgICAgcmV0dXJuIERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQ7CisrICAg IGNhc2UgRG91YmxlTm90RXF1YWw6CisrICAgICAgcmV0dXJuIERvdWJsZUVxdWFsT3JVbm9yZGVy ZWQ7CisrICAgIGNhc2UgRG91YmxlR3JlYXRlclRoYW46CisrICAgICAgcmV0dXJuIERvdWJsZUxl c3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkOworKyAgICBjYXNlIERvdWJsZUdyZWF0ZXJUaGFuT3JF cXVhbDoKKysgICAgICByZXR1cm4gRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDsKKysgICAgY2Fz ZSBEb3VibGVMZXNzVGhhbjoKKysgICAgICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW5PckVxdWFs T3JVbm9yZGVyZWQ7CisrICAgIGNhc2UgRG91YmxlTGVzc1RoYW5PckVxdWFsOgorKyAgICAgIHJl dHVybiBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkOworKyAgICBjYXNlIERvdWJsZVVub3Jk ZXJlZDoKKysgICAgICByZXR1cm4gRG91YmxlT3JkZXJlZDsKKysgICAgY2FzZSBEb3VibGVFcXVh bE9yVW5vcmRlcmVkOgorKyAgICAgIHJldHVybiBEb3VibGVOb3RFcXVhbDsKKysgICAgY2FzZSBE b3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOgorKyAgICAgIHJldHVybiBEb3VibGVFcXVhbDsKKysg ICAgY2FzZSBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkOgorKyAgICAgIHJldHVybiBEb3Vi bGVMZXNzVGhhbk9yRXF1YWw7CisrICAgIGNhc2UgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JV bm9yZGVyZWQ6CisrICAgICAgcmV0dXJuIERvdWJsZUxlc3NUaGFuOworKyAgICBjYXNlIERvdWJs ZUxlc3NUaGFuT3JVbm9yZGVyZWQ6CisrICAgICAgcmV0dXJuIERvdWJsZUdyZWF0ZXJUaGFuT3JF cXVhbDsKKysgICAgY2FzZSBEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKKysgICAg ICByZXR1cm4gRG91YmxlR3JlYXRlclRoYW47CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NS QVNIKCJ1bmV4cGVjdGVkIGNvbmRpdGlvbiIpOworKyAgfQorK30KKysKKysvLyBJbnN0SW1tIGhl bHBlci4KKyt1aW50OF90IEluc3RJbW06OnRyYXB0YWcoKSB7CisrICB1aW50OF90IHIgPSAoKGRh dGEgJiAweDAwMWYwMDAwKSA+PiAxNik7CisrICBNT1pfQVNTRVJUKGlzT3Bjb2RlKFBQQ190dykp OworKyAgTU9aX0FTU0VSVChyID09ICgoZGF0YSAmIDB4MDAwMGY4MDApID4+IDExKSk7CisrICBy ZXR1cm4gciAmIDB4ZmU7CisrfQorKworK0JPZmZJbW0xNjo6Qk9mZkltbTE2KEluc3RJbW0gaW5z dCkgOiBkYXRhKGluc3QuZXh0cmFjdEltbTE2VmFsdWUoKSAmIDB4RkZGQykgeworKyAgLy8gU2ln bi1leHRlbmQgdGhlIDE2LWJpdCBmaWVsZC4KKysgIGlmIChkYXRhICYgMHg4MDAwKSB7CisrICAg IGRhdGEgfD0gfjB4RkZGRjsKKysgIH0KKyt9CisrCisrSW5zdHJ1Y3Rpb24qIEJPZmZJbW0xNjo6 Z2V0RGVzdChJbnN0cnVjdGlvbiogc3JjKSBjb25zdCB7CisrICByZXR1cm4gKEluc3RydWN0aW9u KikoKHVpbnQ4X3QqKXNyYyArIGRhdGEpOworK30KKysKKytJbnN0cnVjdGlvbiogSk9mZkltbTI2 OjpnZXREZXN0KEluc3RydWN0aW9uKiBzcmMpIGNvbnN0IHsKKysgIHJldHVybiAoSW5zdHJ1Y3Rp b24qKSgodWludDhfdCopc3JjICsgZGF0YSk7CisrfQorKworK0ltbTE2OjpJbW0xNigpIDogdmFs dWUoMCkge30KKysKKytJbW04OjpJbW04KCkgOiB2YWx1ZSgwKSB7fQorKworKy8vIEJ1ZmZlciBt YW5hZ2VtZW50LgorK2Jvb2wgQXNzZW1ibGVyOjpvb20oKSBjb25zdCB7CisrICByZXR1cm4gQXNz ZW1ibGVyU2hhcmVkOjpvb20oKSB8fCBtX2J1ZmZlci5vb20oKSB8fCBqdW1wUmVsb2NhdGlvbnNf Lm9vbSgpIHx8CisrICAgICAgICAgZGF0YVJlbG9jYXRpb25zXy5vb20oKTsKKyt9CisrCisrdm9p ZCBBc3NlbWJsZXI6OmZpbmlzaCgpIHsKKysgIE1PWl9BU1NFUlQoIWlzRmluaXNoZWQpOworKyAg aXNGaW5pc2hlZCA9IHRydWU7CisrICBtX2J1ZmZlci5mbHVzaFBvb2woKTsKKyt9CisrCisrYm9v bCBBc3NlbWJsZXI6OmFwcGVuZFJhd0NvZGUoY29uc3QgdWludDhfdCogY29kZSwgc2l6ZV90IG51 bUJ5dGVzKSB7CisrICByZXR1cm4gbV9idWZmZXIuYXBwZW5kUmF3Q29kZShjb2RlLCBudW1CeXRl cyk7CisrfQorKworK2Jvb2wgQXNzZW1ibGVyOjpyZXNlcnZlKHNpemVfdCBzaXplKSB7CisrICAv LyBGaXhlZC1zaXplIGNodW5rIGJ1ZmZlcjsgbm8gcG9pbnQgaW4gcmVzZXJ2aW5nIG5vdyB2cy4g b24tZGVtYW5kLgorKyAgcmV0dXJuICFvb20oKTsKKyt9CisrCisrYm9vbCBBc3NlbWJsZXI6OnN3 YXBCdWZmZXIod2FzbTo6Qnl0ZXMmIGJ5dGVzKSB7CisrICBNT1pfQVNTRVJUKGJ5dGVzLmVtcHR5 KCkpOworKyAgaWYgKCFieXRlcy5yZXNpemUoYnl0ZXNOZWVkZWQoKSkpIHsKKysgICAgcmV0dXJu IGZhbHNlOworKyAgfQorKyAgbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYnl0ZXMuYmVnaW4oKSk7 CisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrdm9pZCBBc3NlbWJsZXI6OmNvcHlKdW1wUmVsb2Nh dGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpIHsKKysgIGlmIChqdW1wUmVsb2NhdGlvbnNfLmxlbmd0 aCgpKSB7CisrICAgIG1lbWNweShkZXN0LCBqdW1wUmVsb2NhdGlvbnNfLmJ1ZmZlcigpLCBqdW1w UmVsb2NhdGlvbnNfLmxlbmd0aCgpKTsKKysgIH0KKyt9CisrCisrdm9pZCBBc3NlbWJsZXI6OmNv cHlEYXRhUmVsb2NhdGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpIHsKKysgIGlmIChkYXRhUmVsb2Nh dGlvbnNfLmxlbmd0aCgpKSB7CisrICAgIG1lbWNweShkZXN0LCBkYXRhUmVsb2NhdGlvbnNfLmJ1 ZmZlcigpLCBkYXRhUmVsb2NhdGlvbnNfLmxlbmd0aCgpKTsKKysgIH0KKyt9CisrCisrdm9pZCBB c3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KHZvaWQqIGJ1ZmZlcikgeworKyAgTU9aX0FTU0VSVChp c0ZpbmlzaGVkKTsKKysgIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KHN0YXRpY19jYXN0PHVpbnQ4 X3QqPihidWZmZXIpKTsKKyt9CisrCisrdm9pZCBBc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KHVp bnQ4X3QqIGJ1ZmZlcikgeworKyAgTU9aX0FTU0VSVChpc0ZpbmlzaGVkKTsKKysgIG1fYnVmZmVy LmV4ZWN1dGFibGVDb3B5KGJ1ZmZlcik7CisrfQorKworK3NpemVfdCBBc3NlbWJsZXI6OnNpemUo KSBjb25zdCB7CisrICAvLyBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sczo6c2l6ZSgp IGFzc2VydHMgcG9vbCBpcyBlbXB0eS4KKysgIC8vIEZsdXNoIHBlbmRpbmcgcG9vbCBlbnRyaWVz IGZpcnN0LgorKyAgY29uc3RfY2FzdDxQUENCdWZmZXJXaXRoRXhlY3V0YWJsZUNvcHkmPihtX2J1 ZmZlcikuZmx1c2hQb29sKCk7CisrICByZXR1cm4gbV9idWZmZXIuc2l6ZSgpOworK30KKysKKytz aXplX3QgQXNzZW1ibGVyOjpqdW1wUmVsb2NhdGlvblRhYmxlQnl0ZXMoKSBjb25zdCB7CisrICBy ZXR1cm4ganVtcFJlbG9jYXRpb25zXy5sZW5ndGgoKTsKKyt9CisrCisrc2l6ZV90IEFzc2VtYmxl cjo6ZGF0YVJlbG9jYXRpb25UYWJsZUJ5dGVzKCkgY29uc3QgeworKyAgcmV0dXJuIGRhdGFSZWxv Y2F0aW9uc18ubGVuZ3RoKCk7CisrfQorKworK3NpemVfdCBBc3NlbWJsZXI6OmJ5dGVzTmVlZGVk KCkgY29uc3QgeworKyAgcmV0dXJuIHNpemUoKSArIGp1bXBSZWxvY2F0aW9uVGFibGVCeXRlcygp ICsgZGF0YVJlbG9jYXRpb25UYWJsZUJ5dGVzKCk7CisrfQorKworKy8vIFdyaXRlIGFuIGluc3Ry dWN0aW9uIGludG8gdGhlIGJ1ZmZlciBvciB0byBhbiBleHRlcm5hbCBkZXN0aW5hdGlvbi4KKytC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp3cml0ZUluc3QodWludDMyX3QgeCwgdWludDMyX3QqIGRl c3QpIHsKKysgIE1PWl9BU1NFUlQoaGFzQ3JlYXRvcigpKTsKKysgIGlmIChkZXN0ID09IG51bGxw dHIpIHsKKysgICAgcmV0dXJuIG1fYnVmZmVyLnB1dEludCh4KTsKKysgIH0KKysKKysgIFdyaXRl SW5zdFN0YXRpYyh4LCBkZXN0KTsKKysgIHJldHVybiBCdWZmZXJPZmZzZXQoKTsKKyt9CisrCisr dm9pZCBBc3NlbWJsZXI6OldyaXRlSW5zdFN0YXRpYyh1aW50MzJfdCB4LCB1aW50MzJfdCogZGVz dCkgeworKyAgTU9aX0FTU0VSVChkZXN0ICE9IG51bGxwdHIpOworKyAgKmRlc3QgPSB4OworK30K KysKKysvLyBBbGlnbm1lbnQuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6aGFsdGluZ0FsaWdu KGludCBhbGlnbm1lbnQpIHsKKysgIEJ1ZmZlck9mZnNldCByZXQ7CisrICBNT1pfQVNTRVJUKG1f YnVmZmVyLmlzQWxpZ25lZCg0KSk7CisrICBpZiAoYWxpZ25tZW50ID09IDgpIHsKKysgICAgaWYg KCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KSkgeworKyAgICAgIEJ1ZmZlck9mZnNldCB0 bXAgPSB4c190cmFwKCk7CisrICAgICAgaWYgKCFyZXQuYXNzaWduZWQoKSkgeworKyAgICAgICAg cmV0ID0gdG1wOworKyAgICAgIH0KKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VS VCgoYWxpZ25tZW50ICYgKGFsaWdubWVudCAtIDEpKSA9PSAwKTsKKysgICAgd2hpbGUgKHNpemUo KSAmIChhbGlnbm1lbnQgLSAxKSkgeworKyAgICAgIEJ1ZmZlck9mZnNldCB0bXAgPSB4c190cmFw KCk7CisrICAgICAgaWYgKCFyZXQuYXNzaWduZWQoKSkgeworKyAgICAgICAgcmV0ID0gdG1wOwor KyAgICAgIH0KKysgICAgfQorKyAgfQorKyAgcmV0dXJuIHJldDsKKyt9CisrCisrQnVmZmVyT2Zm c2V0IEFzc2VtYmxlcjo6bm9wQWxpZ24oaW50IGFsaWdubWVudCkgeworKyAgQnVmZmVyT2Zmc2V0 IHJldDsKKysgIE1PWl9BU1NFUlQobV9idWZmZXIuaXNBbGlnbmVkKDQpKTsKKysgIGlmIChhbGln bm1lbnQgPT0gOCkgeworKyAgICBpZiAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7 CisrICAgICAgQnVmZmVyT2Zmc2V0IHRtcCA9IGFzX25vcCgpOworKyAgICAgIGlmICghcmV0LmFz c2lnbmVkKCkpIHsKKysgICAgICAgIHJldCA9IHRtcDsKKysgICAgICB9CisrICAgIH0KKysgIH0g ZWxzZSB7CisrICAgIE1PWl9BU1NFUlQoKGFsaWdubWVudCAmIChhbGlnbm1lbnQgLSAxKSkgPT0g MCk7CisrICAgIHdoaWxlIChzaXplKCkgJiAoYWxpZ25tZW50IC0gMSkpIHsKKysgICAgICBCdWZm ZXJPZmZzZXQgdG1wID0gYXNfbm9wKCk7CisrICAgICAgaWYgKCFyZXQuYXNzaWduZWQoKSkgewor KyAgICAgICAgcmV0ID0gdG1wOworKyAgICAgIH0KKysgICAgfQorKyAgfQorKyAgcmV0dXJuIHJl dDsKKyt9CisrCisrLy8gUHJpbWl0aXZlIGluc3RydWN0aW9ucy4KKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc19ub3AoKSB7CisrICBzcGV3KCJub3AiKTsKKysgIHJldHVybiB3cml0ZUluc3Qo UFBDX25vcCk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x3c3luYygpIHsK KysgIHNwZXcoImx3c3luYyIpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfbHdzeW5jKTsKKyt9 CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3luYygpIHsKKysgIHNwZXcoInN5bmMi KTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3N5bmMpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19pc3luYygpIHsKKysgIHNwZXcoImlzeW5jIik7CisrICByZXR1cm4gd3Jp dGVJbnN0KFBQQ19pc3luYyk7CisrfQorKworKy8vIEJyYW5jaCBhbmQganVtcCBpbnN0cnVjdGlv bnMuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYihKT2ZmSW1tMjYgb2ZmLCBCcmFuY2hB ZGRyZXNzVHlwZSBiYXQsIExpbmtCaXQgbGIpIHsKKysgIHJldHVybiBhc19iKG9mZi5lbmNvZGUo KSwgYmF0LCBsYik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2IoaW50MzJf dCBvZmYsIEJyYW5jaEFkZHJlc3NUeXBlIGJhdCwgTGlua0JpdCBsYikgeworKyAgc3BldygiYiVz JXNcdCV4IiwgYmF0ID09IEFic29sdXRlQnJhbmNoID8gImEiIDogIiIsIGxiID8gImwiIDogIiIs IG9mZik7CisrICBNT1pfQVNTRVJUKCEob2ZmICYgMHgwMykpOworKyAgcmV0dXJuIHdyaXRlSW5z dChQUENfYiB8ICgodWludDMyX3Qpb2ZmICYgMHgzZmZmZmZjKSB8IGJhdCB8IGxiKTsKKyt9Cisr CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmxyKExpbmtCaXQgbGIpIHsKKysgIHNwZXco ImJsciVzIiwgbGIgPyAibCIgOiAiIik7CisrICByZXR1cm4gd3JpdGVJbnN0KHVpbnQzMl90KFBQ Q19ibHIpIHwgdWludDMyX3QobGIpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 YXNfYmN0cihMaW5rQml0IGxiKSB7CisrICBzcGV3KCJiY3RyJXMiLCBsYiA/ICJsIiA6ICIiKTsK KysgIHJldHVybiB3cml0ZUluc3QodWludDMyX3QoUFBDX2JjdHIpIHwgdWludDMyX3QobGIpKTsK Kyt9CisrCisrLy8gQ29uZGl0aW9uYWwgYnJhbmNoZXMuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfYmMoQk9mZkltbTE2IG9mZiwgQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIp IHsKKysgIHJldHVybiBhc19iYyhvZmYuZW5jb2RlKCksIGNvbmQsIGNyLCBsa2IsIGxiKTsKKyt9 CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmMoaW50MTZfdCBvZmYsIENvbmRpdGlv biBjb25kLCBDUmVnaXN0ZXJJRCBjciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aWtlbHlCaXQgbGtiLCBMaW5rQml0IGxiKSB7CisrICByZXR1cm4gYXNfYmMob2ZmLCBjb21wdXRl Q29uZGl0aW9uQ29kZShjb25kLCBjciksIGxrYiwgbGIpOworK30KKysKKytCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc19iYyhCT2ZmSW1tMTYgb2ZmLCBEb3VibGVDb25kaXRpb24gY29uZCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUmVnaXN0ZXJJRCBjciwgTGlrZWx5Qml0IGxr YiwgTGlua0JpdCBsYikgeworKyAgcmV0dXJuIGFzX2JjKG9mZi5lbmNvZGUoKSwgY29uZCwgY3Is IGxrYiwgbGIpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19iYyhpbnQxNl90 IG9mZiwgRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsKKysgIHJldHVy biBhc19iYyhvZmYsIGNvbXB1dGVDb25kaXRpb25Db2RlKGNvbmQsIGNyKSwgbGtiLCBsYik7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2JjY3RyKENvbmRpdGlvbiBjb25kLCBD UmVnaXN0ZXJJRCBjciwgTGlrZWx5Qml0IGxrYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaW5rQml0IGxiKSB7CisrICByZXR1cm4gYXNfYmNjdHIoY29tcHV0ZUNvbmRpdGlv bkNvZGUoY29uZCwgY3IpLCBsa2IsIGxiKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfYmNjdHIoRG91YmxlQ29uZGl0aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpa2VseUJpdCBsa2IsIExpbmtCaXQgbGIpIHsK KysgIHJldHVybiBhc19iY2N0cihjb21wdXRlQ29uZGl0aW9uQ29kZShjb25kLCBjciksIGxrYiwg bGIpOworK30KKysKKysvLyBDb25kaXRpb24gY29kZSBjb21wdXRhdGlvbjogdHVybiBEb3VibGVD b25kaXRpb24gKyBDUiBpbnRvIEJPfEJJLgorKy8vIE1heSBlbWl0IENSIGxvZ2ljIGluc3RydWN0 aW9ucyBmb3Igc3ludGhldGljIGNvbmRpdGlvbnMgaW52b2x2aW5nIEZVIGJpdC4KKyt1aW50MTZf dCBBc3NlbWJsZXI6OmNvbXB1dGVDb25kaXRpb25Db2RlKERvdWJsZUNvbmRpdGlvbiBvcCwgQ1Jl Z2lzdGVySUQgY3IpIHsKKysgIGNvbnN0IHVpbnQ4X3QgY29uZEJpdCA9IGNyQml0KGNyLCBvcCk7 CisrICBjb25zdCB1aW50OF90IGZ1Qml0ID0gY3JCaXQoY3IsIERvdWJsZVVub3JkZXJlZCk7Cisr ICB1aW50MzJfdCBuZXdvcCA9ICh1aW50MzJfdClvcCAmIDI1NTsKKysKKysgIGlmIChvcCAmIERv dWJsZUNvbmRpdGlvblVub3JkZXJlZCkgeworKyAgICBpZiAoKHVpbnQzMl90KG9wKSAmIEJyYW5j aE9wdGlvbk1hc2spID09IEJyYW5jaE9uQ2xlYXIpIHsKKysgICAgICBhc19jcm9yYyhjb25kQml0 LCBmdUJpdCwgY29uZEJpdCk7CisrICAgICAgbmV3b3AgfD0gQnJhbmNoT25TZXQ7CisrICAgIH0g ZWxzZSB7CisrICAgICAgaWYgKGNvbmRCaXQgIT0gZnVCaXQpIHsKKysgICAgICAgIGFzX2Nyb3Io Y29uZEJpdCwgZnVCaXQsIGNvbmRCaXQpOworKyAgICAgIH0KKysgICAgfQorKyAgfSBlbHNlIHsK KysgICAgaWYgKCh1aW50MzJfdChvcCkgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPbkNs ZWFyKSB7CisrICAgICAgaWYgKGNvbmRCaXQgIT0gZnVCaXQpIHsKKysgICAgICAgIGFzX2Nyb3Io Y29uZEJpdCwgZnVCaXQsIGNvbmRCaXQpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAg ICBpZiAoY29uZEJpdCAhPSBmdUJpdCkgeworKyAgICAgICAgYXNfY3JhbmRjKGNvbmRCaXQsIGNv bmRCaXQsIGZ1Qml0KTsKKysgICAgICB9CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybiAobmV3 b3AgKyAoKHVpbnQ4X3QpY3IgPDwgNikpOworK30KKysKKysvLyBDb25kaXRpb24gY29kZSBjb21w dXRhdGlvbjogdHVybiBDb25kaXRpb24gKyBDUiBpbnRvIEJPfEJJLgorKy8vIE1heSBlbWl0IG1j cnhyeCBmb3IgWEVSLW1lZGlhdGVkIGNvbmRpdGlvbnMuCisrdWludDE2X3QgQXNzZW1ibGVyOjpj b21wdXRlQ29uZGl0aW9uQ29kZShDb25kaXRpb24gb3AsIENSZWdpc3RlcklEIGNyKSB7CisrICB1 aW50MzJfdCBuZXdvcCA9ICh1aW50MzJfdClvcCAmIDI1NTsKKysKKysgIGlmIChvcCAmIENvbmRp dGlvbk9ubHlYRVIpIHsKKysgICAgTU9aX0FTU0VSVChvcCA9PSBPdmVyZmxvdyB8fCBvcCA9PSBO b3RPdmVyZmxvdyk7CisrICAgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgIGFzX21jcnhyeChj cik7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8gUE9XRVI4OiByZWFkIFhFUiwgcGxhY2UgT1Yg aW50byB0aGUgR1QgcG9zaXRpb24gb2YgdGhlIHRhcmdldAorKyAgICAgIC8vIENSIGZpZWxkLiBP dmVyZmxvdyBjb25kaXRpb24gKDB4MWMgPSBHcmVhdGVyVGhhbikgdGVzdHMgR1QgYml0LAorKyAg ICAgIC8vIHdoaWNoIG1jcnhyeCBwb3B1bGF0ZXMgd2l0aCBPVjMyLiBGb3IgNjQtYml0IG9wcyBP ViA9PSBPVjMyLgorKyAgICAgIC8vIFhFUiBsYXlvdXQgaW4gR1BSIGxvdyAzMiBiaXRzIChJQk0p OiBiaXQgMD1TTywgMT1PViwgMj1DQS4KKysgICAgICAvLyBUYXJnZXQ6IEdUIHBvc2l0aW9uID0g SUJNIGJpdCA0KmNyKzEuCisrICAgICAgeHNfbWZ4ZXIocjApOworKyAgICAgIGludCBndEJpdCA9 IDQgKiAoaW50KWNyICsgMTsgICAgICAgICAgLy8gR1QgcG9zaXRpb24gaW4gQ1IgZmllbGQKKysg ICAgICBpbnQgc2ggPSAoMSAtIGd0Qml0KSAmIDMxOyAgICAgICAgICAgIC8vIHJvdGF0ZSBPViBm cm9tIGJpdCAxIHRvIGd0Qml0CisrICAgICAgYXNfcmx3aW5tKHIwLCByMCwgc2gsIGd0Qml0LCBn dEJpdCk7ICAvLyBpc29sYXRlIE9WIGF0IEdUIG9ubHkKKysgICAgICBhc19tdGNyZigxIDw8ICg3 IC0gKGludCljciksIHIwKTsKKysgICAgfQorKyAgICBuZXdvcCA9ICh1aW50MzJfdClvcCAmIDI1 NTsKKysgIH0KKysKKysgIHJldHVybiAobmV3b3AgKyAoKHVpbnQ4X3QpY3IgPDwgNikpOworK30K KysKKysvLyBHaXZlbiBCT3xCSSBpbiBhIDE2LWJpdCBxdWFudGl0eSwgc3BsaXQgaW50byBiaXQg ZmllbGRzIGZvciBpbnN0cnVjdGlvbi4KKytzdGF0aWMgdWludDMyX3QgbWFrZU9wTWFzayh1aW50 MTZfdCBvcCkgeworKyAgTU9aX0FTU0VSVCghKG9wICYgMHhmYzAwKSk7CisrICByZXR1cm4gKChv cCAmIDB4MGYpIDw8IDIxKSB8ICgob3AgJiAweGZmZjApIDw8IDEyKTsKKyt9CisrCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfYmMoaW50MTZfdCBvZmYsIHVpbnQxNl90IG9wLCBMaWtlbHlC aXQgbGtiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtCaXQgbGIpIHsKKysg IHNwZXcoImJjJXMlc1x0Qk9fQkk9MHglMDR4LCVkIiwgbGIgPyAibCIgOiAiIiwgbGtiID8gIisi IDogIiIsIG9wLCBvZmYpOworKyAgTU9aX0FTU0VSVCghKG9mZiAmIDB4MDMpKTsKKysgIHJldHVy biB3cml0ZUluc3QoSW5zdHJ1Y3Rpb24oUFBDX2JjIHwgbWFrZU9wTWFzayhvcCkgfCBsa2IgPDwg MjEgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQxNl90KW9mZiAmIDB4 ZmZmYykgfCBsYikKKysgICAgICAgICAgICAgICAgICAgICAgIC5lbmNvZGUoKSk7CisrfQorKwor K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2JjY3RyKHVpbnQxNl90IG9wLCBMaWtlbHlCaXQg bGtiLCBMaW5rQml0IGxiKSB7CisrICBzcGV3KCJiY2N0ciVzJXMiLCBsYiA/ICJsIiA6ICIiLCBs a2IgPyAiKyIgOiAiIik7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19iY2N0ciB8IG1ha2VPcE1h c2sob3ApIHwgbGtiIDw8IDIxIHwgbGIpOworK30KKysKKysvLyBTUFIgb3BlcmF0aW9ucy4KKytC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tdHNwcihTUFJlZ2lzdGVySUQgc3ByLCBSZWdpc3Rl ciByYSkgeworKyAgc3BldygibXRzcHJcdCVkLCUzcyIsIHNwciwgcmEubmFtZSgpKTsKKysgIHJl dHVybiB3cml0ZUluc3QoUFBDX210c3ByIHwgcmEuY29kZSgpIDw8IDIxIHwgUFBDX1NQUihzcHIp KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbWZzcHIoUmVnaXN0ZXIgcmQs IFNQUmVnaXN0ZXJJRCBzcHIpIHsKKysgIHNwZXcoIm1mc3ByXHQlM3MsJWQiLCByZC5uYW1lKCks IHNwcik7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19tZnNwciB8IHJkLmNvZGUoKSA8PCAyMSB8 IFBQQ19TUFIoc3ByKSk7CisrfQorKworKy8vIENSIG9wZXJhdGlvbnMuCisrI2RlZmluZSBERUZf Q1JDUihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCh1aW50OF90IHQsIHVpbnQ4X3Qg YSwgdWludDhfdCBiKSB7IFwKKysgICAgc3Bldygjb3AgIlx0JWQsJWQsJWQiLCB0LCBhLCBiKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3Qo UFBDXyMjb3AgfCB0IDw8IDIxIHwgYSA8PCAxNiB8IGIgPDwgMTEpOyAgICAgICAgXAorKyAgfQor K0RFRl9DUkNSKGNyYW5kYykKKytERUZfQ1JDUihjcm9yKQorK0RFRl9DUkNSKGNyb3JjKQorKyN1 bmRlZiBERUZfQ1JDUgorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210Y3JmKHVpbnQz Ml90IG1hc2ssIFJlZ2lzdGVyIHJzKSB7CisrICBzcGV3KCJtdGNyZlx0JWQsJTNzIiwgbWFzaywg cnMubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX210Y3JmIHwgcnMuY29kZSgpIDw8 IDIxIHwgbWFzayA8PCAxMik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX21m b2NyZihSZWdpc3RlciByZCwgQ1JlZ2lzdGVySUQgY3JmcykgeworKyAgc3BldygibWZvY3JmXHQl M3MsY3IlZCIsIHJkLm5hbWUoKSwgY3Jmcyk7CisrICAvLyBGWE0gaXMgYSBvbmUtaG90IDgtYml0 IG1hc2sgYXQgYml0cyAxMi0xOS4gQml0ICg3LWNyZnMpIHNlbGVjdHMgdGhlIENSLgorKyAgcmV0 dXJuIHdyaXRlSW5zdChQUENfbWZvY3JmIHwgcmQuY29kZSgpIDw8IDIxIHwgKDEgPDwgKDcgLSBj cmZzKSkgPDwgMTIpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tY3J4cngo Q1JlZ2lzdGVySUQgY3IpIHsKKysgIHNwZXcoIm1jcnhyeFx0Y3IlZCIsIGNyKTsKKysgIHJldHVy biB3cml0ZUluc3QoUFBDX21jcnhyeCB8IGNyIDw8IDIzKTsKKyt9CisrCisrLy8gR1BSIG5lZy4K KytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19uZWcoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJz KSB7CisrICBzcGV3KCJuZWdcdCUzcywlM3MiLCByZC5uYW1lKCksIHJzLm5hbWUoKSk7CisrICBy ZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDX25lZywgcmQsIHJzLCByMCkuZW5jb2RlKCkpOwor K30KKysKKysvLyBDb21wYXJlIGluc3RydWN0aW9ucy4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVy Ojphc19jbXBkKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysg IHNwZXcoImNtcGRcdGNyJWQsJTNzLCUzcyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Cisr ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBkIHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYg fCByYi5jb2RlKCkgPDwgMTEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19j bXBkaShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsKKysgIHNwZXco ImNtcGRpXHRjciVkLCUzcywlZCIsIGNyLCByYS5uYW1lKCksIGltKTsKKysgIHJldHVybiB3cml0 ZUluc3QoUFBDX2NtcGRpIHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAg ICAgICAgICAgICAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7CisrfQorKworK0J1ZmZlck9mZnNl dCBBc3NlbWJsZXI6OmFzX2NtcGxkKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0 ZXIgcmIpIHsKKysgIHNwZXcoImNtcGxkXHRjciVkLCUzcywlM3MiLCBjciwgcmEubmFtZSgpLCBy Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbGQgfCBjciA8PCAyMyB8IHJh LmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX2NtcGxkaShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3Qg aW0pIHsKKysgIHNwZXcoImNtcGxkaVx0Y3IlZCwlM3MsJWQiLCBjciwgcmEubmFtZSgpLCBpbSk7 CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsZGkgfCBjciA8PCAyMyB8IHJhLmNvZGUoKSA8 PCAxNiB8CisrICAgICAgICAgICAgICAgICAgICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKKyt9 CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wdyhDUmVnaXN0ZXJJRCBjciwgUmVn aXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJjbXB3XHRjciVkLCUzcywlM3MiLCBj ciwgcmEubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wdyB8 IGNyIDw8IDIzIHwgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDExKTsKKyt9CisrCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wd2koQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVy IHJhLCBpbnQxNl90IGltKSB7CisrICBzcGV3KCJjbXB3aVx0Y3IlZCwlM3MsJWQiLCBjciwgcmEu bmFtZSgpLCBpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXB3aSB8IGNyIDw8IDIzIHwg cmEuY29kZSgpIDw8IDE2IHwKKysgICAgICAgICAgICAgICAgICAgKCh1aW50MTZfdClpbSAmIDB4 ZmZmZikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsdyhDUmVnaXN0 ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJjbXBsd1x0Y3Il ZCwlM3MsJTNzIiwgY3IsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUlu c3QoUFBDX2NtcGx3IHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwg MTEpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19jbXBsd2koQ1JlZ2lzdGVy SUQgY3IsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7CisrICBzcGV3KCJjbXBsd2lcdGNyJWQs JTNzLCVkIiwgY3IsIHJhLm5hbWUoKSwgaW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21w bHdpIHwgY3IgPDwgMjMgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAgICAo KHVpbnQxNl90KWltICYgMHhmZmZmKSk7CisrfQorKworKy8vIENvbXBhcmUgaW5zdHJ1Y3Rpb25z IChjcjAgaW1wbGljaXQpLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGQoUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJjbXBkXHQlM3MsJTNzIiwgcmEubmFtZSgp LCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wZCB8IHJhLmNvZGUoKSA8 PCAxNiB8IHJiLmNvZGUoKSA8PCAxMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX2NtcGRpKFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7CisrICBzcGV3KCJjbXBkaVx0JTNz LCVkIiwgcmEubmFtZSgpLCBpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBkaSB8IHJh LmNvZGUoKSA8PCAxNiB8ICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKKyt9CisrCisrQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7Cisr ICBzcGV3KCJjbXBsZFx0JTNzLCUzcyIsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVy biB3cml0ZUluc3QoUFBDX2NtcGxkIHwgcmEuY29kZSgpIDw8IDE2IHwgcmIuY29kZSgpIDw8IDEx KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfY21wbGRpKFJlZ2lzdGVyIHJh LCBpbnQxNl90IGltKSB7CisrICBzcGV3KCJjbXBsZGlcdCUzcywlZCIsIHJhLm5hbWUoKSwgaW0p OworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfY21wbGRpIHwgcmEuY29kZSgpIDw8IDE2IHwgKCh1 aW50MTZfdClpbSAmIDB4ZmZmZikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19jbXB3KFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeworKyAgc3BldygiY21wd1x0JTNzLCUz cyIsIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcHcg fCByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEpOworK30KKysKKytCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc19jbXB3aShSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgeworKyAgc3Bl dygiY21wd2lcdCUzcywlZCIsIHJhLm5hbWUoKSwgaW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChQ UENfY21wd2kgfCByYS5jb2RlKCkgPDwgMTYgfCAoKHVpbnQxNl90KWltICYgMHhmZmZmKSk7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3KFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYikgeworKyAgc3BldygiY21wbHdcdCUzcywlM3MiLCByYS5uYW1lKCksIHJiLm5hbWUo KSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19jbXBsdyB8IHJhLmNvZGUoKSA8PCAxNiB8IHJi LmNvZGUoKSA8PCAxMSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2NtcGx3 aShSZWdpc3RlciByYSwgaW50MTZfdCBpbSkgeworKyAgc3BldygiY21wbHdpXHQlM3MsJWQiLCBy YS5uYW1lKCksIGltKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2NtcGx3aSB8IHJhLmNvZGUo KSA8PCAxNiB8ICgodWludDE2X3QpaW0gJiAweGZmZmYpKTsKKyt9CisrCisrLy8gRlAgZW5jb2Rp bmcgaGVscGVycy4KKytzdGF0aWMgdWludDMyX3QgQUZvcm0odWludDMyX3Qgb3AsIEZsb2F0UmVn aXN0ZXIgZnJ0LCBGbG9hdFJlZ2lzdGVyIGZyYSwKKysgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBmcmIsIEZsb2F0UmVnaXN0ZXIgZnJjLCBib29sIHJjKSB7CisrICByZXR1cm4g KG9wIHwgKGZydC5lbmNvZGluZygpIDw8IDIxKSB8IChmcmEuZW5jb2RpbmcoKSA8PCAxNikgfAor KyAgICAgICAgICAoZnJiLmVuY29kaW5nKCkgPDwgMTEpIHwgKGZyYy5lbmNvZGluZygpIDw8IDYp IHwgcmMpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgWEZvcm0odWludDMyX3Qgb3AsIEZsb2F0 UmVnaXN0ZXIgZnJ0LCBGbG9hdFJlZ2lzdGVyIGZyYSwKKysgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBmcmIsIGJvb2wgcmMpIHsKKysgIHJldHVybiAob3AgfCAoZnJ0LmVuY29k aW5nKCkgPDwgMjEpIHwgKGZyYS5lbmNvZGluZygpIDw8IDE2KSB8CisrICAgICAgICAgIChmcmIu ZW5jb2RpbmcoKSA8PCAxMSkgfCByYyk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCBYRm9ybSh1 aW50MzJfdCBvcCwgRmxvYXRSZWdpc3RlciBmcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwK KysgICAgICAgICAgICAgICAgICAgICAgYm9vbCByYykgeworKyAgcmV0dXJuIChvcCB8IChmcnQu ZW5jb2RpbmcoKSA8PCAyMSkgfCAocmEuY29kZSgpIDw8IDE2KSB8IChyYi5jb2RlKCkgPDwgMTEp IHwKKysgICAgICAgICAgcmMpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgREZvcm0odWludDMy X3Qgb3AsIEZsb2F0UmVnaXN0ZXIgZnJ0LCBSZWdpc3RlciByYSwKKysgICAgICAgICAgICAgICAg ICAgICAgaW50MTZfdCBpbW0pIHsKKysgIHJldHVybiAob3AgfCAoZnJ0LmVuY29kaW5nKCkgPDwg MjEpIHwgKHJhLmNvZGUoKSA8PCAxNikgfAorKyAgICAgICAgICAoKHVpbnQxNl90KWltbSAmIDB4 ZmZmZikpOworK30KKysKKysvLyBYWC1mb3JtIGVuY29kZXJzLiBFYWNoIGZvcm0gaGFzIGl0cyBv d24gWC1iaXQgcG9zaXRpb25zLgorKy8vIEFsbCB0YWtlIHVpbnQzMl90IGVuY29kaW5ncyAoMC02 Mykgc28gdGhleSBjb3JyZWN0bHkKKysvLyBlbWl0IHRoZSBoaWdoIGJpdCBmb3IgVlNSMzItNjMu IEZsb2F0UmVnaXN0ZXIuZW5jb2RpbmcoKSByZXR1cm5zIDAtMzEKKysvLyBmb3IgU2luZ2xlL0Rv dWJsZSAoPSBWU1IwLTMxID0gRlBSIG5hbWVzcGFjZSkgYW5kIDMyLTYzIGZvciBTaW1kMTI4Cisr Ly8gKD0gVlNSMzItNjMgPSBWUiBuYW1lc3BhY2UpIOKAlCBzbyBhIHNpbmdsZSBYWC1mb3JtIGVu Y29kZXIgYWRkcmVzc2VzCisrLy8gdGhlIGZ1bGwgVlNSIHNwYWNlLgorKworKy8vIFhYMS1mb3Jt OiBUICsgR1BSIChSQSkgKyBHUFIgKFJCKS4gVFggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwLgor Ky8vIFVzZWQgYnkgbHh2eCwgc3R4dngsIGx4dmQyeCwgc3R4dmQyeCwgbXR2c3JkZCwgbXR2c3Jk LCBtdHZzcndzLCBtdHZzcnd6LgorK3N0YXRpYyB1aW50MzJfdCBYWDFGb3JtKHVpbnQzMl90IG9w LCB1aW50MzJfdCB4dCwgdWludDMyX3QgcmEsIHVpbnQzMl90IHJiKSB7CisrICByZXR1cm4gb3Ag fCAoeHQgJiAzMSkgPDwgMjEgfCAocmEgJiAzMSkgPDwgMTYgfCAocmIgJiAzMSkgPDwgMTEgfAor KyAgICAgICAgICgoeHQgPj4gNSkgJiAxKTsKKyt9CisrCisrLy8gWFgxLWZvcm0gZm9yIG1mdnNy WDogR1BSIChSVCkgKyBWU1IgKFhTKS4gVFggYml0ICgiU1giKSBhdCBpbnN0cnVjdGlvbgorKy8v IGJpdCAwOyB0aGUgWCBzcGVjIGNhbGxzIHRoaXMgU1ggc2luY2UgdGhlIHNvdXJjZSByZWdpc3Rl ciBpcyB0aGUgVlNSLgorKy8vIFVzZWQgYnkgbWZ2c3JkLCBtZnZzcmxkLgorK3N0YXRpYyB1aW50 MzJfdCBYWDFGb3JtTWZ2c3IodWludDMyX3Qgb3AsIHVpbnQzMl90IHJ0LCB1aW50MzJfdCB4cykg eworKyAgcmV0dXJuIG9wIHwgKHhzICYgMzEpIDw8IDIxIHwgKHJ0ICYgMzEpIDw8IDE2IHwgKCh4 cyA+PiA1KSAmIDEpOworK30KKysKKysvLyBYWDItZm9ybTogVCArIEIgKG5vIEEgZmllbGQ7IGJp dHMgMTYtMjAgdW51c2VkIG9yIGhvbGQgYSBVSU0pLiBCWCBiaXQKKysvLyBhdCBpbnN0cnVjdGlv biBiaXQgMSwgVFggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwLiBUaGUgYml0czE2LTIwIHNsb3QK KysvLyBpcyBzZXQgYnkgY2FsbGVycyDigJQgZm9yIHBsYWluIFhYMiBpdCBtdXN0IGJlIDAsIGZv ciBYWDIgd2l0aCBVSU0gaXQKKysvLyBob2xkcyB0aGUgaW1tZWRpYXRlLgorKy8vIFVzZWQgYnkg eHhicmQsIHh4YnJoLCB4eGJydywgeHhicnEsIHhzY3ZkcHNwLCB4c2N2c3BkcCwgeHNjdmRwc3Bu LAorKy8vIHhzY3ZzcGRwbiwgeHhzcGx0dyAoVUlNPTIgYml0cyksIHh4aW5zZXJ0dyAoVUlNPTQg Yml0cyksCisrLy8geHhleHRyYWN0dXcgKFVJTT00IGJpdHMpLCB4dmFicyoveHZuZWcqL3h2c3Fy dCoveHZyKiBldGMuIHZpYQorKy8vIERFRl9WU1hfVU4uCisrc3RhdGljIHVpbnQzMl90IFhYMkZv cm0odWludDMyX3Qgb3AsIHVpbnQzMl90IHh0LCB1aW50MzJfdCB4YiwKKysgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBiaXRzMTZ0bzIwID0gMCkgeworKyAgcmV0dXJuIG9wIHwgKHh0 ICYgMzEpIDw8IDIxIHwgKGJpdHMxNnRvMjAgJiAzMSkgPDwgMTYgfCAoeGIgJiAzMSkgPDwgMTEg fAorKyAgICAgICAgICgoeGIgPj4gNSkgJiAxKSA8PCAxIHwgKCh4dCA+PiA1KSAmIDEpOworK30K KysKKysvLyBYWDMtZm9ybTogVCArIEEgKyBCLiBBWC9CWC9UWCBiaXRzIGF0IGluc3RydWN0aW9u IGJpdHMgMi8xLzAuCisrLy8gVXNlZCBieSB4eGxvciwgeHhsYW5kLCB4eGx4b3IsIHh4bG5vciwg eHhsYW5kYywgeHhwZXJtZGksIHhzbWF4amRwLAorKy8vIHhzbWluamRwLCB4dmFkZCosIHh2Y21w KiwgZXRjLgorK3N0YXRpYyB1aW50MzJfdCBYWDNGb3JtKHVpbnQzMl90IG9wLCB1aW50MzJfdCB4 dCwgdWludDMyX3QgeGEsIHVpbnQzMl90IHhiKSB7CisrICByZXR1cm4gb3AgfCAoeHQgJiAzMSkg PDwgMjEgfCAoeGEgJiAzMSkgPDwgMTYgfCAoeGIgJiAzMSkgPDwgMTEgfAorKyAgICAgICAgICgo eGEgPj4gNSkgJiAxKSA8PCAyIHwgKCh4YiA+PiA1KSAmIDEpIDw8IDEgfCAoKHh0ID4+IDUpICYg MSk7CisrfQorKworKy8vIFhYNC1mb3JtOiBUICsgQSArIEIgKyBDLiBDWC9BWC9CWC9UWCBiaXRz IGF0IGluc3RydWN0aW9uIGJpdHMgMy8yLzEvMC4KKysvLyBVc2VkIGJ5IHh4c2VsLgorK3N0YXRp YyB1aW50MzJfdCBYWDRGb3JtKHVpbnQzMl90IG9wLCB1aW50MzJfdCB4dCwgdWludDMyX3QgeGEs IHVpbnQzMl90IHhiLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHhjKSB7Cisr ICByZXR1cm4gb3AgfCAoeHQgJiAzMSkgPDwgMjEgfCAoeGEgJiAzMSkgPDwgMTYgfCAoeGIgJiAz MSkgPDwgMTEgfAorKyAgICAgICAgICh4YyAmIDMxKSA8PCA2IHwgKCh4YyA+PiA1KSAmIDEpIDw8 IDMgfCAoKHhhID4+IDUpICYgMSkgPDwgMiB8CisrICAgICAgICAgKCh4YiA+PiA1KSAmIDEpIDw8 IDEgfCAoKHh0ID4+IDUpICYgMSk7CisrfQorKworKy8vIEZsb2F0UmVnaXN0ZXIgY29udmVuaWVu Y2Ugb3ZlcmxvYWQgZm9yIFhYM0Zvcm0gKHRoZSBtb3N0IGNvbW1vbiBmb3JtKS4KKytzdGF0aWMg dWludDMyX3QgWFgzRm9ybSh1aW50MzJfdCBvcCwgRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdp c3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7Cisr ICByZXR1cm4gWFgzRm9ybShvcCwgdWludDMyX3QoeHQuZW5jb2RpbmcoKSksIHVpbnQzMl90KHhh LmVuY29kaW5nKCkpLAorKyAgICAgICAgICAgICAgICAgdWludDMyX3QoeGIuZW5jb2RpbmcoKSkp OworK30KKysKKysvLyAtLS0gTWFjcm8tZGVmaW5lZCBpbnN0cnVjdGlvbiBlbWl0dGVycyAtLS0K KysKKysvLyBYLWZvcm06IHJkIGluIGJpdHMgMjEtMjUsIHJhIGluIDE2LTIwLCByYiBpbiAxMS0x NS4KKysjZGVmaW5lIERFRl9YRk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18j I29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsgXAorKyAgICBzcGV3 KCNvcCAiXHQlM3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAg ICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVnKFBQQ18jI29wLCByZCwg cmEsIHJiKS5lbmNvZGUoKSk7ICAgICAgICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBERUZf WEZPUk1fUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgcmIpIHsgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNz LCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOyAgICBcCisrICAgIHJldHVy biB3cml0ZUluc3QoSW5zdFJlZyhQUENfIyNvcCwgcmQsIHJhLCByYikuZW5jb2RlKCkgfCAweDEp OyBcCisrICB9CisrCisrLy8gWC1mb3JtIHdpdGggc3dhcHBlZCBSUy9SQSBlbmNvZGluZzogcnMg aW4gYml0cyAyMS0yNSwgcmEgaW4gMTYtMjAuCisrI2RlZmluZSBERUZfWEZPUk1TKG9wKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKSB7IFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCks IHJhLm5hbWUoKSwgcmIubmFtZSgpKTsgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUlu c3QoSW5zdFJlZyhQUENfIyNvcCwgcmEsIHJkLCByYikuZW5jb2RlKCkpOyAgICAgICAgICAgICAg XAorKyAgfQorKworKyNkZWZpbmUgREVGX1hGT1JNU19SQyhvcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf IyNvcCMjX3JjKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgICAgXAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJiKSB7ICAgICAgICAgICAgICAgXAor KyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmIu bmFtZSgpKTsgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDXyMjb3AsIHJh LCByZCwgcmIpLmVuY29kZSgpIHwgMHgxKTsgXAorKyAgfQorKworKy8vIFgtZm9ybSBzaGlmdCBp bW1lZGlhdGUgd2l0aCBzd2FwcGVkIGVuY29kaW5nLgorKyNkZWZpbmUgREVGX1hGT1JNU19JKG9w KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgdWludDhfdCBzaCkgeyAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlZCIs IHJkLm5hbWUoKSwgcmEubmFtZSgpLCBzaCk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAg ICBNT1pfQVNTRVJUKHNoIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCBy YS5jb2RlKCkgPDwgMjEgfCByZC5jb2RlKCkgPDwgMTYgfCBzaCA8PCAxMSk7IFwKKysgIH0KKysK KysvLyAyLXJlZyBYLWZvcm06IHJkIGluIGJpdHMgMjEtMjUsIHJhIGluIDE2LTIwLCByYj1yMC4K KysjZGVmaW5lIERFRl9YRk9STTIob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhKSB7IFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcyIsIHJkLm5hbWUoKSwg cmEubmFtZSgpKTsgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVn KFBQQ18jI29wLCByZCwgcmEsIHIwKS5lbmNvZGUoKSk7IFwKKysgIH0KKysKKysjZGVmaW5lIERF Rl9YRk9STTJfUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEpIHsgIFwKKysgICAgc3Bldygjb3AgIi5cdCUzcywlM3MiLCByZC5uYW1lKCks IHJhLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChJ bnN0UmVnKFBQQ18jI29wLCByZCwgcmEsIHIwKS5lbmNvZGUoKSB8IDB4MSk7IFwKKysgIH0KKysK KysvLyAyLXJlZyBYLWZvcm0gc3dhcHBlZDogcmEgaW4gYml0cyAyMS0yNSwgcmQgaW4gMTYtMjAu CisrI2RlZmluZSBERUZfWEZPUk0yUyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSkgeyBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MiLCByZC5uYW1lKCks IHJhLm5hbWUoKSk7ICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoSW5zdFJl ZyhQUENfIyNvcCwgcmEsIHJkLCByMCkuZW5jb2RlKCkpOyBcCisrICB9CisrCisrI2RlZmluZSBE RUZfWEZPUk0yU19SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhKSB7ICBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNzIiwgcmQubmFtZSgp LCByYS5uYW1lKCkpOyAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3Qo SW5zdFJlZyhQUENfIyNvcCwgcmEsIHJkLCByMCkuZW5jb2RlKCkgfCAweDEpOyBcCisrICB9Cisr CisrLy8gRC1mb3JtIGxvYWQvc3RvcmU6IHJkPVJULCByYj1SQSAoYmFzZSByZWdpc3RlciksIG9m Zj1kaXNwbGFjZW1lbnQuCisrLy8gcjAgY2Fubm90IGJlIHVzZWQgYXMgYmFzZSByZWdpc3RlciBm b3IgRC1mb3JtIGxvYWRzL3N0b3Jlcy4KKysjZGVmaW5lIERFRl9ERk9STShvcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJP ZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZf dCBvZmYpIHsgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJWQoJTNzKSIsIHJkLm5hbWUoKSwgb2Zm LCByYi5uYW1lKCkpOyAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChyYiAhPSBy MCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfIyNvcCwgcmQsIHJiLCBvZmYpLmVuY29k ZSgpKTsgICAgICAgICAgICAgXAorKyAgfQorKworKy8vIEQtZm9ybSB3aXRoIHN3YXBwZWQgUlMv UkEgZW5jb2RpbmcgZm9yIGxvZ2ljYWwgaW1tZWRpYXRlcy4KKysjZGVmaW5lIERFRl9ERk9STVMo b3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciByYSwgdWludDE2X3QgaW0pIHsgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzLCVkIiwgcmQu bmFtZSgpLCByYS5uYW1lKCksIGltKTsgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJu IHdyaXRlSW5zdChJbnN0SW1tKFBQQ18jI29wLCByYSwgcmQsIGltKS5lbmNvZGUoKSk7ICAgICAg ICAgICAgICBcCisrICB9CisrCisrLy8gTS1mb3JtOiByb3RhdGUgd2l0aCAzIHJlZ2lzdGVycyAr IG1iICsgbWUuCisrI2RlZmluZSBERUZfTUZPUk0ob3ApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfIyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiLCAgICAg IFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtYiwgdWludDhf dCBtZSkgeyAgICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNz LCVkLCVkIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSwgbWIsIG1lKTsgXAorKyAg ICBNT1pfQVNTRVJUKG1iIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChtZSA8IDMyKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVy biB3cml0ZUluc3QoUFBDXyMjb3AgfCBycy5jb2RlKCkgPDwgMjEgfCByZC5jb2RlKCkgPDwgMTYg fCAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgIHJiLmNvZGUoKSA8PCAxMSB8IG1i IDw8IDYgfCBtZSA8PCAxKTsgICAgICAgICAgICAgICAgICAgIFwKKysgIH0KKysKKysvLyBNLWZv cm0gd2l0aCBpbW1lZGlhdGUgc2hpZnQuCisrI2RlZmluZSBERUZfTUZPUk1fSShvcCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1 aW50OF90IHNoLCAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IG1iLCB1aW50OF90IG1lKSB7ICAgICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXco I29wICJcdCUzcywlM3MsJWQsJWQsJWQiLCByZC5uYW1lKCksIHJzLm5hbWUoKSwgc2gsIG1iLCBt ZSk7ICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChzaCA8IDMyKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJU KG1iIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQobWUgPCAzMik7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5z dChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUoKSA8PCAxNiB8IHNoIDw8IDEx IHwgXAorKyAgICAgICAgICAgICAgICAgICAgIG1iIDw8IDYgfCBtZSA8PCAxKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrI2RlZmluZSBERUZfTUZP Uk1fSV9SQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhSZWdpc3Rl ciByZCwgUmVnaXN0ZXIgcnMsIHVpbnQ4X3Qgc2gsICAgXAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIsIHVpbnQ4X3QgbWUpIHsgICAgICAgICAgICAg ICBcCisrICAgIHNwZXcoI29wICIuXHQlM3MsJTNzLCVkLCVkLCVkIiwgcmQubmFtZSgpLCBycy5u YW1lKCksIHNoLCBtYiwgbWUpOyAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVChzaCA8IDMyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgICBNT1pfQVNTRVJUKG1iIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQobWUgPCAzMik7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg cmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJkLmNvZGUoKSA8 PCAxNiB8IHNoIDw8IDExIHwgXAorKyAgICAgICAgICAgICAgICAgICAgIG1iIDw8IDYgfCBtZSA8 PCAxIHwgMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB9CisrCisr Ly8gTURTLWZvcm06IHJvdGF0ZSB3aXRoIHJlZ2lzdGVyICsgbWIgKDY0LWJpdCkuCisrI2RlZmlu ZSBERUZfTURTRk9STShvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKFJlZ2lzdGVy IHJhLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIsICBcCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzLCVkIiwgcmEubmFtZSgpLCBycy5uYW1lKCksIHJi Lm5hbWUoKSwgbWIpOyAgICBcCisrICAgIE1PWl9BU1NFUlQobWIgPCA2NCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0 ZUluc3QoUFBDXyMjb3AgfCBycy5jb2RlKCkgPDwgMjEgfCByYS5jb2RlKCkgPDwgMTYgfCAgICAg ICBcCisrICAgICAgICAgICAgICAgICAgICAgcmIuY29kZSgpIDw8IDExIHwgKChtYiAmIDB4MWYp IDw8IDYpIHwgKG1iICYgMHgyMCkpOyBcCisrICB9CisrCisrI2RlZmluZSBERUZfTURTRk9STV9S QyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKFJlZ2lzdGVyIHJhLCBS ZWdpc3RlciBycywgUmVnaXN0ZXIgcmIsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50OF90IG1iKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IHNwZXcoI29wICIuXHQlM3MsJTNzLCUzcywlZCIsIHJhLm5hbWUoKSwgcnMubmFtZSgpLCByYi5u YW1lKCksIG1iKTsgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJu IHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8 ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgcmIuY29kZSgpIDw8IDExIHwgKCht YiAmIDB4MWYpIDw8IDYpIHwgKG1iICYgMHgyMCkgfCAxKTsgXAorKyAgfQorKworKy8vIE1ELWZv cm06IHJvdGF0ZS9zaGlmdCB3aXRoIGltbWVkaWF0ZSBzaCArIG1iICg2NC1iaXQpLgorKy8vIHNo IGFuZCBtYiBhcmUgNi1iaXQgZmllbGRzIHNwbGl0IGFjcm9zcyB0aGUgaW5zdHJ1Y3Rpb24gd29y ZC4KKysjZGVmaW5lIERFRl9NREZPUk0ob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c18jI29wKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgICAgICAgXAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1iKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JTNzLCUzcywlZCwlZCIsIHJh Lm5hbWUoKSwgcnMubmFtZSgpLCBzaCwgbWIpOyAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9B U1NFUlQoc2ggPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRl SW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8ICAgICAg ICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgKChzaCAmIDB4MWYpIDw8IDExKSB8ICgobWIg JiAweDFmKSA8PCA2KSB8IChtYiAmIDB4MjApIHwgXAorKyAgICAgICAgICAgICAgICAgICAgICgo c2ggJiAweDIwKSA+PiA0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KysgIH0KKysKKysjZGVmaW5lIERFRl9NREZPUk1fUkMob3ApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc18jI29wIyNfcmMoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJzLCB1aW50OF90IHNoLCAg XAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWIpIHsg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3AgIi5cdCUzcywlM3MsJWQs JWQiLCByYS5uYW1lKCksIHJzLm5hbWUoKSwgc2gsIG1iKTsgICAgICAgICAgICAgICBcCisrICAg IE1PWl9BU1NFUlQoc2ggPCA2NCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKG1iIDwgNjQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJu IHdyaXRlSW5zdChQUENfIyNvcCB8IHJzLmNvZGUoKSA8PCAyMSB8IHJhLmNvZGUoKSA8PCAxNiB8 ICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgKChzaCAmIDB4MWYpIDw8IDExKSB8 ICgobWIgJiAweDFmKSA8PCA2KSB8IChtYiAmIDB4MjApIHwgXAorKyAgICAgICAgICAgICAgICAg ICAgICgoc2ggJiAweDIwKSA+PiA0KSB8IDB4MDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgIH0KKysKKysvLyBGUCAyLXJlZyBYLWZvcm06IGZydCBpbiBiaXRzIDIxLTI1LCBm cmE9ZjAsIGZyYiBpbiAxMS0xNS4KKysjZGVmaW5lIERFRl9YRk9STTJfRihvcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQg QXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEpIHsg XAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCkpOyAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChYRm9ybShQUENfIyNv cCwgcmQsIGYwLCByYSwgZmFsc2UpKTsgICAgICAgICAgICAgICBcCisrICB9CisrCisrI2RlZmlu ZSBERUZfWEZPUk0yX0ZfUkMob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wIyNfcmMo RmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSkgeyBcCisrICAgIHNwZXcoI29wICIu XHQlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCkpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoWEZvcm0oUFBDXyMjb3AsIHJkLCBmMCwgcmEs IHRydWUpKTsgICAgICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrLy8gRlAgQS1mb3JtIHdp dGggZnJjIChmbXVsLXR5cGUpOiBmcnQsIGZyYSwgZnJjOyBmcmI9ZjAuCisrI2RlZmluZSBERUZf QUZPUk1fQyhvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwg RmxvYXRSZWdpc3RlciByYSwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHJjKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUz cywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJjLm5hbWUoKSk7ICAgICAgIFwKKysg ICAgcmV0dXJuIHdyaXRlSW5zdChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCBmMCwgcmMsIGZhbHNl KSk7ICAgICAgICAgXAorKyAgfQorKworKyNkZWZpbmUgREVGX0FGT1JNX0NfUkMob3ApICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AjI19yYyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lz dGVyIHJhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciByYykgeyAgICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUz cywlM3MiLCByZC5uYW1lKCksIHJhLm5hbWUoKSwgcmMubmFtZSgpKTsgICAgICAgICAgIFwKKysg ICAgcmV0dXJuIHdyaXRlSW5zdChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCBmMCwgcmMsIHRydWUp KTsgICAgICAgICAgICAgICBcCisrICB9CisrCisrLy8gRlAgQS1mb3JtIHdpdGggZnJiIChmYWRk LXR5cGUpOiBmcnQsIGZyYSwgZnJiOyBmcmM9ZjAuCisrI2RlZmluZSBERUZfQUZPUk1fQihvcCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3Rl ciByYSwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHJiKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwg cmQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7ICAgICAgIFwKKysgICAgcmV0dXJuIHdy aXRlSW5zdChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCByYiwgZjAsIGZhbHNlKSk7ICAgICAgICAg XAorKyAgfQorKworKyNkZWZpbmUgREVGX0FGT1JNX0JfUkMob3ApICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzXyMjb3AjI19yYyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByYikg eyAgICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlM3MiLCByZC5u YW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdy aXRlSW5zdChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCByYiwgZjAsIHRydWUpKTsgICAgICAgICAg ICAgICBcCisrICB9CisrCisrLy8gRnVsbCBGUCBBLWZvcm06IGZydCwgZnJhLCBmcmMsIGZyYiAo Zm1hZGQtdHlwZSkuCisrI2RlZmluZSBERUZfQUZPUk0ob3ApICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgICAg ICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHJjLCBGbG9hdFJlZ2lzdGVyIHJiKSB7ICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywl M3MsJTNzLCUzcyIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCByYy5uYW1lKCksIHJiLm5hbWUoKSk7 IFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChBRm9ybShQUENfIyNvcCwgcmQsIHJhLCByYiwgcmMs IGZhbHNlKSk7ICAgICAgICAgICAgICAgICAgXAorKyAgfQorKworKyNkZWZpbmUgREVGX0FGT1JN X1JDKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCMjX3JjKEZsb2F0UmVnaXN0 ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmMsIEZsb2F0UmVnaXN0ZXIgcmIpIHsgXAorKyAg ICBzcGV3KCNvcCAiLlx0JTNzLCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJj Lm5hbWUoKSwgICAgICAgICAgXAorKyAgICAgICAgIHJiLm5hbWUoKSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4g d3JpdGVJbnN0KEFGb3JtKFBQQ18jI29wLCByZCwgcmEsIHJiLCByYywgdHJ1ZSkpOyAgICAgICAg ICAgICAgICAgXAorKyAgfQorKworKy8vIEZQIEQtZm9ybSBsb2FkL3N0b3JlLgorKyNkZWZpbmUg REVGX0RGT1JNX0Yob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYiwgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxNl90 IG9mZikgeyAgICAgICAgICAgICAgICAgXAorKyAgICBzcGV3KCNvcCAiXHQlM3MsJWQoJTNzKSIs IHJkLm5hbWUoKSwgb2ZmLCByYi5uYW1lKCkpOyAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKHJi ICE9IHIwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBy ZXR1cm4gd3JpdGVJbnN0KERGb3JtKFBQQ18jI29wLCByZCwgcmIsIG9mZikpOyAgICAgICAgICAg ICAgXAorKyAgfQorKworKy8vIEZQIFgtZm9ybSBpbmRleGVkIGxvYWQvc3RvcmUuCisrI2RlZmlu ZSBERUZfRk1FTXgob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIHJiKSB7ICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNz IiwgcmQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7ICBcCisrICAgIHJldHVybiB3cml0 ZUluc3QoWEZvcm0oUFBDXyMjb3AsIHJkLCByYSwgcmIsIGZhbHNlKSk7ICAgICAgICBcCisrICB9 CisrCisrLy8gLS0tIFJvdGF0ZS9zaGlmdCBpbnN0cnVjdGlvbnMgLS0tCisrCisrREVGX01GT1JN KHJsd25tKQorK0RFRl9NRk9STV9JKHJsd2lubSkKKytERUZfTUZPUk1fSV9SQyhybHdpbm0pCisr REVGX01GT1JNX0kocmx3aW1pKQorK0RFRl9YRk9STVNfSShzcmF3aSkKKysKKytERUZfTURTRk9S TShybGRjbCkKKytERUZfTURGT1JNKHJsZGljbCkKKytERUZfTURGT1JNX1JDKHJsZGljbCkKKytE RUZfTURGT1JNKHJsZGljcikKKytERUZfTURGT1JNX1JDKHJsZGljcikKKytERUZfTURGT1JNKHJs ZGltaSkKKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zcmFkaShSZWdpc3RlciByZCwg UmVnaXN0ZXIgcnMsIGludCBzaCkgeworKyAgc3Bldygic3JhZGlcdCUzcywlM3MsJWQiLCByZC5u YW1lKCksIHJzLm5hbWUoKSwgc2gpOworKyAgTU9aX0FTU0VSVChzaCA+PSAwICYmIHNoIDwgNjQp OworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfc3JhZGkgfCByZC5jb2RlKCkgPDwgMTYgfCBycy5j b2RlKCkgPDwgMjEgfAorKyAgICAgICAgICAgICAgICAgICAoc2ggJiAweDFmKSA8PCAxMSB8IChz aCAmIDB4MjApID4+IDQpOworK30KKysKKysvLyAtLS0gQUxVIHRocmVlLXJlZ2lzdGVyIC0tLQor KworKyNkZWZpbmUgREVGX0FMVTIob3ApIERFRl9YRk9STShvcCkKKysKKytERUZfQUxVMihhZGQp CisrREVGX0FMVTIoYWRkYykKKytERUZfQUxVMihhZGRlKQorK0RFRl9BTFUyKHN1YmYpCisrREVG X0FMVTIoc3ViZmMpCisrREVGX0FMVTIoc3ViZmUpCisrREVGX0FMVTIoZGl2ZCkKKytERUZfQUxV MihkaXZkdSkKKytERUZfQUxVMihkaXZ3KQorK0RFRl9BTFUyKGRpdnd1KQorKy8vIFBPV0VSOSBt b2R1bG8gKFhPLWZvcm0sIHNhbWUgZW5jb2RpbmcgcGF0dGVybiBhcyBkaXYpLgorK0RFRl9YRk9S TShtb2RzZCkKKytERUZfWEZPUk0obW9kc3cpCisrREVGX1hGT1JNKG1vZHVkKQorK0RFRl9YRk9S TShtb2R1dykKKytERUZfQUxVMihtdWxsZCkKKytERUZfQUxVMihtdWxoZCkKKytERUZfQUxVMiht dWxoZHUpCisrREVGX0FMVTIobXVsbGRvKQorK0RFRl9BTFUyKG11bGx3KQorK0RFRl9BTFUyKG11 bGh3dSkKKysjdW5kZWYgREVGX0FMVTIKKysKKysvLyAtLS0gQUxVIGltbWVkaWF0ZSAtLS0KKysK KysvLyBELWZvcm0gQUxVLWltbWVkaWF0ZSBvcHMgaGF2ZSBubyBSYyBiaXQgYXQgaW5zdHJ1Y3Rp b24gTFNCICh0aGF0IGJpdAorKy8vIGlzIHBhcnQgb2YgdGhlIDE2LWJpdCBpbW1lZGlhdGUpLiBU aGUgb25seSB2YWxpZCByZWNvcmQtZm9ybSB2YXJpYW50CisrLy8gaW4gdGhpcyBncm91cCBpcyBg YWRkaWMuYCwgd2hpY2ggaXMgYSBzZXBhcmF0ZSBwcmltYXJ5IG9wY29kZSAoMTMpCisrLy8gaGFu ZC13cml0dGVuIGJlbG93OyBzdWJmaWMgYW5kIG11bGxpIGhhdmUgbm8gcmVjb3JkIGZvcm0gYXQg YWxsLgorKyNkZWZpbmUgREVGX0FMVUkob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf IyNvcChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pIHsgXAorKyAgICBzcGV3 KCNvcCAiXHQlM3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIGltKTsgICAgICAgICAg ICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDXyMjb3AsIHJkLCBy YSwgaW0pLmVuY29kZSgpKTsgICAgICAgICAgICAgXAorKyAgfQorKworK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX2FkZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3R1YWxseV9saSkgeworKyNp ZmRlZiBERUJVRworKyAgaWYgKGFjdHVhbGx5X2xpKSB7CisrICAgIHNwZXcoImxpXHQlM3MsJWQi LCByZC5uYW1lKCksIGltKTsKKysgIH0gZWxzZSB7CisrICAgIE1PWl9BU1NFUlQocmEgIT0gcjAp OworKyAgICBzcGV3KCJhZGRpXHQlM3MsJTNzLCVkIiwgcmQubmFtZSgpLCByYS5uYW1lKCksIGlt KTsKKysgIH0KKysjZW5kaWYKKysgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQUENfYWRkaSwg cmQsIHJhLCBpbSkuZW5jb2RlKCkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19hZGRpcyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3R1YWxseV9saXMpIHsKKysjaWZkZWYgREVC VUcKKysgIGlmIChhY3R1YWxseV9saXMpIHsKKysgICAgc3BldygibGlzXHQlM3MsJWQiLCByZC5u YW1lKCksIGltKTsKKysgIH0gZWxzZSB7CisrICAgIE1PWl9BU1NFUlQocmEgIT0gcjApOworKyAg ICBzcGV3KCJhZGRpc1x0JTNzLCUzcywlZCIsIHJkLm5hbWUoKSwgcmEubmFtZSgpLCBpbSk7Cisr ICB9CisrI2VuZGlmCisrICByZXR1cm4gd3JpdGVJbnN0KEluc3RJbW0oUFBDX2FkZGlzLCByZCwg cmEsIGltKS5lbmNvZGUoKSk7CisrfQorKworK0RFRl9BTFVJKG11bGxpKQorK0RFRl9BTFVJKHN1 YmZpYykKKysjdW5kZWYgREVGX0FMVUkKKysKKysvLyAtLS0gQUxVIHVuYXJ5L2V4dGVuZGVkIC0t LQorKworKworKyNkZWZpbmUgREVGX0FMVUVfUyhvcCkgREVGX1hGT1JNMlMob3ApCisrREVGX0FM VUVfUyhjbnRsencpCisrREVGX0FMVUVfUyhjbnRsemQpCisrREVGX0FMVUVfUyhjbnR0emQpCisr REVGX0FMVUVfUyhjbnR0encpCisrI3VuZGVmIERFRl9BTFVFX1MKKysKKytERUZfWEZPUk0yUyhw b3BjbnRkKQorK0RFRl9YRk9STTJTKHBvcGNudHcpCisrREVGX1hGT1JNMlMoYnJkKSAgLy8gUE9X RVIxMAorK0RFRl9YRk9STTJTKGJyaCkgIC8vIFBPV0VSMTAKKytERUZfWEZPUk0yUyhicncpICAv LyBQT1dFUjEwCisrCisrLy8gLS0tIEJpdHdpc2UgbG9naWNhbCAodGhyZWUtcmVnaXN0ZXIpIC0t LQorKworKyNkZWZpbmUgREVGX0JJVEFMVTIob3ApIERFRl9YRk9STVMob3ApCisrREVGX0JJVEFM VTIobm9yKQorK0RFRl9CSVRBTFUyKHNsdykKKytERUZfQklUQUxVMihzcncpCisrREVGX0JJVEFM VTIoc3JhdykKKytERUZfQklUQUxVMihzbGQpCisrREVGX0JJVEFMVTIoc3JkKQorK0RFRl9CSVRB TFUyKHNyYWQpCisrI3VuZGVmIERFRl9CSVRBTFUyCisrCisrLy8gYW5kXywgb3JfLCB4b3JfIGFy ZSBtYW51YWxseSBkZWZpbmVkICh0cmFpbGluZyB1bmRlcnNjb3JlIHRvIGF2b2lkIEMrKworKy8v IGtleXdvcmQgY29uZmxpY3RzKS4geHNfbXIgZGVsZWdhdGVzIHRvIGFzX29yXyBzbyB3ZSBtdXN0 IG5vdCBhc3NlcnQKKysvLyByZD09cnM9PXJiIGluIGFzX29yXyAod2hpY2ggd291bGQgYmUgYSB2 YWxpZCBtcikuCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfb3JfKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoIm9yXHQlM3MsJTNzLCUzcyIsIHJk Lm5hbWUoKSwgcnMubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0 UmVnKFBQQ19vcl8sIHJzLCByZCwgcmIpLmVuY29kZSgpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfeG9yXyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJi KSB7CisrICBzcGV3KCJ4b3JcdCUzcywlM3MsJTNzIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJi Lm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KEluc3RSZWcoUFBDX3hvcl8sIHJzLCByZCwg cmIpLmVuY29kZSgpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYW5kXyhS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJhbmRcdCUz cywlM3MsJTNzIiwgcmQubmFtZSgpLCBycy5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4g d3JpdGVJbnN0KEluc3RSZWcoUFBDX2FuZF8sIHJzLCByZCwgcmIpLmVuY29kZSgpKTsKKyt9Cisr CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYW5kX19yYyhSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcnMsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJhbmQuXHQlM3MsJTNzLCUzcyIsIHJkLm5h bWUoKSwgcnMubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0UmVn KFBQQ19hbmRfLCBycywgcmQsIHJiKS5lbmNvZGUoKSB8IDB4MSk7CisrfQorKworKy8vIC0tLSBC aXR3aXNlIGxvZ2ljYWwgKGltbWVkaWF0ZSkgLS0tCisrCisrREVGX0RGT1JNUyhvcmkpCisrREVG X0RGT1JNUyhvcmlzKQorK0RFRl9ERk9STVMoeG9yaSkKKytERUZfREZPUk1TKHhvcmlzKQorKwor K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2FuZGlfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCB1aW50MTZfdCBpbSkgeworKyAgc3BldygiYW5kaS5cdCUzcywlM3MsJWQiLCByZC5uYW1l KCksIHJhLm5hbWUoKSwgaW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChJbnN0SW1tKFBQQ19hbmRp X2RvdCwgcmEsIHJkLCBpbSkuZW5jb2RlKCkpOworK30KKysKKysvLyAtLS0gU2lnbiBleHRlbnNp b24gLS0tCisrCisrI2RlZmluZSBERUZfQUxVRVhUKG9wKSBERUZfWEZPUk0yUyhvcCkgREVGX1hG T1JNMlNfUkMob3ApCisrREVGX1hGT1JNMlMoZXh0c2IpCisrREVGX1hGT1JNMlMoZXh0c2gpCisr REVGX0FMVUVYVChleHRzdykKKysjdW5kZWYgREVGX0FMVUVYVAorKworKy8vIC0tLSBJbnRlZ2Vy IGxvYWRzIChELWZvcm0pIC0tLQorKworK0RFRl9ERk9STShsYnopCisrREVGX0RGT1JNKGxoYSkK KytERUZfREZPUk0obGh6KQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX2x3YShSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKSB7CisrICBzcGV3KCJsd2FcdCUzcywl ZCglM3MpIiwgcmQubmFtZSgpLCBvZmYsIHJiLm5hbWUoKSk7CisrICBNT1pfQVNTRVJUKHJiICE9 IHIwKTsKKysgIE1PWl9BU1NFUlQoIShvZmYgJiAweDAzKSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KEluc3RJbW0oUFBDX2x3YSwgcmQsIHJiLCBvZmYpLmVuY29kZSgpKTsKKyt9CisrCisrREVGX0RG T1JNKGx3eikKKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19sZChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKSB7CisrICBzcGV3KCJsZFx0JTNzLCVkKCUzcykiLCBy ZC5uYW1lKCksIG9mZiwgcmIubmFtZSgpKTsKKysgIE1PWl9BU1NFUlQocmIgIT0gcjApOworKyAg TU9aX0FTU0VSVCghKG9mZiAmIDB4MDMpKTsKKysgIHJldHVybiB3cml0ZUluc3QoSW5zdEltbShQ UENfbGQsIHJkLCByYiwgb2ZmKS5lbmNvZGUoKSk7CisrfQorKworKy8vIC0tLSBJbnRlZ2VyIHN0 b3JlcyAoRC1mb3JtKSAtLS0KKysKKytERUZfREZPUk0oc3RiKQorK0RFRl9ERk9STShzdGgpCisr REVGX0RGT1JNKHN0dykKKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zdGQoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZikgeworKyAgc3Bldygic3RkXHQlM3MsJWQo JTNzKSIsIHJkLm5hbWUoKSwgb2ZmLCByYi5uYW1lKCkpOworKyAgTU9aX0FTU0VSVChyYiAhPSBy MCk7CisrICBNT1pfQVNTRVJUKCEob2ZmICYgMHgwMykpOworKyAgcmV0dXJuIHdyaXRlSW5zdChJ bnN0SW1tKFBQQ19zdGQsIHJkLCByYiwgb2ZmKS5lbmNvZGUoKSk7CisrfQorKworK0RFRl9ERk9S TShzdGR1KQorKworKyN1bmRlZiBERUZfREZPUk0KKysjdW5kZWYgREVGX0RGT1JNUworKworKy8v IC0tLSBJbnRlZ2VyIGxvYWRzL3N0b3JlcyAoWC1mb3JtLCBpbmRleGVkKSAtLS0KKysKKysjZGVm aW5lIERFRl9NRU14KG9wKSBERUZfWEZPUk0ob3ApCisrREVGX01FTXgobGJ6eCkgREVGX01FTXgo bGhheCkgREVGX01FTXgobGh6eCkgREVGX01FTXgobHdheCkKKysgICAgREVGX01FTXgobHd6eCkg REVGX01FTXgobHdhcngpIERFRl9NRU14KGxiYXJ4KQorKyAgICAgICAgREVGX01FTXgobGhhcngp IERFRl9NRU14KGxkeCkgREVGX01FTXgobGRhcngpIERFRl9NRU14KHN0YngpCisrICAgICAgICAg ICAgREVGX01FTXgoc3RiY3gpIERFRl9NRU14KHN0d3gpIERFRl9NRU14KHN0d2JyeCkgREVGX01F TXgoc3RoeCkKKysgICAgICAgICAgICAgICAgREVGX01FTXgoc3RoY3gpIERFRl9NRU14KHN0ZHgp IERFRl9NRU14KHN0ZGN4KQorKyAgICAgICAgICAgICAgICAgICAgREVGX01FTXgoc3R3Y3gpCisr I3VuZGVmIERFRl9NRU14CisrCisrLy8gLS0tIEludGVnZXIgc2VsZWN0IC0tLQorKworK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX2lzZWwoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGJjLCBD UmVnaXN0ZXJJRCBjcikgeworKyAgTU9aX0FTU0VSVChyYSAhPSByMCk7CisrICByZXR1cm4gYXNf aXNlbDAocnQsIHJhLCByYiwgYmMsIGNyKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfaXNlbDAoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYiwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3Ip IHsKKysgIHNwZXcoImlzZWxcdCUzcywlM3MsJTNzLGNyJWQ6MHglMDJ4IiwgcnQubmFtZSgpLCBy YS5uYW1lKCksIHJiLm5hbWUoKSwgY3IsCisrICAgICAgIGJjKTsKKysgIE1PWl9BU1NFUlQoKGJj IDwgMHg0MCkgJiYgKChiYyAmIDB4MGYpID09IDB4MGMpKTsKKysgIHVpbnQxNl90IG5iYyA9IChi YyA+PiA0KSArIChjciA8PCAyKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX2lzZWwgfCBydC5j b2RlKCkgPDwgMjEgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAgICByYi5j b2RlKCkgPDwgMTEgfCBuYmMgPDwgNik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX3NldGJjKFJlZ2lzdGVyIHJ0LCB1aW50MTZfdCBiYywgQ1JlZ2lzdGVySUQgY3IpIHsKKysg IHNwZXcoInNldGJjXHQlM3MsY3IlZDoweCUwMngiLCBydC5uYW1lKCksIGNyLCBiYyk7CisrICBN T1pfQVNTRVJUKChiYyA8IDB4NDApICYmICgoYmMgJiAweDBmKSA9PSAweDBjKSk7CisrICB1aW50 MTZfdCBuYmMgPSAoYmMgPj4gNCkgKyAoY3IgPDwgMik7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQ Q19zZXRiYyB8IChydC5jb2RlKCkgPDwgMjEpIHwgKG5iYyA8PCAxNikpOworK30KKysKKytCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjphc19zZXRiY3IoUmVnaXN0ZXIgcnQsIHVpbnQxNl90IGJjLCBD UmVnaXN0ZXJJRCBjcikgeworKyAgc3Bldygic2V0YmNyXHQlM3MsY3IlZDoweCUwMngiLCBydC5u YW1lKCksIGNyLCBiYyk7CisrICBNT1pfQVNTRVJUKChiYyA8IDB4NDApICYmICgoYmMgJiAweDBm KSA9PSAweDBjKSk7CisrICB1aW50MTZfdCBuYmMgPSAoYmMgPj4gNCkgKyAoY3IgPDwgMik7Cisr ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19zZXRiY3IgfCAocnQuY29kZSgpIDw8IDIxKSB8IChuYmMg PDwgMTYpKTsKKyt9CisrCisrLy8gLS0tIEZQIGNvbXBhcmUgLS0tCisrCisrQnVmZmVyT2Zmc2V0 IEFzc2VtYmxlcjo6YXNfZmNtcHUoQ1JlZ2lzdGVySUQgY3IsIEZsb2F0UmVnaXN0ZXIgcmEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByYikgeworKyAg c3BldygiZmNtcHVcdGNyJWQsJTNzLCUzcyIsIGNyLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Cisr ICByZXR1cm4gd3JpdGVJbnN0KFBQQ19mY21wdSB8IGNyIDw8IDIzIHwgcmEuZW5jb2RpbmcoKSA8 PCAxNiB8CisrICAgICAgICAgICAgICAgICAgIHJiLmVuY29kaW5nKCkgPDwgMTEpOworK30KKysK KytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19mY21wdShGbG9hdFJlZ2lzdGVyIHJhLCBGbG9h dFJlZ2lzdGVyIHJiKSB7CisrICByZXR1cm4gYXNfZmNtcHUoY3IwLCByYSwgcmIpOworK30KKysK KysvLyAtLS0gRlAgYXJpdGhtZXRpYyAtLS0KKysKKysjZGVmaW5lIERFRl9GUFVBQyhvcCkgREVG X0FGT1JNX0Mob3ApCisrREVGX0ZQVUFDKGZtdWwpCisrREVGX0ZQVUFDKGZtdWxzKQorKyN1bmRl ZiBERUZfRlBVQUMKKysKKysjZGVmaW5lIERFRl9GUFVBQihvcCkgREVGX0FGT1JNX0Iob3ApCisr REVGX0ZQVUFCKGZhZGQpCisrREVGX0ZQVUFCKGZkaXYpCisrREVGX0ZQVUFCKGZzdWIpCisrREVG X0ZQVUFCKGZhZGRzKQorK0RFRl9GUFVBQihmZGl2cykKKytERUZfRlBVQUIoZnN1YnMpCisrREVG X0ZQVUFCKGZjcHNnbikKKysjdW5kZWYgREVGX0ZQVUFCCisrCisrLy8gLS0tIEZQIHVuYXJ5L2Nv bnZlcnNpb24vcm91bmRpbmcgLS0tCisrCisrI2RlZmluZSBERUZfRlBVRFMob3ApIERFRl9YRk9S TTJfRihvcCkKKytERUZfRlBVRFMoZmFicykKKytERUZfRlBVRFMoZm5lZykKKytERUZfRlBVRFMo Zm1yKQorK0RFRl9GUFVEUyhmY2ZpZCkKKytERUZfRlBVRFMoZmNmaWRzKQorK0RFRl9GUFVEUyhm Y2ZpZHUpCisrREVGX0ZQVURTKGZjZmlkdXMpCisrREVGX0ZQVURTKGZjdGlkKQorK0RFRl9GUFVE UyhmY3RpZHopCisrREVGX0ZQVURTKGZjdGlkdXopCisrREVGX0ZQVURTKGZjdGl3eikKKytERUZf RlBVRFMoZnJpbSkKKytERUZfRlBVRFMoZnJpcCkKKytERUZfRlBVRFMoZnJpeikKKytERUZfRlBV RFMoZnJzcCkKKytERUZfRlBVRFMoZnNxcnQpCisrREVGX0ZQVURTKGZzcXJ0cykKKysjdW5kZWYg REVGX0ZQVURTCisrCisrLy8gLS0tIEZQIGxvYWRzL3N0b3JlcyAoRC1mb3JtKSAtLS0KKysKKytE RUZfREZPUk1fRihsZmQpCisrREVGX0RGT1JNX0YobGZzKQorK0RFRl9ERk9STV9GKHN0ZmQpCisr REVGX0RGT1JNX0Yoc3RmcykKKytERUZfREZPUk1fRihzdGZkdSkKKytERUZfREZPUk1fRihzdGZz dSkKKysKKysvLyAtLS0gRlAgbG9hZHMvc3RvcmVzIChYLWZvcm0sIGluZGV4ZWQpIC0tLQorKwor K0RFRl9GTUVNeChsZmR4KSBERUZfRk1FTXgobGZzeCkgREVGX0ZNRU14KGxmaXdheCkKKysgICAg REVGX0ZNRU14KHN0ZmR4KSBERUZfRk1FTXgoc3Rmc3gpCisrLy8gQ2xlYW4gdXAgbWFjcm9zLgor KyN1bmRlZiBERUZfWEZPUk0KKysjdW5kZWYgREVGX1hGT1JNX1JDCisrI3VuZGVmIERFRl9YRk9S TVMKKysjdW5kZWYgREVGX1hGT1JNU19SQworKyN1bmRlZiBERUZfWEZPUk1TX0kKKysjdW5kZWYg REVGX1hGT1JNMgorKyN1bmRlZiBERUZfWEZPUk0yX1JDCisrI3VuZGVmIERFRl9YRk9STTJTCisr I3VuZGVmIERFRl9YRk9STTJTX1JDCisrI3VuZGVmIERFRl9YRk9STTJfRgorKyN1bmRlZiBERUZf WEZPUk0yX0ZfUkMKKysjdW5kZWYgREVGX01GT1JNCisrI3VuZGVmIERFRl9NRk9STV9JCisrI3Vu ZGVmIERFRl9NRk9STV9JX1JDCisrI3VuZGVmIERFRl9NRFNGT1JNCisrI3VuZGVmIERFRl9NRFNG T1JNX1JDCisrI3VuZGVmIERFRl9NREZPUk0KKysjdW5kZWYgREVGX01ERk9STV9SQworKyN1bmRl ZiBERUZfREZPUk1fRgorKyN1bmRlZiBERUZfRk1FTXgKKysjdW5kZWYgREVGX0FGT1JNX0MKKysj dW5kZWYgREVGX0FGT1JNX0NfUkMKKysjdW5kZWYgREVGX0FGT1JNX0IKKysjdW5kZWYgREVGX0FG T1JNX0JfUkMKKysjdW5kZWYgREVGX0FGT1JNCisrI3VuZGVmIERFRl9BRk9STV9SQworKworKyAg ICAvLyAtLS0gRlBTQ1Igb3BlcmF0aW9ucyAtLS0KKysKKysgICAgQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfbXRmc2IwKHVpbnQ4X3QgYnQpIHsKKysgIHNwZXcoIm10ZnNiMFx0JWQiLCBidCk7 CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19tdGZzYjAgfCAodWludDMyX3QpYnQgPDwgMjEpOwor K30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tY3JmcyhDUmVnaXN0ZXJJRCBiZiwg dWludDhfdCBiZmEpIHsKKysgIHNwZXcoIm1jcmZzXHRjciVkLCVkIiwgYmYsIGJmYSk7CisrICBy ZXR1cm4gd3JpdGVJbnN0KFBQQ19tY3JmcyB8ICh1aW50MzJfdCliZiA8PCAyMyB8ICh1aW50MzJf dCliZmEgPDwgMTgpOworK30KKysKKysvLyAtLS0gVlNYIChGUFItb25seSBzdWJzZXQpIC0tLQor KworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX21mdnNyZChSZWdpc3RlciByYSwgRmxvYXRS ZWdpc3RlciB4cykgeworKyAgc3BldygibWZ2c3JkXHQlM3MsJTNzIiwgcmEubmFtZSgpLCB4cy5u YW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtTWZ2c3IoUFBDX21mdnNyZCwgcmEu Y29kZSgpLCB4cy5lbmNvZGluZygpKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6 OmFzX210dnNyZChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSkgeworKyAgc3BldygibXR2 c3JkXHQlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5z dChYWDFGb3JtKFBQQ19tdHZzcmQsIHh0LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgMCkpOworK30K KysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19tdHZzcndhKEZsb2F0UmVnaXN0ZXIgeHQs IFJlZ2lzdGVyIHJhKSB7CisrICBzcGV3KCJtdHZzcndhXHQlM3MsJTNzIiwgeHQubmFtZSgpLCBy YS5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQQ19tdHZzcndhLCB4dC5l bmNvZGluZygpLCByYS5jb2RlKCksIDApKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfbXR2c3J3cyhGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSkgeworKyAgc3Bldygi bXR2c3J3c1x0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgcmEubmFtZSgpKTsKKysgIHJldHVybiB3cml0 ZUluc3QoWFgxRm9ybShQUENfbXR2c3J3cywgeHQuZW5jb2RpbmcoKSwgcmEuY29kZSgpLCAwKSk7 CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210dnNyd3ooRmxvYXRSZWdpc3Rl ciB4dCwgUmVnaXN0ZXIgcmEpIHsKKysgIHNwZXcoIm10dnNyd3pcdCUzcywlM3MiLCB4dC5uYW1l KCksIHJhLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX210dnNyd3os IHh0LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgMCkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc194eGJyZChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKSB7Cisr ICBzcGV3KCJ4eGJyZFx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVy biB3cml0ZUluc3QoWFgyRm9ybShQUENfeHhicmQsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5n KCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHNjdmRwc3BuKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInhzY3ZkcHNwblx0JTNz LCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgyRm9y bShQUENfeHNjdmRwc3BuLCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygpKSk7CisrfQorKwor K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3hzY3ZzcGRwbihGbG9hdFJlZ2lzdGVyIHh0LCBG bG9hdFJlZ2lzdGVyIHhiKSB7CisrICBzcGV3KCJ4c2N2c3BkcG5cdCUzcywlM3MiLCB4dC5uYW1l KCksIHhiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMkZvcm0oUFBDX3hzY3ZzcGRw biwgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOworK30KKysKKysvLyBQT1dFUjkgKElT QSAzLjApIHNjYWxhciBGUDE2IGNvbnZlcnNpb25zLiBUaGUgVUlNIGRpc2FtYmlndWF0b3IgaXMK KysvLyBhbHJlYWR5IGluIFBQQ194c2N2ZHBocCAvIFBQQ194c2N2aHBkcDsgWFgyRm9ybSdzIGJp dHMxNnRvMjAgZGVmYXVsdAorKy8vIG9mIDAgbGVhdmVzIGl0IGludGFjdC4KKytCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc194c2N2ZHBocChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVy IHhiKSB7CisrICBzcGV3KCJ4c2N2ZHBocFx0JTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGIubmFtZSgp KTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHNjdmRwaHAsIHh0LmVuY29kaW5n KCksIHhiLmVuY29kaW5nKCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNf eHNjdmhwZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YikgeworKyAgc3Bldygi eHNjdmhwZHBcdCUzcywlM3MiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSk7CisrICByZXR1cm4gd3Jp dGVJbnN0KFhYMkZvcm0oUFBDX3hzY3ZocGRwLCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygp KSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3hzeGV4cGRwKEZsb2F0UmVn aXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInhzeGV4cGRwXHQlM3MsJTNz IiwgeHQubmFtZSgpLCB4Yi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3JtKFBQ Q194c3hleHBkcCwgeHQuZW5jb2RpbmcoKSwgeGIuZW5jb2RpbmcoKSkpOworK30KKysKKysvLyBQ T1dFUjkgKElTQSAzLjApIEZQMTYgbG9hZC9zdG9yZSwgWC1mb3JtIGluZGV4ZWQuIGx4c2loengg bG9hZHMKKysvLyAxNiBiaXRzIGludG8gVlNSIGR3b3JkIDAgd29yZCAxJ3MgbG93IGhhbGZ3b3Jk ICh6ZXJvaW5nIHRoZSByZXN0KTsKKysvLyBzdHhzaWh4IHN0b3JlcyBmcm9tIHRoZXJlLiBUaGUg WFRbNV0vWFNbNV0gYml0IHRyYXZlbHMgdmlhIHRoZQorKy8vIFgtZm9ybSdzIFRYL1NYIGJpdCBh dCBpbnN0cnVjdGlvbiBiaXQgMC4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19seHNpaHp4 KEZsb2F0UmVnaXN0ZXIgeHQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeworKyAgc3Bldygi bHhzaWh6eFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHJhLm5hbWUoKSwgcmIubmFtZSgpKTsK KysgIHJldHVybiB3cml0ZUluc3QoUFBDX2x4c2loenggfCAoeHQuZW5jb2RpbmcoKSAmIDMxKSA8 PCAyMSB8CisrICAgICAgICAgICAgICAgICAgIHJhLmNvZGUoKSA8PCAxNiB8IHJiLmNvZGUoKSA8 PCAxMSB8CisrICAgICAgICAgICAgICAgICAgICgoeHQuZW5jb2RpbmcoKSA+PiA1KSAmIDEpKTsK Kyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3R4c2loeChGbG9hdFJlZ2lzdGVy IHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoInN0eHNpaHhcdCUzcywl M3MsJTNzIiwgeHMubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3Jp dGVJbnN0KFBQQ19zdHhzaWh4IHwgKHhzLmVuY29kaW5nKCkgJiAzMSkgPDwgMjEgfAorKyAgICAg ICAgICAgICAgICAgICByYS5jb2RlKCkgPDwgMTYgfCByYi5jb2RlKCkgPDwgMTEgfAorKyAgICAg ICAgICAgICAgICAgICAoKHhzLmVuY29kaW5nKCkgPj4gNSkgJiAxKSk7CisrfQorKworKy8vIFhY My1mb3JtLCBGUFItc3BhY2Ugb25seSAoZW5jb2RpbmcgMC4uMzEg4oaSIFZTUjAuLjMxLCBhbGwg QVgvQlgvVFggPSAwKS4KKysvLyBKYXZhL0phdmFTY3JpcHQtc3R5bGUgc2NhbGFyIG1heC9taW4g 4oCUIHNlbWFudGljcyB2ZXJpZmllZCB0byBtYXRjaAorKy8vIEVDTUEtMjYyIE1hdGgubWF4L01h dGgubWluIGluY2x1ZGluZyDCsTAgYW5kIE5hTiBwcm9wYWdhdGlvbi4gUE9XRVI5LW9ubHkuCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHNtYXhqZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxv YXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIHhiKSB7CisrICBzcGV3KCJ4c21heGpkcFx0JTNzLCUzcywlM3MiLCB4dC5uYW1l KCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQ UENfeHNtYXhqZHAsIHh0LCB4YSwgeGIpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfeHNtaW5qZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7CisrICBz cGV3KCJ4c21pbmpkcFx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFt ZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgzRm9ybShQUENfeHNtaW5qZHAsIHh0LCB4YSwg eGIpKTsKKyt9CisrCisrLy8gLS0tIFZTWCBTSU1EIGxvYWQvc3RvcmUgLS0tCisrCisrLy8gRm9y IFZTWDAtMzEgKEZQUiksIHRoZSA2dGggcmVnaXN0ZXIgYml0IChUWC9TWC9CWCkgaXMgMC4KKysv LyBYLWZvcm06IG9wY29kZSB8IFQgPDwgMjEgfCBBIDw8IDE2IHwgQiA8PCAxMSB8IHhvIHwgVFgK KysvLyBseHZ4L3N0eHZ4IGFyZSBQT1dFUjkgKElTQSAzLjApLiBseHZkMngvc3R4dmQyeCBhcmUg UE9XRVI4IChJU0EgMi4wNykuCisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfbHh2eChG bG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpIHsKKysgIHNwZXcoImx4 dnhcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICBy ZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX2x4dngsIHh0LmVuY29kaW5nKCksIHJhLmNvZGUo KSwgcmIuY29kZSgpKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3N0eHZ4 KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYikgeworKyAgc3Bldygi c3R4dnhcdCUzcywlM3MsJTNzIiwgeHMubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUoKSk7Cisr ICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX3N0eHZ4LCB4cy5lbmNvZGluZygpLCByYS5j b2RlKCksIHJiLmNvZGUoKSkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc19s eHZkMngoRmxvYXRSZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBz cGV3KCJseHZkMnhcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCByYS5uYW1lKCksIHJiLm5hbWUo KSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX2x4dmQyeCwgeHQuZW5jb2Rpbmco KSwgcmEuY29kZSgpLCByYi5jb2RlKCkpKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6YXNfc3R4dmQyeChGbG9hdFJlZ2lzdGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp IHsKKysgIHNwZXcoInN0eHZkMnhcdCUzcywlM3MsJTNzIiwgeHMubmFtZSgpLCByYS5uYW1lKCks IHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYMUZvcm0oUFBDX3N0eHZkMngsIHhz LmVuY29kaW5nKCksIHJhLmNvZGUoKSwgcmIuY29kZSgpKSk7CisrfQorKworKy8vIFZNWCByZWdp c3RlciBsb2FkL3N0b3JlLiBTZWUgUFBDX2x2eC9QUENfc3R2eCBpbiBBc3NlbWJsZXItcHBjNjQu aCBmb3IKKysvLyB0aGUgZW5jb2RpbmcgcmF0aW9uYWxlLgorK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX2x2eCh1aW50OF90IHZydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBN T1pfQVNTRVJUKHZydCA8IDMyKTsKKysgIHNwZXcoImx2eFx0dnIlZCwlM3MsJTNzIiwgdnJ0LCBy YS5uYW1lKCksIHJiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ19sdnggfCB1aW50 MzJfdCh2cnQpIDw8IDIxIHwgcmEuY29kZSgpIDw8IDE2IHwKKysgICAgICAgICAgICAgICAgICAg cmIuY29kZSgpIDw8IDExKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfc3R2 eCh1aW50OF90IHZycywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBNT1pfQVNTRVJU KHZycyA8IDMyKTsKKysgIHNwZXcoInN0dnhcdHZyJWQsJTNzLCUzcyIsIHZycywgcmEubmFtZSgp LCByYi5uYW1lKCkpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfc3R2eCB8IHVpbnQzMl90KHZy cykgPDwgMjEgfCByYS5jb2RlKCkgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAgICByYi5jb2Rl KCkgPDwgMTEpOworK30KKysKKysvLyAtLS0gVlNYIFNJTUQgcmVnaXN0ZXIgb3BlcmF0aW9ucyAt LS0KKysKKysvLyBYWDMtZm9ybTogb3Bjb2RlIHwgVFswOjRdPDwyMSB8IEFbMDo0XTw8MTYgfCBC WzA6NF08PDExIHwgeG8gfCBBWCB8IEJYIHwgVFgKKysvLyB3aGVyZSBBWC9CWC9UWCAoYml0cyAy LzEvMCkgY2FycnkgYml0IDUgb2YgZWFjaCA2LWJpdCBWU1IgaW5kZXguCisrLy8gRW5jb2RlZCBi eSB0aGUgWFgzRm9ybSBoZWxwZXIgYWJvdmUgZm9yIGJvdGggVlNSMC0zMSAoU2luZ2xlL0RvdWJs ZSkgYW5kCisrLy8gVlNSMzItNjMgKFNpbWQxMjgpIG9wZXJhbmRzLgorK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzX3h4bG9yKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgeworKyAg c3BldygieHhsb3JcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUo KSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDX3h4bG9yLCB4dCwgeGEsIHhiKSk7 CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3h4bGFuZChGbG9hdFJlZ2lzdGVy IHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHhiKSB7CisrICBzcGV3KCJ4eGxhbmRcdCUzcywlM3MsJTNzIiwgeHQu bmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zv cm0oUFBDX3h4bGFuZCwgeHQsIHhhLCB4YikpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc194eGx4b3IoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4YikgeworKyAgc3Bl dygieHhseG9yXHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCkp OworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDNGb3JtKFBQQ194eGx4b3IsIHh0LCB4YSwgeGIpKTsK Kyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhsbm9yKEZsb2F0UmVnaXN0ZXIg eHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNwZXcoInh4bG5vclx0JTNzLCUzcywlM3MiLCB4dC5u YW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgzRm9y bShQUENfeHhsbm9yLCB4dCwgeGEsIHhiKSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzX3h4bGFuZGMoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsKKysgIHNw ZXcoInh4bGFuZGNcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUo KSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDX3h4bGFuZGMsIHh0LCB4YSwgeGIp KTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhzZWwoRmxvYXRSZWdpc3Rl ciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHhiLCBGbG9hdFJlZ2lzdGVyIHhjKSB7CisrICBzcGV3KCJ4eHNlbFx0 JTNzLCUzcywlM3MsJTNzIiwgeHQubmFtZSgpLCB4YS5uYW1lKCksIHhiLm5hbWUoKSwgeGMubmFt ZSgpKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFg0Rm9ybShQUENfeHhzZWwsIHh0LmVuY29kaW5n KCksIHhhLmVuY29kaW5nKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIuZW5jb2Rp bmcoKSwgeGMuZW5jb2RpbmcoKSkpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c194eHBlcm1kaShGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgZG0p IHsKKysgIE1PWl9BU1NFUlQoZG0gPCA0KTsKKysgIHNwZXcoInh4cGVybWRpXHQlM3MsJTNzLCUz cywlZCIsIHh0Lm5hbWUoKSwgeGEubmFtZSgpLCB4Yi5uYW1lKCksIGRtKTsKKysgIHJldHVybiB3 cml0ZUluc3QoWFgzRm9ybShQUENfeHhwZXJtZGkgfCAodWludDMyX3QoZG0pIDw8IDgpLCB4dCwg eGEsIHhiKSk7CisrfQorKworKy8vIFBPV0VSOSAoSVNBIDMuMCkuIFhYMS1mb3JtIHdpdGggdHdv IEdQUiBzb3VyY2VzLgorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX210dnNyZGQoRmxvYXRS ZWdpc3RlciB4dCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKSB7CisrICBzcGV3KCJtdHZzcmRk XHQlM3MsJTNzLCUzcyIsIHh0Lm5hbWUoKSwgcmEubmFtZSgpLCByYi5uYW1lKCkpOworKyAgcmV0 dXJuIHdyaXRlSW5zdChYWDFGb3JtKFBQQ19tdHZzcmRkLCB4dC5lbmNvZGluZygpLCByYS5jb2Rl KCksIHJiLmNvZGUoKSkpOworK30KKysKKysvLyBQT1dFUjkgKElTQSAzLjApLiBYWDEtZm9ybTog bW92ZSBsb3dlciBkb3VibGV3b3JkIG9mIFZTUiB0byBHUFIuCisrQnVmZmVyT2Zmc2V0IEFzc2Vt Ymxlcjo6YXNfbWZ2c3JsZChSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB4cykgeworKyAgc3Bl dygibWZ2c3JsZFx0JTNzLCUzcyIsIHJ0Lm5hbWUoKSwgeHMubmFtZSgpKTsKKysgIHJldHVybiB3 cml0ZUluc3QoWFgxRm9ybU1mdnNyKFBQQ19tZnZzcmxkLCBydC5jb2RlKCksIHhzLmVuY29kaW5n KCkpKTsKKyt9CisrCisrLy8gLS0tIFhYMi1mb3JtIFZTWCBpbnN0cnVjdGlvbnMgLS0tCisrCisr Ly8gWFgyLWZvcm06IG9wY29kZSB8IFQ8PDIxIHwgVUlNPDwxNl9hcmVhIHwgQjw8MTFfYXJlYSB8 IFhPPDwyIHwgQlggfCBUWAorKy8vIEZvciBWU1IwLTMxLCBCWD1UWD0wLgorKworK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX3h4c3BsdHcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4YiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7 CisrICBNT1pfQVNTRVJUKHVpbSA8IDQpOworKyAgc3BldygieHhzcGx0d1x0JTNzLCUzcywlZCIs IHh0Lm5hbWUoKSwgeGIubmFtZSgpLCB1aW0pOworKyAgcmV0dXJuIHdyaXRlSW5zdChYWDJGb3Jt KFBQQ194eHNwbHR3LCB4dC5lbmNvZGluZygpLCB4Yi5lbmNvZGluZygpLCB1aW0pKTsKKyt9Cisr CisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfeHhpbnNlcnR3KEZsb2F0UmVnaXN0ZXIgeHQs IEZsb2F0UmVnaXN0ZXIgeGIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgdWltKSB7CisrICBNT1pfQVNTRVJUKHVpbSA8PSAxMiAmJiAodWltICYgMykgPT0g MCk7CisrICBzcGV3KCJ4eGluc2VydHdcdCUzcywlM3MsJWQiLCB4dC5uYW1lKCksIHhiLm5hbWUo KSwgdWltKTsKKysgIHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHhpbnNlcnR3LCB4dC5l bmNvZGluZygpLCB4Yi5lbmNvZGluZygpLCB1aW0pKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfeHhleHRyYWN0dXcoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 YiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkg eworKyAgTU9aX0FTU0VSVCh1aW0gPD0gMTIgJiYgKHVpbSAmIDMpID09IDApOworKyAgc3Bldygi eHhleHRyYWN0dXdcdCUzcywlM3MsJWQiLCB4dC5uYW1lKCksIHhiLm5hbWUoKSwgdWltKTsKKysg IHJldHVybiB3cml0ZUluc3QoWFgyRm9ybShQUENfeHhleHRyYWN0dXcsIHh0LmVuY29kaW5nKCks IHhiLmVuY29kaW5nKCksIHVpbSkpOworK30KKysKKysvLyBQT1dFUjkgKElTQSAzLjApLiBYWDEt Zm9ybS1pc2g6IFQoNSkgKyBVSU04KDgpICsgWE8gKyBUWC4gVUlNOCBvY2N1cGllcworKy8vIGJp dHMgMTguLjExIChhIG5vbi1zdGFuZGFyZCBzbG90IHRoYXQgWFgxRm9ybSBkb2Vzbid0IGZpdCks IHNvIGVuY29kZQorKy8vIGlubGluZS4gVFggYml0IGF0IGluc3RydWN0aW9uIGJpdCAwIHNlbGVj dHMgdGhlIHVwcGVyIGhhbGYgb2YgVlNSCisrLy8gc3BhY2Ugd2hlbiB4dC5lbmNvZGluZygpIGlz IGluIDMyLTYzIChTaW1kMTI4KS4KKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc194eHNwbHRp YihGbG9hdFJlZ2lzdGVyIHh0LCB1aW50OF90IGltbTgpIHsKKysgIHNwZXcoInh4c3BsdGliXHQl M3MsJXUiLCB4dC5uYW1lKCksIGltbTgpOworKyAgdWludDMyX3QgZW5jID0gdWludDMyX3QoeHQu ZW5jb2RpbmcoKSk7CisrICByZXR1cm4gd3JpdGVJbnN0KFBQQ194eHNwbHRpYiB8IChlbmMgJiAz MSkgPDwgMjEgfCAodWludDMyX3QpaW1tOCA8PCAxMSB8CisrICAgICAgICAgICAgICAgICAgICgo ZW5jID4+IDUpICYgMSkpOworK30KKysKKysvLyAtLS0gVk1YIGluc3RydWN0aW9ucyAtLS0KKysK KysvLyBWWC1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFVJTU08PDE2IHwgVlJCPDwxMSB8IFhP CisrLy8gVlJUL1ZSQiBhcmUgNS1iaXQgcmF3IFZSIG51bWJlcnMgKDAtMzEpLiBTaW1kMTI4IEZs b2F0UmVnaXN0ZXIuZW5jb2RpbmcoKQorKy8vIHJldHVybnMgMzItNjM7IG1hc2tpbmcgd2l0aCAm IDMxIG1hcHMgaXQgYmFjayB0byB0aGUgVlIgb2Zmc2V0IDAtMzEuCisrQnVmZmVyT2Zmc2V0IEFz c2VtYmxlcjo6YXNfdnNwbHRiKEZsb2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZyYiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB1aW0pIHsKKysgIE1P Wl9BU1NFUlQodWltIDwgMTYpOworKyAgc3BldygidnNwbHRiXHQlM3MsJTNzLCVkIiwgdnJ0Lm5h bWUoKSwgdnJiLm5hbWUoKSwgdWltKTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0YiB8 ICh2cnQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8CisrICAgICAgICAgICAgICAgICAgICh1aW50 MzJfdCl1aW0gPDwgMTYgfCAodnJiLmVuY29kaW5nKCkgJiAzMSkgPDwgMTEpOworK30KKysKKytC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc192c3BsdGgoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0 UmVnaXN0ZXIgdnJiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90 IHVpbSkgeworKyAgTU9aX0FTU0VSVCh1aW0gPCA4KTsKKysgIHNwZXcoInZzcGx0aFx0JTNzLCUz cywlZCIsIHZydC5uYW1lKCksIHZyYi5uYW1lKCksIHVpbSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KFBQQ192c3BsdGggfCAodnJ0LmVuY29kaW5nKCkgJiAzMSkgPDwgMjEgfAorKyAgICAgICAgICAg ICAgICAgICAodWludDMyX3QpdWltIDw8IDE2IHwgKHZyYi5lbmNvZGluZygpICYgMzEpIDw8IDEx KTsKKyt9CisrCisrLy8gVkEtZm9ybTogKDQ8PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2IHwgVlJC PDwxMSB8IFNIQjw8NiB8IFhPKDYtYml0KQorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Zz bGRvaShGbG9hdFJlZ2lzdGVyIHZydCwgRmxvYXRSZWdpc3RlciB2cmEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHNoYikgewor KyAgTU9aX0FTU0VSVChzaGIgPCAxNik7CisrICBzcGV3KCJ2c2xkb2lcdCUzcywlM3MsJTNzLCVk IiwgdnJ0Lm5hbWUoKSwgdnJhLm5hbWUoKSwgdnJiLm5hbWUoKSwgc2hiKTsKKysgIHJldHVybiB3 cml0ZUluc3QoUFBDX3ZzbGRvaSB8ICh2cnQuZW5jb2RpbmcoKSAmIDMxKSA8PCAyMSB8CisrICAg ICAgICAgICAgICAgICAgICh2cmEuZW5jb2RpbmcoKSAmIDMxKSA8PCAxNiB8ICh2cmIuZW5jb2Rp bmcoKSAmIDMxKSA8PCAxMSB8CisrICAgICAgICAgICAgICAgICAgICh1aW50MzJfdClzaGIgPDwg Nik7CisrfQorKworKy8vIC0tLSBWTVggaW50ZWdlciBhcml0aG1ldGljIChWUiByZWdpc3RlcnMg b25seSkgLS0tCisrCisrLy8gVlgtZm9ybTogKDQ8PDI2KSB8IFZSVDw8MjEgfCBWUkE8PDE2IHwg VlJCPDwxMSB8IFhPCisrLy8gVGhlIG1hY3JvIHRha2VzIHJhdyBWUiBudW1iZXJzICgwLTMxKS4K KysjZGVmaW5lIERFRl9WTVhfVlZWKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18jI29w KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpIHsgXAorKyAgICBNT1pfQVNT RVJUKHZydCA8IDMyICYmIHZyYSA8IDMyICYmIHZyYiA8IDMyKTsgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0dnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJi KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3QoUFBD XyMjb3AgfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEpOyAgICAgICAgXAorKyAg fQorKworK0RFRl9WTVhfVlZWKHZhZGR1Ym0pCisrREVGX1ZNWF9WVlYodmFkZHVobSkKKytERUZf Vk1YX1ZWVih2YWRkdXdtKQorK0RFRl9WTVhfVlZWKHZhZGR1ZG0pCisrREVGX1ZNWF9WVlYodnN1 YnVibSkKKytERUZfVk1YX1ZWVih2c3VidWhtKQorK0RFRl9WTVhfVlZWKHZzdWJ1d20pCisrREVG X1ZNWF9WVlYodnN1YnVkbSkKKytERUZfVk1YX1ZWVih2YWRkc2JzKQorK0RFRl9WTVhfVlZWKHZh ZGRzaHMpCisrREVGX1ZNWF9WVlYodmFkZHVicykKKytERUZfVk1YX1ZWVih2YWRkdWhzKQorK0RF Rl9WTVhfVlZWKHZzdWJzYnMpCisrREVGX1ZNWF9WVlYodnN1YnNocykKKytERUZfVk1YX1ZWVih2 c3VidWJzKQorK0RFRl9WTVhfVlZWKHZzdWJ1aHMpCisrREVGX1ZNWF9WVlYodm1pbnNiKQorK0RF Rl9WTVhfVlZWKHZtaW5zaCkKKytERUZfVk1YX1ZWVih2bWluc3cpCisrREVGX1ZNWF9WVlYodm1h eHNiKQorK0RFRl9WTVhfVlZWKHZtYXhzaCkKKytERUZfVk1YX1ZWVih2bWF4c3cpCisrREVGX1ZN WF9WVlYodm1heHNkKQorK0RFRl9WTVhfVlZWKHZtaW51YikKKytERUZfVk1YX1ZWVih2bWludWgp CisrREVGX1ZNWF9WVlYodm1pbnV3KQorK0RFRl9WTVhfVlZWKHZtYXh1YikKKytERUZfVk1YX1ZW Vih2bWF4dWgpCisrREVGX1ZNWF9WVlYodm1heHV3KQorK0RFRl9WTVhfVlZWKHZhdmd1YikKKytE RUZfVk1YX1ZWVih2YXZndWgpCisrREVGX1ZNWF9WVlYodm11bHV3bSkKKytERUZfVk1YX1ZWVih2 bXVsbGQpCisrCisrREVGX1ZNWF9WVlYodnNsYikKKytERUZfVk1YX1ZWVih2c2xoKQorK0RFRl9W TVhfVlZWKHZzbHcpCisrREVGX1ZNWF9WVlYodnNsZCkKKytERUZfVk1YX1ZWVih2c3JiKQorK0RF Rl9WTVhfVlZWKHZzcmgpCisrREVGX1ZNWF9WVlYodnNydykKKytERUZfVk1YX1ZWVih2c3JkKQor K0RFRl9WTVhfVlZWKHZzcmFiKQorK0RFRl9WTVhfVlZWKHZzcmFoKQorK0RFRl9WTVhfVlZWKHZz cmF3KQorK0RFRl9WTVhfVlZWKHZzcmFkKQorK0RFRl9WTVhfVlZWKHZzbG8pCisrREVGX1ZNWF9W VlYodnNybykKKytERUZfVk1YX1ZWVih2Y21wZXF1YikKKytERUZfVk1YX1ZWVih2Y21wZXF1aCkK KytERUZfVk1YX1ZWVih2Y21wZXF1dykKKytERUZfVk1YX1ZWVih2Y21wZXF1ZCkKKytERUZfVk1Y X1ZWVih2Y21wZ3RzYikKKytERUZfVk1YX1ZWVih2Y21wZ3RzaCkKKytERUZfVk1YX1ZWVih2Y21w Z3RzdykKKytERUZfVk1YX1ZWVih2Y21wZ3RzZCkKKytERUZfVk1YX1ZWVih2Y21wZ3R1YikKKytE RUZfVk1YX1ZWVih2Y21wZ3R1aCkKKytERUZfVk1YX1ZWVih2Y21wZ3R1dykKKytERUZfVk1YX1ZW Vih2Y21wZ3R1ZCkKKysvLyBQT1dFUjkgKElTQSAzLjApLiBOb3RFcXVhbCBjb21wYXJlOyBzYXZl cyB0aGUgeHhsbm9yIHRoYXQgdmNtcGVxdVggbmVlZHMuCisrREVGX1ZNWF9WVlYodmNtcG5lYikK KytERUZfVk1YX1ZWVih2Y21wbmVoKQorK0RFRl9WTVhfVlZWKHZjbXBuZXcpCisrCisrLy8gUE9X RVI4KyAoSVNBIDIuMDcpLiB2YnBlcm1xIFJULFJBLFJCOiBiaXQtcGVybXV0ZSBxdWFkd29yZC4K KytERUZfVk1YX1ZWVih2YnBlcm1xKQorKworKyN1bmRlZiBERUZfVk1YX1ZWVgorKworKy8vIFZD LWZvcm0gcmVjb3JkIGZvcm1zOiBzYW1lIGFzIFZYLWZvcm0gYWJvdmUgd2l0aCBSYyBiaXQgKGJp dCAxMCBMU0IpIHNldC4KKysvLyB2Y21wWFhYLiBzZXRzIENSNjogTFQgPSBhbGwtdHJ1ZSwgRVEg PSBub25lLXRydWUuCisrI2RlZmluZSBERUZfVk1YX1ZWVl9SQyhvcCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3Nl bWJsZXI6OmFzXyMjb3AjI19yYyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsICAgICAgICAgICAg XAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdnJiKSB7 ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJh IDwgMzIgJiYgdnJiIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bl dygjb3AgIi5cdHZyJWQsdnIlZCx2ciVkIiwgdnJ0LCB2cmEsIHZyYik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgdnJ0IDw8IDIx IHwgdnJhIDw8IDE2IHwgdnJiIDw8IDExIHwgMHg0MDApOyBcCisrICB9CisrCisrREVGX1ZNWF9W VlZfUkModmNtcGVxdWIpCisrREVGX1ZNWF9WVlZfUkModmNtcGVxdWgpCisrREVGX1ZNWF9WVlZf UkModmNtcGVxdXcpCisrREVGX1ZNWF9WVlZfUkModmNtcGVxdWQpCisrCisrI3VuZGVmIERFRl9W TVhfVlZWX1JDCisrCisrLy8gVlNYIGZsb2F0IGNvbXBhcmUgKFhYMy1mb3JtKS4KKysjZGVmaW5l IERFRl9WU1hfQ01QKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVy IHh0LCBGbG9hdFJlZ2lzdGVyIHhhLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgeGIpIHsgICAgICAgICAgICAgICAgIFwKKysgICAgc3Bldygjb3Ag Ilx0JTNzLCUzcywlM3MiLCB4dC5uYW1lKCksIHhhLm5hbWUoKSwgeGIubmFtZSgpKTsgICAgICAg XAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFhYM0Zvcm0oUFBDXyMjb3AsIHh0LCB4YSwgeGIpKTsg ICAgICAgICAgICAgICAgICBcCisrICB9CisrCisrREVGX1ZTWF9DTVAoeHZjbXBlcXNwKQorK0RF Rl9WU1hfQ01QKHh2Y21wZ3RzcCkKKytERUZfVlNYX0NNUCh4dmNtcGdlc3ApCisrREVGX1ZTWF9D TVAoeHZjbXBlcWRwKQorK0RFRl9WU1hfQ01QKHh2Y21wZ3RkcCkKKytERUZfVlNYX0NNUCh4dmNt cGdlZHApCisrCisrI3VuZGVmIERFRl9WU1hfQ01QCisrCisrLy8gVlNYIGZsb2F0IGFyaXRobWV0 aWMgKFhYMy1mb3JtIGJpbmFyeSkuCisrI2RlZmluZSBERUZfVlNYX0JJTihvcCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBB c3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgXAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhiKSB7ICAg ICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MsJTNzIiwgeHQubmFtZSgp LCB4YS5uYW1lKCksIHhiLm5hbWUoKSk7ICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChY WDNGb3JtKFBQQ18jI29wLCB4dCwgeGEsIHhiKSk7ICAgICAgICAgICAgICAgICAgXAorKyAgfQor K0RFRl9WU1hfQklOKHh2YWRkc3ApCisrREVGX1ZTWF9CSU4oeHZhZGRkcCkgREVGX1ZTWF9CSU4o eHZzdWJzcCkgREVGX1ZTWF9CSU4oeHZzdWJkcCkgREVGX1ZTWF9CSU4oCisrICAgIHh2bXVsc3Ap IERFRl9WU1hfQklOKHh2bXVsZHApIERFRl9WU1hfQklOKHh2ZGl2c3ApIERFRl9WU1hfQklOKHh2 ZGl2ZHApCisrICAgIERFRl9WU1hfQklOKHh2bWluc3ApIERFRl9WU1hfQklOKHh2bWluZHApIERF Rl9WU1hfQklOKHh2bWF4c3ApIERFRl9WU1hfQklOKAorKyAgICAgICAgeHZtYXhkcCkgREVGX1ZT WF9CSU4oeHZtYWRkYXNwKSBERUZfVlNYX0JJTih4dm1hZGRhZHApCisrICAgICAgICBERUZfVlNY X0JJTih4dm5tc3ViYXNwKSBERUZfVlNYX0JJTih4dm5tc3ViYWRwKQorKyN1bmRlZiBERUZfVlNY X0JJTgorKworKy8vIFZTWCB1bmFyeSAoWFgyLWZvcm0pOiBvcCB8IHh0PDwyMSB8IHhiPDwxMSB8 IFhPPDwyCisrLy8gWFgyLWZvcm0gdW5hcnkgVlNYIG9wOiBUICsgQiwgbm8gVUlNLiBVc2VzIFhY MkZvcm0gaGVscGVyIGZvciBUWC9CWCBiaXRzLgorKyNkZWZpbmUgREVGX1ZTWF9VTihvcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3Rl ciB4YikgeyBcCisrICAgIHNwZXcoI29wICJcdCUzcywlM3MiLCB4dC5uYW1lKCksIHhiLm5hbWUo KSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFhYMkZv cm0oUFBDXyMjb3AsIHh0LmVuY29kaW5nKCksIHhiLmVuY29kaW5nKCkpKTsgIFwKKysgIH0KKysg ICAgICAgICAgICBERUZfVlNYX1VOKHh2YWJzc3ApIERFRl9WU1hfVU4oeHZhYnNkcCkgREVGX1ZT WF9VTigKKysgICAgICAgICAgICAgICAgeHZuZWdzcCkgREVGX1ZTWF9VTih4dm5lZ2RwKSBERUZf VlNYX1VOKHh2c3FydHNwKQorKyAgICAgICAgICAgICAgICBERUZfVlNYX1VOKHh2c3FydGRwKSBE RUZfVlNYX1VOKHh2cnNwaXApIERFRl9WU1hfVU4oCisrICAgICAgICAgICAgICAgICAgICB4dnJk cGlwKSBERUZfVlNYX1VOKHh2cnNwaW0pIERFRl9WU1hfVU4oeHZyZHBpbSkKKysgICAgICAgICAg ICAgICAgICAgIERFRl9WU1hfVU4oeHZyc3BpeikgREVGX1ZTWF9VTih4dnJkcGl6KSBERUZfVlNY X1VOKAorKyAgICAgICAgICAgICAgICAgICAgICAgIHh2cnNwaWMpIERFRl9WU1hfVU4oeHZyZHBp YykgREVGX1ZTWF9VTih4dmN2c3h3c3ApCisrICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZT WF9VTih4dmN2dXh3c3ApIERFRl9WU1hfVU4oeHZjdnN4d2RwKSBERUZfVlNYX1VOKAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB4dmN2dXh3ZHApIERFRl9WU1hfVU4oeHZjdnNwc3h3cykK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGX1ZTWF9VTih4dmN2c3B1eHdzKSBERUZf VlNYX1VOKHh2Y3ZkcHN4d3MpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZf VlNYX1VOKHh2Y3ZkcHV4d3MpIERFRl9WU1hfVU4oeHZjdmRwc3ApCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgREVGX1ZTWF9VTih4dmN2c3BkcCkKKysjdW5kZWYgREVGX1ZT WF9VTgorKworKy8vIFZNWCB1bmFyeSBWWC1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IDA8PDE2 IHwgVlJCPDwxMSB8IFhPCisrI2RlZmluZSBERUZfVk1YX1VOQVJZKG9wKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc18j I29wKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBcCisrICAgIE1PWl9BU1NFUlQodnJ0IDwg MzIgJiYgdnJiIDwgMzIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXcoI29w ICJcdHZyJWQsdnIlZCIsIHZydCwgdnJiKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IHJldHVybiB3cml0ZUluc3QoUFBDXyMjb3AgfCB2cnQgPDwgMjEgfCB2cmIgPDwgMTEpOyAgICAg ICBcCisrICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9W TVhfVU5BUlkodnVwa2hzYikgREVGX1ZNWF9VTkFSWSgKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZ1cGtsc2IpIERFRl9WTVhfVU5BUlkodnVwa2hzaCkKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVU5BUlko dnVwa2xzaCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBERUZfVk1YX1VOQVJZKHZ1cGtoc3cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVU5BUlkodnVwa2xzdykKKysgICAgLy8gUE9X RVI5IHBlci1sYW5lIGludGVnZXIgbmVnYXRlLiBUaGUgVlJBIGZpZWxkIGhvbGRzIHRoZSBzdWJv cCBjb2RlCisrICAgIC8vICg2IGZvciB2bmVndywgNyBmb3Igdm5lZ2QpIHdoaWNoIGlzIGFscmVh ZHkgYmFrZWQgaW50byBQUENfdm5lZ3t3LGR9LgorKyAgICBERUZfVk1YX1VOQVJZKHZuZWd3KSBE RUZfVk1YX1VOQVJZKHZuZWdkKSBERUZfVk1YX1VOQVJZKHZwb3BjbnRiKQorKyN1bmRlZiBERUZf Vk1YX1VOQVJZCisrCisrICAgIC8vIFBPV0VSOSBhZGRwY2lzIChEWC1mb3JtKS4gQ29tcHV0ZXMg clQgPSAoQ0lBICsgNCkgKyAoRCA8PCAxNikuCisrICAgIC8vIEQgaXMgYSAxNi1iaXQgc2lnbmVk IGltbWVkaWF0ZSwgc3BsaXQgYWNyb3NzIHRocmVlIGluc3RydWN0aW9uIGZpZWxkczoKKysgICAg Ly8gICBkMCA9IGJpdHMgMTYuLjI1ICgxMCBiaXRzLCBEWzE1OjZdKQorKyAgICAvLyAgIGQxID0g Yml0cyAxMS4uMTUgKDUgYml0cywgIERbNToxXSkKKysgICAgLy8gICBkMiA9IGJpdCAzMSAgICAg ICgxIGJpdCwgICBEWzBdKQorKyAgICAvLyBQcmltYXJ5IG9wY29kZSAxOSwgRFggc3Vib3AgMi4K KysgICAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfYWRkcGNpcyhSZWdpc3RlciBydCwgaW50 MTZfdCBkKSB7CisrICBzcGV3KCJhZGRwY2lzXHQlcywlZCIsIHJ0Lm5hbWUoKSwgKGludClkKTsK KysgIHVpbnQzMl90IEQgPSB1aW50MTZfdChkKTsKKysgIHVpbnQzMl90IGluc3QgPSAoMTl1IDw8 IDI2KSB8ICh1aW50MzJfdChydC5jb2RlKCkpIDw8IDIxKSB8CisrICAgICAgICAgICAgICAgICAg KChEID4+IDEpICYgMHgxRikgPDwgMTYgfCAoKEQgPj4gNikgJiAweDNGRikgPDwgNiB8CisrICAg ICAgICAgICAgICAgICAgKDJ1IDw8IDEpIHwgKEQgJiAxdSk7CisrICByZXR1cm4gd3JpdGVJbnN0 KGluc3QpOworK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFBvd2VyIElTQSB2 My4xIChQT1dFUjEwKSBwcmVmaXhlZCBpbnN0cnVjdGlvbnMuCisrLy8KKysvLyBMYXlvdXQ6Cisr Ly8KKysvLyAgIFByZWZpeCB3b3JkIChCRSBiaXQgbnVtYmVyaW5nIGZyb20gdGhlIG1hbnVhbDsg TEUgYml0cyBpbiBwYXJlbnRoZXNlcyk6CisrLy8gICAgIFswLi41XSAgIHByaW1hcnkgb3Bjb2Rl ID0gMSAgIChMRSAzMS4uMjYpCisrLy8gICAgIFs2Li43XSAgIFR5cGU6IDAwID0gOExTLCAxMCA9 IE1MUyAgIChMRSAyNS4uMjQpCisrLy8gICAgIFs4Li4xMF0gIHJlc2VydmVkID0gMCAgIChMRSAy My4uMjEpCisrLy8gICAgIFsxMV0gICAgIFI6IDEgPSBQQy1yZWxhdGl2ZSAoUkEgbXVzdCBiZSBy MCkgICAoTEUgMjApCisrLy8gICAgIFsxMi4uMTNdIHJlc2VydmVkID0gMCAgIChMRSAxOS4uMTgp CisrLy8gICAgIFsxNC4uMzFdIGQwOiBoaWdoIDE4IGJpdHMgb2YgMzQtYml0IHNpZ25lZCBpbW1l ZGlhdGUgICAoTEUgMTcuLjApCisrLy8KKysvLyAgIFN1ZmZpeCAocGFkZGkvcGxkLCBHUFIgdGFy Z2V0KToKKysvLyAgICAgWzAuLjVdICAgc3VmZml4IG9wY29kZSAocGFkZGk9MTQsIHBsZD01Nykg ICAoTEUgMzEuLjI2KQorKy8vICAgICBbNi4uMTBdICBSVCAgIChMRSAyNS4uMjEpCisrLy8gICAg IFsxMS4uMTVdIFJBICAgKExFIDIwLi4xNikKKysvLyAgICAgWzE2Li4zMV0gZDE6IGxvdyAxNiBi aXRzIG9mIGltbWVkaWF0ZSAgIChMRSAxNS4uMCkKKysvLworKy8vICAgU3VmZml4IChwbHh2LCBW U1IgdGFyZ2V0IOKAlCBoYXMgdGhlIFRYIGJpdCBhdCBzdWZmaXggYml0IDUvTEUgYml0IDI2KToK KysvLyAgICAgWzAuLjRdICAgcGx4diA1LWJpdCBvcGNvZGUgPSAxMTAwMSAoPTI1KSAgIChMRSAz MS4uMjcpCisrLy8gICAgIFs1XSAgICAgIFRYIChoaWdoIGJpdCBvZiA2LWJpdCBYVCkgICAoTEUg MjYpCisrLy8gICAgIFs2Li4xMF0gIFQgIChsb3cgNSBiaXRzIG9mIFhUKSAgIChMRSAyNS4uMjEp CisrLy8gICAgIFsxMS4uMTVdIFJBICAgKExFIDIwLi4xNikKKysvLyAgICAgWzE2Li4zMV0gZDEg ICAoTEUgMTUuLjApCisrLy8KKysvLyBUaGUgcHJlZml4IGFuZCBzdWZmaXggb2YgYSBwcmVmaXhl ZCBpbnN0cnVjdGlvbiBtdXN0IGxpZSBpbiB0aGUgc2FtZQorKy8vIDY0LWJ5dGUgYWxpZ25lZCBi bG9jayBhdCAqKnJ1bnRpbWUqKi4gVGhlIEppdENvZGUgYWxsb2NhdG9yIG9ubHkKKysvLyBndWFy YW50ZWVzIDE2LWJ5dGUgYWxpZ25tZW50LCBzbyB0aGUgYnVmZmVyLXJlbGF0aXZlIG9mZnNldCBh bmQgdGhlCisrLy8gcnVudGltZSBhZGRyZXNzIGNhbiBkaWZmZXIgYnkgMC8xNi8zMi80OCBtb2Qg NjQuIEEgYnVmZmVyLW9ubHkgY2hlY2sKKysvLyBgKGN1cnJlbnRPZmZzZXQoKSAmIDYzKSA9PSA2 MGAgaXMgY29ycmVjdCB3aGVuIHRoZSBhbGxvY2F0b3IgYmFzZSBpcworKy8vIDY0LWFsaWduZWQg YnV0IG1pc3NlcyB0aHJlZSBvZiB0aGUgZm91ciAxNi1hbGlnbmVkIGJhc2UgY2xhc3NlcyDigJQg cGFkCisrLy8gd2hlbmV2ZXIgYChjdXJyZW50T2Zmc2V0KCkgJiAxNSkgPT0gMTJgLCB3aGljaCBj YXRjaGVzIGFsbCBmb3VyLiBUaGUKKysvLyBlbnRlck5vUG9vbCBndWFyZCBwcmV2ZW50cyB0aGUg Y29uc3RhbnQtcG9vbCBmbHVzaGVyIGZyb20gaW5zZXJ0aW5nCisrLy8gYm9kaWVzIGJldHdlZW4g dGhlIChvcHRpb25hbCkgbm9wLCBwcmVmaXgsIGFuZCBzdWZmaXguCisrCisrc3RhdGljIHVpbnQz Ml90IEVuY29kZVBvd2VyMTBQcmVmaXgodWludDMyX3QgdHlwZSwgYm9vbCBSLCB1aW50MzJfdCBk MCkgeworKyAgTU9aX0FTU0VSVCh0eXBlID09IDAgfHwgdHlwZSA9PSAyKTsgIC8vIDhMUz0wLCBN TFM9MgorKyAgTU9aX0FTU0VSVChkMCA8ICgxdSA8PCAxOCkpOworKyAgcmV0dXJuICgxdSA8PCAy NikgfCAodHlwZSA8PCAyNCkgfCAodWludDMyX3QoUiA/IDEgOiAwKSA8PCAyMCkgfAorKyAgICAg ICAgIChkMCAmIDB4M0ZGRkZ1KTsKKyt9CisrCisrc3RhdGljIHZvaWQgU3BsaXRJbW0zNChpbnQ2 NF90IGltbTM0LCB1aW50MzJfdCogZDAsIHVpbnQzMl90KiBkMSkgeworKyAgTU9aX0FTU0VSVChp bW0zNCA+PSAtKGludDY0X3QoMSkgPDwgMzMpKTsKKysgIE1PWl9BU1NFUlQoaW1tMzQgPCAoaW50 NjRfdCgxKSA8PCAzMykpOworKyAgdWludDY0X3QgdSA9IHVpbnQ2NF90KGltbTM0KSAmIDB4M0ZG RkZGRkZGdWxsOyAgLy8gbG93IDM0IGJpdHMKKysgICpkMCA9IHVpbnQzMl90KHUgPj4gMTYpICYg MHgzRkZGRnU7ICAgICAgICAgICAgIC8vIDE4IGJpdHMKKysgICpkMSA9IHVpbnQzMl90KHUpICYg MHhGRkZGdTsgICAgICAgICAgICAgICAgICAgIC8vIDE2IGJpdHMKKyt9CisrCisrdm9pZCBBc3Nl bWJsZXI6OmVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCkgeworKyAgaWYgKChjdXJyZW50T2Zmc2V0 KCkgJiAxNSkgPT0gMTIpIHsKKysgICAgYXNfbm9wKCk7CisrICB9CisrfQorKworKy8vIHBhZGRp IFJULCBSQSwgU0ksIFIgICAoTUxTLCBzdWZmaXggb3Bjb2RlIDE0ID0gYWRkaSkKKysvLyAgIFI9 MDogUlQgPSAoUkE9PTAgPyAwIDogUkEpICsgc2lnbl9leHRlbmQoU0ksIDM0KQorKy8vICAgUj0x OiBSVCA9IENJQShwcmVmaXgpICsgc2lnbl9leHRlbmQoU0ksIDM0KSAgIChSQSBtdXN0IGJlIHIw KQorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BhZGRpKFJlZ2lzdGVyIHJ0LCBSZWdpc3Rl ciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBSKSB7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKKysgIHNwZXcoInBhZGRp XHQlcywlcywlbGxkLCVkIiwgcnQubmFtZSgpLCByYS5uYW1lKCksIChsb25nIGxvbmcpaW1tMzQs CisrICAgICAgIFIgPyAxIDogMCk7CisrICB1aW50MzJfdCBkMCwgZDE7CisrICBTcGxpdEltbTM0 KGltbTM0LCAmZDAsICZkMSk7CisrICB1aW50MzJfdCBwcmVmaXggPSBFbmNvZGVQb3dlcjEwUHJl Zml4KC8qdHlwZT1NTFMqLyAyLCBSLCBkMCk7CisrICB1aW50MzJfdCBzdWZmaXggPSAoMTR1IDw8 IDI2KSB8ICh1aW50MzJfdChydC5jb2RlKCkpIDw8IDIxKSB8CisrICAgICAgICAgICAgICAgICAg ICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKKysgIC8vIFJlc2VydmF0aW9uID0g bm9wICh3b3JzdCBjYXNlKSArIHByZWZpeCArIHN1ZmZpeC4KKysgIG1fYnVmZmVyLmVudGVyTm9Q b29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKKysgIEJ1ZmZlck9mZnNldCBi byA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3JpdGVJbnN0KHN1ZmZpeCk7CisrICBtX2J1ZmZl ci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJvOworK30KKysKKysvLyBwbGQgUlQsIEQoUkEp LCBSICAgKDhMUywgc3VmZml4IG9wY29kZSA1NykKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjph c19wbGQoUmVnaXN0ZXIgcnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBSKSB7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJh ID09IHIwKTsKKysgIHNwZXcoInBsZFx0JXMsJWxsZCglcyksJWQiLCBydC5uYW1lKCksIChsb25n IGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwKKysgICAgICAgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90 IGQwLCBkMTsKKysgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHBy ZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPThMUyovIDAsIFIsIGQwKTsKKysgIHVp bnQzMl90IHN1ZmZpeCA9ICg1N3UgPDwgMjYpIHwgKHVpbnQzMl90KHJ0LmNvZGUoKSkgPDwgMjEp IHwKKysgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8IDE2KSB8IGQx OworKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMyk7CisrICBlbnN1cmVQcmVmaXhlZEFsaWdubWVu dCgpOworKyAgQnVmZmVyT2Zmc2V0IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7CisrICB3cml0ZUlu c3Qoc3VmZml4KTsKKysgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICByZXR1cm4gYm87Cisr fQorKworKy8vIHBseHYgWFQsIEQoUkEpLCBSICAgKDhMUywgNS1iaXQgc3VmZml4IG9wY29kZSAy NSwgVFggaW4gc3VmZml4IGJpdCAyNikKKysvLyAgIFhUIGlzIDYtYml0OiBUWCAoaGlnaCkgfHwg VCAobG93IDUpIOKAlCBtYXRjaGVzIGx4dnggY29udmVudGlvbi4KKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjphc19wbHh2KHVpbnQ4X3QgeHQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgUikgeworKyAgTU9aX0FTU0VS VCh4dCA8IDY0KTsKKysgIE1PWl9BU1NFUlRfSUYoUiwgcmEgPT0gcjApOworKyAgc3BldygicGx4 dlx0dnMldSwlbGxkKCVzKSwlZCIsIHh0LCAobG9uZyBsb25nKWltbTM0LCByYS5uYW1lKCksCisr ICAgICAgIFIgPyAxIDogMCk7CisrICB1aW50MzJfdCBkMCwgZDE7CisrICBTcGxpdEltbTM0KGlt bTM0LCAmZDAsICZkMSk7CisrICB1aW50MzJfdCBwcmVmaXggPSBFbmNvZGVQb3dlcjEwUHJlZml4 KC8qdHlwZT04TFMqLyAwLCBSLCBkMCk7CisrICB1aW50MzJfdCBUID0geHQgJiAweDFGdTsKKysg IHVpbnQzMl90IFRYID0gKHh0ID4+IDUpICYgMXU7CisrICB1aW50MzJfdCBzdWZmaXggPSAoMjV1 IDw8IDI3KSB8IChUWCA8PCAyNikgfCAoVCA8PCAyMSkgfAorKyAgICAgICAgICAgICAgICAgICAg KHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7CisrICBtX2J1ZmZlci5lbnRlck5vUG9v bCgzKTsKKysgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7CisrICBCdWZmZXJPZmZzZXQgYm8g PSB3cml0ZUluc3QocHJlZml4KTsKKysgIHdyaXRlSW5zdChzdWZmaXgpOworKyAgbV9idWZmZXIu bGVhdmVOb1Bvb2woKTsKKysgIHJldHVybiBibzsKKyt9CisrCisrLy8gcGxmZCBGUlQsIEQoUkEp LCBSICAgKE1MUywgc3VmZml4IG9wY29kZSA1MDsgRC1mb3JtLWxpa2UgRlBSIGxvYWQpCisrQnVm ZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfcGxmZChGbG9hdFJlZ2lzdGVyIGZydCwgUmVnaXN0ZXIg cmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBSKSB7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKKysgIHNwZXcoInBsZmRcdGYl dSwlbGxkKCVzKSwlZCIsIHVpbnQzMl90KGZydC5lbmNvZGluZygpKSwKKysgICAgICAgKGxvbmcg bG9uZylpbW0zNCwgcmEubmFtZSgpLCBSID8gMSA6IDApOworKyAgdWludDMyX3QgZDAsIGQxOwor KyAgU3BsaXRJbW0zNChpbW0zNCwgJmQwLCAmZDEpOworKyAgdWludDMyX3QgcHJlZml4ID0gRW5j b2RlUG93ZXIxMFByZWZpeCgvKnR5cGU9TUxTKi8gMiwgUiwgZDApOworKyAgdWludDMyX3Qgc3Vm Zml4ID0gKDUwdSA8PCAyNikgfCAodWludDMyX3QoZnJ0LmVuY29kaW5nKCkpIDw8IDIxKSB8Cisr ICAgICAgICAgICAgICAgICAgICAodWludDMyX3QocmEuY29kZSgpKSA8PCAxNikgfCBkMTsKKysg IG1fYnVmZmVyLmVudGVyTm9Qb29sKDMpOworKyAgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsK KysgIEJ1ZmZlck9mZnNldCBibyA9IHdyaXRlSW5zdChwcmVmaXgpOworKyAgd3JpdGVJbnN0KHN1 ZmZpeCk7CisrICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgcmV0dXJuIGJvOworK30KKysK KysvLyBwbGZzIEZSVCwgRChSQSksIFIgICAoTUxTLCBzdWZmaXggb3Bjb2RlIDQ4OyB3aWRlbnMg c2luZ2xlIOKGkiBkb3VibGUgaW4gRlBSKQorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Bs ZnMoRmxvYXRSZWdpc3RlciBmcnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgUikgeworKyAgTU9aX0FTU0VSVF9JRihS LCByYSA9PSByMCk7CisrICBzcGV3KCJwbGZzXHRmJXUsJWxsZCglcyksJWQiLCB1aW50MzJfdChm cnQuZW5jb2RpbmcoKSksCisrICAgICAgIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwgUiA/ IDEgOiAwKTsKKysgIHVpbnQzMl90IGQwLCBkMTsKKysgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwg JmQxKTsKKysgIHVpbnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPU1M UyovIDIsIFIsIGQwKTsKKysgIHVpbnQzMl90IHN1ZmZpeCA9ICg0OHUgPDwgMjYpIHwgKHVpbnQz Ml90KGZydC5lbmNvZGluZygpKSA8PCAyMSkgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQz Ml90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7CisrICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsK KysgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7CisrICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0 ZUluc3QocHJlZml4KTsKKysgIHdyaXRlSW5zdChzdWZmaXgpOworKyAgbV9idWZmZXIubGVhdmVO b1Bvb2woKTsKKysgIHJldHVybiBibzsKKyt9CisrCisrLy8gcHN0ZCBSUywgRChSQSksIFIgICAo OExTLCBzdWZmaXggb3Bjb2RlIDYxID0gc3RkIEQtZm9ybSkKKytCdWZmZXJPZmZzZXQgQXNzZW1i bGVyOjphc19wc3RkKFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsKKysgIE1PWl9BU1NFUlRf SUYoUiwgcmEgPT0gcjApOworKyAgc3BldygicHN0ZFx0JXMsJWxsZCglcyksJWQiLCBycy5uYW1l KCksIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwKKysgICAgICAgUiA/IDEgOiAwKTsKKysg IHVpbnQzMl90IGQwLCBkMTsKKysgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVp bnQzMl90IHByZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPThMUyovIDAsIFIsIGQw KTsKKysgIHVpbnQzMl90IHN1ZmZpeCA9ICg2MXUgPDwgMjYpIHwgKHVpbnQzMl90KHJzLmNvZGUo KSkgPDwgMjEpIHwKKysgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5jb2RlKCkpIDw8 IDE2KSB8IGQxOworKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMyk7CisrICBlbnN1cmVQcmVmaXhl ZEFsaWdubWVudCgpOworKyAgQnVmZmVyT2Zmc2V0IGJvID0gd3JpdGVJbnN0KHByZWZpeCk7Cisr ICB3cml0ZUluc3Qoc3VmZml4KTsKKysgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICByZXR1 cm4gYm87CisrfQorKworKy8vIHBzdHh2IFhTLCBEKFJBKSwgUiAgICg4TFMsIDUtYml0IHN1ZmZp eCBvcGNvZGUgMjcsIFNYIGluIHN1ZmZpeCBiaXQgMjYpCisrLy8gICBYUyBpcyA2LWJpdDogU1gg KGhpZ2gpIHx8IFMgKGxvdyA1KSDigJQgbWF0Y2hlcyBzdHh2eCBjb252ZW50aW9uLgorK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX3BzdHh2KHVpbnQ4X3QgeHMsIFJlZ2lzdGVyIHJhLCBpbnQ2 NF90IGltbTM0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIFIpIHsK KysgIE1PWl9BU1NFUlQoeHMgPCA2NCk7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsK KysgIHNwZXcoInBzdHh2XHR2cyV1LCVsbGQoJXMpLCVkIiwgeHMsIChsb25nIGxvbmcpaW1tMzQs IHJhLm5hbWUoKSwKKysgICAgICAgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90IGQwLCBkMTsKKysg IFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHByZWZpeCA9IEVuY29k ZVBvd2VyMTBQcmVmaXgoLyp0eXBlPThMUyovIDAsIFIsIGQwKTsKKysgIHVpbnQzMl90IHN4ID0g KHhzID4+IDUpICYgMTsKKysgIHVpbnQzMl90IHMgPSB4cyAmIDB4MUY7CisrICB1aW50MzJfdCBz dWZmaXggPSAoMjd1IDw8IDI3KSB8IChzeCA8PCAyNikgfCAocyA8PCAyMSkgfAorKyAgICAgICAg ICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7CisrICBtX2J1ZmZl ci5lbnRlck5vUG9vbCgzKTsKKysgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7CisrICBCdWZm ZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKKysgIHdyaXRlSW5zdChzdWZmaXgpOwor KyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgIHJldHVybiBibzsKKyt9CisrCisrLy8gcHN0 ZmQgRlJTLCBEKFJBKSwgUiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgNTQgPSBzdGZkKQorK0J1ZmZl ck9mZnNldCBBc3NlbWJsZXI6OmFzX3BzdGZkKEZsb2F0UmVnaXN0ZXIgZnJzLCBSZWdpc3RlciBy YSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBSKSB7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKKysgIHNwZXcoInBzdGZkXHRm JXUsJWxsZCglcyksJWQiLCB1aW50MzJfdChmcnMuZW5jb2RpbmcoKSksCisrICAgICAgIChsb25n IGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90IGQwLCBkMTsK KysgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHByZWZpeCA9IEVu Y29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPU1MUyovIDIsIFIsIGQwKTsKKysgIHVpbnQzMl90IHN1 ZmZpeCA9ICg1NHUgPDwgMjYpIHwgKHVpbnQzMl90KGZycy5lbmNvZGluZygpKSA8PCAyMSkgfAor KyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYpIHwgZDE7Cisr ICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKKysgIGVuc3VyZVByZWZpeGVkQWxpZ25tZW50KCk7 CisrICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKKysgIHdyaXRlSW5zdChz dWZmaXgpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgIHJldHVybiBibzsKKyt9Cisr CisrLy8gcHN0ZnMgRlJTLCBEKFJBKSwgUiAgIChNTFMsIHN1ZmZpeCBvcGNvZGUgNTIgPSBzdGZz KQorK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3BzdGZzKEZsb2F0UmVnaXN0ZXIgZnJzLCBS ZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBSKSB7CisrICBNT1pfQVNTRVJUX0lGKFIsIHJhID09IHIwKTsKKysgIHNwZXco InBzdGZzXHRmJXUsJWxsZCglcyksJWQiLCB1aW50MzJfdChmcnMuZW5jb2RpbmcoKSksCisrICAg ICAgIChsb25nIGxvbmcpaW1tMzQsIHJhLm5hbWUoKSwgUiA/IDEgOiAwKTsKKysgIHVpbnQzMl90 IGQwLCBkMTsKKysgIFNwbGl0SW1tMzQoaW1tMzQsICZkMCwgJmQxKTsKKysgIHVpbnQzMl90IHBy ZWZpeCA9IEVuY29kZVBvd2VyMTBQcmVmaXgoLyp0eXBlPU1MUyovIDIsIFIsIGQwKTsKKysgIHVp bnQzMl90IHN1ZmZpeCA9ICg1MnUgPDwgMjYpIHwgKHVpbnQzMl90KGZycy5lbmNvZGluZygpKSA8 PCAyMSkgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KHJhLmNvZGUoKSkgPDwgMTYp IHwgZDE7CisrICBtX2J1ZmZlci5lbnRlck5vUG9vbCgzKTsKKysgIGVuc3VyZVByZWZpeGVkQWxp Z25tZW50KCk7CisrICBCdWZmZXJPZmZzZXQgYm8gPSB3cml0ZUluc3QocHJlZml4KTsKKysgIHdy aXRlSW5zdChzdWZmaXgpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgIHJldHVybiBi bzsKKyt9CisrCisrLy8gUE9XRVIxMCAoSVNBIDMuMSkgVmVjdG9yIEV4dHJhY3QgTWFzay4gUlQg KEdQUikgZ2V0cyB0aGUgd2FzbS1zcGVjCisrLy8gYml0bWFzayAob25lIGJpdCBwZXIgbGFuZSBN U0IpIGRpcmVjdGx5IGluIGxvdyAxNi84LzQvMiBiaXRzLiBVSU0KKysvLyBpcyBiYWtlZCBpbnRv IFBQQ192ZXh0cmFjdHtiLGgsdyxkfW0gKDgvOS8xMC8xMSkuIENhbGxlciBtdXN0IGhhdmUKKysv LyB2ZXJpZmllZCBIYXNQT1dFUjEwKCkuCisrI2RlZmluZSBERUZfVkVYVFJBQ1RfTShvcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgQnVmZmVy T2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChSZWdpc3RlciBydCwgRmxvYXRSZWdpc3RlciB2cmIp IHsgICAgICAgIFwKKysgICAgc3Bldygjb3AgIlx0JXMsdnIldSIsIHJ0Lm5hbWUoKSwgdWludDMy X3QodnJiLmVuY29kaW5nKCkgJiAzMSkpOyAgICAgICBcCisrICAgIHJldHVybiB3cml0ZUluc3Qo UFBDXyMjb3AgfCAodWludDMyX3QocnQuY29kZSgpKSA8PCAyMSkgfCAgICAgICAgICAgICAgXAor KyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QodnJiLmVuY29kaW5nKCkpICYgMzEpIDw8 IDExKSk7ICAgICAgICAgICAgIFwKKysgIH0KKytERUZfVkVYVFJBQ1RfTSh2ZXh0cmFjdGJtKQor K0RFRl9WRVhUUkFDVF9NKHZleHRyYWN0aG0pCisrREVGX1ZFWFRSQUNUX00odmV4dHJhY3R3bSkK KytERUZfVkVYVFJBQ1RfTSh2ZXh0cmFjdGRtKQorKyN1bmRlZiBERUZfVkVYVFJBQ1RfTQorKwor Ky8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBJbnNlcnQgV29yZC9Eb3VibGV3b3JkIGZyb20g R1BSLiBWWC1mb3JtOgorKy8vIFZSVCBhdCBiaXRzIDIxLi4yNSwgVUlNIGF0IGJpdHMgMTYuLjIw LCBSQiBhdCBiaXRzIDExLi4xNS4KKysjZGVmaW5lIERFRl9WSU5TKG9wLCBtYXhfdWltKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICBCdWZmZXJPZmZz ZXQgQXNzZW1ibGVyOjphc18jI29wKEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYiwgICAg ICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHVpbSkg eyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VSVCh1aW0gPD0gKG1h eF91aW0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg IHNwZXcoI29wICJcdHZyJXUsJXMsJXUiLCB1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSAmIDMxKSwg cmIubmFtZSgpLCAgICAgXAorKyAgICAgICAgIHVpbnQzMl90KHVpbSkpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRl SW5zdChQUENfIyNvcCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSkgJiAz MSkgPDwgMjEpIHwgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJf dCh1aW0pIDw8IDE2KSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICAgICAgICAgICAodWludDMyX3QocmIuY29kZSgpKSA8PCAxMSkpOyAgICAgICAgICAgICAg ICAgICAgICAgICBcCisrICB9CisrREVGX1ZJTlModmluc3csIDEyKQorK0RFRl9WSU5TKHZpbnNk LCA4KQorKyN1bmRlZiBERUZfVklOUworKworKy8vIFBPV0VSMTAgKElTQSAzLjEpIFZlY3RvciBJ bnNlcnQgYnl0ZS9oYWxmd29yZCBmcm9tIEdQUiB3aXRoCisrLy8gcmVnaXN0ZXItc3VwcGxpZWQg Ynl0ZSBwb3NpdGlvbi4gVlgtZm9ybTogVlJUIGF0IGJpdHMgMjEuLjI1LAorKy8vIFJBIGF0IGJp dHMgMTYuLjIwLCBSQiBhdCBiaXRzIDExLi4xNS4gInJ4IiBpcyByaWdodC1pbmRleGVkCisrLy8g KExFLW5hdHVyYWwg4oCUIGluZGV4IDAgPSBMU0IgYnl0ZSkuCisrI2RlZmluZSBERUZfVklOU19S WChvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcChGbG9hdFJlZ2lzdGVyIHZydCwg UmVnaXN0ZXIgcmEsICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcmIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHNwZXco I29wICJcdHZyJXUsJXMsJXMiLCB1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSAmIDMxKSwgcmEubmFt ZSgpLCAgICAgXAorKyAgICAgICAgIHJiLm5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgcmV0dXJuIHdyaXRlSW5zdChQ UENfIyNvcCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCh2cnQuZW5jb2RpbmcoKSkgJiAzMSkgPDwg MjEpIHwgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChyYS5j b2RlKCkpIDw8IDE2KSB8ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAg ICAgICAgICAodWludDMyX3QocmIuY29kZSgpKSA8PCAxMSkpOyAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICB9CisrREVGX1ZJTlNfUlgodmluc2JyeCkKKytERUZfVklOU19SWCh2aW5zaHJ4 KQorKyN1bmRlZiBERUZfVklOU19SWAorKworKy8vIFBPV0VSOSAoSVNBIDMuMCkgVi1mb3JtIDMt b3BlcmFuZCBpbnN0cnVjdGlvbnMgd2l0aCBWUlQsIFVJTSwgVlJCIGF0CisrLy8gYml0cyAyMS4u MjUsIDE2Li4yMCwgMTEuLjE1IHJlc3BlY3RpdmVseSAodmluc2VydHtiLGh9LCB2ZXh0cmFjdHt1 Yix1aH0pLgorKy8vIFNpbWQxMjggbGl2ZXMgaW4gVlNSMzItNjMgKD0gVlIwLTMxKSwgc28gd2Ug bWFzayBWUlQgYW5kIFZSQiB0byB0aGUKKysvLyA1LWJpdCBWUiBmaWVsZCB2aWEgYGVuY29kaW5n KCkgJiAzMWAuCisrI2RlZmluZSBERUZfVlJUX1VJTV9WUkIob3AsIG1heF91aW0sIHVpbV9zdGVw KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIEJ1ZmZlck9mZnNldCBBc3NlbWJs ZXI6OmFzXyMjb3AoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCAgICBcCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdWltKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorKyAgICBNT1pfQVNTRVJUKHVpbSA8PSAobWF4X3VpbSkpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgTU9aX0FTU0VS VCgodWltKSAlICh1aW1fc3RlcCkgPT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisrICAgIHNwZXcoI29wICJcdHZyJXUsdnIldSwldSIsIHVpbnQzMl90KHZydC5lbmNv ZGluZygpICYgMzEpLCAgICAgICAgICAgICAgXAorKyAgICAgICAgIHVpbnQzMl90KHZyYi5lbmNv ZGluZygpICYgMzEpLCB1aW50MzJfdCh1aW0pKTsgICAgICAgICAgICAgICAgICAgIFwKKysgICAg cmV0dXJuIHdyaXRlSW5zdChQUENfIyNvcCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCh2cnQuZW5j b2RpbmcoKSkgJiAzMSkgPDwgMjEpIHwgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAg ICAgICh1aW50MzJfdCh1aW0pIDw8IDE2KSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKysgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KHZyYi5lbmNvZGluZygpKSAmIDMx KSA8PCAxMSkpOyAgICAgICAgICAgICBcCisrICB9CisrREVGX1ZSVF9VSU1fVlJCKHZpbnNlcnRi LCAxNSwgMSkKKytERUZfVlJUX1VJTV9WUkIodmluc2VydGgsIDE0LCAyKQorK0RFRl9WUlRfVUlN X1ZSQih2ZXh0cmFjdHViLCAxNSwgMSkKKytERUZfVlJUX1VJTV9WUkIodmV4dHJhY3R1aCwgMTQs IDIpCisrI3VuZGVmIERFRl9WUlRfVUlNX1ZSQgorKworKy8vIFZNWCBiaW5hcnkgVlgtZm9ybSBw YWNrL21lcmdlIChyZS11c2UgREVGX1ZNWF9WVlYgcGF0dGVybikuCisrI2RlZmluZSBERUZfVk1Y X1ZWVihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfIyNvcCh1aW50OF90IHZydCwgdWlu dDhfdCB2cmEsIHVpbnQ4X3QgdnJiKSB7IFwKKysgICAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2 cmEgPCAzMiAmJiB2cmIgPCAzMik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHNw ZXcoI29wICJcdHZyJWQsdnIlZCx2ciVkIiwgdnJ0LCB2cmEsIHZyYik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorKyAgICByZXR1cm4gd3JpdGVJbnN0KFBQQ18jI29wIHwgdnJ0IDw8IDIx IHwgdnJhIDw8IDE2IHwgdnJiIDw8IDExKTsgICAgICAgIFwKKysgIH0KKytERUZfVk1YX1ZWVih2 cGtzaHNzKQorK0RFRl9WTVhfVlZWKHZwa3N3c3MpIERFRl9WTVhfVlZWKHZwa3NodXMpIERFRl9W TVhfVlZWKHZwa3N3dXMpCisrICAgIERFRl9WTVhfVlZWKHZtcmdoYikKKysgICAgICAgIERFRl9W TVhfVlZWKHZtcmdoaCkgREVGX1ZNWF9WVlYodm1yZ2h3KSBERUZfVk1YX1ZWVih2bXJnbGIpCisr ICAgICAgICAgICAgREVGX1ZNWF9WVlYodm1yZ2xoKSBERUZfVk1YX1ZWVih2bXJnbHcpIERFRl9W TVhfVlZWKHZtdWxlc2IpCisrICAgICAgICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxvc2IpIERF Rl9WTVhfVlZWKHZtdWxldWIpIERFRl9WTVhfVlZWKHZtdWxvdWIpCisrICAgICAgICAgICAgICAg ICAgICBERUZfVk1YX1ZWVih2bXVsZXNoKSBERUZfVk1YX1ZWVih2bXVsb3NoKQorKyAgICAgICAg ICAgICAgICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxldWgpIERFRl9WTVhfVlZWKHZtdWxvdWgp CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRl9WTVhfVlZWKHZtdWxlc3cpIERFRl9W TVhfVlZWKHZtdWxvc3cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZfVk1Y X1ZWVih2bXVsZXV3KSBERUZfVk1YX1ZWVih2bXVsb3V3KQorKyN1bmRlZiBERUZfVk1YX1ZWVgor KworKyAgICAvLyB2cGVybSBWQS1mb3JtOiAoNDw8MjYpIHwgVlJUPDwyMSB8IFZSQTw8MTYgfCBW UkI8PDExIHwgVlJDPDw2IHwgWE8KKysgICAgQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6YXNfdnBl cm0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB2cmMpIHsKKysgIE1PWl9BU1NFUlQodnJ0 IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJiIDwgMzIgJiYgdnJjIDwgMzIpOworKyAgc3BldygidnBl cm1cdHZyJWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOworKyAgcmV0dXJu IHdyaXRlSW5zdChQUENfdnBlcm0gfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEg fCB2cmMgPDwgNik7CisrfQorKworKy8vIFZBLWZvcm0gdGVybmFyeSBWTVg6ICg0PDwyNikgfCBW UlQ8PDIxIHwgVlJBPDwxNiB8IFZSQjw8MTEgfCBWUkM8PDYgfAorKy8vIFhPKDYtYml0KQorK0J1 ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZtbGFkZHVobSh1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50OF90IHZyYykgeworKyAgTU9aX0FTU0VSVCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIg PCAzMiAmJiB2cmMgPCAzMik7CisrICBzcGV3KCJ2bWxhZGR1aG1cdHZyJWQsdnIlZCx2ciVkLHZy JWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1sYWRk dWhtIHwgdnJ0IDw8IDIxIHwgdnJhIDw8IDE2IHwgdnJiIDw8IDExIHwKKysgICAgICAgICAgICAg ICAgICAgdnJjIDw8IDYpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjphc192bWhy YWRkc2hzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHZyYykgeworKyAgTU9aX0FTU0VS VCh2cnQgPCAzMiAmJiB2cmEgPCAzMiAmJiB2cmIgPCAzMiAmJiB2cmMgPCAzMik7CisrICBzcGV3 KCJ2bWhyYWRkc2hzXHR2ciVkLHZyJWQsdnIlZCx2ciVkIiwgdnJ0LCB2cmEsIHZyYiwgdnJjKTsK KysgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZtaHJhZGRzaHMgfCB2cnQgPDwgMjEgfCB2cmEgPDwg MTYgfCB2cmIgPDwgMTEgfAorKyAgICAgICAgICAgICAgICAgICB2cmMgPDwgNik7CisrfQorKwor K0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Ztc3Vtc2htKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDhfdCB2cmMpIHsKKysgIE1PWl9BU1NFUlQodnJ0IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJi IDwgMzIgJiYgdnJjIDwgMzIpOworKyAgc3Bldygidm1zdW1zaG1cdHZyJWQsdnIlZCx2ciVkLHZy JWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOworKyAgcmV0dXJuIHdyaXRlSW5zdChQUENfdm1zdW1z aG0gfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIgPDwgMTEgfAorKyAgICAgICAgICAgICAg ICAgICB2cmMgPDwgNik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3Ztc3Vt dWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB2cmMpIHsKKysgIE1PWl9BU1NFUlQodnJ0 IDwgMzIgJiYgdnJhIDwgMzIgJiYgdnJiIDwgMzIgJiYgdnJjIDwgMzIpOworKyAgc3Bldygidm1z dW11aG1cdHZyJWQsdnIlZCx2ciVkLHZyJWQiLCB2cnQsIHZyYSwgdnJiLCB2cmMpOworKyAgcmV0 dXJuIHdyaXRlSW5zdChQUENfdm1zdW11aG0gfCB2cnQgPDwgMjEgfCB2cmEgPDwgMTYgfCB2cmIg PDwgMTEgfAorKyAgICAgICAgICAgICAgICAgICB2cmMgPDwgNik7CisrfQorKworK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0aXNiKHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpIHsK KysgIE1PWl9BU1NFUlQodnJ0IDwgMzIpOworKyAgTU9aX0FTU0VSVChzaW1tNSA+PSAtMTYgJiYg c2ltbTUgPD0gMTUpOworKyAgc3BldygidnNwbHRpc2JcdHZyJWQsJWQiLCB2cnQsIHNpbW01KTsK KysgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0aXNiIHwgdWludDMyX3QodnJ0KSA8PCAyMSB8 CisrICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChzaW1tNSkgJiAweDFGKSA8PCAxNik7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0aXNoKHVpbnQ4X3QgdnJ0LCBp bnQ4X3Qgc2ltbTUpIHsKKysgIE1PWl9BU1NFUlQodnJ0IDwgMzIpOworKyAgTU9aX0FTU0VSVChz aW1tNSA+PSAtMTYgJiYgc2ltbTUgPD0gMTUpOworKyAgc3BldygidnNwbHRpc2hcdHZyJWQsJWQi LCB2cnQsIHNpbW01KTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3ZzcGx0aXNoIHwgdWludDMy X3QodnJ0KSA8PCAyMSB8CisrICAgICAgICAgICAgICAgICAgICh1aW50MzJfdChzaW1tNSkgJiAw eDFGKSA8PCAxNik7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OmFzX3ZzcGx0aXN3 KHVpbnQ4X3QgdnJ0LCBpbnQ4X3Qgc2ltbTUpIHsKKysgIE1PWl9BU1NFUlQodnJ0IDwgMzIpOwor KyAgTU9aX0FTU0VSVChzaW1tNSA+PSAtMTYgJiYgc2ltbTUgPD0gMTUpOworKyAgc3BldygidnNw bHRpc3dcdHZyJWQsJWQiLCB2cnQsIHNpbW01KTsKKysgIHJldHVybiB3cml0ZUluc3QoUFBDX3Zz cGx0aXN3IHwgdWludDMyX3QodnJ0KSA8PCAyMSB8CisrICAgICAgICAgICAgICAgICAgICh1aW50 MzJfdChzaW1tNSkgJiAweDFGKSA8PCAxNik7CisrfQorKworKy8vIC0tLSBDb252ZW5pZW5jZSBw c2V1ZG8taW5zdHJ1Y3Rpb25zIC0tLQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX3Ry YXAoKSB7CisrICBzcGV3KCJ0cmFwIEAgJTA4eCIsIGN1cnJlbnRPZmZzZXQoKSk7CisrICByZXR1 cm4gd3JpdGVJbnN0KFBQQ190cmFwKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6 eHNfdHJhcF90YWdnZWQoVHJhcFRhZyB0YWcpIHsKKysgIHVpbnQzMl90IHR2ID0gUFBDX3RyYXAg fCAoKHVpbnQ4X3QpdGFnIDw8IDE2KSB8ICgodWludDhfdCl0YWcgPDwgMTEpOworKyAgc3Bldygi dHJhcCBAICUwOHggOyBNQVJLICVkICUwOHgiLCBjdXJyZW50T2Zmc2V0KCksICh1aW50OF90KXRh ZywgdHYpOworKyAgcmV0dXJuIHdyaXRlSW5zdCh0dik7CisrfQorKworK0J1ZmZlck9mZnNldCBB c3NlbWJsZXI6OnhzX21yKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSkgeworKyAgcmV0dXJuIGFz X29yXyhyZCwgcmEsIHJhKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXRj dHIoUmVnaXN0ZXIgcmEpIHsKKysgIHJldHVybiBhc19tdHNwcigoU1BSZWdpc3RlcklEKXNwcl9j dHIsIHJhKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eHNfbXRscihSZWdpc3Rl ciByYSkgeworKyAgcmV0dXJuIGFzX210c3ByKChTUFJlZ2lzdGVySUQpc3ByX2xyLCByYSk7Cisr fQorKworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6OnhzX21mbHIoUmVnaXN0ZXIgcmQpIHsKKysg IHJldHVybiBhc19tZnNwcihyZCwgKFNQUmVnaXN0ZXJJRClzcHJfbHIpOworK30KKysKKytCdWZm ZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tdGNyKFJlZ2lzdGVyIHJzKSB7IHJldHVybiBhc19tdGNy ZigweGZmLCBycyk7IH0KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tZnhlcihSZWdp c3RlciByYSkgeworKyAgcmV0dXJuIGFzX21mc3ByKHJhLCAoU1BSZWdpc3RlcklEKXNwcl94ZXIp OworK30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19tdHhlcihSZWdpc3RlciByYSkg eworKyAgcmV0dXJuIGFzX210c3ByKChTUFJlZ2lzdGVySUQpc3ByX3hlciwgcmEpOworK30KKysK KytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4c19saShSZWdpc3RlciByZCwgaW50MTZfdCBpbSkg eworKyAgcmV0dXJuIGFzX2FkZGkocmQsIHIwLCBpbSwgdHJ1ZSk7CisrfQorKworK0J1ZmZlck9m ZnNldCBBc3NlbWJsZXI6OnhzX2xpcyhSZWdpc3RlciByZCwgaW50MTZfdCBpbSkgeworKyAgcmV0 dXJuIGFzX2FkZGlzKHJkLCByMCwgaW0sIHRydWUpOworK30KKysKKytCdWZmZXJPZmZzZXQgQXNz ZW1ibGVyOjp4X3N1YmkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltKSB7Cisr ICByZXR1cm4gYXNfYWRkaShyZCwgcmEsIC1pbSk7CisrfQorKworK0J1ZmZlck9mZnNldCBBc3Nl bWJsZXI6Onhfbm90KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSkgeworKyAgcmV0dXJuIGFzX25v cihyZCwgcmEsIHJhKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9zbHdpKFJl Z2lzdGVyIHJkLCBSZWdpc3RlciBycywgaW50IG4pIHsKKysgIE1PWl9BU1NFUlQobiA+PSAwICYm IG4gPCAzMik7CisrICByZXR1cm4gYXNfcmx3aW5tKHJkLCBycywgbiwgMCwgMzEgLSBuKTsKKyt9 CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9zbGRpKFJlZ2lzdGVyIHJkLCBSZWdpc3Rl ciBycywgaW50IG4pIHsKKysgIHJldHVybiBhc19ybGRpY3IocmQsIHJzLCBuLCA2MyAtIG4pOwor K30KKysKKytCdWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X3Nyd2koUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCBpbnQgbikgeworKyAgTU9aX0FTU0VSVChuID49IDAgJiYgbiA8IDMyKTsKKysgIGlm IChuID09IDApIHsKKysgICAgcmV0dXJuIGFzX3Jsd2lubShyZCwgcnMsIDAsIDAsIDMxKTsKKysg IH0KKysgIHJldHVybiBhc19ybHdpbm0ocmQsIHJzLCAzMiAtIG4sIG4sIDMxKTsKKyt9CisrCisr QnVmZmVyT2Zmc2V0IEFzc2VtYmxlcjo6eF9zcmRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywg aW50IG4pIHsKKysgIE1PWl9BU1NFUlQobiA+PSAwICYmIG4gPCA2NCk7CisrICBpZiAobiA9PSAw KSB7CisrICAgIHJldHVybiBhc19vcl8ocmQsIHJzLCBycyk7CisrICB9CisrICByZXR1cm4gYXNf cmxkaWNsKHJkLCBycywgNjQgLSBuLCBuKTsKKyt9CisrCisrQnVmZmVyT2Zmc2V0IEFzc2VtYmxl cjo6eF9iaXRfdmFsdWUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCB1bnNpZ25lZCBiaXQpIHsK KysgIHJldHVybiBhc19ybHdpbm0ocmQsIHJzLCBiaXQgKyAxLCAzMSwgMzEpOworK30KKysKKytC dWZmZXJPZmZzZXQgQXNzZW1ibGVyOjp4X2luc2VydGJpdHMwXzE1KFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycykgeworKyAgcmV0dXJuIGFzX3Jsd2ltaShyZCwgcnMsIDAsIDE2LCAzMSk7CisrfQor KworK0J1ZmZlck9mZnNldCBBc3NlbWJsZXI6Onhfc3JfbXVsbGkoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhLCBpbnQxNl90IGltKSB7CisrICBhc19zcmFkaShyZCwgcmEsIDYzKTsKKysgIHJldHVy biBhc19tdWxsaShyZCwgcmQsIGltKTsKKyt9CisrCisrdm9pZCBBc3NlbWJsZXI6OmFzX2JyZWFr KHVpbnQzMl90IGNvZGUpIHsKKysgIHNwZXcoImJyZWFrXHQlZCIsIGNvZGUpOworKyAgd3JpdGVJ bnN0KFBQQ190cmFwKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTGFiZWwgYmlu ZGluZywgcmV0YXJnZXQsIGFuZCBjb2RlIGxhYmVsIHByb2Nlc3NpbmcuCisrLy8gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrCisrLy8gRm9yd2FyZC1kZWNsYXJlZCBzaGFwZSBoZWxwZXJzOyBmdWxsIGRlZmlu aXRpb25zIGFuZCB0aGUgbGF5b3V0CisrLy8gY29tbWVudGFyeSBsaXZlIHdpdGggdGhlIFdyaXRl TG9hZDY0SW5zdHJ1Y3Rpb25zIHNlY3Rpb24gYmVsb3cuCisrc3RhdGljIGJvb2wgSXNBZGRwY2lz TG9hZDY0U3RhbnphKHVpbnQzMl90IGVuYzApOworK3N0YXRpYyB1aW50OF90IExvYWQ2NFN0YW56 YURlc3RSZWcoSW5zdHJ1Y3Rpb24qIGluc3QwKTsKKysKKytJbnN0SW1tIEFzc2VtYmxlcjo6aW52 ZXJ0QnJhbmNoKEluc3RJbW0gYnJhbmNoLCBCT2ZmSW1tMTYgc2tpcE9mZnNldCkgeworKyAgLy8g RmxpcCB0aGUgQk8gY29uZGl0aW9uLXRydWUvY29uZGl0aW9uLWZhbHNlIGJpdCAoYml0IDI0KS4K KysgIHVpbnQzMl90IGRhdGEgPSBicmFuY2guZW5jb2RlKCk7CisrICBkYXRhID0gKGRhdGEgXiAw eDAxMDAwMDAwKSAmIDB4RkZGRjAwMDM7CisrICBkYXRhIHw9IHNraXBPZmZzZXQuZW5jb2RlKCk7 CisrICBicmFuY2guc2V0RGF0YShkYXRhKTsKKysgIHJldHVybiBicmFuY2g7CisrfQorKworK3Zv aWQgQXNzZW1ibGVyOjpiaW5kKEluc3RJbW0qIGluc3QsIHVpbnRwdHJfdCBicmFuY2gsIHVpbnRw dHJfdCB0YXJnZXQpIHsKKysgIGludHB0cl90IG9mZnNldCA9IHRhcmdldCAtIGJyYW5jaDsKKysg IEluc3RydWN0aW9uKiBpMCA9IChJbnN0cnVjdGlvbiopaW5zdDsKKysKKysgIGlmIChpMC0+bmV4 dCgpLT5lbmNvZGUoKSA9PSBQUENfYmNsX2Fsd2F5c19wbHVzNCB8fAorKyAgICAgIElzQWRkcGNp c0xvYWQ2NFN0YW56YShpMC0+ZW5jb2RlKCkpKSB7CisrICAgIC8vIFByZS1leGlzdGluZyBsb25n IHN0YW56YSwgZWl0aGVyIFA4IChtZmxyICsgYmNsIG1hcmtlciBhdCBbMV0pIG9yCisrICAgIC8v IFA5KyAoYWRkcGNpcyBhdCBbMF07IG1ham9yIG9wY29kZSAxOSkuIEVpdGhlciB3YXksIGp1c3Qg cmVnaXN0ZXIKKysgICAgLy8gdGhlIGxvbmcganVtcCDigJQgdGhlIHN0YW56YSdzIC5xdWFkIGF0 IFs2Li43XSBnZXRzIHBhdGNoZWQgbGF0ZXIKKysgICAgLy8gdmlhIFVwZGF0ZUxvYWQ2NFZhbHVl LgorKyAgICBhZGRMb25nSnVtcChCdWZmZXJPZmZzZXQoYnJhbmNoKSwgQnVmZmVyT2Zmc2V0KHRh cmdldCkpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBpZiAoaTAtPmlzT3Bjb2RlKCh1aW50 MzJfdClQUENfdHcpKSB7CisrICAgIC8vIFRhZ2dlZCB0cmFwIHN0YW56YS4gVGhlIHRhZyB0ZWxs cyB1cyB3aGljaCBicmFuY2ggdHlwZSB3YXMgcmVzZXJ2ZWQuCisrICAgIFRyYXBUYWcgdGFnID0g KFRyYXBUYWcpaW5zdC0+dHJhcHRhZygpOworKyAgICBJbnN0cnVjdGlvbiogaTEgPSBpMC0+bmV4 dCgpOworKyAgICBJbnN0cnVjdGlvbiogaTIgPSBpMS0+bmV4dCgpOworKyAgICBJbnN0cnVjdGlv biogaTMgPSBpMi0+bmV4dCgpOworKyAgICBJbnN0cnVjdGlvbiogaTQgPSBpMy0+bmV4dCgpOwor KyAgICBJbnN0cnVjdGlvbiogaTUgPSBpNC0+bmV4dCgpOworKyAgICBJbnN0cnVjdGlvbiogaTYg PSBpNS0+bmV4dCgpOworKyAgICBJbnN0cnVjdGlvbiogaTcgPSBpNi0+bmV4dCgpOworKyAgICBJ bnN0cnVjdGlvbiogaTggPSBpNy0+bmV4dCgpOworKyAgICBJbnN0cnVjdGlvbiogaTkgPSBpOC0+ bmV4dCgpOworKworKyAgICBzd2l0Y2ggKHRhZykgeworKyAgICAgIGNhc2UgQkNUYWc6IHsKKysg ICAgICAgIC8vIGluc3RbLTFdIGlzIHRoZSBvcmlnaW5hbCBiYyBpbnN0cnVjdGlvbi4KKysgICAg ICAgIEluc3RydWN0aW9uKiBiYyA9IGkwIC0gMTsKKysgICAgICAgIC8vIFRyeSBzaG9ydCBiYyAo b2Zmc2V0ICsgNCBiZWNhdXNlIGJjIGlzIG9uZSBpbnN0cnVjdGlvbiBiZWZvcmUgdHcpLgorKyAg ICAgICAgaWYgKEJPZmZJbW0xNjo6SXNJblJhbmdlKG9mZnNldCArIChpbnRwdHJfdClzaXplb2Yo dWludDMyX3QpKSkgeworKyAgICAgICAgICBiYy0+c2V0RGF0YSgoKGJjLT5lbmNvZGUoKSBeIDB4 MDEwMDAwMDApICYgMHhGRkZGMDAwMykgfAorKyAgICAgICAgICAgICAgICAgICAgICBCT2ZmSW1t MTYob2Zmc2V0ICsgc2l6ZW9mKHVpbnQzMl90KSkuZW5jb2RlKCkpOworKyAgICAgICAgICBpMC0+ bWFrZU5vcCgpOworKyAgICAgICAgICBpMS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpMi0+bWFr ZU5vcCgpOworKyAgICAgICAgICBpMy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNC0+bWFrZU5v cCgpOworKyAgICAgICAgICBpNS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNi0+bWFrZU5vcCgp OworKyAgICAgICAgICBpNy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOwor KyAgICAgICAgICBpOS0+bWFrZU5vcCgpOworKyAgICAgICAgICByZXR1cm47CisrICAgICAgICB9 CisrICAgICAgICAvLyBUcnkgc2hvcnQgYiAodW5jb25kaXRpb25hbCkuCisrICAgICAgICBpZiAo Sk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zmc2V0KSkgeworKyAgICAgICAgICBpMC0+c2V0RGF0YShQ UENfYiB8IEpPZmZJbW0yNihvZmZzZXQpLmVuY29kZSgpKTsKKysgICAgICAgICAgaTEtPm1ha2VO b3AoKTsKKysgICAgICAgICAgaTItPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTMtPm1ha2VOb3Ao KTsKKysgICAgICAgICAgaTQtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTUtPm1ha2VOb3AoKTsK KysgICAgICAgICAgaTYtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTctPm1ha2VOb3AoKTsKKysg ICAgICAgICAgaTgtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTktPm1ha2VOb3AoKTsKKysgICAg ICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgLy8gTG9uZzogV3JpdGVMb2FkNjQg dG8gU2Vjb25kU2NyYXRjaFJlZyArIG10Y3RyICsgYmN0ci4KKysgICAgICAgIGFkZExvbmdKdW1w KEJ1ZmZlck9mZnNldChicmFuY2gpLCBCdWZmZXJPZmZzZXQodGFyZ2V0KSk7CisrICAgICAgICBX cml0ZUxvYWQ2NEluc3RydWN0aW9ucyhpMCwgU2Vjb25kU2NyYXRjaFJlZywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICAg ICAgaTgtPm1ha2VPcF9tdGN0cihTZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgICAgIGk5LT5tYWtl T3BfYmN0cigpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgQ2FsbFRh ZzogeworKyAgICAgICAgLy8gRm9yIGNhbGxzLCB0aGUgYWN0dWFsIGNhbGwgaW5zdHJ1Y3Rpb24g Z29lcyBhdCBpbnN0WzldIGFuZAorKyAgICAgICAgLy8gdGhlIHJldHVybiBhZGRyZXNzIG11c3Qg YmUgYWZ0ZXIgdGhlIHN0YW56YS4KKysgICAgICAgIGludHB0cl90IGNhbGxPZmZzZXQgPSBvZmZz ZXQgLSA5ICogKGludHB0cl90KXNpemVvZih1aW50MzJfdCk7CisrICAgICAgICBpZiAoSk9mZklt bTI2OjpJc0luUmFuZ2UoY2FsbE9mZnNldCkpIHsKKysgICAgICAgICAgaTAtPm1ha2VOb3AoKTsK KysgICAgICAgICAgaTEtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTItPm1ha2VOb3AoKTsKKysg ICAgICAgICAgaTMtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTQtPm1ha2VOb3AoKTsKKysgICAg ICAgICAgaTUtPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTYtPm1ha2VOb3AoKTsKKysgICAgICAg ICAgaTctPm1ha2VOb3AoKTsKKysgICAgICAgICAgaTgtPm1ha2VOb3AoKTsKKysgICAgICAgICAg aTktPnNldERhdGEoUFBDX2IgfCBKT2ZmSW1tMjYoY2FsbE9mZnNldCkuZW5jb2RlKCkgfCBMaW5r Qik7CisrICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgICAgIC8vIExvbmc6IFdy aXRlTG9hZDY0IHRvIFNlY29uZFNjcmF0Y2hSZWcgKyBtdGN0ciArIGJjdHJsLgorKyAgICAgICAg YWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGJyYW5jaCksIEJ1ZmZlck9mZnNldCh0YXJnZXQpKTsK KysgICAgICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGkwLCBTZWNvbmRTY3JhdGNoUmVnLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNF VCk7CisrICAgICAgICBpOC0+bWFrZU9wX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICAg ICAgaTktPm1ha2VPcF9iY3RyKExpbmtCKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysg ICAgICBjYXNlIEJUYWc6IHsKKysgICAgICAgIGlmIChKT2ZmSW1tMjY6OklzSW5SYW5nZShvZmZz ZXQpKSB7CisrICAgICAgICAgIGkwLT5zZXREYXRhKFBQQ19iIHwgSk9mZkltbTI2KG9mZnNldCku ZW5jb2RlKCkpOworKyAgICAgICAgICBpMS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpMi0+bWFr ZU5vcCgpOworKyAgICAgICAgICBpMy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNC0+bWFrZU5v cCgpOworKyAgICAgICAgICBpNS0+bWFrZU5vcCgpOworKyAgICAgICAgICBpNi0+bWFrZU5vcCgp OworKyAgICAgICAgICBpNy0+bWFrZU5vcCgpOworKyAgICAgICAgICBpOC0+bWFrZU5vcCgpOwor KyAgICAgICAgICBpOS0+bWFrZU5vcCgpOworKyAgICAgICAgICByZXR1cm47CisrICAgICAgICB9 CisrICAgICAgICAvLyBMb25nOiBXcml0ZUxvYWQ2NCB0byBTZWNvbmRTY3JhdGNoUmVnICsgbXRj dHIgKyBiY3RyLgorKyAgICAgICAgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGJyYW5jaCksIEJ1 ZmZlck9mZnNldCh0YXJnZXQpKTsKKysgICAgICAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGkw LCBTZWNvbmRTY3JhdGNoUmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgICAgICBpOC0+bWFrZU9wX210Y3RyKFNlY29u ZFNjcmF0Y2hSZWcpOworKyAgICAgICAgaTktPm1ha2VPcF9iY3RyKCk7CisrICAgICAgICBicmVh azsKKysgICAgICB9CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgiVW5leHBl Y3RlZCBUcmFwVGFnIik7CisrICAgIH0KKysgICAgcmV0dXJuOworKyAgfQorKworKyAgaWYgKGkw LT5pc09wY29kZShQUENfYikpIHsKKysgICAgLy8gU2hvcnQgdW5jb25kaXRpb25hbCBicmFuY2gg 4oCUIHNldCBvZmZzZXQsIG5vcCBuZXh0LWluLWNoYWluIHNsb3QuCisrICAgIE1PWl9BU1NFUlQo Sk9mZkltbTI2OjpJc0luUmFuZ2Uob2Zmc2V0KSk7CisrICAgIGkwLT5zZXREYXRhKChpMC0+ZW5j b2RlKCkgJiB+MHgwM0ZGRkZGQykgfCBKT2ZmSW1tMjYob2Zmc2V0KS5lbmNvZGUoKSk7CisrICAg IGkwLT5uZXh0KCktPm1ha2VOb3AoKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgaWYgKGkw LT5pc09wY29kZShQUENfYmMpKSB7CisrICAgIC8vIFNob3J0IGNvbmRpdGlvbmFsIGJyYW5jaCDi gJQgcHJlc2VydmUgdXBwZXIgMTYgYml0cywgc2V0IG9mZnNldC4KKysgICAgTU9aX0FTU0VSVChC T2ZmSW1tMTY6OklzSW5SYW5nZShvZmZzZXQpKTsKKysgICAgaTAtPnNldERhdGEoKGkwLT5lbmNv ZGUoKSAmIDB4RkZGRjAwMDMpIHwgQk9mZkltbTE2KG9mZnNldCkuZW5jb2RlKCkpOworKyAgICBp MC0+bmV4dCgpLT5tYWtlTm9wKCk7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIE1PWl9DUkFT SCgiVW5leHBlY3RlZCBpbnN0cnVjdGlvbiBpbiBiaW5kIik7CisrfQorKworK3ZvaWQgQXNzZW1i bGVyOjpiaW5kKExhYmVsKiBsYWJlbCwgQnVmZmVyT2Zmc2V0IGJvZmYpIHsKKysgIGlmIChsYWJl bC0+dXNlZCgpKSB7CisrICAgIGJvb2wgbW9yZTsKKysgICAgQnVmZmVyT2Zmc2V0IGIobGFiZWwp OworKyAgICBkbyB7CisrICAgICAgQnVmZmVyT2Zmc2V0IG5leHQ7CisrICAgICAgSW5zdEltbSog aW5zdCA9IChJbnN0SW1tKillZGl0U3JjKGIpOworKyAgICAgIEluc3RydWN0aW9uKiBpMSA9ICgo SW5zdHJ1Y3Rpb24qKWluc3QpLT5uZXh0KCk7CisrICAgICAgbW9yZSA9IChpMS0+ZW5jb2RlKCkg IT0gTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgICAgaWYgKG1vcmUpIHsKKysgICAg ICAgIG5leHQgPSBCdWZmZXJPZmZzZXQoaTEtPmVuY29kZSgpKTsKKysgICAgICB9CisrICAgICAg YmluZChpbnN0LCBiLmdldE9mZnNldCgpLCBib2ZmLmdldE9mZnNldCgpKTsKKysgICAgICBiID0g bmV4dDsKKysgICAgfSB3aGlsZSAobW9yZSk7CisrICB9CisrICBsYWJlbC0+YmluZChib2ZmLmdl dE9mZnNldCgpKTsKKyt9CisrCisrdm9pZCBBc3NlbWJsZXI6OnJldGFyZ2V0KExhYmVsKiBsYWJl bCwgTGFiZWwqIHRhcmdldCkgeworKyAgc3BldygicmV0YXJnZXQiKTsKKysgIGlmIChsYWJlbC0+ dXNlZCgpICYmICFvb20oKSkgeworKyAgICBpZiAodGFyZ2V0LT5ib3VuZCgpKSB7CisrICAgICAg YmluZChsYWJlbCwgQnVmZmVyT2Zmc2V0KHRhcmdldCkpOworKyAgICB9IGVsc2UgaWYgKHRhcmdl dC0+dXNlZCgpKSB7CisrICAgICAgLy8gUHJlcGVuZCBsYWJlbCdzIHVzZSBjaGFpbiB0byB0YXJn ZXQncyB1c2UgY2hhaW4uCisrICAgICAgQnVmZmVyT2Zmc2V0IGIobGFiZWwpOworKyAgICAgIEJ1 ZmZlck9mZnNldCBuZXh0OworKyAgICAgIGRvIHsKKysgICAgICAgIEluc3RydWN0aW9uKiBpbnN0 ID0gKEluc3RydWN0aW9uKillZGl0U3JjKGIpOworKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGkxID0g aW5zdC0+bmV4dCgpOworKyAgICAgICAgaWYgKGkxLT5lbmNvZGUoKSAhPSBMYWJlbEJhc2U6OklO VkFMSURfT0ZGU0VUKSB7CisrICAgICAgICAgIG5leHQgPSBCdWZmZXJPZmZzZXQoaTEtPmVuY29k ZSgpKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIC8vIEVuZCBvZiBsYWJlbCdzIGNo YWluIOKAlCBsaW5rIHRvIHRhcmdldCdzIGhlYWQuCisrICAgICAgICAgIGkxLT5zZXREYXRhKHRh cmdldC0+b2Zmc2V0KCkpOworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAg IGIgPSBuZXh0OworKyAgICAgIH0gd2hpbGUgKHRydWUpOworKyAgICB9CisrICAgIC8vIFRyYW5z ZmVyIGxhYmVsJ3MgdXNlIGxpc3QgdG8gdGFyZ2V0LgorKyAgICBpZiAoIXRhcmdldC0+Ym91bmQo KSkgeworKyAgICAgIHRhcmdldC0+dXNlKGxhYmVsLT5vZmZzZXQoKSk7CisrICAgIH0KKysgIH0K KysgIGxhYmVsLT5yZXNldCgpOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6cHJvY2Vzc0NvZGVM YWJlbHModWludDhfdCogcmF3Q29kZSkgeworKyAgZm9yIChjb25zdCBDb2RlTGFiZWwmIGxhYmVs IDogY29kZUxhYmVsc18pIHsKKysgICAgQmluZChyYXdDb2RlLCBsYWJlbCk7CisrICB9CisrfQor KworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKy8vIExvYWQ2NCBpbnN0cnVjdGlvbiBzZXF1ZW5jZSAo OCBzbG90cywgbGl0ZXJhbCBwb29sIGZvcm1hdCk6CisrLy8gICBbMF0gbWZsciByMCAgICAgICAg ICAgIOKAlCBzYXZlIExSCisrLy8gICBbMV0gYmNsIDIwLDAsLis0ICAgICAg4oCUIExSID0gYWRk cmVzcyBvZiBbMl0KKysvLyAgIFsyXSBtZmxyIHJEICAgICAgICAgICAg4oCUIHJEID0gYWRkcmVz cyBvZiBbMl0KKysvLyAgIFszXSBtdGxyIHIwICAgICAgICAgICAg4oCUIHJlc3RvcmUgTFIKKysv LyAgIFs0XSBsZCByRCwgMTYockQpICAgICAg4oCUIGxvYWQgZnJvbSBbNi4uN10gKG9mZnNldCA9 IDI0IC0gOCA9IDE2KQorKy8vICAgWzVdIGIgLisxMiAgICAgICAgICAgICDigJQgc2tpcCBkYXRh CisrLy8gICBbNi4uN10gLnF1YWQgVkFMVUUgICAgIOKAlCA4LWJ5dGUgZGF0YQorKy8vID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIENvbnN0YW50IHBvb2wgY2Fs bGJhY2tzIChyZXF1aXJlZCBieSBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29scykuCisr Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrCisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6Oklu c2VydEluZGV4SW50b1RhZyh1aW50OF90KiBsb2FkLCB1aW50MzJfdCBpbmRleCkgeworKyAgLy8g U3Rhc2ggdGhlIHBvb2wgZW50cnkgaW5kZXggaW4gdGhlIGhpbnQgd29yZCdzIGxvdyAxNiBiaXRz OyB0aGUgaGlnaAorKyAgLy8gYml0cyBjYXJyeSB0aGUgZGVzdCByZWcgYW5kIGxvYWQgdHlwZSwg Y29uc3VtZWQgYnkKKysgIC8vIFBhdGNoQ29uc3RhbnRQb29sTG9hZCB3aGVuIHRoZSBwb29sIGlz IHJlc29sdmVkLgorKyAgdWludDMyX3QqIGluc3QgPSAodWludDMyX3QqKWxvYWQ7CisrICAqaW5z dCA9ICgqaW5zdCAmIDB4RkZGRjAwMDApIHwgKGluZGV4ICYgMHhGRkZGKTsKKyt9CisrCisrLyog c3RhdGljICovCisrYm9vbCBBc3NlbWJsZXI6OlBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBs b2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcikgeworKyAgLy8gUmV3cml0ZSBwbGFjZWhvbGRl ciBpbnN0cnVjdGlvbnMgd2l0aCBhIHBvb2wgbG9hZCBzZXF1ZW5jZS4KKysgIC8vIEhpbnQgd29y ZCBsYXlvdXQgKHNldCBieSBsb2FkRnJvbVBvb2xGbG9hdDY0IC8gbG9hZEZyb21Qb29sRmxvYXQz MiAvCisrICAvLyBsb2FkRnJvbVBvb2xTaW1kMTI4KToKKysgIC8vICAgYml0cyAwLTE1OiAgcG9v bCBlbnRyeSBpbmRleAorKyAgLy8gICBiaXRzIDE2LTIwOiBkZXN0aW5hdGlvbiByZWdpc3RlciAo RlBSIGVuY29kaW5nKQorKyAgLy8gICBiaXRzIDIxLTIyOiBsb2FkIHR5cGUgKFBvb2xMb2FkRlBS NjQsIFBvb2xMb2FkU2ltZDEyOCwgUG9vbExvYWRGUFIzMikKKysgIC8vICAgYml0cyAyOC0zMTog c2VudGluZWwgMHhGCisrCisrICB1aW50MzJfdCogaW5zdCA9ICh1aW50MzJfdCopbG9hZEFkZHI7 CisrCisrICB1aW50MzJfdCBoaW50ID0gaW5zdFswXTsKKysgIHVpbnQzMl90IGluZGV4ID0gaGlu dCAmIDB4RkZGRjsKKysgIHVpbnQzMl90IGRlc3RSZWcgPSAoaGludCA+PiAxNikgJiAweDFGOwor KyAgdWludDMyX3QgbG9hZFR5cGUgPSAoaGludCA+PiAyMSkgJiAweDM7CisrCisrICAvLyBEaXNw bGFjZW1lbnQ6IHBvb2wgZW50cnkgYWRkcmVzcyByZWxhdGl2ZSB0byBpbnN0WzFdIChtZmxyIHRh cmdldCkgZm9yIHRoZQorKyAgLy8gYmNsIHBhdGgsIG9yIHJlbGF0aXZlIHRvIGluc3RbMF0rNCAo YWRkcGNpcyB0YXJnZXQgPSBDSUErNCwgd2hpY2ggaXMgdGhlCisrICAvLyBhZGRyZXNzIG9mIGlu c3RbMV0pIGZvciB0aGUgYWRkcGNpcyBwYXRoLiBCb3RoIGNvbnZlbnRpb25zIHJlc29sdmUgdG8g dGhlCisrICAvLyBzYW1lIHZhbHVlOiAocG9vbCBlbnRyeSkg4oiSIChsb2FkQWRkciArIDQpLgor KyAgaW50MzJfdCBkaXNwbGFjZW1lbnQgPQorKyAgICAgIChpbnQzMl90KSgodWludDhfdCopY29u c3RQb29sQWRkciArIGluZGV4ICogNCAtICgodWludDhfdCopbG9hZEFkZHIgKyA0KSk7CisrCisr ICBpZiAobG9hZFR5cGUgPT0gUG9vbExvYWRGUFI2NCB8fCBsb2FkVHlwZSA9PSBQb29sTG9hZEZQ UjMyKSB7CisrICAgIC8vIFRocmVlIGVtaXNzaW9uIHBhdGhzOgorKyAgICAvLworKyAgICAvLyBQ T1dFUjEwIChwcmVmZXJyZWQpOiBwbGZkL3BsZnMgRlJULCBTSSgwKSwgUj0xIOKAlCBzaW5nbGUg UEMtcmVsYXRpdmUKKysgICAgLy8gICBwcmVmaXhlZCBGUCBsb2FkLiA4IGJ5dGVzID0gMiBzbG90 czsgc2xvdCAyIGJlY29tZXMgYSBub3AuIElmCisrICAgIC8vICAgbG9hZEFkZHIgJSA2NCA9PSA2 MCwgcGxmZCB3b3VsZCBzdHJhZGRsZSBhIDY0LWJ5dGUgYmxvY2ssIHNvIGVtaXQKKysgICAgLy8g ICBhIGxlYWRpbmcgbm9wIGF0IHNsb3QgMCBhbmQgcGxhY2UgcGxmZCBhdCBzbG90cyAxLTIgaW5z dGVhZC4KKysgICAgLy8gICBSZWFjaDogwrE4IEdCICgzNC1iaXQgc2lnbmVkKS4gTm8gTFIgY2xv YmJlciwgbm8gcjE2IGJhc2UuCisrICAgIC8vCisrICAgIC8vIFBPV0VSOTogYWRkcGNpcyArIGxm ZC9sZnMgKyBub3AuIDIgcmVhbCBpbnNucywgbm8gTFIgY2xvYmJlciwgbm8KKysgICAgLy8gICBS ZXR1cm4gQWRkcmVzcyBTdGFjayBjb3JydXB0aW9uLiBCYXNlIHJlZ2lzdGVyIGlzIHIxNi4KKysg ICAgLy8gICBEaXNwbGFjZW1lbnQgc3BsaXRzIGludG8gKGhpIDw8IDE2KSArIGxvIHdoZXJlIGxv IGlzIHRoZSAxNi1iaXQKKysgICAgLy8gICBzaWduZWQgRC1maWVsZCBvZiBsZmQvbGZzLiBSZWFj aDogwrEyIEdCLgorKyAgICAvLworKyAgICAvLyBQT1dFUjg6IGJjbCArIG1mbHIgcjE2ICsgbGZk L2xmcy4gU2FtZSBjbG9iYmVyICsgUkFTIGNhdmVhdCBhcyBiZWZvcmUuCisrICAgIC8vICAgS2Vw dCBhcyBhIGNvcnJlY3RuZXNzIGZhbGxiYWNrOyBub3QgZXhlcmNpc2VkIHRvZGF5IGJlY2F1c2Ug dGhlCisrICAgIC8vICAgbG9hZENvbnN0YW50RG91YmxlL0Zsb2F0MzIgd3JhcHBlcnMgc2tpcCB0 aGUgcG9vbCBvbiBQT1dFUjguCisrICAgIC8vCisrICAgIC8vIGxmcy9wbGZzICgzMi1iaXQpIGF1 dG8tZXhwYW5kIHRoZWlyIHJlc3VsdCB0byBkb3VibGUtcHJlY2lzaW9uIGluIHRoZQorKyAgICAv LyBGUFIsIHJlcGxhY2luZyB0aGUgbm9uLXBvb2wgcGF0aCdzIHNlcGFyYXRlIHhzY3ZzcGRwbiBz dGVwLgorKyAgICB1aW50MzJfdCBiYXNlUmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIuY29kZSgp OworKyAgICB1aW50MzJfdCBsb2FkT3AgPSAobG9hZFR5cGUgPT0gUG9vbExvYWRGUFI2NCkgPyBQ UENfbGZkIDogUFBDX2xmczsKKysKKysgICAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAgIC8v IE1MUyBwcmVmaXhlZCBGUCBsb2FkLiBwbGZkIHN1ZmZpeCBvcGNvZGUgPSA1MCwgcGxmcyA9IDQ4 LiBTYW1lCisrICAgICAgLy8gYWxpZ25tZW50LWRyaXZlbiBzbG90IHBsYWNlbWVudCBhcyBQb29s TG9hZFNpbWQxMjggYWJvdmUuCisrICAgICAgdWludDY0X3QgbG9hZEFkZHJCaXRzID0gcmVpbnRl cnByZXRfY2FzdDx1aW50NjRfdD4obG9hZEFkZHIpOworKyAgICAgIC8vIGxvYWRBZGRyIGlzIHRo ZSBidWZmZXItdGltZSBwb2ludGVyOyB0aGUgZmluYWwgZXhlY3V0YWJsZSBiYXNlIGlzCisrICAg ICAgLy8gb25seSAxNi1ieXRlIGFsaWduZWQsIHNvIHRoZSB1bnNhZmUgc3RyYWRkbGUgaXMgd2hl bgorKyAgICAgIC8vIChsb2FkQWRkckJpdHMgJiAxNSkgPT0gMTIgKG1hdGNoZXMgZW5zdXJlUHJl Zml4ZWRBbGlnbm1lbnQgYWJvdmUpLgorKyAgICAgIGJvb2wgbmVlZExlYWRpbmdOb3AgPSAobG9h ZEFkZHJCaXRzICYgMTUpID09IDEyOworKyAgICAgIGludCBwcmVmaXhTbG90ID0gbmVlZExlYWRp bmdOb3AgPyAxIDogMDsKKysgICAgICBpbnQgcHJlZml4Qnl0ZU9mZnNldCA9IHByZWZpeFNsb3Qg KiA0OworKyAgICAgIGludDY0X3QgU0kgPSBpbnQ2NF90KGRpc3BsYWNlbWVudCkgKyA0IC0gcHJl Zml4Qnl0ZU9mZnNldDsKKysgICAgICBNT1pfQVNTRVJUKFNJID49IC0oaW50NjRfdCgxKSA8PCAz MykgJiYgU0kgPCAoaW50NjRfdCgxKSA8PCAzMykpOworKyAgICAgIHVpbnQzMl90IGQwID0gdWlu dDMyX3QoKHVpbnQ2NF90KFNJKSA+PiAxNikgJiAweDNGRkZGdSk7CisrICAgICAgdWludDMyX3Qg ZDEgPSB1aW50MzJfdCh1aW50NjRfdChTSSkgJiAweEZGRkZ1KTsKKysgICAgICAvLyBUeXBlIDIg KE1MUyksIFI9MSwgUkE9MC4KKysgICAgICB1aW50MzJfdCBwcmVmaXggPQorKyAgICAgICAgICAo MXUgPDwgMjYpIHwgKDJ1IDw8IDI0KSB8ICgxdSA8PCAyMCkgfCAoZDAgJiAweDNGRkZGdSk7Cisr ICAgICAgdWludDMyX3Qgc3VmZml4T3AgPSAobG9hZFR5cGUgPT0gUG9vbExvYWRGUFI2NCkgPyA1 MHUgOiA0OHU7CisrICAgICAgdWludDMyX3Qgc3VmZml4ID0gKHN1ZmZpeE9wIDw8IDI2KSB8IChk ZXN0UmVnIDw8IDIxKSB8IGQxOworKworKyAgICAgIGlmIChuZWVkTGVhZGluZ05vcCkgeworKyAg ICAgICAgaW5zdFswXSA9IE5vcEluc3Q7CisrICAgICAgICBpbnN0WzFdID0gcHJlZml4OworKyAg ICAgICAgaW5zdFsyXSA9IHN1ZmZpeDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgaW5zdFsw XSA9IHByZWZpeDsKKysgICAgICAgIGluc3RbMV0gPSBzdWZmaXg7CisrICAgICAgICBpbnN0WzJd ID0gTm9wSW5zdDsKKysgICAgICB9CisrICAgIH0gZWxzZSBpZiAoSGFzUE9XRVI5KCkpIHsKKysg ICAgICAvLyBTcGxpdCBkaXNwbGFjZW1lbnQgaW50byBhZGRwY2lzIGhpIGZpZWxkIGFuZCBsZmQv bGZzIGxvIGZpZWxkIHNvIHRoYXQKKysgICAgICAvLyAgIHRhcmdldCA9IChDSUEgKyA0KSArICho aSA8PCAxNikgKyBTRVhUMTYobG8pLgorKyAgICAgIC8vIE9ubHkgMiBzbG90cyBhcmUgcmVzZXJ2 ZWQgb24gUDkgKGxvYWRGcm9tUG9vbEZsb2F0ezMyLDY0fSBhYm92ZSk7CisrICAgICAgLy8gZG8g Tk9UIHRvdWNoIGluc3RbMl0sIGl0IGJlbG9uZ3MgdG8gdGhlIG5leHQgZW50cnkuCisrICAgICAg aW50MTZfdCBsbyA9IChpbnQxNl90KShkaXNwbGFjZW1lbnQgJiAweEZGRkYpOworKyAgICAgIGlu dDMyX3QgaGlBZGogPSBkaXNwbGFjZW1lbnQgLSBsbzsKKysgICAgICBNT1pfQVNTRVJUKChoaUFk aiAmIDB4RkZGRikgPT0gMCk7CisrICAgICAgaW50MzJfdCBoaSA9IGhpQWRqID4+IDE2OworKyAg ICAgIE1PWl9BU1NFUlQoaGkgPj0gLTMyNzY4ICYmIGhpIDw9IDMyNzY3KTsKKysgICAgICAvLyBb MF0gYWRkcGNpcyByMTYsIGhpCisrICAgICAgdWludDMyX3QgRGhpID0gdWludDE2X3QoaGkpOwor KyAgICAgIGluc3RbMF0gPSAoMTl1IDw8IDI2KSB8IChiYXNlUmVnIDw8IDIxKSB8ICgoRGhpID4+ IDEpICYgMHgxRikgPDwgMTYgfAorKyAgICAgICAgICAgICAgICAoKERoaSA+PiA2KSAmIDB4M0ZG KSA8PCA2IHwgKDJ1IDw8IDEpIHwgKERoaSAmIDF1KTsKKysgICAgICAvLyBbMV0gbGZkL2xmcyBm RCwgbG8ocjE2KQorKyAgICAgIGluc3RbMV0gPSBsb2FkT3AgfCAoZGVzdFJlZyA8PCAyMSkgfCAo YmFzZVJlZyA8PCAxNikgfCAodWludDE2X3QobG8pKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBN T1pfQVNTRVJUKGRpc3BsYWNlbWVudCA+PSAtMzI3NjggJiYgZGlzcGxhY2VtZW50IDwgMzI3Njgp OworKyAgICAgIC8vIFswXSBiY2wgMjAsMCwkKzQKKysgICAgICBpbnN0WzBdID0gUFBDX2JjbF9h bHdheXNfcGx1czQ7CisrICAgICAgLy8gWzFdIG1mbHIgcjE2CisrICAgICAgaW5zdFsxXSA9IFBQ Q19tZnNwciB8IChiYXNlUmVnIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKTsKKysgICAgICAvLyBb Ml0gbGZkL2xmcyBmRCwgZGlzcGxhY2VtZW50KHIxNikKKysgICAgICBpbnN0WzJdID0KKysgICAg ICAgICAgbG9hZE9wIHwgKGRlc3RSZWcgPDwgMjEpIHwgKGJhc2VSZWcgPDwgMTYpIHwgKGRpc3Bs YWNlbWVudCAmIDB4RkZGRik7CisrICAgIH0KKysgIH0gZWxzZSBpZiAobG9hZFR5cGUgPT0gUG9v bExvYWRTaW1kMTI4KSB7CisrICAgIC8vIFRocmVlIGVtaXNzaW9uIHBhdGhzICg1IHNsb3RzIHJl c2VydmVkIGJ5IGxvYWRGcm9tUG9vbFNpbWQxMjgpOgorKyAgICAvLworKyAgICAvLyBQT1dFUjEw IChwcmVmZXJyZWQpOiBwbHh2IHZzRCwgU0koMCksIFI9MSDigJQgc2luZ2xlIFBDLXJlbGF0aXZl CisrICAgIC8vICAgcHJlZml4ZWQgbG9hZCwgbmF0dXJhbC1MRSBieXRlIG9yZGVyIChubyB4eHBl cm1kaSBuZWVkZWQpLiA4IGJ5dGVzCisrICAgIC8vICAgPSAyIHNsb3RzOyBzbG90cyAyLTQgYmVj b21lIG5vcHMuIElmIHRoZSBwcmVmaXggd291bGQgc3RyYWRkbGUgYQorKyAgICAvLyAgIDY0LWJ5 dGUgYmxvY2sgKGxvYWRBZGRyICUgNjQgPT0gNjApLCBlbWl0IGEgbGVhZGluZyBub3AgYXQgc2xv dCAwCisrICAgIC8vICAgYW5kIHBsYWNlIHBseHYgYXQgc2xvdHMgMS0yIGluc3RlYWQuIFJlYWNo OiDCsTggR0IgKDM0LWJpdCBzaWduZWQpLgorKyAgICAvLworKyAgICAvLyBQT1dFUjk6IGFkZHBj aXMtZXF1aXZhbGVudCB2aWEgYmNsICsgbWZsciArIGFkZGkgKyBseHZ4ICsgbm9wLiA1CisrICAg IC8vICAgcmVhbCBpbnNucywgbmF0dXJhbCBMRS4KKysgICAgLy8KKysgICAgLy8gUE9XRVI4OiBz YW1lIHByZWx1ZGUgKyBseHZkMnggKyB4eHBlcm1kaSAoQkUtRFcgYnl0ZS1zd2FwIGZpeHVwKS4K KysgICAgLy8KKysgICAgLy8gU2VlIFBvb2xMb2FkRlBSNjQgYWJvdmUgZm9yIHdoeSByMTYgaW5z dGVhZCBvZiByMTIuCisrICAgIE1PWl9BU1NFUlQoZGlzcGxhY2VtZW50ID49IC0zMjc2OCAmJiBk aXNwbGFjZW1lbnQgPCAzMjc2OCk7CisrICAgIC8vIFNpbWQxMjggZGVzdCBpcyBpbiBWUi1uYW1l c3BhY2UgKGVuY29kaW5nIDMyLTYzKS4gSGludCBzdG9yZXMgb25seQorKyAgICAvLyB0aGUgbG93 IDUgYml0cyAobG9hZEZyb21Qb29sU2ltZDEyOCBtYXNrcyk7IHdlIHNldCBUWCB1bmNvbmRpdGlv bmFsbHkKKysgICAgLy8gc2luY2UgUG9vbExvYWRTaW1kMTI4IGFsd2F5cyB0YXJnZXRzIGEgU2lt ZDEyOC4KKysgICAgY29uc3RleHByIHVpbnQzMl90IGtUWCA9IDF1OworKyAgICBjb25zdGV4cHIg dWludDMyX3Qga0F4QnhUeF94eHBlcm1kaSA9ICgxdSA8PCAyKSB8ICgxdSA8PCAxKSB8IDF1Owor KworKyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgICAgLy8gUGxhY2UgcGx4diBwcmVmaXgg YXQgdGhlIGhpZ2hlc3QgNC1ieXRlLWFsaWduZWQgb2Zmc2V0IHdpdGhpbgorKyAgICAgIC8vIHRo ZSA1IHJlc2VydmVkIHNsb3RzIHRoYXQgZG9lc24ndCBzdHJhZGRsZSBhIDY0LWJ5dGUgYmxvY2su CisrICAgICAgdWludDY0X3QgbG9hZEFkZHJCaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50NjRf dD4obG9hZEFkZHIpOworKyAgICAgIC8vIGxvYWRBZGRyIGlzIHRoZSBidWZmZXItdGltZSBwb2lu dGVyOyB0aGUgZmluYWwgZXhlY3V0YWJsZSBiYXNlIGlzCisrICAgICAgLy8gb25seSAxNi1ieXRl IGFsaWduZWQsIHNvIHRoZSB1bnNhZmUgc3RyYWRkbGUgaXMgd2hlbgorKyAgICAgIC8vIChsb2Fk QWRkckJpdHMgJiAxNSkgPT0gMTIgKG1hdGNoZXMgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQgYWJv dmUpLgorKyAgICAgIGJvb2wgbmVlZExlYWRpbmdOb3AgPSAobG9hZEFkZHJCaXRzICYgMTUpID09 IDEyOworKyAgICAgIGludCBwcmVmaXhTbG90ID0gbmVlZExlYWRpbmdOb3AgPyAxIDogMDsKKysg ICAgICBpbnQgcHJlZml4Qnl0ZU9mZnNldCA9IHByZWZpeFNsb3QgKiA0OworKyAgICAgIC8vIFNJ ID0gKHBvb2wgZW50cnkgYWRkcikgLSAocHJlZml4IGFkZHIpCisrICAgICAgLy8gICAgPSAobG9h ZEFkZHIgKyA0ICsgZGlzcGxhY2VtZW50KSAtIChsb2FkQWRkciArIHByZWZpeEJ5dGVPZmZzZXQp CisrICAgICAgLy8gICAgPSBkaXNwbGFjZW1lbnQgKyA0IC0gcHJlZml4Qnl0ZU9mZnNldAorKyAg ICAgIGludDY0X3QgU0kgPSBpbnQ2NF90KGRpc3BsYWNlbWVudCkgKyA0IC0gcHJlZml4Qnl0ZU9m ZnNldDsKKysgICAgICBNT1pfQVNTRVJUKFNJID49IC0oaW50NjRfdCgxKSA8PCAzMykgJiYgU0kg PCAoaW50NjRfdCgxKSA8PCAzMykpOworKyAgICAgIHVpbnQzMl90IGQwID0gdWludDMyX3QoKHVp bnQ2NF90KFNJKSA+PiAxNikgJiAweDNGRkZGdSk7CisrICAgICAgdWludDMyX3QgZDEgPSB1aW50 MzJfdCh1aW50NjRfdChTSSkgJiAweEZGRkZ1KTsKKysgICAgICAvLyBQcmVmaXg6IHByaW1hcnkg b3Bjb2RlIDEsIFR5cGUgMCAoOExTKSwgUj0xLCBkMCBhdCBMRSBiaXRzIDE3Li4wLgorKyAgICAg IHVpbnQzMl90IHByZWZpeCA9CisrICAgICAgICAgICgxdSA8PCAyNikgfCAoMHUgPDwgMjQpIHwg KDF1IDw8IDIwKSB8IChkMCAmIDB4M0ZGRkZ1KTsKKysgICAgICAvLyBTdWZmaXg6IDUtYml0IG9w Y29kZSAyNSBhdCBMRSAzMS4uMjcsIFRYIGF0IExFIDI2LCBUIGF0IExFIDI1Li4yMSwKKysgICAg ICAvLyAgICAgICAgIFJBPTAgYXQgTEUgMjAuLjE2LCBkMSBhdCBMRSAxNS4uMC4KKysgICAgICB1 aW50MzJfdCBzdWZmaXggPSAoMjV1IDw8IDI3KSB8IChrVFggPDwgMjYpIHwgKGRlc3RSZWcgPDwg MjEpIHwgZDE7CisrCisrICAgICAgLy8gUDEwIHJlc2VydmVzIDMgc2xvdHM7IG9ubHkgaW5zdFsw Li4yXSBhcmUgd3JpdHRlbi4gU2xvdHMgMy4uNAorKyAgICAgIC8vIGJlbG9uZyB0byB0aGUgbmV4 dCBwb29sIGVudHJ5IG9uIFAxMC4KKysgICAgICBpZiAobmVlZExlYWRpbmdOb3ApIHsKKysgICAg ICAgIGluc3RbMF0gPSBOb3BJbnN0OworKyAgICAgICAgaW5zdFsxXSA9IHByZWZpeDsKKysgICAg ICAgIGluc3RbMl0gPSBzdWZmaXg7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGluc3RbMF0g PSBwcmVmaXg7CisrICAgICAgICBpbnN0WzFdID0gc3VmZml4OworKyAgICAgICAgaW5zdFsyXSA9 IE5vcEluc3Q7CisrICAgICAgfQorKyAgICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAg ICAgLy8gYWRkcGNpcyArIGFkZGkgKyBseHZ4ICgzIHNsb3RzKSDigJQgbm8gTFIgY2xvYmJlciwg bm8gUkFTIGhhemFyZC4KKysgICAgICAvLyBTYW1lIGRpc3BsYWNlbWVudCBzcGxpdCBhcyB0aGUg RlAgc2NhbGFyIFA5IHBhdGg6IHRhcmdldCA9CisrICAgICAgLy8gKENJQSs0KSArIChoaSA8PCAx NikgKyBTRVhUMTYobG8pLiBseHZ4IGlzIFgtZm9ybSBpbmRleGVkIChubworKyAgICAgIC8vIGlt bWVkaWF0ZSBvZmZzZXQpLCBzbyBjb21iaW5lIHRoZSBsb3cgMTYgYml0cyBpbnRvIHIxNiB2aWEg YWRkaQorKyAgICAgIC8vIGJlZm9yZSB0aGUgbG9hZC4KKysgICAgICBpbnQxNl90IGxvID0gKGlu dDE2X3QpKGRpc3BsYWNlbWVudCAmIDB4RkZGRik7CisrICAgICAgaW50MzJfdCBoaUFkaiA9IGRp c3BsYWNlbWVudCAtIGxvOworKyAgICAgIE1PWl9BU1NFUlQoKGhpQWRqICYgMHhGRkZGKSA9PSAw KTsKKysgICAgICBpbnQzMl90IGhpID0gaGlBZGogPj4gMTY7CisrICAgICAgTU9aX0FTU0VSVCho aSA+PSAtMzI3NjggJiYgaGkgPD0gMzI3NjcpOworKyAgICAgIHVpbnQzMl90IERoaSA9IHVpbnQx Nl90KGhpKTsKKysgICAgICB1aW50MzJfdCBiYXNlUmVnID0gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIu Y29kZSgpOworKyAgICAgIC8vIFswXSBhZGRwY2lzIHIxNiwgaGkKKysgICAgICBpbnN0WzBdID0g KDE5dSA8PCAyNikgfCAoYmFzZVJlZyA8PCAyMSkgfCAoKERoaSA+PiAxKSAmIDB4MUYpIDw8IDE2 IHwKKysgICAgICAgICAgICAgICAgKChEaGkgPj4gNikgJiAweDNGRikgPDwgNiB8ICgydSA8PCAx KSB8IChEaGkgJiAxdSk7CisrICAgICAgLy8gWzFdIGFkZGkgcjE2LCByMTYsIGxvCisrICAgICAg aW5zdFsxXSA9IFBQQ19hZGRpIHwgKGJhc2VSZWcgPDwgMjEpIHwgKGJhc2VSZWcgPDwgMTYpIHwg dWludDE2X3QobG8pOworKyAgICAgIC8vIFsyXSBseHZ4IHZzRCwgMCwgcjE2ICAoWFRbMDo0XSBp biBiaXRzIDIxLTI1LCBUWCBhdCBiaXQgMCkKKysgICAgICBpbnN0WzJdID0gUFBDX2x4dnggfCAo ZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxMSkgfCBrVFg7CisrICAgIH0gZWxzZSB7Cisr ICAgICAgLy8gUDggZmFsbGJhY2s6IGJjbCArIG1mbHIgKyBhZGRpICsgbHh2ZDJ4ICsgeHhwZXJt ZGkgKDUgc2xvdHMpLgorKyAgICAgIC8vIENsb2JiZXJzIExSOyBjb3JyZWN0bmVzcy1vbmx5IHBh dGguCisrICAgICAgdWludDMyX3QgYmFzZVJlZyA9IFNhdmVkU2NyYXRjaFJlZ2lzdGVyLmNvZGUo KTsKKysgICAgICBpbnN0WzBdID0gUFBDX2JjbF9hbHdheXNfcGx1czQ7CisrICAgICAgaW5zdFsx XSA9IFBQQ19tZnNwciB8IChiYXNlUmVnIDw8IDIxKSB8IFBQQ19TUFIoc3ByX2xyKTsKKysgICAg ICBpbnN0WzJdID0gUFBDX2FkZGkgfCAoYmFzZVJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAxNikg fAorKyAgICAgICAgICAgICAgICAoZGlzcGxhY2VtZW50ICYgMHhGRkZGKTsKKysgICAgICAvLyBs eHZkMnggWFQsIFJBPTAsIFJCPXIxNiDigJQgbG9hZHMgaW4gQkUgb3JkZXIgb24gTEUuCisrICAg ICAgaW5zdFszXSA9IFBQQ19seHZkMnggfCAoZGVzdFJlZyA8PCAyMSkgfCAoYmFzZVJlZyA8PCAx MSkgfCBrVFg7CisrICAgICAgLy8geHhwZXJtZGkgWFQsIFhULCBYVCwgMiDigJQgc3dhcCBkb3Vi bGV3b3JkcyBmb3IgTEUgYnl0ZSBvcmRlci4KKysgICAgICBpbnN0WzRdID0gUFBDX3h4cGVybWRp IHwgKGRlc3RSZWcgPDwgMjEpIHwgKGRlc3RSZWcgPDwgMTYpIHwKKysgICAgICAgICAgICAgICAg KGRlc3RSZWcgPDwgMTEpIHwgKDJ1IDw8IDgpIHwga0F4QnhUeF94eHBlcm1kaTsKKysgICAgfQor KyAgfSBlbHNlIHsKKysgICAgTU9aX0NSQVNIKCJQYXRjaENvbnN0YW50UG9vbExvYWQ6IHVuc3Vw cG9ydGVkIGxvYWQgdHlwZSIpOworKyAgfQorKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKysv KiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6V3JpdGVQb29sR3VhcmQoQnVmZmVyT2Zmc2V0 IGJyYW5jaCwgSW5zdHJ1Y3Rpb24qIGluc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEJ1ZmZlck9mZnNldCBkZXN0KSB7CisrICAvLyBFbWl0IGFuIHVuY29uZGl0aW9uYWwgYnJh bmNoIG92ZXIgdGhlIHBvb2wgZGF0YS4KKysgIGludDMyX3Qgb2Zmc2V0ID0gZGVzdC5nZXRPZmZz ZXQoKSAtIGJyYW5jaC5nZXRPZmZzZXQoKTsKKysgIE1PWl9BU1NFUlQoSk9mZkltbTI2OjpJc0lu UmFuZ2Uob2Zmc2V0KSk7CisrICBpbnN0LT5zZXREYXRhKFBQQ19iIHwgKG9mZnNldCAmIDB4MDNG RkZGRkMpKTsKKyt9CisrCisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6OldyaXRlUG9v bEhlYWRlcih1aW50OF90KiBzdGFydCwgUG9vbCogcCwgYm9vbCBpc05hdHVyYWwpIHsKKysgIC8v IFdyaXRlIHBvb2wgaWRlbnRpZmljYXRpb24gaGVhZGVyLgorKyAgLy8gRW5jb2RlIHBvb2wgc2l6 ZSBhbmQgaXNOYXR1cmFsIGZsYWcgaW4gYSBzaW5nbGUgMzItYml0IHdvcmQuCisrICB1aW50MzJf dCBwb29sU2l6ZSA9IHAtPmdldFBvb2xTaXplKCk7CisrICB1aW50MzJfdCBzaXplSW5Xb3JkcyA9 IChwb29sU2l6ZSArIDQgKyAzKSA+PiAyOyAgLy8gaGVhZGVyICsgZGF0YSwgaW4gd29yZHMKKysg IE1PWl9BU1NFUlQoc2l6ZUluV29yZHMgPCAoMSA8PCAxNSkpOworKyAgdWludDMyX3QgaGVhZGVy ID0gKHNpemVJbldvcmRzICYgMHg3RkZGKSB8IChpc05hdHVyYWwgPyAoMSA8PCAxNSkgOiAwKSB8 CisrICAgICAgICAgICAgICAgICAgICAweEZGRkYwMDAwOyAgLy8gc2VudGluZWwKKysgICoodWlu dDMyX3QqKXN0YXJ0ID0gaGVhZGVyOworK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2Vt Ymxlcjo6UGF0Y2hTaG9ydFJhbmdlQnJhbmNoVG9WZW5lZXIoUFBDQnVmZmVyKiwgdW5zaWduZWQg cmFuZ2VJZHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJ1ZmZlck9mZnNldCBkZWFkbGluZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0IHZlbmVlcikgeworKyAgLy8gUFBDNjQgZG9lcyBu b3QgdXNlIHNob3J0LXJhbmdlIGJyYW5jaCB0cmFja2luZyAoTnVtU2hvcnRCcmFuY2hSYW5nZXMg PSAwKS4KKysgIE1PWl9DUkFTSCgiUGF0Y2hTaG9ydFJhbmdlQnJhbmNoVG9WZW5lZXI6IHNob3Vs ZCBub3QgYmUgY2FsbGVkIik7CisrfQorKworKy8vIFR3byBzdGFuemEgc2hhcGVzIHNoYXJlIHRo ZSBzYW1lIDgtc2xvdCBmb290cHJpbnQgYW5kIHRoZSBzYW1lIC5xdWFkCisrLy8gbG9jYXRpb24g YXQgc2xvdHMgWzYuLjddIChzbyBFeHRyYWN0TG9hZDY0VmFsdWUgLyBVcGRhdGVMb2FkNjRWYWx1 ZSBhcmUKKysvLyBzaGFwZS1hZ25vc3RpYyk6CisrLy8KKysvLyAgIFBPV0VSOCAobm8gYWRkcGNp cyk6CisrLy8gICAgIFswXSBtZmxyIHIwCisrLy8gICAgIFsxXSBiY2wgMjAsMCwuKzQgICAgICAg ICAoTFIgOj0gcGMgb2YgWzJdKQorKy8vICAgICBbMl0gbWZsciByRAorKy8vICAgICBbM10gbXRs ciByMAorKy8vICAgICBbNF0gbGQgckQsIDE2KHJEKQorKy8vICAgICBbNV0gYiAuKzEyCisrLy8g ICAgIFs2Li43XSAucXVhZCBWQUxVRQorKy8vCisrLy8gICBQT1dFUjkrIChhZGRwY2lzKToKKysv LyAgICAgWzBdIGFkZHBjaXMgckQsIDAgICAgICAgIChyRCA6PSBOSUEgPSBwYyBvZiBbMV0pCisr Ly8gICAgIFsxXSBsZCByRCwgMjAockQpICAgICAgICAockQgOj0gbWVtW3BjX29mX1sxXSArIDIw XSA9IG1lbVtzbG90WzZdXSkKKysvLyAgICAgWzJdIGIgLisyNAorKy8vICAgICBbMy4uNV0gTk9Q LCBOT1AsIE5PUAorKy8vICAgICBbNi4uN10gLnF1YWQgVkFMVUUKKysvLworKy8vIFRoZSBQOSsg Zm9ybSBkcm9wcyB0aGUgYmNsL21mbHIvbXRsciBMUi1ib3VuY2UgKG5vIFJBUyB0aHJhc2gpIGFu ZCBydW5zCisrLy8gMiBkeW5hbWljIGluc25zIGluc3RlYWQgb2YgNi4gRGlzdGluZ3Vpc2hlZCBh dCBwYXRjaCB0aW1lIGJ5IGluc3RbMF0ncworKy8vIG1ham9yIG9wY29kZTogMzEgPSBtZnNwciAo UDgpIHZzIDE5ID0gYWRkcGNpcyAoUDkrKS4KKytzdGF0aWMgYm9vbCBJc0FkZHBjaXNMb2FkNjRT dGFuemEodWludDMyX3QgZW5jMCkgeworKyAgcmV0dXJuICgoZW5jMCA+PiAyNikgJiAweDNmKSA9 PSAxOTsKKyt9CisrCisrLy8gRXh0cmFjdCB0aGUgZGVzdGluYXRpb24gcmVnaXN0ZXIgZnJvbSBh IGxvYWQ2NCBzdGFuemEgaW4gZWl0aGVyIHNoYXBlLgorKy8vIFA4IHN0b3JlcyByRCBpbiBgbWZs ciByRGAgYXQgc2xvdCBbMl07IFA5KyBzdG9yZXMgckQgaW4gYGFkZHBjaXMgckQsIDBgCisrLy8g YXQgc2xvdCBbMF0uIEJvdGggZW5jb2RlIFJUIGF0IExFIGJpdHMgWzIxLi4yNV0uCisrc3RhdGlj IHVpbnQ4X3QgTG9hZDY0U3RhbnphRGVzdFJlZyhJbnN0cnVjdGlvbiogaW5zdDApIHsKKysgIGlm IChJc0FkZHBjaXNMb2FkNjRTdGFuemEoaW5zdDAtPmVuY29kZSgpKSkgeworKyAgICByZXR1cm4g KGluc3QwWzBdLmVuY29kZSgpID4+IDIxKSAmIDB4MWY7CisrICB9CisrICByZXR1cm4gKGluc3Qw WzJdLmVuY29kZSgpID4+IDIxKSAmIDB4MWY7CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQg QXNzZW1ibGVyOjpXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhJbnN0cnVjdGlvbiogaW5zdDAsIFJl Z2lzdGVyIHJlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDY0X3QgdmFsdWUpIHsKKysgIEluc3RydWN0aW9uKiBpMSA9IGluc3QwLT5uZXh0KCk7CisrICBJ bnN0cnVjdGlvbiogaTIgPSBpMS0+bmV4dCgpOworKyAgSW5zdHJ1Y3Rpb24qIGkzID0gaTItPm5l eHQoKTsKKysgIEluc3RydWN0aW9uKiBpNCA9IGkzLT5uZXh0KCk7CisrICBJbnN0cnVjdGlvbiog aTUgPSBpNC0+bmV4dCgpOworKyAgSW5zdHJ1Y3Rpb24qIGk2ID0gaTUtPm5leHQoKTsKKysgIElu c3RydWN0aW9uKiBpNyA9IGk2LT5uZXh0KCk7CisrCisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysg ICAgLy8gWzBdIGFkZHBjaXMgckQsIDAgICAoRFgtZm9ybTogb3Bjb2RlPTE5LCBYTz0yLCBhbGwg RCBmaWVsZHMgPSAwKQorKyAgICBpbnN0MC0+c2V0RGF0YSgweDRDMDAwMDA0dSB8ICh1aW50MzJf dChyZWcuY29kZSgpKSA8PCAyMSkpOworKyAgICAvLyBbMV0gbGQgckQsIDIwKHJEKSAgIChyRCA6 PSAqKHNsb3RbMV0gKyAyMCkgPSAqKHNsb3RbNl0pID0gLnF1YWQpCisrICAgIGkxLT5zZXREYXRh KFBQQ19sZCB8ICh1aW50MzJfdChyZWcuY29kZSgpKSA8PCAyMSkgfAorKyAgICAgICAgICAgICAg ICAodWludDMyX3QocmVnLmNvZGUoKSkgPDwgMTYpIHwgMjApOworKyAgICAvLyBbMl0gYiAuKzI0 ICAgICAgICAgIChza2lwIHNsb3RzIFszLi43XSB0byBsYW5kIGF0IHNsb3QgWzhdKQorKyAgICBp Mi0+c2V0RGF0YShQUENfYiB8ICgyNCAmIDB4MDNGRkZGRkMpKTsKKysgICAgLy8gWzMuLjVdIE5P UCBmaWxsZXIg4oCUIHVucmVhY2hhYmxlIGJ1dCBrZXB0IGFsaWduZWQgZm9yIHRoZSBwYXRjaGVy LgorKyAgICBpMy0+c2V0RGF0YShOb3BJbnN0KTsKKysgICAgaTQtPnNldERhdGEoTm9wSW5zdCk7 CisrICAgIGk1LT5zZXREYXRhKE5vcEluc3QpOworKyAgfSBlbHNlIHsKKysgICAgLy8gWzBdIG1m bHIgcjAKKysgICAgaW5zdDAtPnNldERhdGEoUFBDX21mc3ByIHwgKHIwLmNvZGUoKSA8PCAyMSkg fCBQUENfU1BSKHNwcl9scikpOworKyAgICAvLyBbMV0gYmNsIDIwLDAsLis0CisrICAgIGkxLT5z ZXREYXRhKFBQQ19iY2xfYWx3YXlzX3BsdXM0KTsKKysgICAgLy8gWzJdIG1mbHIgckQKKysgICAg aTItPnNldERhdGEoUFBDX21mc3ByIHwgKHJlZy5jb2RlKCkgPDwgMjEpIHwgUFBDX1NQUihzcHJf bHIpKTsKKysgICAgLy8gWzNdIG10bHIgcjAKKysgICAgaTMtPnNldERhdGEoUFBDX210c3ByIHwg KHIwLmNvZGUoKSA8PCAyMSkgfCBQUENfU1BSKHNwcl9scikpOworKyAgICAvLyBbNF0gbGQgckQs IDE2KHJEKQorKyAgICBpNC0+c2V0RGF0YShQUENfbGQgfCAocmVnLmNvZGUoKSA8PCAyMSkgfCAo cmVnLmNvZGUoKSA8PCAxNikgfCAxNik7CisrICAgIC8vIFs1XSBiIC4rMTIKKysgICAgaTUtPnNl dERhdGEoUFBDX2IgfCAoMTIgJiAweDAzRkZGRkZDKSk7CisrICB9CisrCisrICAvLyBbNi4uN10g LnF1YWQgVkFMVUUgKGxvdyAzMiBhdCBsb3dlciBhZGRyLCBoaWdoIDMyIGF0IGhpZ2hlciBhZGRy KS4KKysgIGk2LT5zZXREYXRhKCh1aW50MzJfdCkodmFsdWUgJiAweEZGRkZGRkZGKSk7CisrICBp Ny0+c2V0RGF0YSgodWludDMyX3QpKHZhbHVlID4+IDMyKSk7CisrfQorKworKy8qIHN0YXRpYyAq LworK3VpbnQ2NF90IEFzc2VtYmxlcjo6RXh0cmFjdExvYWQ2NFZhbHVlKEluc3RydWN0aW9uKiBp bnN0MCkgeworKyAgLy8gVGhlIDgtYnl0ZSB2YWx1ZSBpcyBhdCBpbnN0MFs2Li43XSBpbiBib3Ro IHNoYXBlcy4KKysgIEluc3RydWN0aW9uKiBpNiA9IGluc3QwICsgNjsKKysgIEluc3RydWN0aW9u KiBpNyA9IGluc3QwICsgNzsKKysKKysgIHVpbnQ2NF90IGxvID0gKHVpbnQ2NF90KWk2LT5lbmNv ZGUoKTsgIC8vIGxvdyAzMiBhdCBsb3dlciBhZGRyCisrICB1aW50NjRfdCBoaSA9ICh1aW50NjRf dClpNy0+ZW5jb2RlKCk7ICAvLyBoaWdoIDMyIGF0IGhpZ2hlciBhZGRyCisrICByZXR1cm4gKGhp IDw8IDMyKSB8IGxvOworK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIEFzc2VtYmxlcjo6VXBk YXRlTG9hZDY0VmFsdWUoSW5zdHJ1Y3Rpb24qIGluc3QwLCB1aW50NjRfdCB2YWx1ZSkgeworKyAg Ly8gU2FuaXR5LWNoZWNrIHRoYXQgaW5zdDAgaXMgdGhlIHN0YXJ0IG9mIGEgbG9hZDY0IHN0YW56 YSBpbiBlaXRoZXIgc2hhcGUuCisrICAvLyBQODogaW5zdDBbMV0gPT0gYmNsIDIwLDAsLis0LiBQ OSs6IGluc3QwWzBdIGlzIGFkZHBjaXMgKG1ham9yIG9wY29kZSAxOSkuCisrICBNT1pfQVNTRVJU KGluc3QwWzFdLmVuY29kZSgpID09IFBQQ19iY2xfYWx3YXlzX3BsdXM0IHx8CisrICAgICAgICAg ICAgICAgICBJc0FkZHBjaXNMb2FkNjRTdGFuemEoaW5zdDAtPmVuY29kZSgpKSwKKysgICAgICAg ICAgICAgIlVwZGF0ZUxvYWQ2NFZhbHVlOiBpbnN0MCBpcyBub3QgYSBsb2FkNjQgc3RhbnphIik7 CisrCisrICAvLyAucXVhZCBsaXZlcyBhdCBpbnN0MFs2Li43XSBpbiBib3RoIHNoYXBlcy4KKysg IEluc3RydWN0aW9uKiBpNiA9IGluc3QwICsgNjsKKysgIEluc3RydWN0aW9uKiBpNyA9IGluc3Qw ICsgNzsKKysKKysgIGk2LT5zZXREYXRhKCh1aW50MzJfdCkodmFsdWUgJiAweEZGRkZGRkZGKSk7 ICAvLyBsb3cgMzIgYXQgbG93ZXIgYWRkcgorKyAgaTctPnNldERhdGEoKHVpbnQzMl90KSh2YWx1 ZSA+PiAzMikpOyAgICAgICAgIC8vIGhpZ2ggMzIgYXQgaGlnaGVyIGFkZHIKKyt9CisrCisrLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrLy8gUGF0Y2hpbmcgYW5kIHRvZ2dsZSBvcGVyYXRpb25zLgorKy8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKworKy8qIHN0YXRpYyAqLworK3VpbnQzMl90IEFzc2VtYmxlcjo6 UGF0Y2hXcml0ZV9OZWFyQ2FsbFNpemUoKSB7CisrICAvLyA4IGluc3RydWN0aW9ucyBmb3IgTG9h ZDY0ICsgbXRjdHIgKyBiY3RybCA9IDEwIGluc3RydWN0aW9ucy4KKysgIHJldHVybiAxMCAqIHNp emVvZih1aW50MzJfdCk7CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQgQXNzZW1ibGVyOjpQ YXRjaFdyaXRlX05lYXJDYWxsKENvZGVMb2NhdGlvbkxhYmVsIHN0YXJ0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHRvQ2FsbCkgeworKyAg SW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKXN0YXJ0LnJhdygpOworKyAgdWludDhf dCogZGVzdCA9IHRvQ2FsbC5yYXcoKTsKKysKKysgIEFzc2VtYmxlcjo6V3JpdGVMb2FkNjRJbnN0 cnVjdGlvbnMoaW5zdCwgU2F2ZWRTY3JhdGNoUmVnaXN0ZXIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh1aW50NjRfdClkZXN0KTsKKysgIGluc3RbOF0ubWFrZU9wX210 Y3RyKFNhdmVkU2NyYXRjaFJlZ2lzdGVyKTsKKysgIGluc3RbOV0ubWFrZU9wX2JjdHIoTGlua0Ip OworKyAgRmx1c2hJQ2FjaGUoaW5zdCwgMTAgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyt9Cisr CisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6OlBhdGNoV3JpdGVfSW1tMzIoQ29kZUxv Y2F0aW9uTGFiZWwgbGFiZWwsIEltbTMyIGltbSkgeworKyAgdWludDMyX3QqIGwgPSAodWludDMy X3QqKWxhYmVsLnJhdygpOworKyAgKihsIC0gMSkgPSBpbW0udmFsdWU7CisrICBGbHVzaElDYWNo ZShsIC0gMSwgc2l6ZW9mKHVpbnQzMl90KSk7CisrfQorKworK3ZvaWQgQXNzZW1ibGVyOjpQYXRj aERhdGFXaXRoVmFsdWVDaGVjayhDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tUHRyIG5ld1ZhbHVlLCBJbW1QdHIgZXhw ZWN0ZWRWYWx1ZSkgeworKyAgUGF0Y2hEYXRhV2l0aFZhbHVlQ2hlY2sobGFiZWwsIFBhdGNoZWRJ bW1QdHIobmV3VmFsdWUudmFsdWUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hl ZEltbVB0cihleHBlY3RlZFZhbHVlLnZhbHVlKSk7CisrfQorKworK3ZvaWQgQXNzZW1ibGVyOjpQ YXRjaERhdGFXaXRoVmFsdWVDaGVjayhDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hlZEltbVB0ciBuZXdWYWx1ZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0Y2hlZEltbVB0ciBl eHBlY3RlZFZhbHVlKSB7CisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopbGFi ZWwucmF3KCk7CisrCisrICBEZWJ1Z09ubHk8dWludDY0X3Q+IHZhbHVlID0gQXNzZW1ibGVyOjpF eHRyYWN0TG9hZDY0VmFsdWUoaW5zdCk7CisrICBNT1pfQVNTRVJUKHZhbHVlID09IHVpbnQ2NF90 KGV4cGVjdGVkVmFsdWUudmFsdWUpKTsKKysKKysgIEFzc2VtYmxlcjo6VXBkYXRlTG9hZDY0VmFs dWUoaW5zdCwgdWludDY0X3QobmV3VmFsdWUudmFsdWUpKTsKKysgIEZsdXNoSUNhY2hlKGluc3Qs IDggKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyt9CisrCisrLy8gVG9nZ2xlQ2FsbCB0b2dnbGVz IHRoZSBjYWxsIHBvcnRpb24gb2YgYSB0b2dnbGVkQ2FsbCBzdGFuemEuCisrLy8gTGF5b3V0OiA4 IGxvYWQ2NCBpbnN0cnVjdGlvbnMgKyBtdGN0ciArIGJjdHJsICgxMCB0b3RhbCkuCisrLy8gV2Ug dG9nZ2xlIHRoZSBsYXN0IHR3byBpbnN0cnVjdGlvbnMgKG10Y3RyL2JjdHJsIHZzIG5vcC9ub3Ap LgorKy8vIFRoZSBkZXN0aW5hdGlvbiByZWdpc3RlciBpcyBleHRyYWN0ZWQgdmlhIExvYWQ2NFN0 YW56YURlc3RSZWcsIHdoaWNoCisrLy8gaGFuZGxlcyBib3RoIHRoZSBQOCAobWZsci1yRCBhdCBz bG90IFsyXSkgYW5kIFA5KyAoYWRkcGNpcy1yRCBhdCBzbG90CisrLy8gWzBdKSBzaGFwZXMuCisr CisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6OlRvZ2dsZUNhbGwoQ29kZUxvY2F0aW9u TGFiZWwgaW5zdF8sIGJvb2wgZW5hYmxlZCkgeworKyAgSW5zdHJ1Y3Rpb24qIGkwID0gKEluc3Ry dWN0aW9uKilpbnN0Xy5yYXcoKTsKKysgIEluc3RydWN0aW9uKiBpOCA9IChJbnN0cnVjdGlvbiop KGluc3RfLnJhdygpICsgOCAqIHNpemVvZih1aW50MzJfdCkpOworKyAgSW5zdHJ1Y3Rpb24qIGk5 ID0gKEluc3RydWN0aW9uKikoaW5zdF8ucmF3KCkgKyA5ICogc2l6ZW9mKHVpbnQzMl90KSk7Cisr CisrICAvLyBBY2NlcHQgZWl0aGVyIFA4IHN0YW56YSAobWZsciByMCBhdCBzbG90IFswXSkgb3Ig UDkrIHN0YW56YSAoYWRkcGNpcyBhdAorKyAgLy8gc2xvdCBbMF07IG1ham9yIG9wY29kZSAxOSku CisrICBNT1pfQVNTRVJUKGkwLT5lbmNvZGUoKSA9PSAoUFBDX21mc3ByIHwgKHIwLmNvZGUoKSA8 PCAyMSkgfCBQUENfU1BSKHNwcl9scikpIHx8CisrICAgICAgICAgICAgICAgICBJc0FkZHBjaXNM b2FkNjRTdGFuemEoaTAtPmVuY29kZSgpKSk7CisrCisrICAvLyBUb2dnbGVDYWxsIGlzIGlkZW1w b3RlbnQgYWNyb3NzIHRoZSBzYW1lIGBlbmFibGVkYCB2YWx1ZTogcmUtZW5hYmxpbmcKKysgIC8v IGFuIGFscmVhZHktZW5hYmxlZCBzaXRlIChvciByZS1kaXNhYmxpbmcgYSBkaXNhYmxlZCBvbmUp IGlzIGEgbm8tb3AuCisrICAvLyBNb3ppbGxhJ3MgZGVidWdnZXIgbWFjaGluZXJ5IG1heSBsZWdp dGltYXRlbHkgdG9nZ2xlIHRoZSBzYW1lIGNhbGwgc2l0ZQorKyAgLy8gbXVsdGlwbGUgdGltZXMg aW4gdGhlIHNhbWUgZGlyZWN0aW9uIChlLmcuIHNldHRpbmcgYm90aCBhIGJyZWFrcG9pbnQKKysg IC8vIGFuZCBhIGZyYW1lLm9uU3RlcCBvbiB0aGUgc2FtZSBzY3JpcHQpLgorKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IFJlZ2lzdGVyOjpGcm9tQ29kZShMb2FkNjRTdGFuemFEZXN0UmVnKGkwKSk7Cisr ICB1aW50MzJfdCBtdGN0ciA9IFBQQ19tdHNwciB8IChzY3JhdGNoLmNvZGUoKSA8PCAyMSkgfCBQ UENfU1BSKHNwcl9jdHIpOworKyAgdWludDMyX3QgYmN0cmwgPSAodWludDMyX3QpUFBDX2JjdHIg fCAodWludDMyX3QpTGlua0I7CisrICBpZiAoZW5hYmxlZCkgeworKyAgICBNT1pfQVNTRVJUKGk4 LT5lbmNvZGUoKSA9PSBOb3BJbnN0IHx8IGk4LT5lbmNvZGUoKSA9PSBtdGN0cik7CisrICAgIE1P Wl9BU1NFUlQoaTktPmVuY29kZSgpID09IE5vcEluc3QgfHwgaTktPmVuY29kZSgpID09IGJjdHJs KTsKKysgICAgaTgtPnNldERhdGEobXRjdHIpOworKyAgICBpOS0+c2V0RGF0YShiY3RybCk7Cisr ICB9IGVsc2UgeworKyAgICBNT1pfQVNTRVJUKGk4LT5lbmNvZGUoKSA9PSBOb3BJbnN0IHx8IGk4 LT5lbmNvZGUoKSA9PSBtdGN0cik7CisrICAgIE1PWl9BU1NFUlQoaTktPmVuY29kZSgpID09IE5v cEluc3QgfHwgaTktPmVuY29kZSgpID09IGJjdHJsKTsKKysgICAgaTgtPnNldERhdGEoTm9wSW5z dCk7CisrICAgIGk5LT5zZXREYXRhKE5vcEluc3QpOworKyAgfQorKyAgRmx1c2hJQ2FjaGUoaTgs IDIgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyt9CisrCisrLy8gdG9nZ2xlZEp1bXAgZW1pdHMg YSB0cmFwIHN0YW56YSB2aWEganVtcChsYWJlbCkuIEFmdGVyIGJpbmRpbmcsIHRoZSBmaXJzdAor Ky8vIGluc3RydWN0aW9uIGJlY29tZXMgImIgb2Zmc2V0IiAoc2hvcnQgYnJhbmNoKS4gV2UgdG9n Z2xlIGJldHdlZW4gYiBhbmQgb3JpOgorKy8vICAgYiBvZmZzZXQ6ICAgICAgIFswMTAwMTBdW0xJ OjI0XVswXVswXQorKy8vICAgb3JpIHIwLHIwLGltbTogIFswMTEwMDBdWzAwMDAwXVswMDAwMF1b VUk6MTZdCisrLy8gRm9yIHNob3J0IGZvcndhcmQganVtcHMgKG9mZnNldCA8IDY0S0IpLCBiaXRz IDI1OjE2IG9mIExJIGFyZSAwLCBzbworKy8vIHN3YXBwaW5nIHRoZSBvcGNvZGUgcHJlc2VydmVz IHRoZSBvZmZzZXQgaW4gdGhlIGxvd2VyIDE2IGJpdHMuCisrLy8gb3JpIHIwLHIwLFggaXMgZWZm ZWN0aXZlbHkgYSBub3AgKHdyaXRlcyB0byByMCkuCisrCisrLyogc3RhdGljICovCisrdm9pZCBB c3NlbWJsZXI6OlRvZ2dsZVRvSm1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RfKSB7CisrICBJbnN0 cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopaW5zdF8ucmF3KCk7CisrICBNT1pfQVNTRVJU KGluc3QtPmlzT3Bjb2RlKFBQQ19vcmkpKTsKKysgIC8vIFZlcmlmeSBSUz0wIGFuZCBSQT0wIChy MCkuCisrICBNT1pfQVNTRVJUKChpbnN0LT5lbmNvZGUoKSAmIDB4MDNFMDAwMDApID09IDApOwor KyAgTU9aX0FTU0VSVCgoaW5zdC0+ZW5jb2RlKCkgJiAweDAwMUYwMDAwKSA9PSAwKTsKKysgIC8v IFN3YXAgb3Bjb2RlIGZyb20gb3JpICgwMTEwMDApIHRvIGIgKDAxMDAxMCkuCisrICB1aW50MzJf dCBlbmNvZGluZyA9IGluc3QtPmVuY29kZSgpOworKyAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgJiAw eDAzRkZGRkZGKSB8ICh1aW50MzJfdClQUENfYjsKKysgIGluc3QtPnNldERhdGEoZW5jb2Rpbmcp OworKyAgRmx1c2hJQ2FjaGUoaW5zdCwgc2l6ZW9mKEluc3RydWN0aW9uKSk7CisrfQorKworKy8q IHN0YXRpYyAqLworK3ZvaWQgQXNzZW1ibGVyOjpUb2dnbGVUb0NtcChDb2RlTG9jYXRpb25MYWJl bCBpbnN0XykgeworKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWluc3RfLnJh dygpOworKyAgTU9aX0FTU0VSVChpbnN0LT5pc09wY29kZShQUENfYikpOworKyAgLy8gVmVyaWZ5 IHNob3J0IGZvcndhcmQgYnJhbmNoOiB1cHBlciBMSSBiaXRzICgyNToxNikgYXJlIDAsIEFBPTAs IExLPTAuCisrICBNT1pfQVNTRVJUKChpbnN0LT5lbmNvZGUoKSAmIDB4MDNGRjAwMDMpID09IDAp OworKyAgLy8gU3dhcCBvcGNvZGUgZnJvbSBiICgwMTAwMTApIHRvIG9yaSAoMDExMDAwKS4KKysg IHVpbnQzMl90IGVuY29kaW5nID0gaW5zdC0+ZW5jb2RlKCk7CisrICBlbmNvZGluZyA9IChlbmNv ZGluZyAmIDB4MDNGRkZGRkYpIHwgKHVpbnQzMl90KVBQQ19vcmk7CisrICBpbnN0LT5zZXREYXRh KGVuY29kaW5nKTsKKysgIEZsdXNoSUNhY2hlKGluc3QsIHNpemVvZihJbnN0cnVjdGlvbikpOwor K30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBCaW5kLCB0cmFjaW5nLCBhbmQgcG9pbnRl ciBleHRyYWN0aW9uLgorKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworK3ZvaWQgQXNzZW1ibGVyOjpC aW5kKHVpbnQ4X3QqIHJhd0NvZGUsIGNvbnN0IENvZGVMYWJlbCYgbGFiZWwpIHsKKysgIGlmIChs YWJlbC5wYXRjaEF0KCkuYm91bmQoKSkgeworKyAgICBhdXRvIG1vZGUgPSBsYWJlbC5saW5rTW9k ZSgpOworKyAgICBpbnRwdHJfdCBvZmZzZXQgPSBsYWJlbC5wYXRjaEF0KCkub2Zmc2V0KCk7Cisr ICAgIGludHB0cl90IHRhcmdldCA9IGxhYmVsLnRhcmdldCgpLm9mZnNldCgpOworKworKyAgICBp ZiAobW9kZSA9PSBDb2RlTGFiZWw6OlJhd1BvaW50ZXIpIHsKKysgICAgICAqcmVpbnRlcnByZXRf Y2FzdDxjb25zdCB2b2lkKio+KHJhd0NvZGUgKyBvZmZzZXQpID0gcmF3Q29kZSArIHRhcmdldDsK KysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKG1vZGUgPT0gQ29kZUxhYmVsOjpNb3Zl SW1tZWRpYXRlIHx8CisrICAgICAgICAgICAgICAgICBtb2RlID09IENvZGVMYWJlbDo6SnVtcElt bWVkaWF0ZSk7CisrICAgICAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKShyYXdD b2RlICsgb2Zmc2V0KTsKKysgICAgICBBc3NlbWJsZXI6OlVwZGF0ZUxvYWQ2NFZhbHVlKGluc3Qs ICh1aW50NjRfdCkocmF3Q29kZSArIHRhcmdldCkpOworKyAgICB9CisrICB9CisrfQorKworK3Vp bnRwdHJfdCBBc3NlbWJsZXI6OkdldFBvaW50ZXIodWludDhfdCogaW5zdFB0cikgeworKyAgSW5z dHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWluc3RQdHI7CisrICByZXR1cm4gQXNzZW1i bGVyOjpFeHRyYWN0TG9hZDY0VmFsdWUoaW5zdCk7CisrfQorKworK3N0YXRpYyBKaXRDb2RlKiBD b2RlRnJvbUp1bXAoSW5zdHJ1Y3Rpb24qIGp1bXApIHsKKysgIHVpbnQ4X3QqIHRhcmdldCA9ICh1 aW50OF90KilBc3NlbWJsZXI6OkV4dHJhY3RMb2FkNjRWYWx1ZShqdW1wKTsKKysgIHJldHVybiBK aXRDb2RlOjpGcm9tRXhlY3V0YWJsZSh0YXJnZXQpOworK30KKysKKyt2b2lkIEFzc2VtYmxlcjo6 VHJhY2VKdW1wUmVsb2NhdGlvbnMoSlNUcmFjZXIqIHRyYywgSml0Q29kZSogY29kZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVh ZGVyKSB7CisrICB3aGlsZSAocmVhZGVyLm1vcmUoKSkgeworKyAgICBKaXRDb2RlKiBjaGlsZCA9 CisrICAgICAgICBDb2RlRnJvbUp1bXAoKEluc3RydWN0aW9uKikoY29kZS0+cmF3KCkgKyByZWFk ZXIucmVhZFVuc2lnbmVkKCkpKTsKKysgICAgVHJhY2VNYW51YWxseUJhcnJpZXJlZEVkZ2UodHJj LCAmY2hpbGQsICJyZWwzMiIpOworKyAgfQorK30KKysKKytzdGF0aWMgdm9pZCBUcmFjZU9uZURh dGFSZWxvY2F0aW9uKEpTVHJhY2VyKiB0cmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtb3ppbGxhOjpNYXliZTxBdXRvV3JpdGFibGVKaXRDb2RlPiYgYXdqYywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEppdENvZGUqIGNvZGUsIEluc3RydWN0aW9u KiBpbnN0KSB7CisrICB2b2lkKiBwdHIgPSAodm9pZCopQXNzZW1ibGVyOjpFeHRyYWN0TG9hZDY0 VmFsdWUoaW5zdCk7CisrICB2b2lkKiBwcmlvciA9IHB0cjsKKysKKysgIHVpbnRwdHJfdCB3b3Jk ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cik7CisrICBpZiAod29yZCA+PiBKU1ZB TF9UQUdfU0hJRlQpIHsKKysgICAgVmFsdWUgdiA9IFZhbHVlOjpmcm9tUmF3Qml0cyh3b3JkKTsK KysgICAgVHJhY2VNYW51YWxseUJhcnJpZXJlZEVkZ2UodHJjLCAmdiwgImppdC1tYXNtLXZhbHVl Iik7CisrICAgIHB0ciA9ICh2b2lkKil2LmJpdHNBc1B1bmJveFBvaW50ZXIoKTsKKysgIH0gZWxz ZSB7CisrICAgIFRyYWNlTWFudWFsbHlCYXJyaWVyZWRHZW5lcmljUG9pbnRlckVkZ2UoCisrICAg ICAgICB0cmMsIHJlaW50ZXJwcmV0X2Nhc3Q8Z2M6OkNlbGwqKj4oJnB0ciksICJqaXQtbWFzbS1w dHIiKTsKKysgIH0KKysKKysgIGlmIChwdHIgIT0gcHJpb3IpIHsKKysgICAgaWYgKGF3amMuaXNO b3RoaW5nKCkpIHsKKysgICAgICBhd2pjLmVtcGxhY2UoY29kZSk7CisrICAgIH0KKysgICAgQXNz ZW1ibGVyOjpVcGRhdGVMb2FkNjRWYWx1ZShpbnN0LCB1aW50NjRfdChwdHIpKTsKKysgIH0KKyt9 CisrCisrLyogc3RhdGljICovCisrdm9pZCBBc3NlbWJsZXI6OlRyYWNlRGF0YVJlbG9jYXRpb25z KEpTVHJhY2VyKiB0cmMsIEppdENvZGUqIGNvZGUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENvbXBhY3RCdWZmZXJSZWFkZXImIHJlYWRlcikgeworKyAgbW96aWxsYTo6 TWF5YmU8QXV0b1dyaXRhYmxlSml0Q29kZT4gYXdqYzsKKysgIHdoaWxlIChyZWFkZXIubW9yZSgp KSB7CisrICAgIHNpemVfdCBvZmZzZXQgPSByZWFkZXIucmVhZFVuc2lnbmVkKCk7CisrICAgIElu c3RydWN0aW9uKiBpbnN0ID0gKEluc3RydWN0aW9uKikoY29kZS0+cmF3KCkgKyBvZmZzZXQpOwor KyAgICBUcmFjZU9uZURhdGFSZWxvY2F0aW9uKHRyYywgYXdqYywgY29kZSwgaW5zdCk7CisrICB9 CisrfQorKworKy8qIHN0YXRpYyAqLworK3VpbnQ4X3QqIEFzc2VtYmxlcjo6TmV4dEluc3RydWN0 aW9uKHVpbnQ4X3QqIGluc3RydWN0aW9uLCB1aW50MzJfdCogY291bnQpIHsKKysgIGlmIChjb3Vu dCAhPSBudWxscHRyKSB7CisrICAgICpjb3VudCArPSBzaXplb2YoSW5zdHJ1Y3Rpb24pOworKyAg fQorKyAgcmV0dXJuIGluc3RydWN0aW9uICsgc2l6ZW9mKEluc3RydWN0aW9uKTsKKyt9CisrCisr Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrLy8gVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgaW1wbGVtZW50 YXRpb24uCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6 OlVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlKEFzc2VtYmxlciYgYXNzZW1ibGVyKQorKyAgICA6IGF2 YWlsYWJsZV8oYXNzZW1ibGVyLkdldFNjcmF0Y2hSZWdpc3Rlckxpc3QoKSksCisrICAgICAgb2xk X2F2YWlsYWJsZV8oKmF2YWlsYWJsZV8pIHt9CisrCisrVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGU6 OlVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlKEFzc2VtYmxlciogYXNzZW1ibGVyKQorKyAgICA6IGF2 YWlsYWJsZV8oYXNzZW1ibGVyLT5HZXRTY3JhdGNoUmVnaXN0ZXJMaXN0KCkpLAorKyAgICAgIG9s ZF9hdmFpbGFibGVfKCphdmFpbGFibGVfKSB7fQorKworK1VzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl Ojp+VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUoKSB7CisrICAqYXZhaWxhYmxlXyA9IG9sZF9hdmFp bGFibGVfOworK30KKysKKytSZWdpc3RlciBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6QWNxdWly ZSgpIHsKKysgIE1PWl9BU1NFUlQoYXZhaWxhYmxlXyAhPSBudWxscHRyKTsKKysgIE1PWl9BU1NF UlQoIWF2YWlsYWJsZV8tPmVtcHR5KCkpOworKyAgUmVnaXN0ZXIgaW5kZXggPSBHZW5lcmFsUmVn aXN0ZXJTZXQ6OkZpcnN0UmVnaXN0ZXIoYXZhaWxhYmxlXy0+Yml0cygpKTsKKysgIGF2YWlsYWJs ZV8tPnRha2VSZWdpc3RlckluZGV4KGluZGV4KTsKKysgIHJldHVybiBpbmRleDsKKyt9CisrCisr dm9pZCBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZTo6UmVsZWFzZShjb25zdCBSZWdpc3RlciYgcmVn KSB7CisrICBNT1pfQVNTRVJUKGF2YWlsYWJsZV8gIT0gbnVsbHB0cik7CisrICBNT1pfQVNTRVJU KG9sZF9hdmFpbGFibGVfLmhhc1JlZ2lzdGVySW5kZXgocmVnKSk7CisrICBNT1pfQVNTRVJUKCFh dmFpbGFibGVfLT5oYXNSZWdpc3RlckluZGV4KHJlZykpOworKyAgSW5jbHVkZShHZW5lcmFsUmVn aXN0ZXJTZXQoMSA8PCByZWcuY29kZSgpKSk7CisrfQorKworK2Jvb2wgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGU6Omhhc0F2YWlsYWJsZSgpIGNvbnN0IHsKKysgIHJldHVybiAoYXZhaWxhYmxlXy0+ c2l6ZSgpKSAhPSAwOworK30KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxl ci1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaAorbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uNjBlODRiZjcxY2Y3CistLS0gL2Rldi9u dWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oCitAQCAtMCwwICsx LDIxMTQgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1v ZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBl dCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRo ZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEg Y29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwg WW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysK KysjaWZuZGVmIGppdF9wcGM2NF9Bc3NlbWJsZXJfcHBjNjRfaAorKyNkZWZpbmUgaml0X3BwYzY0 X0Fzc2VtYmxlcl9wcGM2NF9oCisrCisrI2luY2x1ZGUgImppdC9Db21wYWN0QnVmZmVyLmgiCisr I2luY2x1ZGUgImppdC9KaXRDb2RlLmgiCisrI2luY2x1ZGUgImppdC9KaXRTcGV3ZXIuaCIKKysj aW5jbHVkZSAiaml0L3BwYzY0L0FyY2hpdGVjdHVyZS1wcGM2NC5oIgorKyNpbmNsdWRlICJqaXQv c2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaCIKKysjaW5jbHVkZSAiaml0L3NoYXJlZC9EaXNhc3Nl bWJsZXItc2hhcmVkLmgiCisrI2luY2x1ZGUgImppdC9zaGFyZWQvSW9uQXNzZW1ibGVyQnVmZmVy LmgiCisrI2luY2x1ZGUgImppdC9zaGFyZWQvSW9uQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50 UG9vbHMuaCIKKysjaW5jbHVkZSAid2FzbS9XYXNtVHlwZURlY2xzLmgiCisrCisrbmFtZXNwYWNl IGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKysvLyBHUFIgcmVnaXN0ZXIgY29uc3RhbnRzLgor K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjB7UmVnaXN0ZXJzOjpyMH07Cisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciByMXtSZWdpc3RlcnM6OnIxfTsKKytzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIHIye1JlZ2lzdGVyczo6cjJ9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjN7 UmVnaXN0ZXJzOjpyM307Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByNHtSZWdpc3RlcnM6 OnI0fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHI1e1JlZ2lzdGVyczo6cjV9OworK3N0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjZ7UmVnaXN0ZXJzOjpyNn07Cisrc3RhdGljIGNvbnN0 ZXhwciBSZWdpc3RlciByN3tSZWdpc3RlcnM6OnI3fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIHI4e1JlZ2lzdGVyczo6cjh9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjl7UmVn aXN0ZXJzOjpyOX07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTB7UmVnaXN0ZXJzOjpy MTB9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjExe1JlZ2lzdGVyczo6cjExfTsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxMntSZWdpc3RlcnM6OnIxMn07Cisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciByMTN7UmVnaXN0ZXJzOjpyMTN9OworK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgcjE0e1JlZ2lzdGVyczo6cjE0fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IHIxNXtSZWdpc3RlcnM6OnIxNX07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTZ7UmVn aXN0ZXJzOjpyMTZ9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjE3e1JlZ2lzdGVyczo6 cjE3fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIxOHtSZWdpc3RlcnM6OnIxOH07Cisr c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMTl7UmVnaXN0ZXJzOjpyMTl9OworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgcjIwe1JlZ2lzdGVyczo6cjIwfTsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIHIyMXtSZWdpc3RlcnM6OnIyMX07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciByMjJ7UmVnaXN0ZXJzOjpyMjJ9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjIze1Jl Z2lzdGVyczo6cjIzfTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIyNHtSZWdpc3RlcnM6 OnIyNH07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMjV7UmVnaXN0ZXJzOjpyMjV9Owor K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgcjI2e1JlZ2lzdGVyczo6cjI2fTsKKytzdGF0aWMg Y29uc3RleHByIFJlZ2lzdGVyIHIyN3tSZWdpc3RlcnM6OnIyN307Cisrc3RhdGljIGNvbnN0ZXhw ciBSZWdpc3RlciByMjh7UmVnaXN0ZXJzOjpyMjh9OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgcjI5e1JlZ2lzdGVyczo6cjI5fTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHIzMHtS ZWdpc3RlcnM6OnIzMH07Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciByMzF7UmVnaXN0ZXJz OjpyMzF9OworKworKy8vIEZQUiByZWdpc3RlciBjb25zdGFudHMuCisrc3RhdGljIGNvbnN0ZXhw ciBGbG9hdFJlZ2lzdGVyIGYwe0Zsb2F0UmVnaXN0ZXJzOjpmMCwgRmxvYXRSZWdpc3RlcnM6OkRv dWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxe0Zsb2F0UmVnaXN0ZXJz OjpmMSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJl Z2lzdGVyIGYye0Zsb2F0UmVnaXN0ZXJzOjpmMiwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisr c3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYze0Zsb2F0UmVnaXN0ZXJzOjpmMywgRmxv YXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY0 e0Zsb2F0UmVnaXN0ZXJzOjpmNCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNv bnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY1e0Zsb2F0UmVnaXN0ZXJzOjpmNSwgRmxvYXRSZWdpc3Rl cnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY2e0Zsb2F0UmVn aXN0ZXJzOjpmNiwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBG bG9hdFJlZ2lzdGVyIGY3e0Zsb2F0UmVnaXN0ZXJzOjpmNywgRmxvYXRSZWdpc3RlcnM6OkRvdWJs ZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGY4e0Zsb2F0UmVnaXN0ZXJzOjpm OCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lz dGVyIGY5e0Zsb2F0UmVnaXN0ZXJzOjpmOSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3Rh dGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxMHtGbG9hdFJlZ2lzdGVyczo6ZjEwLCBGbG9h dFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjEx e0Zsb2F0UmVnaXN0ZXJzOjpmMTEsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBj b25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTJ7RmxvYXRSZWdpc3RlcnM6OmYxMiwgRmxvYXRSZWdp c3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxM3tGbG9h dFJlZ2lzdGVyczo6ZjEzLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3Rl eHByIEZsb2F0UmVnaXN0ZXIgZjE0e0Zsb2F0UmVnaXN0ZXJzOjpmMTQsIEZsb2F0UmVnaXN0ZXJz OjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMTV7RmxvYXRSZWdp c3RlcnM6OmYxNSwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBG bG9hdFJlZ2lzdGVyIGYxNntGbG9hdFJlZ2lzdGVyczo6ZjE2LCBGbG9hdFJlZ2lzdGVyczo6RG91 YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjE3e0Zsb2F0UmVnaXN0ZXJz OjpmMTcsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRS ZWdpc3RlciBmMTh7RmxvYXRSZWdpc3RlcnM6OmYxOCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07 Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYxOXtGbG9hdFJlZ2lzdGVyczo6ZjE5 LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0 ZXIgZjIwe0Zsb2F0UmVnaXN0ZXJzOjpmMjAsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0 YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjF7RmxvYXRSZWdpc3RlcnM6OmYyMSwgRmxv YXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYy MntGbG9hdFJlZ2lzdGVyczo6ZjIyLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMg Y29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjIze0Zsb2F0UmVnaXN0ZXJzOjpmMjMsIEZsb2F0UmVn aXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMjR7Rmxv YXRSZWdpc3RlcnM6OmYyNCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0 ZXhwciBGbG9hdFJlZ2lzdGVyIGYyNXtGbG9hdFJlZ2lzdGVyczo6ZjI1LCBGbG9hdFJlZ2lzdGVy czo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgZjI2e0Zsb2F0UmVn aXN0ZXJzOjpmMjYsIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRpYyBjb25zdGV4cHIg RmxvYXRSZWdpc3RlciBmMjd7RmxvYXRSZWdpc3RlcnM6OmYyNywgRmxvYXRSZWdpc3RlcnM6OkRv dWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIGYyOHtGbG9hdFJlZ2lzdGVy czo6ZjI4LCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0 UmVnaXN0ZXIgZjI5e0Zsb2F0UmVnaXN0ZXJzOjpmMjksIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9 OworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBmMzB7RmxvYXRSZWdpc3RlcnM6OmYz MCwgRmxvYXRSZWdpc3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lz dGVyIGYzMXtGbG9hdFJlZ2lzdGVyczo6ZjMxLCBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKysK KytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludmFsaWRSZWd7UmVnaXN0ZXJzOjpJbnZhbGlk fTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgSW52YWxpZEZsb2F0UmVnOworKwor K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgU3RhY2tQb2ludGVyID0gcjE7Cisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciBGcmFtZVBvaW50ZXIgPSByMzE7Cisrc3RhdGljIGNvbnN0ZXhwciBS ZWdpc3RlciBSZXR1cm5SZWcgPSByMzsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyNjQgUmV0 dXJuUmVnNjQoUmV0dXJuUmVnKTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgUmV0 dXJuRmxvYXQzMlJlZ3tGbG9hdFJlZ2lzdGVyczo6ZjEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OlNpbmdsZX07Cisrc3Rh dGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIFJldHVybkRvdWJsZVJlZyA9IGYxOworK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBSZXR1cm5TaW1kMTI4UmVne0Zsb2F0UmVnaXN0ZXJz OjpmMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyczo6U2ltZDEyOH07CisrCisrLy8gcjE2IGlzIG5vbi12b2xhdGlsZSBhbmQg bm9uLWFsbG9jYXRhYmxlLCB1c2VkIGFzIGEgc2F2ZWQgc2NyYXRjaC4KKytzdGF0aWMgY29uc3Rl eHByIFJlZ2lzdGVyIFNhdmVkU2NyYXRjaFJlZ2lzdGVyID0gcjE2OworKworK3N0YXRpYyBjb25z dGV4cHIgUmVnaXN0ZXIgU2Vjb25kU2NyYXRjaFJlZyA9IHIxMjsKKysKKytzdGF0aWMgY29uc3Rl eHByIEZsb2F0UmVnaXN0ZXIgU2NyYXRjaEZsb2F0MzJSZWd7RmxvYXRSZWdpc3RlcnM6OmYwLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyczo6U2luZ2xlfTsKKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0ZXIgU2NyYXRj aERvdWJsZVJlZyA9IGYwOworK3N0YXRpYyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBTY3JhdGNo U2ltZDEyOFJlZ3tGbG9hdFJlZ2lzdGVyczo6ZjAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpTaW1kMTI4fTsKKysKKytz dHJ1Y3QgU2NyYXRjaEZsb2F0MzJTY29wZSA6IHB1YmxpYyBBdXRvRmxvYXRSZWdpc3RlclNjb3Bl IHsKKysgIGV4cGxpY2l0IFNjcmF0Y2hGbG9hdDMyU2NvcGUoTWFjcm9Bc3NlbWJsZXImIG1hc20p CisrICAgICAgOiBBdXRvRmxvYXRSZWdpc3RlclNjb3BlKG1hc20sIFNjcmF0Y2hGbG9hdDMyUmVn KSB7fQorK307CisrCisrc3RydWN0IFNjcmF0Y2hEb3VibGVTY29wZSA6IHB1YmxpYyBBdXRvRmxv YXRSZWdpc3RlclNjb3BlIHsKKysgIGV4cGxpY2l0IFNjcmF0Y2hEb3VibGVTY29wZShNYWNyb0Fz c2VtYmxlciYgbWFzbSkKKysgICAgICA6IEF1dG9GbG9hdFJlZ2lzdGVyU2NvcGUobWFzbSwgU2Ny YXRjaERvdWJsZVJlZykge30KKyt9OworKworKy8vIFBQQzY0OiBTY3JhdGNoU2ltZDEyOFNjb3Bl IGlzIGEgc2ltcGxlIHJlZ2lzdGVyIHdyYXBwZXIsIE5PVCBhIHNjb3BlZAorKy8vIGFjcXVpcmUv cmVsZWFzZS4gT24gUFBDNjQsIFNjcmF0Y2hTaW1kMTI4UmVnIGlzIHYwIChWU1IzMjsgZW5jb2Rl ZCBhcworKy8vIHtGbG9hdFJlZ2lzdGVyczo6ZjAsIFNpbWQxMjh9IHNvIGVuY29kaW5nKCkgPSAw ICsgMzIgPSAzMikg4oCUIGRpc3RpbmN0CisrLy8gZnJvbSBTY3JhdGNoRG91YmxlUmVnID0gZjAg KFZTUjApLiBJdCBpcyBub24tYWxsb2NhdGFibGUgYW5kIGFsd2F5cworKy8vIGF2YWlsYWJsZS4g TWFueSBTSU1EIGZ1bmN0aW9ucyBjYWxsIG90aGVyIFNJTUQgZnVuY3Rpb25zIHRoYXQgYWxzbyBu ZWVkCisrLy8gdjAsIGNyZWF0aW5nIG5lc3RlZCAic2NvcGVzIi4gVXNpbmcgQXV0b0Zsb2F0UmVn aXN0ZXJTY29wZSB3b3VsZCBhc3NlcnQKKysvLyBvbiBkb3VibGUtYWNxdWlyZSBpbiBkZWJ1ZyBi dWlsZHMuIFNpbmNlIHYwIGlzIG5ldmVyIGFsbG9jYXRlZCBieSB0aGUKKysvLyByZWdpc3RlciBh bGxvY2F0b3IsIG5lc3RpbmcgaXMgc2FmZS4KKytzdHJ1Y3QgU2NyYXRjaFNpbWQxMjhTY29wZSA6 IHB1YmxpYyBGbG9hdFJlZ2lzdGVyIHsKKysgIGV4cGxpY2l0IFNjcmF0Y2hTaW1kMTI4U2NvcGUo TWFjcm9Bc3NlbWJsZXImKQorKyAgICAgIDogRmxvYXRSZWdpc3RlcihTY3JhdGNoU2ltZDEyOFJl Zykge30KKyt9OworKworK2NsYXNzIEFzc2VtYmxlcjsKKysKKytjbGFzcyBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB7CisrIHB1YmxpYzoKKysgIGV4cGxpY2l0IFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlKEFzc2VtYmxlciYgYXNzZW1ibGVyKTsKKysgIGV4cGxpY2l0IFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlKEFzc2VtYmxlciogYXNzZW1ibGVyKTsKKysgIH5Vc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSgpOworKworKyAgUmVnaXN0ZXIgQWNxdWlyZSgpOworKyAgdm9pZCBSZWxlYXNlKGNvbnN0IFJl Z2lzdGVyJiByZWcpOworKyAgYm9vbCBoYXNBdmFpbGFibGUoKSBjb25zdDsKKysgIHZvaWQgSW5j bHVkZShjb25zdCBHZW5lcmFsUmVnaXN0ZXJTZXQmIGxpc3QpIHsKKysgICAgKmF2YWlsYWJsZV8g PSBHZW5lcmFsUmVnaXN0ZXJTZXQ6OlVuaW9uKCphdmFpbGFibGVfLCBsaXN0KTsKKysgIH0KKysg IHZvaWQgRXhjbHVkZShjb25zdCBHZW5lcmFsUmVnaXN0ZXJTZXQmIGxpc3QpIHsKKysgICAgKmF2 YWlsYWJsZV8gPSBHZW5lcmFsUmVnaXN0ZXJTZXQ6OlN1YnRyYWN0KCphdmFpbGFibGVfLCBsaXN0 KTsKKysgIH0KKysKKysgcHJpdmF0ZToKKysgIEdlbmVyYWxSZWdpc3RlclNldCogYXZhaWxhYmxl XzsKKysgIEdlbmVyYWxSZWdpc3RlclNldCBvbGRfYXZhaWxhYmxlXzsKKyt9OworKworK3N0YXRp YyBjb25zdGV4cHIgUmVnaXN0ZXIgT3NyRnJhbWVSZWcgPSByNjsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIFByZUJhcnJpZXJSZWcgPSByNDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IEludGVycHJldGVyUENSZWcgPSByMTc7CisrCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBD YWxsVGVtcFJlZzAgPSByNDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIENhbGxUZW1wUmVn MSA9IHI5OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWcyID0gcjEwOwor K3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWczID0gcjc7CisrLy8gQ2FsbFRl bXBSZWc0IG11c3QgTk9UIGJlIEpTUmV0dXJuUmVnIChyNSk6IExNZWdhbW9ycGhpY0xvYWRTbG90 UGVybWlzc2l2ZQorKy8vIHVzZXMgdGVtcEZpeGVkKENhbGxUZW1wUmVnNCkgZm9yIGEgc2F2ZWQg b2JqIHBvaW50ZXIgQU5EIGRlZmluZVJldHVybgorKy8vIChKU1JldHVybk9wZXJhbmQ9cjUpIGZv ciBvdXRwdXQuIElmIHRoZXkgYWxpYXMsIHRoZSBtZWdhbW9ycGhpYyBjYWNoZQorKy8vIGxvb2t1 cCBjbG9iYmVycyB0aGUgc2F2ZWQgb2JqLCBjb3JydXB0aW5nIHRoZSAndGhpcycgcG9pbnRlci4K KytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIENhbGxUZW1wUmVnNCA9IHI4OworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBSZWc1ID0gcjY7CisrCisrLy8gUFBDNjQgRUxGdjIg aGFzIG5vIHZvbGF0aWxlIG5vbi1hcmcgR1BScyAocjMtcjEwIGFyZSBhbGwgYXJnIHJlZ3MpLgor Ky8vIFVzZSBhbGxvY2F0YWJsZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzIGFzIG92ZXJmbG93IHRl bXBzLgorK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQ2FsbFRlbXBOb25BcmdSZWdzW10gPSB7 cjE0LCByMTV9OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBOdW1DYWxsVGVtcE5vbkFyZ1JlZ3Mg PSBzdGQ6OnNpemUoQ2FsbFRlbXBOb25BcmdSZWdzKTsKKysKKytzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIEludEFyZ1JlZzAgPSByMzsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFy Z1JlZzEgPSByNDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzIgPSByNTsK KytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzMgPSByNjsKKytzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzQgPSByNzsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIEludEFyZ1JlZzUgPSByODsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1Jl ZzYgPSByOTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEludEFyZ1JlZzcgPSByMTA7Cisr CisrLy8gUmVnaXN0ZXJzIHVzZWQgYnkgUmVnRXhwTWF0Y2hlciBhbmQgUmVnRXhwRXhlY01hdGNo IHN0dWJzLgorK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwTWF0Y2hlclJlZ0V4cFJl ZyA9IENhbGxUZW1wUmVnMDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cE1hdGNo ZXJTdHJpbmdSZWcgPSBDYWxsVGVtcFJlZzE7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBS ZWdFeHBNYXRjaGVyTGFzdEluZGV4UmVnID0gQ2FsbFRlbXBSZWcyOworKworKy8vIFJlZ2lzdGVy cyB1c2VkIGJ5IFJlZ0V4cEV4ZWNUZXN0IHN0dWIgKGRvIG5vdCB1c2UgUmV0dXJuUmVnKS4KKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cEV4ZWNUZXN0UmVnRXhwUmVnID0gQ2FsbFRl bXBSZWcwOworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmVnRXhwRXhlY1Rlc3RTdHJpbmdS ZWcgPSBDYWxsVGVtcFJlZzE7CisrCisrLy8gUmVnaXN0ZXJzIHVzZWQgYnkgUmVnRXhwU2VhcmNo ZXIgc3R1YiAoZG8gbm90IHVzZSBSZXR1cm5SZWcpLgorK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0 ZXIgUmVnRXhwU2VhcmNoZXJSZWdFeHBSZWcgPSBDYWxsVGVtcFJlZzA7Cisrc3RhdGljIGNvbnN0 ZXhwciBSZWdpc3RlciBSZWdFeHBTZWFyY2hlclN0cmluZ1JlZyA9IENhbGxUZW1wUmVnMTsKKytz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJlZ0V4cFNlYXJjaGVyTGFzdEluZGV4UmVnID0gQ2Fs bFRlbXBSZWcyOworKworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSlNSZXR1cm5SZWdfVHlw ZSA9IHI2OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSlNSZXR1cm5SZWdfRGF0YSA9IHI1 OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSlNSZXR1cm5SZWcgPSByNTsKKytzdGF0aWMg Y29uc3RleHByIFZhbHVlT3BlcmFuZCBKU1JldHVybk9wZXJhbmQgPSBWYWx1ZU9wZXJhbmQoSlNS ZXR1cm5SZWcpOworKworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmVnMCA9 IHIxOTsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEFCSU5vbkFyZ1JlZzEgPSByMjA7Cisr c3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBBQklOb25BcmdSZWcyID0gcjIxOworK3N0YXRpYyBj b25zdGV4cHIgUmVnaXN0ZXIgQUJJTm9uQXJnUmVnMyA9IHIyMjsKKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIEFCSU5vbkFyZ1JldHVyblJlZzAgPSByMjk7Cisrc3RhdGljIGNvbnN0ZXhwciBS ZWdpc3RlciBBQklOb25BcmdSZXR1cm5SZWcxID0gcjMwOworK3N0YXRpYyBjb25zdGV4cHIgUmVn aXN0ZXIgQUJJTm9uVm9sYXRpbGVSZWcgPSByMTQ7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBBQklOb25BcmdSZXR1cm5Wb2xhdGlsZVJlZyA9IHIxMTsKKysKKytzdGF0aWMgY29uc3RleHBy IEZsb2F0UmVnaXN0ZXIgQUJJTm9uQXJnRG91YmxlUmVne0Zsb2F0UmVnaXN0ZXJzOjpmMTQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyczo6RG91YmxlfTsKKysKKysvLyBXYXNtIGluc3RhbmNlIHBvaW50ZXIgcmVnaXN0ZXIu IFByZXNlcnZlZCBhY3Jvc3Mgd2FzbSBmdW5jdGlvbiBjYWxscy4KKytzdGF0aWMgY29uc3RleHBy IFJlZ2lzdGVyIEluc3RhbmNlUmVnID0gcjE4OworK3N0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIg SGVhcFJlZyA9IHIyNDsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIEdsb2JhbFJlZyA9IHIy MzsKKysKKysvLyBXYXNtIHRhYmxlIGNhbGwgcmVnaXN0ZXJzLgorK3N0YXRpYyBjb25zdGV4cHIg UmVnaXN0ZXIgV2FzbVRhYmxlQ2FsbFNjcmF0Y2hSZWcwID0gQUJJTm9uQXJnUmVnMDsKKytzdGF0 aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWJsZUNhbGxTY3JhdGNoUmVnMSA9IEFCSU5vbkFy Z1JlZzE7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtVGFibGVDYWxsU2lnUmVnID0g QUJJTm9uQXJnUmVnMjsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWJsZUNhbGxJ bmRleFJlZyA9IEFCSU5vbkFyZ1JlZzM7CisrCisrLy8gV2FzbSByZWYgY2FsbCByZWdpc3RlcnMu Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtQ2FsbFJlZkNhbGxTY3JhdGNoUmVnMCA9 IEFCSU5vbkFyZ1JlZzA7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtQ2FsbFJlZkNh bGxTY3JhdGNoUmVnMSA9IEFCSU5vbkFyZ1JlZzE7Cisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBXYXNtQ2FsbFJlZkNhbGxTY3JhdGNoUmVnMiA9IEFCSU5vbkFyZ1JlZzI7Cisrc3RhdGljIGNv bnN0ZXhwciBSZWdpc3RlciBXYXNtQ2FsbFJlZlJlZyA9IEFCSU5vbkFyZ1JlZzM7CisrCisrLy8g V2FzbSB0YWlsIGNhbGwgc2NyYXRjaCByZWdpc3RlcnMuCisrLy8gV2FzbVRhaWxDYWxsUkFTY3Jh dGNoUmVnIG11c3QgTk9UIGJlIEFCSU5vbkFyZ1JlZzA6IHRoZSBzaGFyZWQgdGFpbC1jYWxsCisr Ly8gY29kZSAod2FzbVJldHVybkNhbGxJbXBvcnQsIHdhc21SZXR1cm5DYWxsSW5kaXJlY3QsIHdh c21SZXR1cm5DYWxsUmVmKQorKy8vIHN0b3JlcyB0aGUgY2FsbGVlIGFkZHJlc3MgaW4gQUJJTm9u QXJnUmVnMCwgYW5kIENvbGxhcHNlV2FzbUZyYW1lKgorKy8vIG92ZXJ3cml0ZXMgdGVtcEZvclJB LiBPbiBhcmNoaXRlY3R1cmVzIHdpdGggYSBHUFIgbGluayByZWdpc3RlciAoQVJNLAorKy8vIE1J UFMsIExBNjQsIFJJU0MtVikgdGhpcyBpcyByYS9sci4gUFBDNjQncyBMUiBpcyBhbiBTUFIsIHNv IHdlIHVzZSByMTQKKysvLyAoQUJJTm9uVm9sYXRpbGVSZWcpIHdoaWNoIGlzIGNhbGxlZS1zYXZl ZCBhbmQgbm90IHVzZWQgaW4gY2FsbCBzZXR1cC4KKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy IFdhc21UYWlsQ2FsbEluc3RhbmNlU2NyYXRjaFJlZyA9IEFCSU5vbkFyZ1JlZzE7Cisrc3RhdGlj IGNvbnN0ZXhwciBSZWdpc3RlciBXYXNtVGFpbENhbGxSQVNjcmF0Y2hSZWcgPSBBQklOb25Wb2xh dGlsZVJlZzsKKytzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFdhc21UYWlsQ2FsbEZQU2NyYXRj aFJlZyA9IEFCSU5vbkFyZ1JlZzM7CisrCisrLy8gUmVnaXN0ZXIgdXNlZCBhcyBhIHNjcmF0Y2gg YWxvbmcgdGhlIHJldHVybiBwYXRoIGluIHRoZSBmYXN0IGpzIC0+IHdhc20gc3R1YgorKy8vIGNv ZGUuIE11c3Qgbm90IG92ZXJsYXAgUmV0dXJuUmVnLCBKU1JldHVybk9wZXJhbmQsIG9yIEluc3Rh bmNlUmVnLgorKy8vIE11c3QgYmUgdm9sYXRpbGUuCisrc3RhdGljIGNvbnN0ZXhwciBSZWdpc3Rl ciBXYXNtSml0RW50cnlSZXR1cm5TY3JhdGNoID0gcjEwOworKworK3N0YXRpYyBjb25zdGV4cHIg dWludDMyX3QgQUJJU3RhY2tBbGlnbm1lbnQgPSAxNjsKKytzdGF0aWMgY29uc3RleHByIHVpbnQz Ml90IENvZGVBbGlnbm1lbnQgPSAxNjsKKytzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IEppdFN0 YWNrQWxpZ25tZW50ID0gMTY7CisrCisrc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBKaXRTdGFj a1ZhbHVlQWxpZ25tZW50ID0KKysgICAgSml0U3RhY2tBbGlnbm1lbnQgLyBzaXplb2YoVmFsdWUp OworK3N0YXRpY19hc3NlcnQoSml0U3RhY2tBbGlnbm1lbnQgJSBzaXplb2YoVmFsdWUpID09IDAg JiYKKysgICAgICAgICAgICAgICAgICBKaXRTdGFja1ZhbHVlQWxpZ25tZW50ID49IDEsCisrICAg ICAgICAgICAgICAiU3RhY2sgYWxpZ25tZW50IHNob3VsZCBiZSBhIG5vbi16ZXJvIG11bHRpcGxl IG9mIHNpemVvZihWYWx1ZSkiKTsKKysKKytzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IFNpbWRN ZW1vcnlBbGlnbm1lbnQgPSAxNjsKKytzdGF0aWNfYXNzZXJ0KAorKyAgICBDb2RlQWxpZ25tZW50 ICUgU2ltZE1lbW9yeUFsaWdubWVudCA9PSAwLAorKyAgICAiQ29kZSBhbGlnbm1lbnQgc2hvdWxk IGJlIGxhcmdlciB0aGFuIGFueSBvZiB0aGUgYWxpZ25tZW50cyAiCisrICAgICJ3aGljaCBhcmUg dXNlZCBmb3IgdGhlIGNvbnN0YW50IHNlY3Rpb25zIG9mIHRoZSBjb2RlIGJ1ZmZlci4gIgorKyAg ICAiVGh1cyBpdCBzaG91bGQgYmUgbGFyZ2VyIHRoYW4gdGhlIGFsaWdubWVudCBmb3IgU0lNRCBj b25zdGFudHMuIik7CisrCisrc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBXYXNtU3RhY2tBbGln bm1lbnQgPSBTaW1kTWVtb3J5QWxpZ25tZW50OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBXYXNt VHJhcEluc3RydWN0aW9uTGVuZ3RoID0gNDsKKysKKytzdGF0aWMgY29uc3RleHByIHVpbnQzMl90 IFdhc21DaGVja2VkQ2FsbEVudHJ5T2Zmc2V0ID0gMHU7Cisrc3RhdGljIGNvbnN0ZXhwciB1aW50 MzJfdCBXYXNtQ2hlY2tlZFRhaWxFbnRyeU9mZnNldCA9IDMydTsKKysKKytzdGF0aWMgY29uc3Rl eHByIFNjYWxlIFNjYWxlUG9pbnRlciA9IFRpbWVzRWlnaHQ7CisrCisrY2xhc3MgQUJJQXJnR2Vu ZXJhdG9yIDogcHVibGljIEFCSUFyZ0dlbmVyYXRvclNoYXJlZCB7CisrIHB1YmxpYzoKKysgIGV4 cGxpY2l0IEFCSUFyZ0dlbmVyYXRvcihBQklLaW5kIGtpbmQpCisrICAgICAgOiBBQklBcmdHZW5l cmF0b3JTaGFyZWQoa2luZCksCisrICAgICAgICBpbnRSZWdJbmRleF8oMCksCisrICAgICAgICBm bG9hdFJlZ0luZGV4XygwKSwKKysgICAgICAgIGN1cnJlbnRfKCkgeworKyAgICAvLyBQUEM2NCBF TEZ2MiBBQkk6IHRoZSBjYWxsZWUgc2F2ZXMgTFIsIENSLCBUT0MgaW50byB0aGUgY2FsbGVyJ3MK KysgICAgLy8gZnJhbWUgKG9mZnNldHMgOCwgMTYsIDI0IGZyb20gY2FsbGVyIFNQKS4gUmVzZXJ2 ZSAzMiBieXRlcyBzbyB0aGF0CisrICAgIC8vIGNhbGxXaXRoQUJJUHJlIGFsd2F5cyBhbGxvY2F0 ZXMgZW5vdWdoIHNwYWNlIGZvciB0aGlzIGxpbmsgYXJlYS4KKysgICAgc3RhY2tPZmZzZXRfICs9 IFNoYWRvd1N0YWNrU3BhY2U7CisrICB9CisrCisrICBBQklBcmcgbmV4dChNSVJUeXBlIGFyZ1R5 cGUpOworKyAgQUJJQXJnJiBjdXJyZW50KCkgeyByZXR1cm4gY3VycmVudF87IH0KKysKKysgcHJv dGVjdGVkOgorKyAgdW5zaWduZWQgaW50UmVnSW5kZXhfOworKyAgdW5zaWduZWQgZmxvYXRSZWdJ bmRleF87CisrICBBQklBcmcgY3VycmVudF87CisrfTsKKysKKytzdGF0aWMgY29uc3RleHByIHVp bnQzMl90IE51bUludEFyZ1JlZ3MgPSA4OworK3N0YXRpYyBjb25zdGV4cHIgdWludDMyX3QgTnVt RmxvYXRBcmdSZWdzID0gMTM7CisrCisrc3RhdGljIGlubGluZSBib29sIEdldEludEFyZ1JlZyh1 aW50MzJfdCB1c2VkSW50QXJncywgUmVnaXN0ZXIqIG91dCkgeworKyAgaWYgKHVzZWRJbnRBcmdz IDwgTnVtSW50QXJnUmVncykgeworKyAgICAqb3V0ID0gUmVnaXN0ZXI6OkZyb21Db2RlKHIzLmNv ZGUoKSArIHVzZWRJbnRBcmdzKTsKKysgICAgcmV0dXJuIHRydWU7CisrICB9CisrICByZXR1cm4g ZmFsc2U7CisrfQorKworK3N0YXRpYyBpbmxpbmUgYm9vbCBHZXRGbG9hdEFyZ1JlZyh1aW50MzJf dCB1c2VkRmxvYXRBcmdzLCBGbG9hdFJlZ2lzdGVyKiBvdXQpIHsKKysgIGlmICh1c2VkRmxvYXRB cmdzIDwgTnVtRmxvYXRBcmdSZWdzKSB7CisrICAgICpvdXQgPSBGbG9hdFJlZ2lzdGVyOjpGcm9t Q29kZShmMS5jb2RlKCkgKyB1c2VkRmxvYXRBcmdzKTsKKysgICAgcmV0dXJuIHRydWU7CisrICB9 CisrICByZXR1cm4gZmFsc2U7CisrfQorKworK3N0YXRpYyBpbmxpbmUgYm9vbCBHZXRUZW1wUmVn Rm9ySW50QXJnKHVpbnQzMl90IHVzZWRJbnRBcmdzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IHVzZWRGbG9hdEFyZ3MsIFJlZ2lzdGVyKiBvdXQpIHsK KysgIE1PWl9BU1NFUlQodXNlZEZsb2F0QXJncyA9PSAwKTsKKysKKysgIGlmIChHZXRJbnRBcmdS ZWcodXNlZEludEFyZ3MsIG91dCkpIHsKKysgICAgcmV0dXJuIHRydWU7CisrICB9CisrCisrICB1 c2VkSW50QXJncyAtPSBOdW1JbnRBcmdSZWdzOworKyAgaWYgKHVzZWRJbnRBcmdzID49IE51bUNh bGxUZW1wTm9uQXJnUmVncykgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9CisrICAqb3V0ID0g Q2FsbFRlbXBOb25BcmdSZWdzW3VzZWRJbnRBcmdzXTsKKysgIHJldHVybiB0cnVlOworK30KKysK KysvLyBQUEM2NCBpbnN0cnVjdGlvbiBmaWVsZCBwb3NpdGlvbnMuCisrLy8gUFBDIHVzZXMgYmln LWVuZGlhbiBiaXQgbnVtYmVyaW5nIChiaXQgMCA9IE1TQiksIGJ1dCB3ZSBzdG9yZSBpbnN0cnVj dGlvbnMKKysvLyBpbiBhIHVpbnQzMl90IHdoZXJlIGJpdCAwID0gTFNCLiBUaGUgc2hpZnRzIGJl bG93IGFyZSBpbiBMU0ItMCB0ZXJtcy4KKysvLworKy8vICAgWzA6NV0gIHByaW1hcnkgb3Bjb2Rl ICAgKE9wY29kZVNoaWZ0PTI2KQorKy8vICAgWzY6MTBdICBSVC9SUy9CRi9UTyAgICAgKFJUU2hp ZnQ9MjEsIDUgYml0cykKKysvLyAgIFsxMToxNV0gUkEvQkkgICAgICAgICAgIChSQVNoaWZ0PTE2 LCA1IGJpdHMpCisrLy8gICBbMTY6MjBdIFJCL1NIICAgICAgICAgICAoUkJTaGlmdD0xMSwgNSBi aXRzKQorKy8vICAgWzE2OjMxXSBTSS9VSS9EICAgICAgICAgKEltbTE2U2hpZnQ9MCwgMTYgYml0 cykKKysvLyAgIFsyMToyNV0gc3Vib3AgYml0cyAgICAgICh2YXJpZXMpCisrLy8gICBbMjE6MzBd IFhPICAgICAgICAgICAgICAoWC1mb3JtOyBBL00vTUQvTURTIG5hcnJvd2VyKQorKy8vICAgWzMx XSAgICBSYyBiaXQgICAgICAgICAgKFJjU2hpZnQ9MCkKKysKKytzdGF0aWMgY29uc3QgdWludDMy X3QgT3Bjb2RlU2hpZnQgPSAyNjsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgT3Bjb2RlQml0cyA9 IDY7CisrCisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJUU2hpZnQgPSAyMTsKKytzdGF0aWMgY29u c3QgdWludDMyX3QgUlRCaXRzID0gNTsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUlNTaGlmdCA9 IDIxOworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSU0JpdHMgPSA1OworK3N0YXRpYyBjb25zdCB1 aW50MzJfdCBSQVNoaWZ0ID0gMTY7Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJBQml0cyA9IDU7 Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJCU2hpZnQgPSAxMTsKKytzdGF0aWMgY29uc3QgdWlu dDMyX3QgUkJCaXRzID0gNTsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUkNTaGlmdCA9IDY7Cisr c3RhdGljIGNvbnN0IHVpbnQzMl90IFJDQml0cyA9IDU7CisrCisrc3RhdGljIGNvbnN0IHVpbnQz Ml90IEJPU2hpZnQgPSAyMTsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgQk9CaXRzID0gNTsKKytz dGF0aWMgY29uc3QgdWludDMyX3QgQklTaGlmdCA9IDE2OworK3N0YXRpYyBjb25zdCB1aW50MzJf dCBCSUJpdHMgPSA1OworKworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbW0xNlNoaWZ0ID0gMDsK KytzdGF0aWMgY29uc3QgdWludDMyX3QgSW1tMTZCaXRzID0gMTY7CisrCisrc3RhdGljIGNvbnN0 IHVpbnQzMl90IFJjU2hpZnQgPSAwOworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSY0JpdCA9IDE7 CisrCisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJUTWFzayA9ICgoMSA8PCBSVEJpdHMpIC0gMSkg PDwgUlRTaGlmdDsKKytzdGF0aWMgY29uc3QgdWludDMyX3QgUlNNYXNrID0gKCgxIDw8IFJTQml0 cykgLSAxKSA8PCBSU1NoaWZ0OworK3N0YXRpYyBjb25zdCB1aW50MzJfdCBSQU1hc2sgPSAoKDEg PDwgUkFCaXRzKSAtIDEpIDw8IFJBU2hpZnQ7Cisrc3RhdGljIGNvbnN0IHVpbnQzMl90IFJCTWFz ayA9ICgoMSA8PCBSQkJpdHMpIC0gMSkgPDwgUkJTaGlmdDsKKytzdGF0aWMgY29uc3QgdWludDMy X3QgSW1tMTZNYXNrID0gKDEgPDwgSW1tMTZCaXRzKSAtIDE7Cisrc3RhdGljIGNvbnN0IHVpbnQz Ml90IFJlZ01hc2sgPSAoMSA8PCBSVEJpdHMpIC0gMTsKKysKKytzdGF0aWMgaW5saW5lIHVpbnQz Ml90IFJUKFJlZ2lzdGVyIHIpIHsgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSVFNoaWZ0 OyB9Cisrc3RhdGljIGlubGluZSB1aW50MzJfdCBSVChGbG9hdFJlZ2lzdGVyIHIpIHsKKysgIHJl dHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUlRTaGlmdDsKKyt9Cisrc3RhdGljIGlubGluZSB1 aW50MzJfdCBSUyhSZWdpc3RlciByKSB7IHJldHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUlNT aGlmdDsgfQorK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgUlMoRmxvYXRSZWdpc3RlciByKSB7Cisr ICByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8IFJTU2hpZnQ7CisrfQorK3N0YXRpYyBpbmxp bmUgdWludDMyX3QgUkEoUmVnaXN0ZXIgcikgeyByZXR1cm4gKHVpbnQzMl90KXIuY29kZSgpIDw8 IFJBU2hpZnQ7IH0KKytzdGF0aWMgaW5saW5lIHVpbnQzMl90IFJBKEZsb2F0UmVnaXN0ZXIgcikg eworKyAgcmV0dXJuICh1aW50MzJfdClyLmNvZGUoKSA8PCBSQVNoaWZ0OworK30KKytzdGF0aWMg aW5saW5lIHVpbnQzMl90IFJCKFJlZ2lzdGVyIHIpIHsgcmV0dXJuICh1aW50MzJfdClyLmNvZGUo KSA8PCBSQlNoaWZ0OyB9Cisrc3RhdGljIGlubGluZSB1aW50MzJfdCBSQihGbG9hdFJlZ2lzdGVy IHIpIHsKKysgIHJldHVybiAodWludDMyX3Qpci5jb2RlKCkgPDwgUkJTaGlmdDsKKyt9CisrCisr Ly8gU1BSIGVuY29kaW5nOiB0aGUgU1BSIG51bWJlciBpcyBzcGxpdCBhY3Jvc3MgYml0cyAxMS0x NSBhbmQgMTYtMjAgaW4gYQorKy8vIHN3YXBwZWQgYXJyYW5nZW1lbnQuICBQUENfU1BSKHgpIHBy b2R1Y2VzIHRoZSB2YWx1ZSB0byBPUiBpbnRvIGFuCisrLy8gbXRzcHIvbWZzcHIgaW5zdHJ1Y3Rp b24gYXQgdGhlIFJCK1JBIHBvc2l0aW9uIChiaXRzIDExLTIwKS4KKysjZGVmaW5lIFBQQ19TUFIo eCkgKCgoKGludCkoeCkgPj4gNSkgJiAweDFmKSA8PCAxMSB8ICgoaW50KSh4KSAmIDB4MWYpIDw8 IDE2KQorKworK2VudW0gUFBDT3Bjb2RlcyB7CisrICBQUENfYWRkID0gMHg3QzAwMDIxNCwKKysg IFBQQ19hZGRjID0gMHg3QzAwMDAxNCwKKysgIFBQQ19hZGRlID0gMHg3QzAwMDExNCwKKysgIFBQ Q19hZGRpID0gMHgzODAwMDAwMCwKKysgIFBQQ19hZGRpcyA9IDB4M0MwMDAwMDAsCisrICBQUENf YW5kXyA9IDB4N0MwMDAwMzgsCisrICAvLyBhbmRpLiBpcyBhbHdheXMgcmVjb3JkIGZvcm0gKG5v IG5vbi1yZWNvcmQgYW5kaSBleGlzdHMpLgorKyAgUFBDX2FuZGlfZG90ID0gMHg3MDAwMDAwMCwK KysgIFBQQ19iID0gMHg0ODAwMDAwMCwKKysgIFBQQ19iYyA9IDB4NDAwMDAwMDAsCisrICAvLyBF bmNvZGVkICJiY2wgMjAsIGx0LCAkKzQiOiBQQy1yZWxhdGl2ZSBicmFuY2gtYW5kLWxpbmsgYnkg NCBieXRlcworKyAgLy8gKGxhbmQgYXQgdGhlIG5leHQgaW5zdHJ1Y3Rpb24pIHdpdGggQk89MjAg KGJyYW5jaCBhbHdheXMpOyBCST0wCisrICAvLyAoPWx0KSBpcyBkb24ndC1jYXJlIGJlY2F1c2Ug Qk89MjAgZm9yY2VzIHRoZSBicmFuY2guIFVzZWQgYnkKKysgIC8vIFBvb2xMb2FkRlBSezMyLDY0 fSdzIFBPV0VSOCBzdGFuemEgYW5kIFBvb2xMb2FkU2ltZDEyOCdzIHN0YW56YSB0bworKyAgLy8g c2VlZCBMUiB3aXRoIHRoZSBjdXJyZW50IFBDIGZvciB0aGUgc3Vic2VxdWVudCBtZmxyK2xkIGJh c2UKKysgIC8vIGNvbXB1dGF0aW9uLiBVc2VkIGJ5IHBhdGNoIHNpdGVzIHRoYXQgd3JpdGUgcmF3 IGluc3RydWN0aW9uIG1lbW9yeQorKyAgLy8gKFBhdGNoQ29uc3RhbnRQb29sTG9hZCwgV3JpdGVM b2FkNjRJbnN0cnVjdGlvbnMsIGV0Yy4pLiBOYW1lZCBmb3IKKysgIC8vIGdyZXAtYWJpbGl0eSBh bmQgdG8gYXZvaWQgbWFnaWMtbnVtYmVyIGNvcGllcy4KKysgIFBQQ19iY2xfYWx3YXlzX3BsdXM0 ID0gMHg0MjgwMDAwNSwKKysgIFBQQ19iY3RyID0gMHg0RTgwMDQyMCwKKysgIFBQQ19iY2N0ciA9 IDB4NEMwMDA0MjAsCisrICBQUENfYmxyID0gMHg0RTgwMDAyMCwKKysgIFBQQ19jbXBkID0gMHg3 QzIwMDAwMCwKKysgIFBQQ19jbXBkaSA9IDB4MkMyMDAwMDAsCisrICBQUENfY21wbGQgPSAweDdD MjAwMDQwLAorKyAgUFBDX2NtcGxkaSA9IDB4MjgyMDAwMDAsCisrICBQUENfY21wdyA9IDB4N0Mw MDAwMDAsCisrICBQUENfY21wd2kgPSAweDJDMDAwMDAwLAorKyAgUFBDX2NtcGx3ID0gMHg3QzAw MDA0MCwKKysgIFBQQ19jbXBsd2kgPSAweDI4MDAwMDAwLAorKyAgUFBDX2NudGx6ZCA9IDB4N0Mw MDAwNzQsCisrICBQUENfY250bHp3ID0gMHg3QzAwMDAzNCwKKysgIFBQQ19jbnR0emQgPSAweDdD MDAwNDc0LAorKyAgUFBDX2NudHR6dyA9IDB4N0MwMDA0MzQsCisrICBQUENfY3JhbmRjID0gMHg0 QzAwMDEwMiwKKysgIFBQQ19jcm9yID0gMHg0QzAwMDM4MiwKKysgIFBQQ19jcm9yYyA9IDB4NEMw MDAzNDIsCisrICBQUENfZGl2ZCA9IDB4N0MwMDAzRDIsCisrICBQUENfZGl2ZHUgPSAweDdDMDAw MzkyLAorKyAgUFBDX2RpdncgPSAweDdDMDAwM0Q2LAorKyAgUFBDX2Rpdnd1ID0gMHg3QzAwMDM5 NiwKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgbW9kdWxvIGluc3RydWN0aW9ucy4KKysgIFBQQ19t b2RzZCA9IDB4N0MwMDA2MTIsCisrICBQUENfbW9kc3cgPSAweDdDMDAwNjE2LAorKyAgUFBDX21v ZHVkID0gMHg3QzAwMDIxMiwKKysgIFBQQ19tb2R1dyA9IDB4N0MwMDAyMTYsCisrICBQUENfZXh0 c2IgPSAweDdDMDAwNzc0LAorKyAgUFBDX2V4dHNoID0gMHg3QzAwMDczNCwKKysgIFBQQ19leHRz dyA9IDB4N0MwMDA3QjQsCisrICBQUENfZmFicyA9IDB4RkMwMDAyMTAsCisrICBQUENfZmFkZCA9 IDB4RkMwMDAwMkEsCisrICBQUENfZmFkZHMgPSAweEVDMDAwMDJBLAorKyAgUFBDX2ZjcHNnbiA9 IDB4RkMwMDAwMTAsCisrICBQUENfZmNmaWQgPSAweEZDMDAwNjlDLAorKyAgUFBDX2ZjZmlkcyA9 IDB4RUMwMDA2OUMsCisrICBQUENfZmNmaWR1ID0gMHhGQzAwMDc5QywKKysgIFBQQ19mY2ZpZHVz ID0gMHhFQzAwMDc5QywKKysgIFBQQ19mY21wdSA9IDB4RkMwMDAwMDAsCisrICBQUENfZmN0aWQg PSAweEZDMDAwNjVDLAorKyAgUFBDX2ZjdGlkeiA9IDB4RkMwMDA2NUUsCisrICBQUENfZmN0aWR1 eiA9IDB4RkMwMDA3NUUsCisrICBQUENfZmN0aXd6ID0gMHhGQzAwMDAxRSwKKysgIFBQQ19mZGl2 ID0gMHhGQzAwMDAyNCwKKysgIFBQQ19mZGl2cyA9IDB4RUMwMDAwMjQsCisrICBQUENfZm1yID0g MHhGQzAwMDA5MCwKKysgIFBQQ19mbXVsID0gMHhGQzAwMDAzMiwKKysgIFBQQ19mbXVscyA9IDB4 RUMwMDAwMzIsCisrICBQUENfZm5lZyA9IDB4RkMwMDAwNTAsCisrICBQUENfZnJpbSA9IDB4RkMw MDAzRDAsCisrICBQUENfZnJpcCA9IDB4RkMwMDAzOTAsCisrICBQUENfZnJpeiA9IDB4RkMwMDAz NTAsCisrICBQUENfZnJzcCA9IDB4RkMwMDAwMTgsCisrICBQUENfZnN1YiA9IDB4RkMwMDAwMjgs CisrICBQUENfZnN1YnMgPSAweEVDMDAwMDI4LAorKyAgUFBDX2ZzcXJ0ID0gMHhGQzAwMDAyQywK KysgIFBQQ19mc3FydHMgPSAweEVDMDAwMDJDLAorKyAgUFBDX2lzZWwgPSAweDdDMDAwMDFFLAor KyAgLy8gUE9XRVIxMCAoSVNBIDMuMSkuIFJUID0gKENSW0JJXT09MSkgPyAxIDogMC4gWE89Mzg0 IGF0IGJpdHMgMjEtMzAuCisrICBQUENfc2V0YmMgPSAweDdDMDAwMzAwLAorKyAgLy8gUE9XRVIx MCAoSVNBIDMuMSkuIFJUID0gKENSW0JJXT09MCkgPyAxIDogMC4gWE89NDE2LgorKyAgUFBDX3Nl dGJjciA9IDB4N0MwMDAzNDAsCisrICBQUENfbGJhcnggPSAweDdDMDAwMDY4LAorKyAgUFBDX2xi eiA9IDB4ODgwMDAwMDAsCisrICBQUENfbGJ6eCA9IDB4N0MwMDAwQUUsCisrICBQUENfbGQgPSAw eEU4MDAwMDAwLAorKyAgUFBDX2xkYXJ4ID0gMHg3QzAwMDBBOCwKKysgIFBQQ19sZHggPSAweDdD MDAwMDJBLAorKyAgUFBDX2xmZCA9IDB4QzgwMDAwMDAsCisrICBQUENfbGZkeCA9IDB4N0MwMDA0 QUUsCisrICBQUENfbGZpd2F4ID0gMHg3QzAwMDZBRSwKKysgIFBQQ19sZml3enggPSAweDdDMDAw NkVFLAorKyAgUFBDX2xmcyA9IDB4QzAwMDAwMDAsCisrICBQUENfbGZzeCA9IDB4N0MwMDA0MkUs CisrICBQUENfbGhhID0gMHhBODAwMDAwMCwKKysgIFBQQ19saGFyeCA9IDB4N0MwMDAwRTgsCisr ICBQUENfbGhheCA9IDB4N0MwMDAyQUUsCisrICBQUENfbGh6ID0gMHhBMDAwMDAwMCwKKysgIFBQ Q19saHp4ID0gMHg3QzAwMDIyRSwKKysgIFBQQ19sd2EgPSAweEU4MDAwMDAyLAorKyAgUFBDX2x3 YXJ4ID0gMHg3QzAwMDAyOCwKKysgIFBQQ19sd3ogPSAweDgwMDAwMDAwLAorKyAgLy8gWC1mb3Jt IHNpZ24tZXh0ZW5kaW5nIHdvcmQgbG9hZCAob3Bjb2RlIDMxLCBYTz0zNDEpLiBTaW5nbGUtaW5z bgorKyAgLy8gZXF1aXZhbGVudCBvZiBsd3p4ICsgZXh0c3cuCisrICBQUENfbHdheCA9IDB4N0Mw MDAyQUEsCisrICBQUENfbHd6eCA9IDB4N0MwMDAwMkUsCisrICBQUENfbWNyeHJ4ID0gMHg3QzAw MDQ4MCwKKysgIFBQQ19tY3JmcyA9IDB4RkMwMDAwODAsCisrICBQUENfbWZvY3JmID0gMHg3QzEw MDAyNiwKKysgIFBQQ19tZmZzID0gMHhGQzAwMDQ4RSwKKysgIFBQQ19tZnNwciA9IDB4N0MwMDAy QTYsCisrICBQUENfbWZ2c3JkID0gMHg3QzAwMDA2NiwKKysgIFBQQ19tdGNyZiA9IDB4N0MwMDAx MjAsCisrICBQUENfbXRmc2IwID0gMHhGQzAwMDA4QywKKysgIFBQQ19tdHZzcmQgPSAweDdDMDAw MTY2LAorKyAgLy8gUE9XRVI4KyAoSVNBIDIuMDcpLiBWU1JbWFRdLmR3WzBdID0gc2lnbl9leHRf NjQoUkFbMzI6NjNdKS4KKysgIC8vIFhPPTIxMSBhdCBiaXRzIDIxLTMwLiBDb21iaW5lcyBleHRz dyArIG10dnNyZCBpbnRvIG9uZSBpbnNuLgorKyAgUFBDX210dnNyd2EgPSAweDdDMDAwMUE2LAor KyAgUFBDX210dnNyd3MgPSAweDdDMDAwMzI2LAorKyAgUFBDX210dnNyd3ogPSAweDdDMDAwMUU2 LAorKyAgUFBDX210c3ByID0gMHg3QzAwMDNBNiwKKysgIFBQQ19tdWxoZCA9IDB4N0MwMDAwOTIs CisrICBQUENfbXVsaGR1ID0gMHg3QzAwMDAxMiwKKysgIFBQQ19tdWxod3UgPSAweDdDMDAwMDE2 LAorKyAgUFBDX211bGxpID0gMHgxQzAwMDAwMCwKKysgIFBQQ19tdWxsZCA9IDB4N0MwMDAxRDIs CisrICBQUENfbXVsbGRvID0gMHg3QzAwMDVEMiwKKysgIFBQQ19tdWxsdyA9IDB4N0MwMDAxRDYs CisrICBQUENfbmVnID0gMHg3QzAwMDBEMCwKKysgIFBQQ19ub3IgPSAweDdDMDAwMEY4LAorKyAg UFBDX29yXyA9IDB4N0MwMDAzNzgsCisrICBQUENfb3JpID0gMHg2MDAwMDAwMCwKKysgIFBQQ19v cmlzID0gMHg2NDAwMDAwMCwKKysgIFBQQ19wb3BjbnRiID0gMHg3QzAwMDBGNCwKKysgIFBQQ19w b3BjbnRkID0gMHg3QzAwMDNGNCwKKysgIFBQQ19wb3BjbnR3ID0gMHg3QzAwMDJGNCwKKysgIFBQ Q19icmQgPSAweDdDMDAwMTc2LCAgLy8gUE9XRVIxMDogYnl0ZS1yZXZlcnNlIGRvdWJsZXdvcmQg KFgtZm9ybSwgWE89MTg3KQorKyAgUFBDX2JyaCA9IDB4N0MwMDAxQjYsICAvLyBQT1dFUjEwOiBi eXRlLXJldmVyc2UgZWFjaCBoYWxmd29yZCAoWC1mb3JtLCBYTz0yMTkpCisrICBQUENfYnJ3ID0g MHg3QzAwMDEzNiwgIC8vIFBPV0VSMTA6IGJ5dGUtcmV2ZXJzZSBlYWNoIHdvcmQgICAgIChYLWZv cm0sIFhPPTE1NSkKKysgIFBQQ19ybGRjbCA9IDB4NzgwMDAwMTAsCisrICBQUENfcmxkaWNsID0g MHg3ODAwMDAwMCwKKysgIFBQQ19ybGRjciA9IDB4NzgwMDAwMTIsCisrICBQUENfcmxkaWNyID0g MHg3ODAwMDAwNCwKKysgIFBQQ19ybGRpbWkgPSAweDc4MDAwMDBDLAorKyAgUFBDX3Jsd2ltaSA9 IDB4NTAwMDAwMDAsCisrICBQUENfcmx3aW5tID0gMHg1NDAwMDAwMCwKKysgIFBQQ19ybHdubSA9 IDB4NUMwMDAwMDAsCisrICBQUENfc2xkID0gMHg3QzAwMDAzNiwKKysgIFBQQ19zbHcgPSAweDdD MDAwMDMwLAorKyAgUFBDX3NyYWQgPSAweDdDMDAwNjM0LAorKyAgUFBDX3NyYWRpID0gMHg3QzAw MDY3NCwKKysgIFBQQ19zcmF3ID0gMHg3QzAwMDYzMCwKKysgIFBQQ19zcmF3aSA9IDB4N0MwMDA2 NzAsCisrICBQUENfc3JkID0gMHg3QzAwMDQzNiwKKysgIFBQQ19zcncgPSAweDdDMDAwNDMwLAor KyAgUFBDX3N0YiA9IDB4OTgwMDAwMDAsCisrICBQUENfc3RiY3ggPSAweDdDMDAwNTZELAorKyAg UFBDX3N0YnggPSAweDdDMDAwMUFFLAorKyAgUFBDX3N0ZCA9IDB4RjgwMDAwMDAsCisrICBQUENf c3RkY3ggPSAweDdDMDAwMUFELAorKyAgUFBDX3N0ZHUgPSAweEY4MDAwMDAxLAorKyAgUFBDX3N0 ZHggPSAweDdDMDAwMTJBLAorKyAgUFBDX3N0ZmQgPSAweEQ4MDAwMDAwLAorKyAgUFBDX3N0ZmR1 ID0gMHhEQzAwMDAwMCwKKysgIFBQQ19zdGZkeCA9IDB4N0MwMDA1QUUsCisrICBQUENfc3RmcyA9 IDB4RDAwMDAwMDAsCisrICBQUENfc3Rmc3UgPSAweEQ0MDAwMDAwLAorKyAgUFBDX3N0ZnN4ID0g MHg3QzAwMDUyRSwKKysgIFBQQ19zdGggPSAweEIwMDAwMDAwLAorKyAgUFBDX3N0aGN4ID0gMHg3 QzAwMDVBRCwKKysgIFBQQ19zdGh4ID0gMHg3QzAwMDMyRSwKKysgIFBQQ19zdHcgPSAweDkwMDAw MDAwLAorKyAgUFBDX3N0d3ggPSAweDdDMDAwMTJFLAorKyAgUFBDX3N0d2JyeCA9IDB4N0MwMDA1 MkMsCisrICBQUENfc3R3Y3ggPSAweDdDMDAwMTJELAorKyAgUFBDX3N1YmYgPSAweDdDMDAwMDUw LAorKyAgUFBDX3N1YmZjID0gMHg3QzAwMDAxMCwKKysgIFBQQ19zdWJmZSA9IDB4N0MwMDAxMTAs CisrICBQUENfc3ViZmljID0gMHgyMDAwMDAwMCwKKysgIFBQQ19zeW5jID0gMHg3QzAwMDRBQywK KysgIC8vIGlzeW5jIOKAlCBleGVjdXRpb24gc3luY2hyb25pemF0aW9uLiBEaXNjYXJkcyBwcmVm ZXRjaGVkIGluc3RydWN0aW9ucyBhbmQKKysgIC8vIGZvcmNlcyBhIHJlZmV0Y2grcmVleGVjdXRl IG9mIGV2ZXJ5dGhpbmcgcGFzdCB0aGUgYmFycmllcjsgcHJldmVudHMKKysgIC8vIHNwZWN1bGF0 aXZlIGJ5cGFzcy4gVXNlZCBmb3IgU3BlY3RyZSB2MSBtaXRpZ2F0aW9uIGluIHNwZWN1bGF0aW9u QmFycmllci4KKysgIC8vIEVuY29kaW5nOiBieXRlcyBgMmMgMDEgMDAgNGNgIChMRSkgPSAweDRD MDAwMTJDLgorKyAgUFBDX2lzeW5jID0gMHg0QzAwMDEyQywKKysgIFBQQ190cmFwID0gMHg3RkUw MDAwOCwKKysgIFBQQ190dyA9IDB4N0MwMDAwMDgsCisrICBQUENfeG9yXyA9IDB4N0MwMDAyNzgs CisrICBQUENfeG9yaSA9IDB4NjgwMDAwMDAsCisrICBQUENfeG9yaXMgPSAweDZDMDAwMDAwLAor KyAgLy8gVk1YIHJlZ2lzdGVyIGxvYWQvc3RvcmUgKFgtZm9ybSwgb3Bjb2RlIDMxLCBYTz0xMDMv MjMxKS4KKysgIC8vIE9wZXJhdGUgb24gcmF3IFZSMC0zMSAodGhlIGx2eC9zdHZ4IG1uZW1vbmlj cyBwcmVkYXRlIFZTWCwgc28gdGhlCisrICAvLyBhc3NlbWJsZXIgZXhwb3NlcyB0aGVtIHdpdGgg YSB1aW50OF90IFZSIGluZGV4IHJhdGhlciB0aGFuIHZpYSB0aGUKKysgIC8vIFZTUi1uYW1lc3Bh Y2UgRmxvYXRSZWdpc3RlciBvdmVybG9hZHMgdXNlZCBmb3IgbHh2eC9zdHh2eC4pCisrICBQUENf bHZ4ID0gMHg3QzAwMDBDRSwKKysgIFBQQ19seHZkMnggPSAweDdDMDAwNjk4LAorKyAgUFBDX2x4 dnggPSAweDdDMDAwMjE4LAorKyAgUFBDX21mdnNybGQgPSAweDdDMDAwMjY2LAorKyAgUFBDX210 dnNyZGQgPSAweDdDMDAwMzY2LAorKyAgUFBDX3N0dnggPSAweDdDMDAwMUNFLAorKyAgUFBDX3N0 eHZkMnggPSAweDdDMDAwNzk4LAorKyAgUFBDX3N0eHZ4ID0gMHg3QzAwMDMxOCwKKysgIFBQQ192 YWRkdWJtID0gMHgxMDAwMDAwMCwKKysgIFBQQ192YXZndWIgPSAweDEwMDAwNDAyLAorKyAgUFBD X3Zhdmd1aCA9IDB4MTAwMDA0NDIsCisrICBQUENfdmNtcGVxdWIgPSAweDEwMDAwMDA2LAorKyAg UFBDX3ZjbXBlcXVoID0gMHgxMDAwMDA0NiwKKysgIFBQQ192Y21wZXF1dyA9IDB4MTAwMDAwODYs CisrICBQUENfdmNtcGVxdWQgPSAweDEwMDAwMEM3LAorKyAgUFBDX3ZjbXBndHNiID0gMHgxMDAw MDMwNiwKKysgIFBQQ192Y21wZ3RzaCA9IDB4MTAwMDAzNDYsCisrICBQUENfdmNtcGd0c3cgPSAw eDEwMDAwMzg2LAorKyAgUFBDX3ZjbXBndHNkID0gMHgxMDAwMDNDNywKKysgIFBQQ192Y21wZ3R1 YiA9IDB4MTAwMDAyMDYsCisrICBQUENfdmNtcGd0dWggPSAweDEwMDAwMjQ2LAorKyAgUFBDX3Zj bXBndHV3ID0gMHgxMDAwMDI4NiwKKysgIFBQQ192Y21wZ3R1ZCA9IDB4MTAwMDAyQzcsCisrICBQ UENfdmNtcG5lYiA9IDB4MTAwMDAwMDcsICAvLyBQT1dFUjkgKElTQSAzLjApCisrICBQUENfdmNt cG5laCA9IDB4MTAwMDAwNDcsICAvLyBQT1dFUjkKKysgIFBQQ192Y21wbmV3ID0gMHgxMDAwMDA4 NywgIC8vIFBPV0VSOQorKyAgUFBDX3ZhZGR1aG0gPSAweDEwMDAwMDQwLAorKyAgUFBDX3ZhZGR1 d20gPSAweDEwMDAwMDgwLAorKyAgUFBDX3ZhZGR1ZG0gPSAweDEwMDAwMEMwLAorKyAgUFBDX3Zh ZGR1YnMgPSAweDEwMDAwMjAwLAorKyAgUFBDX3ZhZGR1aHMgPSAweDEwMDAwMjQwLAorKyAgUFBD X3ZhZGRzYnMgPSAweDEwMDAwMzAwLAorKyAgUFBDX3ZhZGRzaHMgPSAweDEwMDAwMzQwLAorKyAg UFBDX3ZtYXhzYiA9IDB4MTAwMDAxMDIsCisrICBQUENfdm1heHNoID0gMHgxMDAwMDE0MiwKKysg IFBQQ192bWF4c3cgPSAweDEwMDAwMTgyLAorKyAgUFBDX3ZtYXhzZCA9IDB4MTAwMDAxQzIsCisr ICBQUENfdm1heHViID0gMHgxMDAwMDAwMiwKKysgIFBQQ192bWF4dWggPSAweDEwMDAwMDQyLAor KyAgUFBDX3ZtYXh1dyA9IDB4MTAwMDAwODIsCisrICBQUENfdm1ocmFkZHNocyA9IDB4MTAwMDAw MjEsCisrICBQUENfdm1yZ2hiID0gMHgxMDAwMDAwQywKKysgIFBQQ192bXJnaGggPSAweDEwMDAw MDRDLAorKyAgUFBDX3ZtcmdodyA9IDB4MTAwMDAwOEMsCisrICBQUENfdm1yZ2xiID0gMHgxMDAw MDEwQywKKysgIFBQQ192bXJnbGggPSAweDEwMDAwMTRDLAorKyAgUFBDX3ZtcmdsdyA9IDB4MTAw MDAxOEMsCisrICBQUENfdm1pbnNiID0gMHgxMDAwMDMwMiwKKysgIFBQQ192bWluc2ggPSAweDEw MDAwMzQyLAorKyAgUFBDX3ZtaW5zdyA9IDB4MTAwMDAzODIsCisrICBQUENfdm1pbnViID0gMHgx MDAwMDIwMiwKKysgIFBQQ192bWludWggPSAweDEwMDAwMjQyLAorKyAgUFBDX3ZtaW51dyA9IDB4 MTAwMDAyODIsCisrICAvLyBQT1dFUjkgKElTQSAzLjApIHBlci1sYW5lIGludGVnZXIgbmVnYXRl LiBWUkEgZmllbGQgY2FycmllcyB0aGUgc3Vib3AKKysgIC8vIGNvZGU6IDYgZm9yIHZuZWd3LCA3 IGZvciB2bmVnZC4gQmFzZSBYTyBpcyAweDYwMi4KKysgIFBQQ192bmVndyA9IDB4MTAwNjA2MDIs CisrICBQUENfdm5lZ2QgPSAweDEwMDcwNjAyLAorKyAgUFBDX3ZtbGFkZHVobSA9IDB4MTAwMDAw MjIsCisrICBQUENfdm11bHV3bSA9IDB4MTAwMDAwODksCisrICBQUENfdm11bGxkID0gMHgxMDAw MDFDOSwgICAgICAvLyBQT1dFUjEwIChYTz00NTcsIHZlY3RvciBpNjR4MiBtdWx0aXBseSBsb3cp CisrICBQUENfdm11bGVzYiA9IDB4MTAwMDAzMDgsCisrICBQUENfdm11bGV1YiA9IDB4MTAwMDAy MDgsCisrICBQUENfdm11bGVzaCA9IDB4MTAwMDAzNDgsCisrICBQUENfdm11bGV1aCA9IDB4MTAw MDAyNDgsCisrICBQUENfdm11bGVzdyA9IDB4MTAwMDAzODgsCisrICBQUENfdm11bGV1dyA9IDB4 MTAwMDAyODgsCisrICBQUENfdm11bG9zYiA9IDB4MTAwMDAxMDgsCisrICBQUENfdm11bG91YiA9 IDB4MTAwMDAwMDgsCisrICBQUENfdm11bG9zaCA9IDB4MTAwMDAxNDgsCisrICBQUENfdm11bG91 aCA9IDB4MTAwMDAwNDgsCisrICBQUENfdm11bG9zdyA9IDB4MTAwMDAxODgsCisrICBQUENfdm11 bG91dyA9IDB4MTAwMDAwODgsCisrICBQUENfdm1zdW1zaG0gPSAweDEwMDAwMDI4LAorKyAgUFBD X3Ztc3VtdWhtID0gMHgxMDAwMDAyNiwKKysgIFBQQ192cGVybSA9IDB4MTAwMDAwMkIsCisrICAv LyBWWC1mb3JtLCBvcGNvZGUgNCwgWE89MHg1NEMuIFBlci1ieXRlIGJpdC1wZXJtdXRlIG9mIGEg MTI4LWJpdCB2YWx1ZTsKKysgIC8vIHJlc3VsdCAxNi1iaXQgYml0bWFwIGxhbmRzIGluIGR3MCBs b3cgMTYgYml0cywgcmVjb3ZlcmFibGUgdmlhIG1mdnNyZC4KKysgIC8vIEF2YWlsYWJsZSBvbiBQ T1dFUjgrIChJU0EgMi4wNykuCisrICBQUENfdmJwZXJtcSA9IDB4MTAwMDA1NEMsCisrICAvLyBQ T1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgRXh0cmFjdCBNYXNrLiBWWC1mb3JtLCBvcGNvZGUgNCwg WE89MHg2NDIsCisrICAvLyB3aXRoIFVJTSBhdCBiaXRzIDExLi4xNSBzZWxlY3RpbmcgbGFuZSB3 aWR0aDogOD1ieXRlLCA5PWhhbGZ3b3JkLAorKyAgLy8gMTA9d29yZCwgMTE9ZG91Ymxld29yZC4g UlQgaXMgYSBHUFIgKGxvdyBOIGJpdHMgPSB3YXNtIGJpdG1hc2spLgorKyAgUFBDX3ZleHRyYWN0 Ym0gPSAweDEwMDgwNjQyLAorKyAgUFBDX3ZleHRyYWN0aG0gPSAweDEwMDkwNjQyLAorKyAgUFBD X3ZleHRyYWN0d20gPSAweDEwMEEwNjQyLAorKyAgUFBDX3ZleHRyYWN0ZG0gPSAweDEwMEIwNjQy LAorKyAgLy8gUE9XRVIxMCB2ZWN0b3IgaW5zZXJ0IGZyb20gR1BSIGF0IGltbWVkaWF0ZSBieXRl IG9mZnNldDoKKysgIC8vICAgdmluc3cgVlJULCBSQiwgVUlNICAgVlJUW1VJTSo4OlVJTSo4KzMx XSDihpAgUkJbMzI6NjNdCisrICAvLyAgIHZpbnNkIFZSVCwgUkIsIFVJTSAgIFZSVFtVSU0qODpV SU0qOCs2M10g4oaQIFJCWzA6NjNdCisrICAvLyBWWC1mb3JtLCBvcGNvZGUgNC4gUkIgYXQgYml0 cyAxNi4uMjAsIFVJTSBhdCBiaXRzIDExLi4xNS4KKysgIFBQQ192aW5zdyA9IDB4MTAwMDAwQ0Ys ICAvLyBQT1dFUjEwIChYTz0yMDcpCisrICBQUENfdmluc2QgPSAweDEwMDAwMUNGLCAgLy8gUE9X RVIxMCAoWE89NDYzKQorKyAgLy8gUE9XRVIxMCB2ZWN0b3IgaW5zZXJ0IGJ5dGUvaGFsZndvcmQg ZnJvbSBHUFIgd2l0aCByZWdpc3Rlci1zdXBwbGllZAorKyAgLy8gKHJpZ2h0LWluZGV4ZWQgPSBM RS1uYXR1cmFsKSBieXRlIHBvc2l0aW9uOgorKyAgLy8gICB2aW5zYnJ4IFZSVCwgUkEsIFJCICAg VlJULmJ5dGVbUkEgJiAweEZdICDihpAgUkIgJiAweEZGCisrICAvLyAgIHZpbnNocnggVlJULCBS QSwgUkIgICBWUlQuaHdvcmRbKFJBICYgMHhFKS8yXSDihpAgUkIgJiAweEZGRkYKKysgIC8vIFZY LWZvcm0sIG9wY29kZSA0LiBSQSBhdCBiaXRzIDE2Li4yMCwgUkIgYXQgYml0cyAxMS4uMTUuCisr ICBQUENfdmluc2JyeCA9IDB4MTAwMDAzMEYsICAvLyBQT1dFUjEwIChYTz03ODMpCisrICBQUENf dmluc2hyeCA9IDB4MTAwMDAzNEYsICAvLyBQT1dFUjEwIChYTz04NDcpCisrICAvLyBQT1dFUjkg KElTQSAzLjApIHZlY3RvciBpbnNlcnQgYnl0ZS9oYWxmd29yZCBmcm9tIFZSIGF0IGltbWVkaWF0 ZQorKyAgLy8gYnl0ZSBwb3NpdGlvbjoKKysgIC8vICAgdmluc2VydGIgVlJULCBWUkIsIFVJTSAg VlJULmJ5dGVbVUlNXSAgICAgIOKGkCBWUkIuYnl0ZVs3XSAgICAoQkUpCisrICAvLyAgIHZpbnNl cnRoIFZSVCwgVlJCLCBVSU0gIFZSVC5od29yZFtVSU0uLisxXSDihpAgVlJCLmJ5dGVbNi4uN10g KEJFKQorKyAgLy8gVi1mb3JtLCBvcGNvZGUgNC4gVlJCIGF0IGJpdHMgMTEuLjE1LCBVSU0gYXQg Yml0cyAxNi4uMjAuIFNpbWQxMjgKKysgIC8vIGxpdmVzIGluIFZTUjMyLTYzICg9IFZSMC0zMSks IHNvIHRoZSBWLWZvcm0gVlJUIGZpZWxkIGFkZHJlc3NlcyBvdXIKKysgIC8vIFNpbWQxMjggc3Rv cmFnZSB2aWEgYGVuY29kaW5nKCkgJiAzMWAuCisrICBQUENfdmluc2VydGIgPSAweDEwMDAwMzBE LCAgLy8gUE9XRVI5IChYTz03ODEpCisrICBQUENfdmluc2VydGggPSAweDEwMDAwMzRELCAgLy8g UE9XRVI5IChYTz04NDUpCisrICBQUENfdmV4dHJhY3R1YiA9IDB4MTAwMDAyMEQsICAvLyBQT1dF UjkgKFhPPTUyNSkKKysgIFBQQ192ZXh0cmFjdHVoID0gMHgxMDAwMDI0RCwgIC8vIFBPV0VSOSAo WE89NTg5KQorKyAgUFBDX3ZzcGx0aXNiID0gMHgxMDAwMDMwQywgICAgLy8gUE9XRVI3KyAoWE89 NzgwLCBzcGxhdCA1LWJpdCBTSU1NIHRvIGFsbCAxNiBieXRlIGxhbmVzKQorKyAgUFBDX3ZzcGx0 aXNoID0gMHgxMDAwMDM0QywgICAgLy8gUE9XRVI3KyAoWE89ODQ0LCBzcGxhdCA1LWJpdCBTSU1N IHRvIGFsbCA4IGkxNiBsYW5lcykKKysgIFBQQ192c3BsdGlzdyA9IDB4MTAwMDAzOEMsICAgIC8v IFBPV0VSNysgKFhPPTkwOCwgc3BsYXQgNS1iaXQgU0lNTSB0byBhbGwgNCBpMzIgbGFuZXMpCisr ICBQUENfdnBvcGNudGIgPSAweDEwMDAwNzAzLAorKyAgUFBDX3ZzbGIgPSAweDEwMDAwMTA0LAor KyAgUFBDX3ZzbGQgPSAweDEwMDAwNUM0LAorKyAgUFBDX3ZzbGRvaSA9IDB4MTAwMDAwMkMsCisr ICBQUENfdnNsaCA9IDB4MTAwMDAxNDQsCisrICBQUENfdnNsbyA9IDB4MTAwMDA0MEMsCisrICBQ UENfdnNsdyA9IDB4MTAwMDAxODQsCisrICBQUENfdnNwbHRiID0gMHgxMDAwMDIwQywKKysgIFBQ Q192c3BsdGggPSAweDEwMDAwMjRDLAorKyAgUFBDX3ZzcmFiID0gMHgxMDAwMDMwNCwKKysgIFBQ Q192c3JhZCA9IDB4MTAwMDAzQzQsCisrICBQUENfdnNyYWggPSAweDEwMDAwMzQ0LAorKyAgUFBD X3ZzcmF3ID0gMHgxMDAwMDM4NCwKKysgIFBQQ192c3JiID0gMHgxMDAwMDIwNCwKKysgIFBQQ192 c3JkID0gMHgxMDAwMDZDNCwKKysgIFBQQ192c3JoID0gMHgxMDAwMDI0NCwKKysgIFBQQ192c3Jv ID0gMHgxMDAwMDQ0QywKKysgIFBQQ192c3J3ID0gMHgxMDAwMDI4NCwKKysgIFBQQ192cGtzaHNz ID0gMHgxMDAwMDE4RSwKKysgIFBQQ192cGtzaHVzID0gMHgxMDAwMDEwRSwKKysgIFBQQ192cGtz d3NzID0gMHgxMDAwMDFDRSwKKysgIFBQQ192cGtzd3VzID0gMHgxMDAwMDE0RSwKKysgIFBQQ192 dXBraHNiID0gMHgxMDAwMDIwRSwKKysgIFBQQ192dXBraHNoID0gMHgxMDAwMDI0RSwKKysgIFBQ Q192dXBraHN3ID0gMHgxMDAwMDY0RSwKKysgIFBQQ192dXBrbHNiID0gMHgxMDAwMDI4RSwKKysg IFBQQ192dXBrbHNoID0gMHgxMDAwMDJDRSwKKysgIFBQQ192dXBrbHN3ID0gMHgxMDAwMDZDRSwK KysgIFBQQ192c3VidWJtID0gMHgxMDAwMDQwMCwKKysgIFBQQ192c3VidWhtID0gMHgxMDAwMDQ0 MCwKKysgIFBQQ192c3VidXdtID0gMHgxMDAwMDQ4MCwKKysgIFBQQ192c3VidWRtID0gMHgxMDAw MDRDMCwKKysgIFBQQ192c3VidWJzID0gMHgxMDAwMDYwMCwKKysgIFBQQ192c3VidWhzID0gMHgx MDAwMDY0MCwKKysgIFBQQ192c3Vic2JzID0gMHgxMDAwMDcwMCwKKysgIFBQQ192c3Vic2hzID0g MHgxMDAwMDc0MCwKKysgIFBQQ194c2N2ZHBzcG4gPSAweEYwMDAwNDJDLAorKyAgUFBDX3hzY3Zz cGRwbiA9IDB4RjAwMDA1MkMsCisrICAvLyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBGUDE2IGNv bnZlcnNpb25zLCBYWDItZm9ybS4gVGhlIFVJTQorKyAgLy8gZGlzYW1iaWd1YXRvciBpcyBiYWtl ZCBpbnRvIHRoZSBjb25zdGFudCAoeHNjdmRwaHA9MTcsIHhzY3ZocGRwPTE2KS4KKysgIC8vIEVu Y29kaW5ncyBjcm9zcy1jaGVja2VkIGFnYWluc3QgYmludXRpbHMgd2l0aCBgLm1hY2hpbmUgcG93 ZXI5YC4KKysgIFBQQ194c2N2ZHBocCA9IDB4RjAxMTA1NkMsCisrICBQUENfeHNjdmhwZHAgPSAw eEYwMTAwNTZDLAorKyAgLy8gUE9XRVI5IChJU0EgMy4wKSBzY2FsYXIgVlNYIGV4dHJhY3QgYmlh c2VkIGV4cG9uZW50LCBYWDItZm9ybS4KKysgIC8vIFhULmR3b3JkWzBdID0gKHplcm8gfHwgYmlh c2VkX2V4cF8xMWJpdCksIFhULmR3b3JkWzFdID0gMC4gWE89MzQ3CisrICAvLyAoc2hhcmVzIFhP IHdpdGggeHNjdntkcCxocH17aHAsZHB9IOKAlCBkaXNhbWJpZ3VhdGVkIGJ5IGJpdHMgMTYtMjA9 MCkuCisrICAvLyBFbmNvZGluZyBjcm9zcy1jaGVja2VkIGFnYWluc3QgYmludXRpbHMgd2l0aCBg Lm1hY2hpbmUgcG93ZXI5YC4KKysgIFBQQ194c3hleHBkcCA9IDB4RjAwMDA1NkMsCisrICAvLyBQ T1dFUjkgKElTQSAzLjApIHNjYWxhciBGUDE2IGxvYWQvc3RvcmUsIFgtZm9ybSAob3Bjb2RlIDMx KS4KKysgIC8vIGx4c2loenggemVyby1leHRlbmRzOyBzdHhzaWh4IHdyaXRlcyAxNiBiaXRzIGZy b20gVlNSIGR3b3JkIDAKKysgIC8vIHdvcmQgMSdzIGxvdyBoYWxmd29yZC4KKysgIFBQQ19seHNp aHp4ID0gMHg3QzAwMDY1QSwKKysgIFBQQ19zdHhzaWh4ID0gMHg3QzAwMDc1QSwKKysgIC8vIFBP V0VSOSBzY2FsYXIgVlNYIG1heC9taW4gd2l0aCBKYXZhL0phdmFTY3JpcHQgc2VtYW50aWNzIOKA lCBoYW5kbGVzCisrICAvLyDCsTAgYW5kIE5hTiBpZGVudGljYWxseSB0byBNYXRoLm1heC9NYXRo Lm1pbiBpbiBFQ01BLTI2MiAoY292ZXJzCisrICAvLyAxOSBjb3JuZXIgY2FzZXMgYWdhaW5zdCB0 aGUgSlMgc2hlbGwpLgorKyAgLy8gWFgzLWZvcm0sIHByaW1hcnkgb3Bjb2RlIDYwLCBYTz0xNDQg KG1heCkgLyBYTz0xNTIgKG1pbikuCisrICBQUENfeHNtYXhqZHAgPSAweEYwMDAwNDgwLAorKyAg UFBDX3hzbWluamRwID0gMHhGMDAwMDRDMCwKKysgIFBQQ194eGJyZCA9IDB4RjAxNzA3NkMsCisr ICBQUENfeHZhYnNkcCA9IDB4RjAwMDA3NjQsCisrICBQUENfeHZhYnNzcCA9IDB4RjAwMDA2NjQs CisrICBQUENfeHZhZGRkcCA9IDB4RjAwMDAzMDAsCisrICBQUENfeHZhZGRzcCA9IDB4RjAwMDAy MDAsCisrICBQUENfeHZjbXBlcWRwID0gMHhGMDAwMDMxOCwKKysgIFBQQ194dmNtcGVxc3AgPSAw eEYwMDAwMjE4LAorKyAgUFBDX3h2Y21wZ2VkcCA9IDB4RjAwMDAzOTgsCisrICBQUENfeHZjbXBn ZXNwID0gMHhGMDAwMDI5OCwKKysgIFBQQ194dmNtcGd0ZHAgPSAweEYwMDAwMzU4LAorKyAgUFBD X3h2Y21wZ3RzcCA9IDB4RjAwMDAyNTgsCisrICBQUENfeHZjdmRwc3AgPSAweEYwMDAwNjI0LAor KyAgUFBDX3h2Y3ZkcHN4d3MgPSAweEYwMDAwMzYwLAorKyAgUFBDX3h2Y3ZkcHV4d3MgPSAweEYw MDAwMzIwLAorKyAgUFBDX3h2Y3ZzcGRwID0gMHhGMDAwMDcyNCwKKysgIFBQQ194dmN2c3BzeHdz ID0gMHhGMDAwMDI2MCwKKysgIFBQQ194dmN2c3B1eHdzID0gMHhGMDAwMDIyMCwKKysgIFBQQ194 dmN2c3h3ZHAgPSAweEYwMDAwM0UwLAorKyAgUFBDX3h2Y3ZzeHdzcCA9IDB4RjAwMDAyRTAsCisr ICBQUENfeHZjdnV4d2RwID0gMHhGMDAwMDNBMCwKKysgIFBQQ194dmN2dXh3c3AgPSAweEYwMDAw MkEwLAorKyAgUFBDX3h2ZGl2ZHAgPSAweEYwMDAwM0MwLAorKyAgUFBDX3h2ZGl2c3AgPSAweEYw MDAwMkMwLAorKyAgUFBDX3h2bWFkZGFkcCA9IDB4RjAwMDAzMDgsCisrICBQUENfeHZtYWRkYXNw ID0gMHhGMDAwMDIwOCwKKysgIFBQQ194dm1heGRwID0gMHhGMDAwMDcwMCwKKysgIFBQQ194dm1h eHNwID0gMHhGMDAwMDYwMCwKKysgIFBQQ194dm1pbmRwID0gMHhGMDAwMDc0MCwKKysgIFBQQ194 dm1pbnNwID0gMHhGMDAwMDY0MCwKKysgIFBQQ194dm11bGRwID0gMHhGMDAwMDM4MCwKKysgIFBQ Q194dm11bHNwID0gMHhGMDAwMDI4MCwKKysgIFBQQ194dm5lZ2RwID0gMHhGMDAwMDdFNCwKKysg IFBQQ194dm5tc3ViYWRwID0gMHhGMDAwMDc4OCwKKysgIFBQQ194dm5tc3ViYXNwID0gMHhGMDAw MDY4OCwKKysgIFBQQ194dm5lZ3NwID0gMHhGMDAwMDZFNCwKKysgIFBQQ194dnJkcGljID0gMHhG MDAwMDNBQywKKysgIFBQQ194dnJkcGltID0gMHhGMDAwMDNFNCwKKysgIFBQQ194dnJkcGlwID0g MHhGMDAwMDNBNCwKKysgIFBQQ194dnJkcGl6ID0gMHhGMDAwMDM2NCwKKysgIFBQQ194dnJzcGlj ID0gMHhGMDAwMDJBQywKKysgIFBQQ194dnJzcGltID0gMHhGMDAwMDJFNCwKKysgIFBQQ194dnJz cGlwID0gMHhGMDAwMDJBNCwKKysgIFBQQ194dnJzcGl6ID0gMHhGMDAwMDI2NCwKKysgIFBQQ194 dnNxcnRkcCA9IDB4RjAwMDAzMkMsCisrICBQUENfeHZzcXJ0c3AgPSAweEYwMDAwMjJDLAorKyAg UFBDX3h2c3ViZHAgPSAweEYwMDAwMzQwLAorKyAgUFBDX3h2c3Vic3AgPSAweEYwMDAwMjQwLAor KyAgUFBDX3h4ZXh0cmFjdHV3ID0gMHhGMDAwMDI5NCwKKysgIFBQQ194eGluc2VydHcgPSAweEYw MDAwMkQ0LAorKyAgUFBDX3h4bGFuZCA9IDB4RjAwMDA0MTAsCisrICBQUENfeHhsYW5kYyA9IDB4 RjAwMDA0NTAsCisrICBQUENfeHhsbm9yID0gMHhGMDAwMDUxMCwKKysgIFBQQ194eGxvciA9IDB4 RjAwMDA0OTAsCisrICBQUENfeHhseG9yID0gMHhGMDAwMDREMCwKKysgIFBQQ194eHBlcm1kaSA9 IDB4RjAwMDAwNTAsCisrICBQUENfeHhzZWwgPSAweEYwMDAwMDMwLAorKyAgUFBDX3h4c3BsdGli ID0gMHhGMDAwMDJEMCwgIC8vIFBPV0VSOSAoSVNBIDMuMCk6IFhYMS1mb3JtLCBubyBSYworKyAg UFBDX3h4c3BsdHcgPSAweEYwMDAwMjkwLAorKworKyAgLy8gU2ltcGxpZmllZCBtbmVtb25pY3Mu CisrICBQUENfbXIgPSBQUENfb3JfLAorKyAgUFBDX25vdCA9IFBQQ19ub3IsCisrICBQUENfbm9w ID0gUFBDX29yaSwKKysgIFBQQ19sd3N5bmMgPSBQUENfc3luYyB8ICgxIDw8IDIxKSwKKysKKysg IFBQQ19NQUpPUl9PUENPREVfTUFTSyA9IDB4RkMwMDAwMDAKKyt9OworKworK3N0YXRpYyBjb25z dCB1aW50MzJfdCBOb3BJbnN0ID0gKHVpbnQzMl90KVBQQ19ub3A7Cisrc3RhdGljIGNvbnN0IHVp bnQzMl90IFBQQ19TVEFOWkFfTEVOR1RIID0gMTY7CisrCisrY2xhc3MgSW5zdHJ1Y3Rpb247Cisr Y2xhc3MgSW5zdFJlZzsKKytjbGFzcyBJbnN0SW1tOworK2NsYXNzIEJPZmZJbW0xNjsKKytjbGFz cyBKT2ZmSW1tMjY7CisrCisrLy8gUFBDNjQgYmFzZSBpbnN0cnVjdGlvbiB0eXBlOiBhIHNpbmds ZSAzMi1iaXQgd29yZC4KKytjbGFzcyBJbnN0cnVjdGlvbiB7CisrIHByb3RlY3RlZDoKKysgIHVp bnQzMl90IGRhdGE7CisrCisrIHB1YmxpYzoKKysgIGV4cGxpY2l0IEluc3RydWN0aW9uKHVpbnQz Ml90IGRhdGFfKSA6IGRhdGEoZGF0YV8pIHt9CisrICBleHBsaWNpdCBJbnN0cnVjdGlvbihQUENP cGNvZGVzIG9wKSA6IGRhdGEoKHVpbnQzMl90KW9wKSB7fQorKworKyAgdWludDMyX3QgZW5jb2Rl KCkgY29uc3QgeyByZXR1cm4gZGF0YTsgfQorKworKyAgdm9pZCBtYWtlTm9wKCkgeyBkYXRhID0g Tm9wSW5zdDsgfQorKyAgdm9pZCBtYWtlT3BfbXRjdHIoUmVnaXN0ZXIgcikgeworKyAgICBkYXRh ID0gUFBDX210c3ByIHwgKCh1aW50MzJfdClyLmNvZGUoKSkgPDwgMjEgfCBQUENfU1BSKDkpOwor KyAgfQorKyAgdm9pZCBtYWtlT3BfYmN0cih1aW50MzJfdCBsaW5rQml0ID0gMCkgeyBkYXRhID0g UFBDX2JjdHIgfCBsaW5rQml0OyB9CisrCisrICB2b2lkIHNldERhdGEodWludDMyX3QgZGF0YSkg eyB0aGlzLT5kYXRhID0gZGF0YTsgfQorKworKyAgY29uc3QgSW5zdHJ1Y3Rpb24mIG9wZXJhdG9y PShjb25zdCBJbnN0cnVjdGlvbiYgc3JjKSB7CisrICAgIGRhdGEgPSBzcmMuZGF0YTsKKysgICAg cmV0dXJuICp0aGlzOworKyAgfQorKworKyAgdWludDMyX3QgZXh0cmFjdEJpdCh1aW50MzJfdCBi aXQpIGNvbnN0IHsgcmV0dXJuIChlbmNvZGUoKSA+PiBiaXQpICYgMTsgfQorKyAgdWludDMyX3Qg ZXh0cmFjdEJpdEZpZWxkKHVpbnQzMl90IGhpLCB1aW50MzJfdCBsbykgY29uc3QgeworKyAgICBy ZXR1cm4gKGVuY29kZSgpID4+IGxvKSAmICgoMiA8PCAoaGkgLSBsbykpIC0gMSk7CisrICB9Cisr CisrICB1aW50MzJfdCBleHRyYWN0T3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gZGF0YSAmIFBQQ19N QUpPUl9PUENPREVfTUFTSzsgfQorKyAgYm9vbCBpc09wY29kZSh1aW50MzJfdCBvcCkgY29uc3Qg eworKyAgICByZXR1cm4gZXh0cmFjdE9wY29kZSgpID09IChvcCAmIFBQQ19NQUpPUl9PUENPREVf TUFTSyk7CisrICB9CisrCisrICB1aW50MzJfdCBleHRyYWN0UlQoKSBjb25zdCB7CisrICAgIHJl dHVybiBleHRyYWN0Qml0RmllbGQoUlRTaGlmdCArIFJUQml0cyAtIDEsIFJUU2hpZnQpOworKyAg fQorKyAgdWludDMyX3QgZXh0cmFjdFJBKCkgY29uc3QgeworKyAgICByZXR1cm4gZXh0cmFjdEJp dEZpZWxkKFJBU2hpZnQgKyBSQUJpdHMgLSAxLCBSQVNoaWZ0KTsKKysgIH0KKysgIHVpbnQzMl90 IGV4dHJhY3RSQigpIGNvbnN0IHsKKysgICAgcmV0dXJuIGV4dHJhY3RCaXRGaWVsZChSQlNoaWZ0 ICsgUkJCaXRzIC0gMSwgUkJTaGlmdCk7CisrICB9CisrICB1aW50MzJfdCBleHRyYWN0SW1tMTYo KSBjb25zdCB7IHJldHVybiBkYXRhICYgSW1tMTZNYXNrOyB9CisrCisrICBJbnN0cnVjdGlvbiog bmV4dCgpIHsgcmV0dXJuIHRoaXMgKyAxOyB9CisrCisrICBjb25zdCB1aW50MzJfdCogcmF3KCkg Y29uc3QgeyByZXR1cm4gJmRhdGE7IH0KKysgIHVpbnQzMl90IHNpemUoKSBjb25zdCB7IHJldHVy biA0OyB9CisrfTsKKysKKytzdGF0aWNfYXNzZXJ0KHNpemVvZihJbnN0cnVjdGlvbikgPT0gNCk7 CisrCisrY2xhc3MgSW5zdE5PUCA6IHB1YmxpYyBJbnN0cnVjdGlvbiB7CisrIHB1YmxpYzoKKysg IEluc3ROT1AoKSA6IEluc3RydWN0aW9uKE5vcEluc3QpIHt9CisrfTsKKysKKysvLyBSZWdpc3Rl ci1yZWdpc3Rlci1yZWdpc3RlciBpbnN0cnVjdGlvbiAoWC1mb3JtIGFuZCBYTy1mb3JtKS4KKytj bGFzcyBJbnN0UmVnIDogcHVibGljIEluc3RydWN0aW9uIHsKKysgcHVibGljOgorKyAgZXhwbGlj aXQgSW5zdFJlZyhQUENPcGNvZGVzIG9wKSA6IEluc3RydWN0aW9uKG9wKSB7fQorKyAgSW5zdFJl ZyhQUENPcGNvZGVzIG9wLCBSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKQor KyAgICAgIDogSW5zdHJ1Y3Rpb24oKHVpbnQzMl90KW9wIHwgUlQocnQpIHwgUkEocmEpIHwgUkIo cmIpKSB7fQorKyAgSW5zdFJlZyhQUENPcGNvZGVzIG9wLCBGbG9hdFJlZ2lzdGVyIGZydCwgRmxv YXRSZWdpc3RlciBmcmEsCisrICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZnJiKQorKyAgICAgIDog SW5zdHJ1Y3Rpb24oKHVpbnQzMl90KW9wIHwgUlQoZnJ0KSB8IFJBKGZyYSkgfCBSQihmcmIpKSB7 fQorKworKyAgdm9pZCBzZXRSVChSZWdpc3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5SVE1hc2sp IHwgUlQocik7IH0KKysgIHZvaWQgc2V0UkEoUmVnaXN0ZXIgcikgeyBkYXRhID0gKGRhdGEgJiB+ UkFNYXNrKSB8IFJBKHIpOyB9CisrICB2b2lkIHNldFJCKFJlZ2lzdGVyIHIpIHsgZGF0YSA9IChk YXRhICYgflJCTWFzaykgfCBSQihyKTsgfQorKworKyAgdm9pZCBzZXRJbW0xNih1aW50MzJfdCBp bW0pIHsKKysgICAgZGF0YSA9IChkYXRhICYgMHhGRkZGMDAwMCkgfCAoaW1tICYgSW1tMTZNYXNr KTsKKysgIH0KKysgIHVpbnQzMl90IGV4dHJhY3RJbW0xNlZhbHVlKCkgY29uc3QgeyByZXR1cm4g ZGF0YSAmIEltbTE2TWFzazsgfQorK307CisrCisrLy8gUmVnaXN0ZXItaW1tZWRpYXRlIGluc3Ry dWN0aW9uIChELWZvcm0pLgorKy8vIEJpdHMgMjEtMjUgaG9sZCBSVCAobG9hZHMsIGFkZGkpIG9y IFJTIChzdG9yZXMsIG9yaSkuIEJvdGggZW5jb2RlIGlkZW50aWNhbGx5CisrLy8gc2luY2UgUlQg YW5kIFJTIG9jY3VweSB0aGUgc2FtZSBmaWVsZDsgdGhlIGNhbGxlciBzaW1wbHkgcGFzc2VzIHRo ZSByaWdodAorKy8vIHJlZ2lzdGVyLgorK2NsYXNzIEluc3RJbW0gOiBwdWJsaWMgSW5zdHJ1Y3Rp b24geworKyBwdWJsaWM6CisrICBleHBsaWNpdCBJbnN0SW1tKFBQQ09wY29kZXMgb3ApIDogSW5z dHJ1Y3Rpb24ob3ApIHt9CisrICBJbnN0SW1tKFBQQ09wY29kZXMgb3AsIFJlZ2lzdGVyIHJ0LCBS ZWdpc3RlciByYSwgdWludDMyX3QgaW1tMTYpCisrICAgICAgOiBJbnN0cnVjdGlvbigodWludDMy X3Qpb3AgfCBSVChydCkgfCBSQShyYSkgfCAoaW1tMTYgJiBJbW0xNk1hc2spKSB7fQorKworKyAg dm9pZCBzZXRSVChSZWdpc3RlciByKSB7IGRhdGEgPSAoZGF0YSAmIH5SVE1hc2spIHwgUlQocik7 IH0KKysgIHZvaWQgc2V0UkEoUmVnaXN0ZXIgcikgeyBkYXRhID0gKGRhdGEgJiB+UkFNYXNrKSB8 IFJBKHIpOyB9CisrCisrICB2b2lkIHNldEltbTE2KHVpbnQzMl90IGltbSkgeworKyAgICBkYXRh ID0gKGRhdGEgJiAweEZGRkYwMDAwKSB8IChpbW0gJiBJbW0xNk1hc2spOworKyAgfQorKyAgdm9p ZCBzZXRMb3dlclJlZyhSZWdpc3RlciBybCkgeworKyAgICBkYXRhID0gKGRhdGEgJiAweEZGRTBG RkZGKSB8ICgodWludDMyX3QpcmwuY29kZSgpIDw8IDE2KTsKKysgIH0KKysgIHVpbnQzMl90IGV4 dHJhY3RJbW0xNlZhbHVlKCkgY29uc3QgeyByZXR1cm4gZGF0YSAmIEltbTE2TWFzazsgfQorKwor KyAgLy8gRXh0cmFjdCB0aGUgVHJhcFRhZyBmcm9tIGEgdGFnZ2VkIHRyYXAgaW5zdHJ1Y3Rpb24g KHR3KS4KKysgIC8vIERlZmluZWQgaW4gQXNzZW1ibGVyLXBwYzY0LmNwcC4gUmV0dXJucyBhIFRy YXBUYWcgdmFsdWUgYXMgdWludDhfdAorKyAgLy8gYmVjYXVzZSBBc3NlbWJsZXI6OlRyYXBUYWcg aXMgbm90IHlldCBkZWZpbmVkIGF0IHRoaXMgcG9pbnQgaW4gdGhlIGhlYWRlci4KKysgIHVpbnQ4 X3QgdHJhcHRhZygpOworK307CisrCisrLy8gQSBCT2ZmSW1tMTYgaXMgYSAxNi1iaXQgc2lnbmVk IGJyYW5jaCBvZmZzZXQgZm9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzCisrLy8gKGJjLWZvcm0gaW5z dHJ1Y3Rpb25zKS4gIFRoZSBvZmZzZXQgaXMgc3RvcmVkIGluIGJpdHMgMi4uMTUgYW5kIGlzCisr Ly8gNC1ieXRlIGFsaWduZWQsIGdpdmluZyBhIHJhbmdlIG9mICsvLTMyIEtCLgorK2NsYXNzIEJP ZmZJbW0xNiB7CisrICBpbnQzMl90IGRhdGE7CisrCisrIHB1YmxpYzoKKysgIHVpbnQzMl90IGVu Y29kZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaXNJbnZhbGlkKCkpOworKyAgICByZXR1 cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRhdGEpICYgMHhGRkZDOworKyAgfQorKyAgaW50MzJf dCBkZWNvZGUoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQoIWlzSW52YWxpZCgpKTsKKysgICAg cmV0dXJuIGRhdGE7CisrICB9CisrCisrICBleHBsaWNpdCBCT2ZmSW1tMTYoaW50IG9mZnNldCkg OiBkYXRhKG9mZnNldCkgeworKyAgICBNT1pfQVNTRVJUKChvZmZzZXQgJiAweDMpID09IDApOwor KyAgICBNT1pfQVNTRVJUKElzSW5SYW5nZShvZmZzZXQpKTsKKysgIH0KKysgIHN0YXRpYyBib29s IElzSW5SYW5nZShpbnQgb2Zmc2V0KSB7CisrICAgIHJldHVybiBvZmZzZXQgPj0gLTMyNzY4ICYm IG9mZnNldCA8PSAzMjc2NDsKKysgIH0KKysKKysgIHN0YXRpYyBjb25zdCBpbnQzMl90IElOVkFM SUQgPSAweDAwMDIwMDAwOworKyAgQk9mZkltbTE2KCkgOiBkYXRhKElOVkFMSUQpIHt9CisrCisr ICBib29sIGlzSW52YWxpZCgpIGNvbnN0IHsgcmV0dXJuIGRhdGEgPT0gSU5WQUxJRDsgfQorKwor KyAgSW5zdHJ1Y3Rpb24qIGdldERlc3QoSW5zdHJ1Y3Rpb24qIHNyYykgY29uc3Q7CisrCisrICBl eHBsaWNpdCBCT2ZmSW1tMTYoSW5zdEltbSBpbnN0KTsKKyt9OworKworKy8vIEEgSk9mZkltbTI2 IGlzIGEgMjYtYml0IHNpZ25lZCBicmFuY2ggb2Zmc2V0IGZvciB1bmNvbmRpdGlvbmFsIGJyYW5j aGVzCisrLy8gKGIvYmwgaW5zdHJ1Y3Rpb25zKS4gIEJpdHMgMi4uMjUgZW5jb2RlIHRoZSBvZmZz ZXQsIDQtYnl0ZSBhbGlnbmVkLAorKy8vIGdpdmluZyBhIHJhbmdlIG9mICsvLTMyIE1CLgorK2Ns YXNzIEpPZmZJbW0yNiB7CisrICBpbnQzMl90IGRhdGE7CisrCisrIHB1YmxpYzoKKysgIHVpbnQz Ml90IGVuY29kZSgpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCghaXNJbnZhbGlkKCkpOworKyAg ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRhdGEpICYgMHgwM0ZGRkZGQzsKKysgIH0K KysgIGludDMyX3QgZGVjb2RlKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKCFpc0ludmFsaWQo KSk7CisrICAgIHJldHVybiBkYXRhOworKyAgfQorKworKyAgZXhwbGljaXQgSk9mZkltbTI2KGlu dCBvZmZzZXQpIDogZGF0YShvZmZzZXQpIHsKKysgICAgTU9aX0FTU0VSVCgob2Zmc2V0ICYgMHgz KSA9PSAwKTsKKysgICAgTU9aX0FTU0VSVChJc0luUmFuZ2Uob2Zmc2V0KSk7CisrICB9CisrICBz dGF0aWMgYm9vbCBJc0luUmFuZ2UoaW50IG9mZnNldCkgeworKyAgICByZXR1cm4gb2Zmc2V0ID49 IC0zMzU1NDQzMiAmJiBvZmZzZXQgPD0gMzM1NTQ0Mjg7CisrICB9CisrCisrICBzdGF0aWMgY29u c3QgaW50MzJfdCBJTlZBTElEID0gMHgyMDAwMDAwMDsKKysgIEpPZmZJbW0yNigpIDogZGF0YShJ TlZBTElEKSB7fQorKworKyAgYm9vbCBpc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBkYXRhID09 IElOVkFMSUQ7IH0KKysKKysgIEluc3RydWN0aW9uKiBnZXREZXN0KEluc3RydWN0aW9uKiBzcmMp IGNvbnN0OworK307CisrCisrLy8gQSAxNi1iaXQgaW1tZWRpYXRlIHZhbHVlIHVzZWQgaW4gRC1m b3JtIGluc3RydWN0aW9ucy4KKytjbGFzcyBJbW0xNiB7CisrICBpbnQzMl90IHZhbHVlOworKwor KyBwdWJsaWM6CisrICBJbW0xNigpOworKyAgZXhwbGljaXQgSW1tMTYodWludDMyX3QgaW1tKSA6 IHZhbHVlKGltbSkge30KKysgIHVpbnQzMl90IGVuY29kZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVpbnQzMl90Pih2YWx1ZSkgJiAweGZmZmY7IH0KKysgIGludDMyX3QgZGVjb2RlU2ln bmVkKCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKysgIHVpbnQzMl90IGRlY29kZVVuc2lnbmVk KCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKysgIHN0YXRpYyBib29sIElzSW5TaWduZWRSYW5n ZShpbnQzMl90IGltbSkgeworKyAgICByZXR1cm4gaW1tID49IElOVDE2X01JTiAmJiBpbW0gPD0g SU5UMTZfTUFYOworKyAgfQorKyAgc3RhdGljIGJvb2wgSXNJblVuc2lnbmVkUmFuZ2UodWludDMy X3QgaW1tKSB7IHJldHVybiBpbW0gPD0gVUlOVDE2X01BWDsgfQorKyAgc3RhdGljIEltbTE2IExv d2VyKEltbTMyIGltbSkgeyByZXR1cm4gSW1tMTYoaW1tLnZhbHVlICYgMHhmZmZmKTsgfQorKyAg c3RhdGljIEltbTE2IFVwcGVyKEltbTMyIGltbSkgeyByZXR1cm4gSW1tMTYoKGltbS52YWx1ZSA+ PiAxNikgJiAweGZmZmYpOyB9CisrfTsKKysKKytjbGFzcyBJbW04IHsKKysgIHVpbnQ4X3QgdmFs dWU7CisrCisrIHB1YmxpYzoKKysgIEltbTgoKTsKKysgIGV4cGxpY2l0IEltbTgodWludDMyX3Qg aW1tKSA6IHZhbHVlKGltbSkge30KKysgIHVpbnQzMl90IGVuY29kZSh1aW50MzJfdCBzaGlmdCkg Y29uc3QgeyByZXR1cm4gdmFsdWUgPDwgc2hpZnQ7IH0KKysgIGludDMyX3QgZGVjb2RlU2lnbmVk KCkgY29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKysgIHVpbnQzMl90IGRlY29kZVVuc2lnbmVkKCkg Y29uc3QgeyByZXR1cm4gdmFsdWU7IH0KKysgIHN0YXRpYyBib29sIElzSW5TaWduZWRSYW5nZShp bnQzMl90IGltbSkgeworKyAgICByZXR1cm4gaW1tID49IElOVDhfTUlOICYmIGltbSA8PSBJTlQ4 X01BWDsKKysgIH0KKysgIHN0YXRpYyBib29sIElzSW5VbnNpZ25lZFJhbmdlKHVpbnQzMl90IGlt bSkgeyByZXR1cm4gaW1tIDw9IFVJTlQ4X01BWDsgfQorKyAgc3RhdGljIEltbTggTG93ZXIoSW1t MTYgaW1tKSB7IHJldHVybiBJbW04KGltbS5kZWNvZGVTaWduZWQoKSAmIDB4ZmYpOyB9CisrICBz dGF0aWMgSW1tOCBVcHBlcihJbW0xNiBpbW0pIHsKKysgICAgcmV0dXJuIEltbTgoKGltbS5kZWNv ZGVTaWduZWQoKSA+PiA4KSAmIDB4ZmYpOworKyAgfQorK307CisrCisrY2xhc3MgT3BlcmFuZCB7 CisrIHB1YmxpYzoKKysgIGVudW0gVGFnIHsgUkVHLCBGUkVHLCBNRU0gfTsKKysKKysgcHJpdmF0 ZToKKysgIFRhZyB0YWcgOiAzOworKyAgdWludDMyX3QgcmVnIDogNTsKKysgIGludDMyX3Qgb2Zm c2V0OworKworKyBwdWJsaWM6CisrICBNT1pfSU1QTElDSVQgT3BlcmFuZChSZWdpc3RlciByZWdf KSA6IHRhZyhSRUcpLCByZWcocmVnXy5jb2RlKCkpIHt9CisrCisrICBleHBsaWNpdCBPcGVyYW5k KEZsb2F0UmVnaXN0ZXIgZnJlZykgOiB0YWcoRlJFRyksIHJlZyhmcmVnLmNvZGUoKSkge30KKysK KysgIE9wZXJhbmQoUmVnaXN0ZXIgYmFzZSwgSW1tMzIgb2ZmKQorKyAgICAgIDogdGFnKE1FTSks IHJlZyhiYXNlLmNvZGUoKSksIG9mZnNldChvZmYudmFsdWUpIHt9CisrCisrICBPcGVyYW5kKFJl Z2lzdGVyIGJhc2UsIGludDMyX3Qgb2ZmKQorKyAgICAgIDogdGFnKE1FTSksIHJlZyhiYXNlLmNv ZGUoKSksIG9mZnNldChvZmYpIHt9CisrCisrICBleHBsaWNpdCBPcGVyYW5kKGNvbnN0IEFkZHJl c3MmIGFkZHIpCisrICAgICAgOiB0YWcoTUVNKSwgcmVnKGFkZHIuYmFzZS5jb2RlKCkpLCBvZmZz ZXQoYWRkci5vZmZzZXQpIHt9CisrCisrICBUYWcgZ2V0VGFnKCkgY29uc3QgeyByZXR1cm4gdGFn OyB9CisrCisrICBSZWdpc3RlciB0b1JlZygpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCh0YWcg PT0gUkVHKTsKKysgICAgcmV0dXJuIFJlZ2lzdGVyOjpGcm9tQ29kZShyZWcpOworKyAgfQorKwor KyAgRmxvYXRSZWdpc3RlciB0b0ZSZWcoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQodGFnID09 IEZSRUcpOworKyAgICByZXR1cm4gRmxvYXRSZWdpc3Rlcjo6RnJvbUNvZGUocmVnKTsKKysgIH0K KysKKysgIHZvaWQgdG9BZGRyKFJlZ2lzdGVyKiByLCBJbW0zMiogZGVzdCkgY29uc3QgeworKyAg ICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0pOworKyAgICAqciA9IFJlZ2lzdGVyOjpGcm9tQ29kZShy ZWcpOworKyAgICAqZGVzdCA9IEltbTMyKG9mZnNldCk7CisrICB9CisrICBBZGRyZXNzIHRvQWRk cmVzcygpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVCh0YWcgPT0gTUVNKTsKKysgICAgcmV0dXJu IEFkZHJlc3MoUmVnaXN0ZXI6OkZyb21Db2RlKHJlZyksIG9mZnNldCk7CisrICB9CisrICBpbnQz Ml90IGRpc3AoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQodGFnID09IE1FTSk7CisrICAgIHJl dHVybiBvZmZzZXQ7CisrICB9CisrCisrICBpbnQzMl90IGJhc2UoKSBjb25zdCB7CisrICAgIE1P Wl9BU1NFUlQodGFnID09IE1FTSk7CisrICAgIHJldHVybiByZWc7CisrICB9CisrICBSZWdpc3Rl ciBiYXNlUmVnKCkgY29uc3QgeworKyAgICBNT1pfQVNTRVJUKHRhZyA9PSBNRU0pOworKyAgICBy ZXR1cm4gUmVnaXN0ZXI6OkZyb21Db2RlKHJlZyk7CisrICB9CisrfTsKKysKKysvLyBCdWcgMjAz NDA2NCBjb2xsYXBzZWQgdGhlIHBlci1idWZmZXIgY29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24g b2YKKysvLyBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29scyBpbnRvIEFzc2VtYmxlckJ1 ZmZlclNldHRpbmdzLCBhbmQgcmVkdWNlZAorKy8vIHRoZSBydW50aW1lIGN0b3IgdG8gKHBvb2xN YXhPZmZzZXQsIG5vcEZpbGwpLiBpbnN0QnVmZmVyQWxpZ24gYW5kIHRoZQorKy8vIE51bVNob3J0 QnJhbmNoUmFuZ2VzIHRlbXBsYXRlIGFyZyB3ZXJlIGRyb3BwZWQ6IFBQQzY0IHByZXZpb3VzbHkg cGFzc2VkCisrLy8gaW5zdEJ1ZmZlckFsaWduPTggKHVudXNlZCBvbiB0aGlzIGJhY2tlbmQ7IHBv b2wgZW50cmllcyBhcmUgNC1ieXRlIGFsaWduZWQpCisrLy8gYW5kIE51bVNob3J0QnJhbmNoUmFu Z2VzPTAuCisrdXNpbmcgUFBDQnVmZmVyID0ganM6OmppdDo6QXNzZW1ibGVyQnVmZmVyV2l0aENv bnN0YW50UG9vbHM8CisrICAgIEluc3RydWN0aW9uLCBBc3NlbWJsZXIsCisrICAgIGpzOjpqaXQ6 OkFzc2VtYmxlckJ1ZmZlclNldHRpbmdzeworKyAgICAgICAgLmluc3RTaXplID0gNCwKKysgICAg ICAgIC5ndWFyZFNpemUgPSAxLAorKyAgICAgICAgLmhlYWRlclNpemUgPSAxLAorKyAgICAgICAg LnBjQmlhcyA9IDAsCisrICAgICAgICAuYWxpZ25GaWxsSW5zdCA9IE5vcEluc3QsCisrICAgICAg ICAubm9wRmlsbEluc3QgPSBOb3BJbnN0LAorKyAgICB9PjsKKysKKysvLyBJbmhlcml0cyBleGVj dXRhYmxlQ29weSgpIGFuZCBhcHBlbmRSYXdDb2RlKCkgZnJvbQorKy8vIEFzc2VtYmxlckJ1ZmZl cldpdGhDb25zdGFudFBvb2xzLCB3aGljaCBhc3NlcnQgcG9vbCBpcyBmbHVzaGVkLgorK2NsYXNz IFBQQ0J1ZmZlcldpdGhFeGVjdXRhYmxlQ29weSA6IHB1YmxpYyBQUENCdWZmZXIgeworKyBwdWJs aWM6CisrICBQUENCdWZmZXJXaXRoRXhlY3V0YWJsZUNvcHkoc2l6ZV90IHBvb2xNYXhPZmZzZXQs IHVuc2lnbmVkIG5vcEZpbGwpCisrICAgICAgOiBQUENCdWZmZXIocG9vbE1heE9mZnNldCwgbm9w RmlsbCkge30KKyt9OworKworK2NsYXNzIEFzc2VtYmxlciA6IHB1YmxpYyBBc3NlbWJsZXJTaGFy ZWQgeworKyBwdWJsaWM6CisrICAvLyBUcmFwIHRhZ3MgZW5jb2RlZCBpbiB0aGUgbG93IGJpdHMg b2YgYSB0cmFwIHdvcmQuCisrICAvLyBGcmVlQlNEIGFuZCBvdGhlcnMgbWF5IHVzZSByMSBpbiB0 aGVpciB0cmFwIHdvcmQsIHNvIGJpdCAwIGlzIGF2b2lkZWQuCisrICBlbnVtIFRyYXBUYWcgewor KyAgICBCVGFnID0gMiwKKysgICAgQkNUYWcgPSA0LAorKyAgICBDYWxsVGFnID0gNiwKKysgICAg RGVidWdUYWcwID0gMTAsCisrICAgIERlYnVnVGFnMSA9IDEyLAorKyAgICBEZWJ1Z1RhZzIgPSAx NAorKyAgfTsKKysKKysgIC8vIFBvb2wgbG9hZCB0eXBlcyBlbmNvZGVkIGluIGJpdHMgMjEtMjIg b2YgcG9vbCBoaW50IHdvcmRzLgorKyAgLy8gVXNlZCBieSBJbnNlcnRJbmRleEludG9UYWcgLyBQ YXRjaENvbnN0YW50UG9vbExvYWQuCisrICBlbnVtIFBvb2xMb2FkVHlwZSB7CisrICAgIFBvb2xM b2FkRlBSNjQgPSAxLCAgICAvLyBsZmQgZkQsIG9mZnNldChyQmFzZSkKKysgICAgUG9vbExvYWRT aW1kMTI4ID0gMiwgIC8vIGFkZGkgckJhc2UsIHJCYXNlLCBvZmZzZXQ7IGx4dnggdnNELCAwLCBy QmFzZQorKyAgICBQb29sTG9hZEZQUjMyID0gMyAgICAgLy8gbGZzIGZELCBvZmZzZXQockJhc2Up IOKAlCBhdXRvLWV4cGFuZHMgdG8gZG91YmxlCisrICB9OworKworKyAgZW51bSBCcmFuY2hCaXRz IHsKKysgICAgQnJhbmNoT25DbGVhciA9IDB4MDQsCisrICAgIEJyYW5jaE9uU2V0ID0gMHgwYywK KysgICAgQnJhbmNoT3B0aW9uTWFzayA9IDB4MGYsCisrICAgIEJyYW5jaE9wdGlvbkludmVydCA9 IDB4MDgKKysgIH07CisrCisrICAvLyBQUEMgY29uZGl0aW9uIGVuY29kaW5nLiBUaGUgdG9wIG55 YmJsZSBpcyB0aGUgb2Zmc2V0IHRvIHRoZSBDUiBmaWVsZAorKyAgLy8gKHRoZSB4IGluIEJJRio0 K3gpLCBhbmQgdGhlIGJvdHRvbSBpcyB0aGUgQk8gZmllbGQuCisrICAvLyBTeW50aGV0aWMgZmxh Z3Mgc2l0IGluIHRoZSBNU0IgYW5kIGFyZSBtYXNrZWQgb2ZmIGJlZm9yZSB1c2UuCisrICBlbnVt IENvbmRpdGlvbiB7CisrICAgIENvbmRpdGlvblVuc2lnbmVkID0gMHgxMDAsCisrICAgIENvbmRp dGlvblVuc2lnbmVkSGFuZGxlZCA9IDB4MmZmLAorKyAgICBDb25kaXRpb25aZXJvID0gMHg0MDAs CisrICAgIENvbmRpdGlvbk9ubHlYRVIgPSAweDIwMCwKKysgICAgQ29uZGl0aW9uWEVSQ0EgPSAw eDIzYywKKysgICAgQ29uZGl0aW9uWEVSTkNBID0gMHgyMzQsCisrICAgIENvbmRpdGlvblhFUk9W ID0gMHgyMWMsCisrCisrICAgIEVxdWFsID0gMHgyYywKKysgICAgTm90RXF1YWwgPSAweDI0LAor KyAgICBHcmVhdGVyVGhhbiA9IDB4MWMsCisrICAgIEdyZWF0ZXJUaGFuT3JFcXVhbCA9IDB4MDQs CisrICAgIExlc3NUaGFuID0gMHgwYywKKysgICAgTGVzc1RoYW5PckVxdWFsID0gMHgxNCwKKysK KysgICAgQWJvdmUgPSBHcmVhdGVyVGhhbiB8IENvbmRpdGlvblVuc2lnbmVkLAorKyAgICBBYm92 ZU9yRXF1YWwgPSBHcmVhdGVyVGhhbk9yRXF1YWwgfCBDb25kaXRpb25VbnNpZ25lZCwKKysgICAg QmVsb3cgPSBMZXNzVGhhbiB8IENvbmRpdGlvblVuc2lnbmVkLAorKyAgICBCZWxvd09yRXF1YWwg PSBMZXNzVGhhbk9yRXF1YWwgfCBDb25kaXRpb25VbnNpZ25lZCwKKysKKysgICAgU2lnbmVkID0g TGVzc1RoYW4gfCBDb25kaXRpb25aZXJvLAorKyAgICBOb3RTaWduZWQgPSBHcmVhdGVyVGhhbk9y RXF1YWwgfCBDb25kaXRpb25aZXJvLAorKyAgICBaZXJvID0gRXF1YWwgfCBDb25kaXRpb25aZXJv LAorKyAgICBOb25aZXJvID0gTm90RXF1YWwgfCBDb25kaXRpb25aZXJvLAorKworKyAgICBPdmVy ZmxvdyA9IENvbmRpdGlvblhFUk9WLAorKyAgICBOb3RPdmVyZmxvdyA9IENvbmRpdGlvbk9ubHlY RVIgfCBMZXNzVGhhbk9yRXF1YWwsCisrICAgIENhcnJ5U2V0ID0gQ29uZGl0aW9uWEVSQ0EsCisr ICAgIENhcnJ5Q2xlYXIgPSBDb25kaXRpb25YRVJOQ0EsCisrCisrICAgIEFsd2F5cyA9IDB4MWYs CisrICAgIFNPQml0ID0gMHgzYywKKysgICAgTlNPQml0ID0gMHgzNAorKyAgfTsKKysKKysgIGVu dW0gRG91YmxlQ29uZGl0aW9uIHsKKysgICAgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkID0gMHgx MDAsCisrICAgIERvdWJsZU9yZGVyZWQgPSAweDM0LAorKyAgICBEb3VibGVFcXVhbCA9IDB4MmMs CisrICAgIERvdWJsZU5vdEVxdWFsID0gMHgyNCwKKysgICAgRG91YmxlR3JlYXRlclRoYW4gPSAw eDFjLAorKyAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwgPSAweDA0LAorKyAgICBEb3VibGVM ZXNzVGhhbiA9IDB4MGMsCisrICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IDB4MTQsCisrICAg IERvdWJsZVVub3JkZXJlZCA9IDB4M2MsCisrICAgIERvdWJsZUVxdWFsT3JVbm9yZGVyZWQgPSBE b3VibGVFcXVhbCB8IERvdWJsZUNvbmRpdGlvblVub3JkZXJlZCwKKysgICAgRG91YmxlTm90RXF1 YWxPclVub3JkZXJlZCA9IERvdWJsZU5vdEVxdWFsIHwgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVk LAorKyAgICBEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkID0gRG91YmxlR3JlYXRlclRoYW4g fCBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQsCisrICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVh bE9yVW5vcmRlcmVkID0KKysgICAgICAgIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCB8IERvdWJs ZUNvbmRpdGlvblVub3JkZXJlZCwKKysgICAgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCA9IERv dWJsZUxlc3NUaGFuIHwgRG91YmxlQ29uZGl0aW9uVW5vcmRlcmVkLAorKyAgICBEb3VibGVMZXNz VGhhbk9yRXF1YWxPclVub3JkZXJlZCA9CisrICAgICAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWwg fCBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQsCisrICB9OworKworKyAgZW51bSBKdW1wT3JDYWxs IHsgQnJhbmNoSXNKdW1wLCBCcmFuY2hJc0NhbGwgfTsKKysKKysgIGVudW0gTGlua0JpdCB7Cisr ICAgIERvbnRMaW5rQiA9IDAsCisrICAgIExpbmtCID0gMSwKKysgIH07CisrCisrICBlbnVtIExp a2VseUJpdCB7CisrICAgIE5vdExpa2VseUIgPSAwLAorKyAgICBMaWtlbHlCID0gMSwKKysgIH07 CisrCisrICBlbnVtIEJyYW5jaEFkZHJlc3NUeXBlIHsKKysgICAgUmVsYXRpdmVCcmFuY2ggPSAw LAorKyAgICBBYnNvbHV0ZUJyYW5jaCA9IDIsCisrICB9OworKworKyAgZW51bSBGbG9hdEZvcm1h dCB7IFNpbmdsZUZsb2F0LCBEb3VibGVGbG9hdCB9OworKyAgZW51bSBGbG9hdFRlc3RLaW5kIHsg VGVzdEZvclRydWUsIFRlc3RGb3JGYWxzZSB9OworKworKyAgQnVmZmVyT2Zmc2V0IG5leHRPZmZz ZXQoKSB7IHJldHVybiBtX2J1ZmZlci5uZXh0T2Zmc2V0KCk7IH0KKysKKysgcHJvdGVjdGVkOgor KyAgSW5zdHJ1Y3Rpb24qIGVkaXRTcmMoQnVmZmVyT2Zmc2V0IGJvKSB7CisrICAgIGlmICghYm8u YXNzaWduZWQoKSkgeworKyAgICAgIC8vIFVuZGVyIE9PTSwgd3JpdGVJbnN0IG1heSByZXR1cm4g YW4gdW5hc3NpZ25lZCBCdWZmZXJPZmZzZXQuCisrICAgICAgLy8gUmV0dXJuIGEgZHVtbXkgd3Jp dGFibGUgYXJlYSBzbyBjYWxsZXJzIChXcml0ZUxvYWQ2NEluc3RydWN0aW9ucykKKysgICAgICAv LyBjYW4gcHJvY2VlZCBoYXJtbGVzc2x5OyB0aGUgY29tcGlsYXRpb24gd2lsbCBiZSBkaXNjYXJk ZWQuCisrICAgICAgc3RhdGljIHVpbnQzMl90IG9vbUR1bW15X1s4XTsKKysgICAgICByZXR1cm4g KEluc3RydWN0aW9uKilvb21EdW1teV87CisrICAgIH0KKysgICAgcmV0dXJuIG1fYnVmZmVyLmdl dEluc3QoYm8pOworKyAgfQorKworKyAgc3RydWN0IFJlbGF0aXZlUGF0Y2ggeworKyAgICBCdWZm ZXJPZmZzZXQgb2Zmc2V0OworKyAgICB2b2lkKiB0YXJnZXQ7CisrICAgIFJlbG9jYXRpb25LaW5k IGtpbmQ7CisrCisrICAgIFJlbGF0aXZlUGF0Y2goQnVmZmVyT2Zmc2V0IG9mZnNldCwgdm9pZCog dGFyZ2V0LCBSZWxvY2F0aW9uS2luZCBraW5kKQorKyAgICAgICAgOiBvZmZzZXQob2Zmc2V0KSwg dGFyZ2V0KHRhcmdldCksIGtpbmQoa2luZCkge30KKysgIH07CisrCisrICBqczo6VmVjdG9yPFJl bGF0aXZlUGF0Y2gsIDgsIFN5c3RlbUFsbG9jUG9saWN5PiBqdW1wc187CisrCisrICBDb21wYWN0 QnVmZmVyV3JpdGVyIGp1bXBSZWxvY2F0aW9uc187CisrICBDb21wYWN0QnVmZmVyV3JpdGVyIGRh dGFSZWxvY2F0aW9uc187CisrCisrICBQUENCdWZmZXJXaXRoRXhlY3V0YWJsZUNvcHkgbV9idWZm ZXI7CisrCisrI2lmZGVmIEpTX0pJVFNQRVcKKysgIFNwcmludGVyKiBwcmludGVyOworKyNlbmRp ZgorKworKyBwdWJsaWM6CisrICAvLyBXaGljaCBhYnNvbHV0ZSBiaXQgbnVtYmVyIGRvZXMgYSBD UiArIENvbmRpdGlvbiBwYWlyIHJlZmVyIHRvPworKyAgc3RhdGljIHVpbnQ4X3QgY3JCaXQoQ1Jl Z2lzdGVySUQgY3IsIENvbmRpdGlvbiBjb25kKSB7CisrICAgIHJldHVybiAoY3IgPDwgMikgKyAo KGNvbmQgJiAweGYwKSA+PiA0KTsKKysgIH0KKysgIHN0YXRpYyB1aW50OF90IGNyQml0KENSZWdp c3RlcklEIGNyLCBEb3VibGVDb25kaXRpb24gY29uZCkgeworKyAgICByZXR1cm4gKGNyIDw8IDIp ICsgKChjb25kICYgMHhmMCkgPj4gNCk7CisrICB9CisrCisrICBBc3NlbWJsZXIoKQorKyAgICAg IDogbV9idWZmZXIoLyogcG9vbE1heE9mZnNldCAqLyA4MTkyLCAvKiBub3BGaWxsICovIDApLAor KyNpZmRlZiBKU19KSVRTUEVXCisrICAgICAgICBwcmludGVyKG51bGxwdHIpLAorKyNlbmRpZgor KyAgICAgICAgaXNGaW5pc2hlZChmYWxzZSksCisrICAgICAgICBzY3JhdGNoX3JlZ2lzdGVyX2xp c3RfKCgxIDw8IFJlZ2lzdGVyczo6cjExKSB8ICgxIDw8IFJlZ2lzdGVyczo6cjEyKSkgeworKyAg fQorKworKyAgdm9pZCBzZXRVbmxpbWl0ZWRCdWZmZXIoKSB7IG1fYnVmZmVyLnNldFVubGltaXRl ZCgpOyB9CisrCisrICAvLyBDb25zdGFudCBwb29sIGNhbGxiYWNrcyByZXF1aXJlZCBieSBBc3Nl bWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29scy4KKysgIHN0YXRpYyB2b2lkIEluc2VydEluZGV4 SW50b1RhZyh1aW50OF90KiBsb2FkLCB1aW50MzJfdCBpbmRleCk7CisrICBzdGF0aWMgYm9vbCBQ YXRjaENvbnN0YW50UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIp OworKyAgc3RhdGljIHZvaWQgV3JpdGVQb29sR3VhcmQoQnVmZmVyT2Zmc2V0IGJyYW5jaCwgSW5z dHJ1Y3Rpb24qIGluc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJPZmZz ZXQgZGVzdCk7CisrICBzdGF0aWMgdm9pZCBXcml0ZVBvb2xIZWFkZXIodWludDhfdCogc3RhcnQs IGpzOjpqaXQ6OlBvb2wqIHAsIGJvb2wgaXNOYXR1cmFsKTsKKysgIHN0YXRpYyB2b2lkIFBhdGNo U2hvcnRSYW5nZUJyYW5jaFRvVmVuZWVyKFBQQ0J1ZmZlciosIHVuc2lnbmVkIHJhbmdlSWR4LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyT2Zmc2V0 IGRlYWRsaW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QnVmZmVyT2Zmc2V0IHZlbmVlcik7CisrCisrICBzdGF0aWMgQ29uZGl0aW9uIEludmVydENvbmRp dGlvbihDb25kaXRpb24gY29uZCk7CisrICBzdGF0aWMgRG91YmxlQ29uZGl0aW9uIEludmVydENv bmRpdGlvbihEb3VibGVDb25kaXRpb24gY29uZCk7CisrCisrICB2b2lkIHdyaXRlUmVsb2NhdGlv bihCdWZmZXJPZmZzZXQgc3JjKSB7CisrICAgIGp1bXBSZWxvY2F0aW9uc18ud3JpdGVVbnNpZ25l ZChzcmMuZ2V0T2Zmc2V0KCkpOworKyAgfQorKworKyAgdm9pZCB3cml0ZURhdGFSZWxvY2F0aW9u KEltbUdDUHRyIHB0cikgeworKyAgICBpZiAocHRyLnZhbHVlKSB7CisrICAgICAgaWYgKGdjOjpJ c0luc2lkZU51cnNlcnkocHRyLnZhbHVlKSkgeworKyAgICAgICAgZW1iZWRzTnVyc2VyeVBvaW50 ZXJzXyA9IHRydWU7CisrICAgICAgfQorKyAgICAgIGRhdGFSZWxvY2F0aW9uc18ud3JpdGVVbnNp Z25lZChuZXh0T2Zmc2V0KCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICB9CisrICB2b2lkIHdy aXRlRGF0YVJlbG9jYXRpb24oQnVmZmVyT2Zmc2V0IGJvLCBJbW1HQ1B0ciBwdHIpIHsKKysgICAg aWYgKHB0ci52YWx1ZSkgeworKyAgICAgIGlmIChnYzo6SXNJbnNpZGVOdXJzZXJ5KHB0ci52YWx1 ZSkpIHsKKysgICAgICAgIGVtYmVkc051cnNlcnlQb2ludGVyc18gPSB0cnVlOworKyAgICAgIH0K KysgICAgICBkYXRhUmVsb2NhdGlvbnNfLndyaXRlVW5zaWduZWQoYm8uZ2V0T2Zmc2V0KCkpOwor KyAgICB9CisrICB9CisrCisrICB2b2lkIGFzc2VydE5vR0NUaGluZ3MoKSBjb25zdCB7CisrI2lm ZGVmIERFQlVHCisrICAgIE1PWl9BU1NFUlQoZGF0YVJlbG9jYXRpb25zXy5sZW5ndGgoKSA9PSAw KTsKKysgICAgZm9yIChhdXRvJiBqIDoganVtcHNfKSB7CisrICAgICAgTU9aX0FTU0VSVChqLmtp bmQgPT0gUmVsb2NhdGlvbktpbmQ6OkhBUkRDT0RFRCk7CisrICAgIH0KKysjZW5kaWYKKysgIH0K KysKKysgIGJvb2wgb29tKCkgY29uc3Q7CisrCisrICB2b2lkIHNldFByaW50ZXIoU3ByaW50ZXIq IHNwKSB7CisrI2lmZGVmIEpTX0pJVFNQRVcKKysgICAgcHJpbnRlciA9IHNwOworKyNlbmRpZgor KyAgfQorKworKyNpZmRlZiBKU19KSVRTUEVXCisrICBpbmxpbmUgdm9pZCBzcGV3KGNvbnN0IGNo YXIqIGZtdCwgLi4uKSBNT1pfRk9STUFUX1BSSU5URigyLCAzKSB7CisrICAgIGlmIChNT1pfVU5M SUtFTFkocHJpbnRlciB8fCBKaXRTcGV3RW5hYmxlZChKaXRTcGV3X0NvZGVnZW4pKSkgeworKyAg ICAgIHZhX2xpc3QgdmE7CisrICAgICAgdmFfc3RhcnQodmEsIGZtdCk7CisrICAgICAgc3Bld1ZB KGZtdCwgdmEpOworKyAgICAgIHZhX2VuZCh2YSk7CisrICAgIH0KKysgIH0KKysgIE1PWl9DT0xE IHZvaWQgc3Bld1ZBKGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCB2YSkgTU9aX0ZPUk1BVF9QUklO VEYoMiwgMCkgeworKyAgICBjaGFyIGJ1ZlsyMDBdOworKyAgICBpbnQgaSA9IFZzcHJpbnRmTGl0 ZXJhbChidWYsIGZtdCwgdmEpOworKyAgICBpZiAoaSA+IC0xKSB7CisrICAgICAgaWYgKHByaW50 ZXIpIHsKKysgICAgICAgIHByaW50ZXItPnByaW50ZigiJXNcbiIsIGJ1Zik7CisrICAgICAgfQor KyAgICAgIGpzOjpqaXQ6OkppdFNwZXcoanM6OmppdDo6Sml0U3Bld19Db2RlZ2VuLCAiJXMiLCBi dWYpOworKyAgICB9CisrICB9CisrI2Vsc2UKKysgIE1PWl9BTFdBWVNfSU5MSU5FIHZvaWQgc3Bl dyhjb25zdCBjaGFyKiBmbXQsIC4uLikgTU9aX0ZPUk1BVF9QUklOVEYoMiwgMykge30KKysjZW5k aWYKKysKKysgIFJlZ2lzdGVyIGdldFN0YWNrUG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIFN0YWNr UG9pbnRlcjsgfQorKworKyBwcm90ZWN0ZWQ6CisrICBib29sIGlzRmluaXNoZWQ7CisrCisrIHB1 YmxpYzoKKysgIHN0YXRpYyB1aW50cHRyX3QgR2V0UG9pbnRlcih1aW50OF90Kik7CisrICB2b2lk IGZsdXNoKCkgeworKyAgICBNT1pfQVNTRVJUKCFpc0ZpbmlzaGVkKTsKKysgICAgbV9idWZmZXIu Zmx1c2hQb29sKCk7CisrICB9CisrICAvLyBJbmhpYml0IHBvb2wgZmx1c2hlcyBmb3IgdGhlIG5l eHQgbWF4SW5zdCBpbnN0cnVjdGlvbnMuIE1pcnJvcnMgdGhlCisrICAvLyBBUk0vQVJNNjQgd3Jh cHBlcnM7IGxldHMgc2hhcmVkIGNvZGUgKGUuZy4gV2FzbUZyYW1lSXRlciBlcGlsb2d1ZXMKKysg IC8vIHRoYXQgbmVlZCBzdGF0aWMgYnl0ZSBkaXN0YW5jZXMgYmV0d2VlbiBjdXJyZW50T2Zmc2V0 KCkgY2FwdHVyZXMpCisrICAvLyBmZW5jZSBhIHNtYWxsIGluc3RydWN0aW9uIHdpbmRvdyB3aXRo b3V0IHJlYWNoaW5nIGludG8gbV9idWZmZXIuCisrICB2b2lkIGVudGVyTm9Qb29sKHNpemVfdCBt YXhJbnN0KSB7IG1fYnVmZmVyLmVudGVyTm9Qb29sKG1heEluc3QpOyB9CisrICB2b2lkIGxlYXZl Tm9Qb29sKCkgeyBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOyB9CisrICB2b2lkIGZpbmlzaCgpOwor KyAgYm9vbCBhcHBlbmRSYXdDb2RlKGNvbnN0IHVpbnQ4X3QqIGNvZGUsIHNpemVfdCBudW1CeXRl cyk7CisrICBib29sIHJlc2VydmUoc2l6ZV90IHNpemUpOworKyAgYm9vbCBzd2FwQnVmZmVyKHdh c206OkJ5dGVzJiBieXRlcyk7CisrICB2b2lkIGV4ZWN1dGFibGVDb3B5KHZvaWQqIGJ1ZmZlcik7 CisrICB2b2lkIGNvcHlKdW1wUmVsb2NhdGlvblRhYmxlKHVpbnQ4X3QqIGRlc3QpOworKyAgdm9p ZCBjb3B5RGF0YVJlbG9jYXRpb25UYWJsZSh1aW50OF90KiBkZXN0KTsKKysKKysgIHNpemVfdCBz aXplKCkgY29uc3Q7CisrICBzaXplX3QganVtcFJlbG9jYXRpb25UYWJsZUJ5dGVzKCkgY29uc3Q7 CisrICBzaXplX3QgZGF0YVJlbG9jYXRpb25UYWJsZUJ5dGVzKCkgY29uc3Q7CisrICBzaXplX3Qg Ynl0ZXNOZWVkZWQoKSBjb25zdDsKKysKKysgIEJ1ZmZlck9mZnNldCB3cml0ZUluc3QodWludDMy X3QgeCwgdWludDMyX3QqIGRlc3QgPSBudWxscHRyKTsKKysgIHN0YXRpYyB2b2lkIFdyaXRlSW5z dFN0YXRpYyh1aW50MzJfdCB4LCB1aW50MzJfdCogZGVzdCk7CisrCisrIHB1YmxpYzoKKysgIEJ1 ZmZlck9mZnNldCBoYWx0aW5nQWxpZ24oaW50IGFsaWdubWVudCk7CisrICBCdWZmZXJPZmZzZXQg bm9wQWxpZ24oaW50IGFsaWdubWVudCk7CisrICBCdWZmZXJPZmZzZXQgYXNfbm9wKCk7CisrCisr ICAvLyAtLS0gSW5zdHJ1Y3Rpb24gZW1pc3Npb24gKGRlY2xhcmF0aW9ucyBvbmx5LCBpbXBsZW1l bnRlZCBpbiBsYXRlciBjb21taXRzKQorKworKyAgLy8gQnJhbmNoIGluc3RydWN0aW9ucy4KKysg IHVpbnQxNl90IGNvbXB1dGVDb25kaXRpb25Db2RlKENvbmRpdGlvbiBvcCwgQ1JlZ2lzdGVySUQg Y3IgPSBjcjApOworKyAgdWludDE2X3QgY29tcHV0ZUNvbmRpdGlvbkNvZGUoRG91YmxlQ29uZGl0 aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyID0gY3IwKTsKKysgIEJ1ZmZlck9mZnNldCBhc19iKEpP ZmZJbW0yNiBvZmYsIEJyYW5jaEFkZHJlc3NUeXBlIGJhdCA9IFJlbGF0aXZlQnJhbmNoLAorKyAg ICAgICAgICAgICAgICAgICAgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZz ZXQgYXNfYihpbnQzMl90IG9mZiwgQnJhbmNoQWRkcmVzc1R5cGUgYmF0ID0gUmVsYXRpdmVCcmFu Y2gsCisrICAgICAgICAgICAgICAgICAgICBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19ibHIoTGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZz ZXQgYXNfYmN0cihMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysgIEJ1ZmZlck9mZnNldCBhc19i YyhCT2ZmSW1tMTYgb2ZmLCBDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjAsCisr ICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsIExpbmtCaXQg bGIgPSBEb250TGlua0IpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2JjKGludDE2X3Qgb2ZmLCBDb25k aXRpb24gY29uZCwgQ1JlZ2lzdGVySUQgY3IgPSBjcjAsCisrICAgICAgICAgICAgICAgICAgICAg TGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsIExpbmtCaXQgbGIgPSBEb250TGlua0IpOworKyAg QnVmZmVyT2Zmc2V0IGFzX2JjKEJPZmZJbW0xNiBvZmYsIERvdWJsZUNvbmRpdGlvbiBjb25kLCBD UmVnaXN0ZXJJRCBjciA9IGNyMCwKKysgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGti ID0gTm90TGlrZWx5QiwgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZzZXQg YXNfYmMoaW50MTZfdCBvZmYsIERvdWJsZUNvbmRpdGlvbiBjb25kLCBDUmVnaXN0ZXJJRCBjciA9 IGNyMCwKKysgICAgICAgICAgICAgICAgICAgICBMaWtlbHlCaXQgbGtiID0gTm90TGlrZWx5Qiwg TGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZzZXQgYXNfYmNjdHIoQ29uZGl0 aW9uIGNvbmQsIENSZWdpc3RlcklEIGNyID0gY3IwLAorKyAgICAgICAgICAgICAgICAgICAgICAg IExpa2VseUJpdCBsa2IgPSBOb3RMaWtlbHlCLCBMaW5rQml0IGxiID0gRG9udExpbmtCKTsKKysg IEJ1ZmZlck9mZnNldCBhc19iY2N0cihEb3VibGVDb25kaXRpb24gY29uZCwgQ1JlZ2lzdGVySUQg Y3IgPSBjcjAsCisrICAgICAgICAgICAgICAgICAgICAgICAgTGlrZWx5Qml0IGxrYiA9IE5vdExp a2VseUIsIExpbmtCaXQgbGIgPSBEb250TGlua0IpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2JjKGlu dDE2X3Qgb2ZmLCB1aW50MTZfdCBvcCwgTGlrZWx5Qml0IGxrYiA9IE5vdExpa2VseUIsCisrICAg ICAgICAgICAgICAgICAgICAgTGlua0JpdCBsYiA9IERvbnRMaW5rQik7CisrICBCdWZmZXJPZmZz ZXQgYXNfYmNjdHIodWludDE2X3Qgb3AsIExpa2VseUJpdCBsa2IgPSBOb3RMaWtlbHlCLAorKyAg ICAgICAgICAgICAgICAgICAgICAgIExpbmtCaXQgbGIgPSBEb250TGlua0IpOworKworKyAgLy8g U1BSIG9wZXJhdGlvbnMuCisrICBCdWZmZXJPZmZzZXQgYXNfbXRzcHIoU1BSZWdpc3RlcklEIHNw ciwgUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zmc2V0IGFzX21mc3ByKFJlZ2lzdGVyIHJkLCBT UFJlZ2lzdGVySUQgc3ByKTsKKysKKysgIC8vIENSIG9wZXJhdGlvbnMuCisrICBCdWZmZXJPZmZz ZXQgYXNfY3JhbmQodWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfY3JhbmRjKHVpbnQ4X3QgdCwgdWludDhfdCBhLCB1aW50OF90IGIpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX2Nyb3IodWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7CisrICBC dWZmZXJPZmZzZXQgYXNfY3JvcmModWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfY3J4b3IodWludDhfdCB0LCB1aW50OF90IGEsIHVpbnQ4X3QgYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfbXRjcmYodWludDMyX3QgbWFzaywgUmVnaXN0ZXIgcnMpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX21mb2NyZihSZWdpc3RlciByZCwgQ1JlZ2lzdGVySUQgY3Jmcyk7 CisrICBCdWZmZXJPZmZzZXQgYXNfbWNyeHJ4KENSZWdpc3RlcklEIGNydCk7CisrCisrICAvLyBD b21wYXJlIGluc3RydWN0aW9ucy4KKysgIEJ1ZmZlck9mZnNldCBhc19jbXBkKENSZWdpc3RlcklE IGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGRp KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZz ZXQgYXNfY21wbGQoQ1JlZ2lzdGVySUQgY3IsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfY21wbGRpKENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgaW50 MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfY21wdyhDUmVnaXN0ZXJJRCBjciwgUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbXB3aShDUmVnaXN0ZXJJ RCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOworKyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGx3 KENSZWdpc3RlcklEIGNyLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zm c2V0IGFzX2NtcGx3aShDUmVnaXN0ZXJJRCBjciwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2NtcGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc19jbXBkaShSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJP ZmZzZXQgYXNfY21wbGQoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19jbXBsZGkoUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0pOworKyAgQnVmZmVyT2Zmc2V0IGFz X2NtcHcoUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbXB3 aShSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfY21wbHcoUmVn aXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbXBsd2koUmVnaXN0 ZXIgcmEsIGludDE2X3QgaW0pOworKworKyAgLy8gQUxVICh0aHJlZS1yZWdpc3RlcikuCisrICBC dWZmZXJPZmZzZXQgYXNfYWRkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX2FkZGMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdp c3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfYWRkZShSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdWJmKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N1YmZjKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N1 YmZlKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zm c2V0IGFzX25lZyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpOworKworKyAgQnVmZmVyT2Zmc2V0 IGFzX211bGxkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX211bGhkKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX211bGhkdShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19tdWxsZG8oUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbXVsbHcoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbXVsaHd1 KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKworKyAgQnVmZmVyT2Zm c2V0IGFzX2RpdmQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBC dWZmZXJPZmZzZXQgYXNfZGl2ZHUoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfZGl2dyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19kaXZ3dShSZWdpc3RlciByZCwgUmVnaXN0 ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIC8vIFBPV0VSOSBtb2R1bG8uCisrICBCdWZmZXJPZmZz ZXQgYXNfbW9kc2QoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBC dWZmZXJPZmZzZXQgYXNfbW9kc3coUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfbW9kdWQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBS ZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbW9kdXcoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhLCBSZWdpc3RlciByYik7CisrCisrICAvLyBBTFUgaW1tZWRpYXRlLgorKyAgQnVmZmVy T2Zmc2V0IGFzX2FkZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGltLAorKyAg ICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3R1YWxseV9saSA9IGZhbHNlKTsKKysgIEJ1ZmZl ck9mZnNldCBhc19hZGRpcyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIGludDE2X3QgaW0sCisr ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhY3R1YWxseV9saXMgPSBmYWxzZSk7CisrICBC dWZmZXJPZmZzZXQgYXNfbXVsbGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBpbnQxNl90IGlt KTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdWJmaWMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBp bnQxNl90IGltKTsKKysKKysgIC8vIEFMVSB1bmFyeS9leHRlbmRlZC4KKysgIEJ1ZmZlck9mZnNl dCBhc19jbnRsencoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCBh c19jbnRsemQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCBhc19j bnR0emQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCBhc19jbnR0 encoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCBhc19wb3BjbnRk KFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfcG9wY250dyhS ZWdpc3RlciByYSwgUmVnaXN0ZXIgcnMpOworKyAgLy8gUE9XRVIxMCBieXRlLXJldmVyc2UgZG91 Ymxld29yZDogcmEgPSBic3dhcDY0KHJzKS4gMSBpbnNuIHJlcGxhY2luZyB0aGUKKysgIC8vIFBP V0VSOSBtdHZzcmQgLyB4eGJyZCAvIG1mdnNyZCByb3VuZC10cmlwIGluIGJ5dGVTd2FwNjQuCisr ICBCdWZmZXJPZmZzZXQgYXNfYnJkKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycyk7CisrICAvLyBQ T1dFUjEwIGJ5dGUtcmV2ZXJzZSBlYWNoIGhhbGZ3b3JkICg0IGhhbGZ3b3JkcykgLyBlYWNoIHdv cmQgKDIgd29yZHMpCisrICAvLyBpbiB0aGUgNjQtYml0IGRvdWJsZXdvcmQuIFRoZSB3YXNtL2Fz bSBjYWxsZXIgdXN1YWxseSBtYXNrcyBvcgorKyAgLy8gc2lnbi1leHRlbmRzIHRoZSBsb3cgaGFs ZndvcmQvd29yZCBhZnRlcndhcmRzLgorKyAgQnVmZmVyT2Zmc2V0IGFzX2JyaChSZWdpc3RlciBy YSwgUmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2JydyhSZWdpc3RlciByYSwgUmVn aXN0ZXIgcnMpOworKworKyAgLy8gQml0IG9wZXJhdGlvbnMgKGxvZ2ljYWwsIHRocmVlLXJlZ2lz dGVyKS4KKysgIEJ1ZmZlck9mZnNldCBhc19hbmRfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywg UmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2FuZF9fcmMoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJzLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbm9yKFJlZ2lzdGVy IHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX29yXyhS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c194b3JfKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVy T2Zmc2V0IGFzX3NsdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJlZ2lzdGVyIHJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc19zcncoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciBy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3JhdyhSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMsIFJl Z2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zbGQoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJzLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3JkKFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciBycywgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3NyYWQoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYik7CisrCisrICAvLyBCaXQgb3BlcmF0aW9u cyAobG9naWNhbCwgaW1tZWRpYXRlKS4KKysgIEJ1ZmZlck9mZnNldCBhc19vcmkoUmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCB1aW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfb3JpcyhS ZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIHVpbnQxNl90IGltKTsKKysgIEJ1ZmZlck9mZnNldCBh c194b3JpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgdWludDE2X3QgaW0pOworKyAgQnVmZmVy T2Zmc2V0IGFzX3hvcmlzKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgdWludDE2X3QgaW0pOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2FuZGlfcmMoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCB1aW50 MTZfdCBpbSk7CisrCisrICAvLyBTaWduIGV4dGVuc2lvbi4KKysgIEJ1ZmZlck9mZnNldCBhc19l eHRzYihSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2V4dHNo KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZXh0c3coUmVn aXN0ZXIgcmQsIFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19leHRzd19yYyhSZWdp c3RlciByZCwgUmVnaXN0ZXIgcnMpOworKworKyAgLy8gU2hpZnQvcm90YXRlIHdpdGggaW1tZWRp YXRlcy4KKysgIEJ1ZmZlck9mZnNldCBhc19zcmF3aShSZWdpc3RlciBpZCwgUmVnaXN0ZXIgcnMs IHVpbnQ4X3Qgbik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3JhZGkoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJzLCBpbnQgbik7CisrICBCdWZmZXJPZmZzZXQgYXNfcmxkY2woUmVnaXN0ZXIgcmEsIFJl Z2lzdGVyIHJzLCBSZWdpc3RlciByYiwgdWludDhfdCBtYik7CisrICBCdWZmZXJPZmZzZXQgYXNf cmxkaWNsKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfcmxkaWNsX3JjKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywg dWludDhfdCBzaCwgdWludDhfdCBtYik7CisrICBCdWZmZXJPZmZzZXQgYXNfcmxkaWNyKFJlZ2lz dGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfcmxkaWNyX3JjKFJlZ2lzdGVyIHJhLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwg dWludDhfdCBtYik7CisrICBCdWZmZXJPZmZzZXQgYXNfcmx3aW5tKFJlZ2lzdGVyIHJkLCBSZWdp c3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDhfdCBtZSk7CisrICBCdWZmZXJPZmZzZXQgYXNfcmx3aW5tX3JjKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCBtZSk7CisrICBCdWZmZXJPZmZzZXQgYXNfcmx3aW1pKFJlZ2lz dGVyIHJkLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCBtZSk7CisrICBCdWZmZXJPZmZzZXQgYXNfcmxkaW1pKFJl Z2lzdGVyIHJkLCBSZWdpc3RlciBycywgdWludDhfdCBzaCwgdWludDhfdCBtYik7CisrICBCdWZm ZXJPZmZzZXQgYXNfcmx3bm0oUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYiwg dWludDhfdCBtYiwKKysgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1lKTsKKysKKysg IC8vIEludGVnZXIgbG9hZHMgKEQtZm9ybSkuCisrICBCdWZmZXJPZmZzZXQgYXNfbGJ6KFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2xo YShSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19saHooUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrICBCdWZm ZXJPZmZzZXQgYXNfbHdhKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2x3eihSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qg b2ZmKTsKKysgIEJ1ZmZlck9mZnNldCBhc19sZChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGlu dDE2X3Qgb2ZmKTsKKysKKysgIC8vIEludGVnZXIgc3RvcmVzIChELWZvcm0pLgorKyAgQnVmZmVy T2Zmc2V0IGFzX3N0YihSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2ZmKTsKKysg IEJ1ZmZlck9mZnNldCBhc19zdGgoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9m Zik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R3KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50 MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZChSZWdpc3RlciByZCwgUmVnaXN0ZXIg cmIsIGludDE2X3Qgb2ZmKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdGR1KFJlZ2lzdGVyIHJkLCBS ZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOworKworKyAgLy8gSW50ZWdlciBsb2Fkcy9zdG9yZXMg KFgtZm9ybSwgaW5kZXhlZCkuCisrICBCdWZmZXJPZmZzZXQgYXNfbGJ6eChSZWdpc3RlciByZCwg UmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19saGF4KFJlZ2lz dGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2xo engoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfbHd6eChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIC8v IFgtZm9ybSBzaWduLWV4dGVuZGluZyB3b3JkIGxvYWQuIFNpbmdsZS1pbnNuIGVxdWl2YWxlbnQg b2YgbHd6eCArIGV4dHN3LgorKyAgQnVmZmVyT2Zmc2V0IGFzX2x3YXgoUmVnaXN0ZXIgcmQsIFJl Z2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbHdhcngoUmVnaXN0 ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbGJh cngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfbGhhcngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBC dWZmZXJPZmZzZXQgYXNfbGR4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX2xkYXJ4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgUmVn aXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0YngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3RiY3goUmVnaXN0ZXIgcmQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R3eChSZWdp c3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19z dHdicngoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfc3RoeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc19zdGhjeChSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVy IHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdGR4KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwg UmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZGN4KFJlZ2lzdGVyIHJkLCBSZWdp c3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0d2N4KFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKworKyAgLy8gSW50ZWdlciBzZWxlY3Qu CisrICAvLyBQT1dFUjEwIChJU0EgMy4xKS4gU2V0IFJUID0gMS8wIGJhc2VkIG9uIGEgQ1IgYml0 LgorKyAgQnVmZmVyT2Zmc2V0IGFzX3NldGJjKFJlZ2lzdGVyIHJ0LCB1aW50MTZfdCBiYywgQ1Jl Z2lzdGVySUQgY3IpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3NldGJjcihSZWdpc3RlciBydCwgdWlu dDE2X3QgYmMsIENSZWdpc3RlcklEIGNyKTsKKysgIEJ1ZmZlck9mZnNldCBhc19pc2VsKFJlZ2lz dGVyIHJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIsIHVpbnQxNl90IHJjLAorKyAgICAgICAg ICAgICAgICAgICAgICAgQ1JlZ2lzdGVySUQgY3IgPSBjcjApOworKyAgQnVmZmVyT2Zmc2V0IGFz X2lzZWwwKFJlZ2lzdGVyIHJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIsIHVpbnQxNl90IHJj LAorKyAgICAgICAgICAgICAgICAgICAgICAgIENSZWdpc3RlcklEIGNyID0gY3IwKTsKKysKKysg IC8vIEZQIGNvbXBhcmUuCisrICBCdWZmZXJPZmZzZXQgYXNfZmNtcHUoQ1JlZ2lzdGVySUQgY3Is IEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFz X2ZjbXB1KEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmIpOworKworKyAgLy8gRlAg YXJpdGhtZXRpYyAodHdvLXNvdXJjZSkuCisrICBCdWZmZXJPZmZzZXQgYXNfZmFkZChGbG9hdFJl Z2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKKysgIEJ1ZmZl ck9mZnNldCBhc19mYWRkcyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9h dFJlZ2lzdGVyIHJjKTsKKysgIEJ1ZmZlck9mZnNldCBhc19mc3ViKEZsb2F0UmVnaXN0ZXIgcmQs IEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIgcmMpOworKyAgQnVmZmVyT2Zmc2V0IGFz X2ZzdWJzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcmEsIEZsb2F0UmVnaXN0ZXIg cmMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZkaXYoRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdp c3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmRpdnMoRmxv YXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdpc3RlciByYyk7CisrICBC dWZmZXJPZmZzZXQgYXNfZm11bChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBG bG9hdFJlZ2lzdGVyIHJjKTsKKysgIEJ1ZmZlck9mZnNldCBhc19mbXVscyhGbG9hdFJlZ2lzdGVy IHJkLCBGbG9hdFJlZ2lzdGVyIHJhLCBGbG9hdFJlZ2lzdGVyIHJjKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19mY3BzZ24oRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciByYSwgRmxvYXRSZWdp c3RlciByYyk7CisrICAvLyBGUCB1bmFyeS4KKysgIEJ1ZmZlck9mZnNldCBhc19mYWJzKEZsb2F0 UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZuZWco RmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNf Zm1yKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX2ZzcXJ0KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVy T2Zmc2V0IGFzX2ZzcXJ0cyhGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKKysg IEJ1ZmZlck9mZnNldCBhc19mcnNwKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMp OworKworKyAgLy8gRlAgY29udmVyc2lvbnMuCisrICBCdWZmZXJPZmZzZXQgYXNfZmNmaWQoRmxv YXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7CisrICBCdWZmZXJPZmZzZXQgYXNfZmNm aWRzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX2ZjZmlkdShGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKKysgIEJ1ZmZl ck9mZnNldCBhc19mY2ZpZHVzKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIgcnMpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX2ZjdGlkKEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0ZXIg cnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjdGlkeihGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJl Z2lzdGVyIHJzKTsKKysgIEJ1ZmZlck9mZnNldCBhc19mY3RpZHV6KEZsb2F0UmVnaXN0ZXIgcmQs IEZsb2F0UmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2ZjdGl3eihGbG9hdFJlZ2lz dGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJzKTsKKysKKysgIC8vIEZQIHJvdW5kaW5nLgorKyAgQnVm ZmVyT2Zmc2V0IGFzX2ZyaW0oRmxvYXRSZWdpc3RlciByZCwgRmxvYXRSZWdpc3RlciBycyk7Cisr ICBCdWZmZXJPZmZzZXQgYXNfZnJpcChGbG9hdFJlZ2lzdGVyIHJkLCBGbG9hdFJlZ2lzdGVyIHJz KTsKKysgIEJ1ZmZlck9mZnNldCBhc19mcml6KEZsb2F0UmVnaXN0ZXIgcmQsIEZsb2F0UmVnaXN0 ZXIgcnMpOworKworKyAgLy8gRlAgbG9hZHMgKEQtZm9ybSkuCisrICBCdWZmZXJPZmZzZXQgYXNf bGZkKEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrICBCdWZm ZXJPZmZzZXQgYXNfbGZzKEZsb2F0UmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9m Zik7CisrCisrICAvLyBGUCBzdG9yZXMgKEQtZm9ybSkuCisrICBCdWZmZXJPZmZzZXQgYXNfc3Rm ZChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYiwgaW50MTZfdCBvZmYpOworKyAgQnVmZmVy T2Zmc2V0IGFzX3N0ZnMoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmIsIGludDE2X3Qgb2Zm KTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdGZkdShGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy YiwgaW50MTZfdCBvZmYpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZnN1KEZsb2F0UmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJiLCBpbnQxNl90IG9mZik7CisrCisrICAvLyBGUCBsb2Fkcy9zdG9yZXMg KFgtZm9ybSwgaW5kZXhlZCkuCisrICBCdWZmZXJPZmZzZXQgYXNfbGZkeChGbG9hdFJlZ2lzdGVy IHJkLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX2xmc3go RmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9m ZnNldCBhc19sZml3YXgoRmxvYXRSZWdpc3RlciByZCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJi KTsKKysgIEJ1ZmZlck9mZnNldCBhc19zdGZkeChGbG9hdFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy YSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0ZnN4KEZsb2F0UmVnaXN0ZXIg cmQsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrCisrICAvLyBGUFNDUiBvcGVyYXRpb25z LgorKyAgQnVmZmVyT2Zmc2V0IGFzX210ZnNiMCh1aW50OF90IGJ0KTsKKysgIEJ1ZmZlck9mZnNl dCBhc19tY3JmcyhDUmVnaXN0ZXJJRCBiZiwgdWludDhfdCBiZmEpOworKworKyAgLy8gVlNYIChG UFItb25seSBzdWJzZXQpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX21mdnNyZChSZWdpc3RlciByYSwg RmxvYXRSZWdpc3RlciB4cyk7CisrICBCdWZmZXJPZmZzZXQgYXNfbXR2c3JkKEZsb2F0UmVnaXN0 ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKKysgIC8vIFBPV0VSOCsgKElTQSAyLjA3KS4gU2lnbi1leHRl bmRpbmcgbW92ZSBvZiBSQSdzIGxvdyAzMiBiaXRzIHRvIEZQUi4KKysgIEJ1ZmZlck9mZnNldCBh c19tdHZzcndhKEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNl dCBhc19tdHZzcnd6KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9m ZnNldCBhc19tdHZzcndzKEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZl ck9mZnNldCBhc194eGJyZChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKKysg IC8vIFBPV0VSOSBzY2FsYXIgVlNYIG1heC9taW4gd2l0aCBKYXZhL0phdmFTY3JpcHQgc2VtYW50 aWNzIChtYXRjaGVzCisrICAvLyBFQ01BLTI2MiBNYXRoLm1heCAvIE1hdGgubWluKS4gT3BlcmF0 ZSBvbiBGUFItc3BhY2UgKGVuY29kaW5nIDAuLjMxKS4KKysgIEJ1ZmZlck9mZnNldCBhc194c21h eGpkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3hzbWlu amRwKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHNjdmRw c3BuKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX3hzY3ZzcGRwbihGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIC8v IFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgY29udmVyc2lvbnMuCisrICBCdWZmZXJPZmZz ZXQgYXNfeHNjdmRwaHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBC dWZmZXJPZmZzZXQgYXNfeHNjdmhwZHAoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4 Yik7CisrICAvLyBQT1dFUjkgKElTQSAzLjApIHNjYWxhciBleHRyYWN0IGJpYXNlZCBleHBvbmVu dC4KKysgIEJ1ZmZlck9mZnNldCBhc194c3hleHBkcChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJl Z2lzdGVyIHhiKTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkgc2NhbGFyIEZQMTYgbG9hZC9zdG9y ZSwgWC1mb3JtIGluZGV4ZWQuCisrICBCdWZmZXJPZmZzZXQgYXNfbHhzaWh6eChGbG9hdFJlZ2lz dGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0 eHNpaHgoRmxvYXRSZWdpc3RlciB4cywgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysKKysg IC8vIFZTWCBTSU1EIGxvYWQvc3RvcmUgKFgtZm9ybSwgaW5kZXhlZCkuCisrICBCdWZmZXJPZmZz ZXQgYXNfbHh2eChGbG9hdFJlZ2lzdGVyIHh0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX3N0eHZ4KEZsb2F0UmVnaXN0ZXIgeHMsIFJlZ2lzdGVyIHJhLCBS ZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfbHh2ZDJ4KEZsb2F0UmVnaXN0ZXIgeHQs IFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrICBCdWZmZXJPZmZzZXQgYXNfc3R4dmQyeChG bG9hdFJlZ2lzdGVyIHhzLCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKworKyAgLy8gVk1Y IFNJTUQgbG9hZC9zdG9yZSAoWC1mb3JtLCBpbmRleGVkKS4gVGFrZSBhIHJhdyBWUiBudW1iZXIg KDAtMzEpCisrICAvLyBiZWNhdXNlIFZSMjAtVlIzMSBhcmUgb3V0c2lkZSB0aGUgRmxvYXRSZWdp c3RlciBlbmNvZGluZyAod2hpY2ggb25seQorKyAgLy8gY292ZXJzIFZTUjAtMzEgPSBmMC1mMzEp LiBVc2VkIGJ5IHRoZSBKSVQgdHJhbXBvbGluZSB0byBzYXZlL3Jlc3RvcmUKKysgIC8vIHRoZSBF TEZ2MiBjYWxsZWUtc2F2ZWQgVlIyMC1WUjMxLiBFQSBpcyBmb3JjZS1hbGlnbmVkIHRvIDE2IGJ5 dGVzCisrICAvLyAobG93IDQgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgaWdub3JlZCksIHNvIHRo ZSBzbG90J3MgYWxpZ25tZW50CisrICAvLyBtYXR0ZXJzIGZvciBsYXlvdXQgYnV0IG5vdCBmb3Ig dHJhcCBhdm9pZGFuY2UuCisrICBCdWZmZXJPZmZzZXQgYXNfbHZ4KHVpbnQ4X3QgdnJ0LCBSZWdp c3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N0dngodWludDhfdCB2 cnMsIFJlZ2lzdGVyIHJhLCBSZWdpc3RlciByYik7CisrCisrICAvLyBWU1ggU0lNRCByZWdpc3Rl ciBvcGVyYXRpb25zIChYWDMtZm9ybSAvIFhYMS1mb3JtIC8gWFgyLWZvcm0pLgorKyAgQnVmZmVy T2Zmc2V0IGFzX3h4bG9yKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsIEZsb2F0 UmVnaXN0ZXIgeGIpOworKworKyAgLy8gVlNYIGJpdHdpc2Ugb3BlcmF0aW9ucyAoWFgzLWZvcm0p LgorKyAgQnVmZmVyT2Zmc2V0IGFzX3h4bGFuZChGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lz dGVyIHhhLCBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIEJ1ZmZlck9mZnNldCBhc194eGx4b3IoRmxv YXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBC dWZmZXJPZmZzZXQgYXNfeHhsbm9yKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEs IEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3h4bGFuZGMoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJP ZmZzZXQgYXNfeHhzZWwoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRS ZWdpc3RlciB4YiwKKysgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHhjKTsK KysKKysgIC8vIFZNWCBpbnRlZ2VyIGFyaXRobWV0aWMgKFZSMC0zMSA9IFZTUjMyLTYzIG9ubHkp LgorKyAgLy8gQ2FsbGVycyBtdXN0IGVuc3VyZSBvcGVyYW5kcyBhcmUgaW4gVlIgc3BhY2UuCisr ICBCdWZmZXJPZmZzZXQgYXNfdmFkZHVibSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192YWRkdWhtKHVpbnQ4X3QgdnJ0LCB1aW50OF90 IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGR1d20odWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmFkZHVk bSh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNl dCBhc192c3VidWJtKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAg QnVmZmVyT2Zmc2V0IGFzX3ZzdWJ1aG0odWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90 IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnN1YnV3bSh1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3VidWRtKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGRzYnMo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQg YXNfdmFkZHNocyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1 ZmZlck9mZnNldCBhc192YWRkdWJzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZhZGR1aHModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnN1YnNicyh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3Vic2hzKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFz X3ZzdWJ1YnModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZm ZXJPZmZzZXQgYXNfdnN1YnVocyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJi KTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWluc2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1pbnNoKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW5zdyh1aW50OF90 IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWF4 c2IodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfdm1heHNoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAg QnVmZmVyT2Zmc2V0IGFzX3ZtYXhzdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3Qg dnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWF4c2QodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJh LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1pbnViKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtaW51aCh1aW50 OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192 bWludXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJP ZmZzZXQgYXNfdm1heHViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX3ZtYXh1aCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bWF4dXcodWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7CisrICAvLyBQT1dFUjkgKElTQSAzLjApOiBwZXItbGFuZSBpbnRl Z2VyIG5lZ2F0ZS4KKysgIEJ1ZmZlck9mZnNldCBhc192bmVndyh1aW50OF90IHZydCwgdWludDhf dCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZuZWdkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy Yik7CisrICAvLyBQT1dFUjkgKElTQSAzLjApOiBhZGRwY2lzIHJULCBELiAgQ29tcHV0ZXMgclQg PSAoQ0lBICsgNCkgKyAoRCA8PCAxNikuCisrICAvLyBEIGlzIGEgMTYtYml0IHNpZ25lZCBpbW1l ZGlhdGU7IERYLWZvcm0gc3BsaXRzIEQgYWNyb3NzIHRocmVlIGluc3RydWN0aW9uCisrICAvLyBm aWVsZHMgKGQwWzE2Li4yNV0g4oilIGQxWzExLi4xNV0g4oilIGQyWzMxXSkuICBObyBMUiBjbG9i YmVyLCBubyBSQVMgaGF6YXJkLgorKyAgQnVmZmVyT2Zmc2V0IGFzX2FkZHBjaXMoUmVnaXN0ZXIg cnQsIGludDE2X3QgZCk7CisrICAvLyBQT1dFUjEwIChJU0EgMy4xKSBwcmVmaXhlZCBpbnN0cnVj dGlvbnMuIEVhY2ggZW1pdHMgOCBieXRlcyAocHJlZml4ICsKKysgIC8vIHN1ZmZpeCkgd2l0aCBh IHNpbmdsZSBub3AgaW5zZXJ0ZWQgYmVmb3JlIGlmZiB0aGUgcHJlZml4IHdvdWxkCisrICAvLyBz dHJhZGRsZSBhIDY0LWJ5dGUgYmxvY2suIENhbGxlciBtdXN0IGd1YXJhbnRlZSBIYXNQT1dFUjEw KCkuCisrICAvLyBpbW0zNCBpcyBzaWduZWQgMzQtYml0OyBSPXRydWUgc2VsZWN0cyBQQy1yZWxh dGl2ZSBmb3JtIChSQSBtdXN0IGJlIHIwKS4KKysgIC8vIFJldHVybnMgdGhlIG9mZnNldCBvZiB0 aGUgcHJlZml4IHdvcmQuCisrICBCdWZmZXJPZmZzZXQgYXNfcGFkZGkoUmVnaXN0ZXIgcnQsIFJl Z2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LCBib29sIFIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Bs ZChSZWdpc3RlciBydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsIGJvb2wgUik7CisrICBC dWZmZXJPZmZzZXQgYXNfcGx4dih1aW50OF90IHh0LCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0z NCwgYm9vbCBSKTsKKysgIC8vIEZQLXRhcmdldCBwcmVmaXhlZCBsb2FkczogcGxmZC9wbGZzIGFy ZSBNTFMgKFR5cGU9Mikgd2l0aCBzdWZmaXgKKysgIC8vIG9wY29kZXMgNTAgYW5kIDQ4LiBwbGZz IHdpZGVucyBzaW5nbGUg4oaSIGRvdWJsZSBpbiB0aGUgRlBSCisrICAvLyAobWF0Y2hlcyBub24t cHJlZml4ZWQgbGZzIHNlbWFudGljcykuCisrICBCdWZmZXJPZmZzZXQgYXNfcGxmZChGbG9hdFJl Z2lzdGVyIGZydCwgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAg ICAgICAgICBib29sIFIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3BsZnMoRmxvYXRSZWdpc3RlciBm cnQsIFJlZ2lzdGVyIHJhLCBpbnQ2NF90IGltbTM0LAorKyAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBSKTsKKysgIC8vIFByZWZpeGVkLXN0b3JlIGNvdW50ZXJwYXJ0cy4gU2FtZSBwcmVmaXgg c2hhcGU7IHN1ZmZpeCBvcGNvZGVzIGFyZQorKyAgLy8gdGhlIEQtZm9ybSB2YXJpYW50cyBvZiBz dGQvc3R4di9zdGZkL3N0ZnMgKDYxLCAyNywgNTQsIDUyKS4KKysgIEJ1ZmZlck9mZnNldCBhc19w c3RkKFJlZ2lzdGVyIHJzLCBSZWdpc3RlciByYSwgaW50NjRfdCBpbW0zNCwgYm9vbCBSKTsKKysg IEJ1ZmZlck9mZnNldCBhc19wc3R4dih1aW50OF90IHhzLCBSZWdpc3RlciByYSwgaW50NjRfdCBp bW0zNCwgYm9vbCBSKTsKKysgIEJ1ZmZlck9mZnNldCBhc19wc3RmZChGbG9hdFJlZ2lzdGVyIGZy cywgUmVnaXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBSKTsKKysgIEJ1ZmZlck9mZnNldCBhc19wc3RmcyhGbG9hdFJlZ2lzdGVyIGZycywgUmVn aXN0ZXIgcmEsIGludDY0X3QgaW1tMzQsCisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBS KTsKKysKKysgcHJpdmF0ZToKKysgIC8vIEVtaXQgYSBub3AgYmVmb3JlIGEgcHJlZml4ZWQgaW5z dHJ1Y3Rpb24gaWZmIHRoZSBwcmVmaXggd291bGQgb3RoZXJ3aXNlCisrICAvLyBzdGFydCBhdCBv ZmZzZXQgNjAgKG1vZCA2NCkgYW5kIHRoZSBzdWZmaXggd291bGQgbGFuZCBpbiB0aGUgbmV4dCBi bG9jay4KKysgIHZvaWQgZW5zdXJlUHJlZml4ZWRBbGlnbm1lbnQoKTsKKysKKysgcHVibGljOgor KyAgQnVmZmVyT2Zmc2V0IGFzX3Zhdmd1Yih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192YXZndWgodWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bHV3bSh1aW50OF90IHZy dCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXVsbGQo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICAvLyBWTVggc2hpZnQg KFZSMC0zMSBvbmx5KS4KKysgIEJ1ZmZlck9mZnNldCBhc192c2xiKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzbGgodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnNsdyh1 aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBh c192c2xkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVy T2Zmc2V0IGFzX3ZzcmIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7Cisr ICBCdWZmZXJPZmZzZXQgYXNfdnNyaCh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3Qg dnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3J3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcmQodWludDhfdCB2cnQsIHVpbnQ4 X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnNyYWIodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnNyYWgo dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQg YXNfdnNyYXcodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZm ZXJPZmZzZXQgYXNfdnNyYWQodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfdnNsbyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4 X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3JvKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKworKyAgLy8gVk1YIGludGVnZXIgY29tcGFyZSAoVlIwLTMxIG9u bHkpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXVoKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXV3 KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZjbXBlcXVkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAg Ly8gUmVjb3JkIGZvcm1zIHNldCBDUjY6IExUID0gYWxsLXRydWUsIEVRID0gbm9uZS10cnVlLgor KyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXViX3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXVoX3JjKHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBlcXV3 X3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zm c2V0IGFzX3ZjbXBlcXVkX3JjKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIp OworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwg dWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHNoKHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHN3KHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFz X3ZjbXBndHNkKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZjbXBndHViKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2 cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHVoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZy YSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHV3KHVpbnQ4X3QgdnJ0 LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZjbXBndHVk KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgLy8gUE9XRVI5IChJ U0EgMy4wKS4gTm90RXF1YWwgY29tcGFyZTsgbm8gZG91Ymxld29yZCB2YXJpYW50LgorKyAgQnVm ZmVyT2Zmc2V0IGFzX3ZjbXBuZWIodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZy Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmNtcG5laCh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192Y21wbmV3KHVpbnQ4X3QgdnJ0LCB1 aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKworKyAgLy8gVlNYIGZsb2F0IGNvbXBhcmUgKFhY My1mb3JtLCBWU1IwLTYzKS4KKysgIEJ1ZmZlck9mZnNldCBhc194dmNtcGVxc3AoRmxvYXRSZWdp c3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBndHNwKEZsb2F0UmVn aXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZ2VzcChGbG9hdFJl Z2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHhiKTsKKysgIEJ1ZmZlck9mZnNldCBhc194dmNtcGVxZHAoRmxvYXRS ZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciB4Yik7CisrICBCdWZmZXJPZmZzZXQgYXNfeHZjbXBndGRwKEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgeGIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3h2Y21wZ2VkcChGbG9h dFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhhLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIHhiKTsKKysKKysgIC8vIFZTWCBmbG9hdCBhcml0aG1ldGljIChY WDMtZm9ybSBiaW5hcnksIFhYMi1mb3JtIHVuYXJ5KS4KKysjZGVmaW5lIERFQ0xfVlNYX0JJTihv cCkgXAorKyAgQnVmZmVyT2Zmc2V0IGFzXyMjb3AoRmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdp c3RlciB4YSwgRmxvYXRSZWdpc3RlciB4Yik7CisrICBERUNMX1ZTWF9CSU4oeHZhZGRzcCkKKysg IERFQ0xfVlNYX0JJTih4dmFkZGRwKSBERUNMX1ZTWF9CSU4oeHZzdWJzcCkgREVDTF9WU1hfQklO KAorKyAgICAgIHh2c3ViZHApIERFQ0xfVlNYX0JJTih4dm11bHNwKSBERUNMX1ZTWF9CSU4oeHZt dWxkcCkgREVDTF9WU1hfQklOKHh2ZGl2c3ApCisrICAgICAgREVDTF9WU1hfQklOKHh2ZGl2ZHAp IERFQ0xfVlNYX0JJTih4dm1pbnNwKSBERUNMX1ZTWF9CSU4oCisrICAgICAgICAgIHh2bWluZHAp IERFQ0xfVlNYX0JJTih4dm1heHNwKSBERUNMX1ZTWF9CSU4oeHZtYXhkcCkKKysgICAgICAgICAg REVDTF9WU1hfQklOKHh2bWFkZGFzcCkgREVDTF9WU1hfQklOKHh2bWFkZGFkcCkgREVDTF9WU1hf QklOKAorKyAgICAgICAgICAgICAgeHZubXN1YmFzcCkgREVDTF9WU1hfQklOKHh2bm1zdWJhZHAp CisrI3VuZGVmIERFQ0xfVlNYX0JJTgorKyNkZWZpbmUgREVDTF9WU1hfVU4ob3ApIFwKKysgIEJ1 ZmZlck9mZnNldCBhc18jI29wKEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIpOwor KyAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZhYnNzcCkgREVDTF9WU1hfVU4oeHZhYnNkcCkg REVDTF9WU1hfVU4oeHZuZWdzcCkKKysgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dm5l Z2RwKSBERUNMX1ZTWF9VTih4dnNxcnRzcCkgREVDTF9WU1hfVU4oCisrICAgICAgICAgICAgICAg ICAgICAgIHh2c3FydGRwKSBERUNMX1ZTWF9VTih4dnJzcGlwKSBERUNMX1ZTWF9VTih4dnJkcGlw KQorKyAgICAgICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dnJzcGltKSBERUNMX1ZTWF9V Tih4dnJkcGltKSBERUNMX1ZTWF9VTigKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHh2cnNw aXopIERFQ0xfVlNYX1VOKHh2cmRwaXopIERFQ0xfVlNYX1VOKHh2cnNwaWMpCisrICAgICAgICAg ICAgICAgICAgICAgICAgICBERUNMX1ZTWF9VTih4dnJkcGljKSBERUNMX1ZTWF9VTih4dmN2c3h3 c3ApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4oeHZjdnV4d3Nw KSBERUNMX1ZTWF9VTih4dmN2c3h3ZHApCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERFQ0xfVlNYX1VOKHh2Y3Z1eHdkcCkgREVDTF9WU1hfVU4oeHZjdnNwc3h3cykKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2Y3ZzcHV4d3Mp CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVDTF9WU1hfVU4o eHZjdmRwc3h3cykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgREVDTF9WU1hfVU4oeHZjdmRwdXh3cykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2Y3ZkcHNwKQorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQ0xfVlNYX1VOKHh2 Y3ZzcGRwKQorKyN1bmRlZiBERUNMX1ZTWF9VTgorKworKyAgICAgIC8vIFZNWCB3aWRlbi9uYXJy b3cvbWVyZ2UvcGFjayAoVlIwLTMxIG9ubHkpLgorKyAgICAgIEJ1ZmZlck9mZnNldCBhc192dXBr aHNiKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnVwa2xz Yih1aW50OF90IHZydCwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtoc2go dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192dXBrbHNoKHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnVwa2hzdyh1aW50 OF90IHZydCwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Z1cGtsc3codWludDhf dCB2cnQsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192cGtzaHNzKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zwa3N3 c3ModWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfdnBrc2h1cyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc192cGtzd3VzKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhf dCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtcmdoYih1aW50OF90IHZydCwgdWludDhfdCB2 cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXJnaGgodWludDhfdCB2cnQs IHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1yZ2h3KHVp bnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFz X3ZtcmdsYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZl ck9mZnNldCBhc192bXJnbGgodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7 CisrICBCdWZmZXJPZmZzZXQgYXNfdm1yZ2x3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWlu dDhfdCB2cmIpOworKworKyAgLy8gVk1YIGV4dGVuZGVkIG11bHRpcGx5IChWUjAtMzEgb25seSku CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bGVzYih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVp bnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXVsb3NiKHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxldWIodWludDhf dCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11 bG91Yih1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9m ZnNldCBhc192bXVsZXNoKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOwor KyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxvc2godWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdm11bGV1aCh1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXVsb3VoKHVpbnQ4X3Qg dnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxl c3codWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZz ZXQgYXNfdm11bG9zdyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiKTsKKysg IEJ1ZmZlck9mZnNldCBhc192bXVsZXV3KHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhf dCB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtdWxvdXcodWludDhfdCB2cnQsIHVpbnQ4X3Qg dnJhLCB1aW50OF90IHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdnBvcGNudGIodWludDhfdCB2 cnQsIHVpbnQ4X3QgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192cGVybSh1aW50OF90IHZydCwg dWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50OF90IHZyYyk7CisrICAvLyBQT1dFUjgrIChJ U0EgMi4wNykuIFZYLWZvcm0gYml0LXBlcm11dGUuIFNlZSBQUENfdmJwZXJtcSBjb21tZW50Lgor KyAgQnVmZmVyT2Zmc2V0IGFzX3ZicGVybXEodWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50 OF90IHZyYik7CisrICAvLyBQT1dFUjEwIChJU0EgMy4xKSBWZWN0b3IgRXh0cmFjdCBNYXNrLiBS VCBpcyBhIEdQUi4KKysgIEJ1ZmZlck9mZnNldCBhc192ZXh0cmFjdGJtKFJlZ2lzdGVyIHJ0LCBG bG9hdFJlZ2lzdGVyIHZyYik7CisrICBCdWZmZXJPZmZzZXQgYXNfdmV4dHJhY3RobShSZWdpc3Rl ciBydCwgRmxvYXRSZWdpc3RlciB2cmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZleHRyYWN0d20o UmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0ZXIgdnJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192ZXh0 cmFjdGRtKFJlZ2lzdGVyIHJ0LCBGbG9hdFJlZ2lzdGVyIHZyYik7CisrICAvLyBQT1dFUjEwIChJ U0EgMy4xKSBWZWN0b3IgSW5zZXJ0IGZyb20gR1BSIGF0IGltbWVkaWF0ZSBieXRlIG9mZnNldC4K KysgIC8vIFVJTSByYW5nZTogdmluc3cgMC4uMTIsIHZpbnNkIDAuLjggKGNhbGxlciBtdXN0IGVu Zm9yY2UpLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZpbnN3KEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdp c3RlciByYiwgdWludDhfdCB1aW0pOworKyAgQnVmZmVyT2Zmc2V0IGFzX3ZpbnNkKEZsb2F0UmVn aXN0ZXIgdnJ0LCBSZWdpc3RlciByYiwgdWludDhfdCB1aW0pOworKyAgLy8gUE9XRVIxMCAoSVNB IDMuMSkgVmVjdG9yIEluc2VydCBieXRlIC8gaGFsZndvcmQgZnJvbSBHUFIgd2l0aCB0aGUKKysg IC8vIGJ5dGUgcG9zaXRpb24gc3VwcGxpZWQgYnkgYW5vdGhlciBHUFIgKFJBICYgMHhGIGZvciB2 aW5zYnJ4LAorKyAgLy8gUkEgJiAweEUgZm9yIHZpbnNocngpLiAicngiID0gcmlnaHQtaW5kZXhl ZCA9IExFLW5hdHVyYWwuCisrICBCdWZmZXJPZmZzZXQgYXNfdmluc2JyeChGbG9hdFJlZ2lzdGVy IHZydCwgUmVnaXN0ZXIgcmEsIFJlZ2lzdGVyIHJiKTsKKysgIEJ1ZmZlck9mZnNldCBhc192aW5z aHJ4KEZsb2F0UmVnaXN0ZXIgdnJ0LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgLy8g UE9XRVI5IChJU0EgMy4wKSBWZWN0b3IgSW5zZXJ0IGJ5dGUgLyBoYWxmd29yZCBmcm9tIFZSIGF0 IGltbWVkaWF0ZQorKyAgLy8gYnl0ZSBwb3NpdGlvbi4gVUlNIHJhbmdlOiB2aW5zZXJ0YiAwLi4x NSwgdmluc2VydGggMC4uMTQKKysgIC8vIChjYWxsZXIgbXVzdCBlbmZvcmNlOyB2aW5zZXJ0aCBV SU0gaXMgaW4gYnl0ZXMsIGV2ZW4tYWxpZ25lZCkuCisrICBCdWZmZXJPZmZzZXQgYXNfdmluc2Vy dGIoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7Cisr ICBCdWZmZXJPZmZzZXQgYXNfdmluc2VydGgoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0 ZXIgdnJiLCB1aW50OF90IHVpbSk7CisrICAvLyBQT1dFUjkgKElTQSAzLjApIFZlY3RvciBFeHRy YWN0IGJ5dGUgLyBoYWxmd29yZCBmcm9tIFZSIGF0IGltbWVkaWF0ZQorKyAgLy8gQkUgYnl0ZSBw b3NpdGlvbi4gVUlNIHJhbmdlOiB2ZXh0cmFjdHViIDAuLjE1LCB2ZXh0cmFjdHVoIDAuLjE0Cisr ICAvLyAoY2FsbGVyIG11c3QgZW5mb3JjZTsgdmV4dHJhY3R1aCBVSU0gaXMgaW4gYnl0ZXMsIGV2 ZW4tYWxpZ25lZCkuIFRoZQorKyAgLy8gZXh0cmFjdGVkIGJ5dGUvaGFsZndvcmQgbGFuZHMgYXQg QkUgYnl0ZSA3IG9mIFZSVCwgd2l0aCB0aGUgcmVzdAorKyAgLy8gemVyb2VkIOKAlCBzbyBhIHN1 YnNlcXVlbnQgbWZ2c3JkIHJlYWRzIGl0IGFzIHRoZSBsb3cgYnl0ZS9oYWxmd29yZAorKyAgLy8g b2YgdGhlIEdQUiB3aXRoIGltcGxpY2l0IHplcm8tZXh0ZW5zaW9uLgorKyAgQnVmZmVyT2Zmc2V0 IGFzX3ZleHRyYWN0dWIoRmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50 OF90IHVpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfdmV4dHJhY3R1aChGbG9hdFJlZ2lzdGVyIHZy dCwgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKKysgIC8vIFZYLWZvcm0gd2l0aCA1 LWJpdCBzaWduZWQgaW1tZWRpYXRlIHNwbGF0OiBlYWNoIGxhbmUgb2YgVlJUIGlzCisrICAvLyBz ZXQgdG8gc2lnbl9leHRlbmQoU0lNTTUpIChyYW5nZSBbLTE2LCAxNV0pIGF0IGJ5dGUvaGFsZndv cmQvd29yZCBncmFudWxhcml0eS4KKysgIEJ1ZmZlck9mZnNldCBhc192c3BsdGlzYih1aW50OF90 IHZydCwgaW50OF90IHNpbW01KTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3BsdGlzaCh1aW50OF90 IHZydCwgaW50OF90IHNpbW01KTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3BsdGlzdyh1aW50OF90 IHZydCwgaW50OF90IHNpbW01KTsKKysKKysgIC8vIFZBLWZvcm0gdGVybmFyeSBWTVggaW5zdHJ1 Y3Rpb25zLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZtbGFkZHVobSh1aW50OF90IHZydCwgdWludDhf dCB2cmEsIHVpbnQ4X3QgdnJiLCB1aW50OF90IHZyYyk7CisrICBCdWZmZXJPZmZzZXQgYXNfdm1o cmFkZHNocyh1aW50OF90IHZydCwgdWludDhfdCB2cmEsIHVpbnQ4X3QgdnJiLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB2cmMpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3Zt c3Vtc2htKHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYSwgdWludDhfdCB2cmIsIHVpbnQ4X3QgdnJj KTsKKysgIEJ1ZmZlck9mZnNldCBhc192bXN1bXVobSh1aW50OF90IHZydCwgdWludDhfdCB2cmEs IHVpbnQ4X3QgdnJiLCB1aW50OF90IHZyYyk7CisrICBCdWZmZXJPZmZzZXQgYXNfeHhwZXJtZGko RmxvYXRSZWdpc3RlciB4dCwgRmxvYXRSZWdpc3RlciB4YSwgRmxvYXRSZWdpc3RlciB4YiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGRtKTsKKysgIEJ1ZmZlck9mZnNldCBh c194eHNwbHR3KEZsb2F0UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgdWlt KTsKKysgIC8vIFBPV0VSOSAoSVNBIDMuMCkuIFNwbGF0IDgtYml0IGltbWVkaWF0ZSB0byBhbGwg MTYgYnl0ZXMgb2YgYW4gRlBSLWVuY29kZWQKKysgIC8vIFZTUiAoVFggYml0IGZvcmNlZCAwKS4g WFgxLWZvcm0sIG5vIFJjLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3h4c3BsdGliKEZsb2F0UmVnaXN0 ZXIgeHQsIHVpbnQ4X3QgaW1tOCk7CisrICBCdWZmZXJPZmZzZXQgYXNfeHhpbnNlcnR3KEZsb2F0 UmVnaXN0ZXIgeHQsIEZsb2F0UmVnaXN0ZXIgeGIsIHVpbnQ4X3QgdWltKTsKKysgIEJ1ZmZlck9m ZnNldCBhc194eGV4dHJhY3R1dyhGbG9hdFJlZ2lzdGVyIHh0LCBGbG9hdFJlZ2lzdGVyIHhiLCB1 aW50OF90IHVpbSk7CisrICBCdWZmZXJPZmZzZXQgYXNfbXR2c3JkZChGbG9hdFJlZ2lzdGVyIHh0 LCBSZWdpc3RlciByYSwgUmVnaXN0ZXIgcmIpOworKyAgQnVmZmVyT2Zmc2V0IGFzX21mdnNybGQo UmVnaXN0ZXIgcnQsIEZsb2F0UmVnaXN0ZXIgeHMpOworKworKyAgLy8gVk1YIHZlY3RvciBvcGVy YXRpb25zLgorKyAgQnVmZmVyT2Zmc2V0IGFzX3ZzcGx0YihGbG9hdFJlZ2lzdGVyIHZydCwgRmxv YXRSZWdpc3RlciB2cmIsIHVpbnQ4X3QgdWltKTsKKysgIEJ1ZmZlck9mZnNldCBhc192c3BsdGgo RmxvYXRSZWdpc3RlciB2cnQsIEZsb2F0UmVnaXN0ZXIgdnJiLCB1aW50OF90IHVpbSk7CisrICBC dWZmZXJPZmZzZXQgYXNfdnNsZG9pKEZsb2F0UmVnaXN0ZXIgdnJ0LCBGbG9hdFJlZ2lzdGVyIHZy YSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB2cmIsIHVpbnQ4X3Qg c2hiKTsKKysKKysgIC8vIEJhcnJpZXIgYW5kIHN5bmMgaW5zdHJ1Y3Rpb25zLgorKyAgQnVmZmVy T2Zmc2V0IGFzX2x3c3luYygpOworKyAgQnVmZmVyT2Zmc2V0IGFzX3N5bmMoKTsKKysgIEJ1ZmZl ck9mZnNldCBhc19pc3luYygpOworKworKyAgLy8gQ29udmVuaWVuY2UgcHNldWRvLWluc3RydWN0 aW9ucy4KKysgIEJ1ZmZlck9mZnNldCB4c190cmFwKCk7CisrICBCdWZmZXJPZmZzZXQgeHNfdHJh cF90YWdnZWQoVHJhcFRhZyB0YWcpOworKyAgQnVmZmVyT2Zmc2V0IHhzX21yKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciByYSk7CisrICBCdWZmZXJPZmZzZXQgeHNfbXRjdHIoUmVnaXN0ZXIgcmEpOwor KyAgQnVmZmVyT2Zmc2V0IHhzX210bHIoUmVnaXN0ZXIgcmEpOworKyAgQnVmZmVyT2Zmc2V0IHhz X21mbHIoUmVnaXN0ZXIgcmQpOworKyAgQnVmZmVyT2Zmc2V0IHhzX210Y3IoUmVnaXN0ZXIgcnMp OworKyAgQnVmZmVyT2Zmc2V0IHhzX21meGVyKFJlZ2lzdGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNl dCB4c19tdHhlcihSZWdpc3RlciByYSk7CisrICBCdWZmZXJPZmZzZXQgeHNfbGkoUmVnaXN0ZXIg cmQsIGludDE2X3QgaW0pOworKyAgQnVmZmVyT2Zmc2V0IHhzX2xpcyhSZWdpc3RlciByZCwgaW50 MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgeF9zdWJpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy YSwgaW50MTZfdCBpbSk7CisrICBCdWZmZXJPZmZzZXQgeF9ub3QoUmVnaXN0ZXIgcmQsIFJlZ2lz dGVyIHJhKTsKKysgIEJ1ZmZlck9mZnNldCB4X3Nsd2koUmVnaXN0ZXIgcmQsIFJlZ2lzdGVyIHJz LCBpbnQgbik7CisrICBCdWZmZXJPZmZzZXQgeF9zbGRpKFJlZ2lzdGVyIHJkLCBSZWdpc3RlciBy cywgaW50IG4pOworKyAgQnVmZmVyT2Zmc2V0IHhfc3J3aShSZWdpc3RlciByZCwgUmVnaXN0ZXIg cnMsIGludCBuKTsKKysgIEJ1ZmZlck9mZnNldCB4X3NyZGkoUmVnaXN0ZXIgcmQsIFJlZ2lzdGVy IHJzLCBpbnQgbik7CisrICBCdWZmZXJPZmZzZXQgeF9pbnNlcnRiaXRzMF8xNShSZWdpc3RlciBy ZCwgUmVnaXN0ZXIgcnMpOworKyAgQnVmZmVyT2Zmc2V0IHhfYml0X3ZhbHVlKFJlZ2lzdGVyIHJk LCBSZWdpc3RlciBycywgdW5zaWduZWQgYml0KTsKKysgIEJ1ZmZlck9mZnNldCB4X3NyX211bGxp KFJlZ2lzdGVyIHJkLCBSZWdpc3RlciByYSwgaW50MTZfdCBpbSk7CisrCisrICAvLyAtLS0gTGFi ZWwgb3BlcmF0aW9ucy4KKysgIHZvaWQgYmluZChMYWJlbCogbGFiZWwpIHsgYmluZChsYWJlbCwg bmV4dE9mZnNldCgpKTsgfQorKyAgdm9pZCBiaW5kKExhYmVsKiBsYWJlbCwgQnVmZmVyT2Zmc2V0 IGJvZmYpOworKyAgdm9pZCBiaW5kKEluc3RJbW0qIGluc3QsIHVpbnRwdHJfdCBicmFuY2gsIHVp bnRwdHJfdCB0YXJnZXQpOworKyAgdm9pZCBiaW5kKENvZGVMYWJlbCogbGFiZWwpIHsgbGFiZWwt PnRhcmdldCgpLT5iaW5kKGN1cnJlbnRPZmZzZXQoKSk7IH0KKysgIHVpbnQzMl90IGN1cnJlbnRP ZmZzZXQoKSB7IHJldHVybiBuZXh0T2Zmc2V0KCkuZ2V0T2Zmc2V0KCk7IH0KKysgIHZvaWQgcmV0 YXJnZXQoTGFiZWwqIGxhYmVsLCBMYWJlbCogdGFyZ2V0KTsKKysgIHZvaWQgY2FsbChMYWJlbCog bGFiZWwpOworKyAgdm9pZCBjYWxsKHZvaWQqIHRhcmdldCk7CisrCisrICB2b2lkIGFzX2JyZWFr KHVpbnQzMl90IGNvZGUpOworKworKyAgLy8gLS0tIFN0YXRpYyBjYXBhYmlsaXR5IHF1ZXJpZXMu CisrICBzdGF0aWMgYm9vbCBTdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSB7IHJldHVybiB0cnVlOyB9 CisrICBzdGF0aWMgYm9vbCBTdXBwb3J0c1dhc21TaW1kKCkgeyByZXR1cm4gdHJ1ZTsgfQorKyAg c3RhdGljIGJvb2wgU3VwcG9ydHNVbmFsaWduZWRBY2Nlc3NlcygpIHsgcmV0dXJuIHRydWU7IH0K KysgIHN0YXRpYyBib29sIFN1cHBvcnRzRmFzdFVuYWxpZ25lZEZQQWNjZXNzZXMoKSB7IHJldHVy biB0cnVlOyB9CisrICAvLyBQT1dFUjkgaGFzIHNjYWxhciBGUDE2IGhhcmR3YXJlICh4c2N2ZHBo cC94c2N2aHBkcCk7IFBPV0VSOCBkb2Vzbid0LgorKyAgLy8gUnVudGltZS1nYXRlIGxpa2UgeDg2 J3MgU3VwcG9ydHNGbG9hdDMyVG8xNiAod2hpY2gga2V5cyBvZmYgRjE2QykuCisrICBzdGF0aWMg Ym9vbCBTdXBwb3J0c0Zsb2F0NjRUbzE2KCkgeyByZXR1cm4gSGFzUE9XRVI5KCk7IH0KKysgIHN0 YXRpYyBib29sIFN1cHBvcnRzRmxvYXQzMlRvMTYoKSB7IHJldHVybiBIYXNQT1dFUjkoKTsgfQor KyAgc3RhdGljIGJvb2wgSGFzUm91bmRJbnN0cnVjdGlvbihSb3VuZGluZ01vZGUgbW9kZSkgewor KyAgICAvLyBQUEM2NCBoYXMgZnJpeiAodHJ1bmMpLCBmcmlwIChjZWlsKSwgZnJpbSAoZmxvb3Ip LCB3aGljaCBhcmUgYWxsIGNvcnJlY3QuCisrICAgIC8vIGZyaW4gKHJvdW5kLXRvLW5lYXJlc3Qp IGRvZXMgTk9UIGltcGxlbWVudCBwcm9wZXIgSUVFRSBiYW5rZXIncyByb3VuZGluZworKyAgICAv LyAodGllcyB0byBldmVuKSwgc28gTmVhcmVzdFRpZXNUb0V2ZW4gaXMgbm90IHN1cHBvcnRlZC4K KysgICAgcmV0dXJuIG1vZGUgPT0gUm91bmRpbmdNb2RlOjpUb3dhcmRzWmVybyB8fCBtb2RlID09 IFJvdW5kaW5nTW9kZTo6VXAgfHwKKysgICAgICAgICAgIG1vZGUgPT0gUm91bmRpbmdNb2RlOjpE b3duOworKyAgfQorKworKyBwcm90ZWN0ZWQ6CisrICBJbnN0SW1tIGludmVydEJyYW5jaChJbnN0 SW1tIGJyYW5jaCwgQk9mZkltbTE2IHNraXBPZmZzZXQpOworKyAgdm9pZCBhZGRQZW5kaW5nSnVt cChCdWZmZXJPZmZzZXQgc3JjLCBJbW1QdHIgdGFyZ2V0LCBSZWxvY2F0aW9uS2luZCBraW5kKSB7 CisrICAgIGVub3VnaE1lbW9yeV8gJj0ganVtcHNfLmFwcGVuZChSZWxhdGl2ZVBhdGNoKHNyYywg dGFyZ2V0LnZhbHVlLCBraW5kKSk7CisrICAgIGlmIChraW5kID09IFJlbG9jYXRpb25LaW5kOjpK SVRDT0RFKSB7CisrICAgICAgd3JpdGVSZWxvY2F0aW9uKHNyYyk7CisrICAgIH0KKysgIH0KKysg IHZvaWQgYWRkTG9uZ0p1bXAoQnVmZmVyT2Zmc2V0IHNyYywgQnVmZmVyT2Zmc2V0IGRzdCkgewor KyAgICBDb2RlTGFiZWwgY2w7CisrICAgIGNsLnBhdGNoQXQoKS0+YmluZChzcmMuZ2V0T2Zmc2V0 KCkpOworKyAgICBjbC50YXJnZXQoKS0+YmluZChkc3QuZ2V0T2Zmc2V0KCkpOworKyAgICBjbC5z ZXRMaW5rTW9kZShDb2RlTGFiZWw6Okp1bXBJbW1lZGlhdGUpOworKyAgICBhZGRDb2RlTGFiZWwo c3RkOjptb3ZlKGNsKSk7CisrICB9CisrCisrIHB1YmxpYzoKKysgIHZvaWQgZmx1c2hCdWZmZXIo KSB7IG1fYnVmZmVyLmZsdXNoUG9vbCgpOyB9CisrICB2b2lkIGNvbW1lbnQoY29uc3QgY2hhciog bXNnKSB7IHNwZXcoIjsgJXMiLCBtc2cpOyB9CisrICBzdGF0aWMgdWludDMyX3QgTm9wU2l6ZSgp IHsgcmV0dXJuIDQ7IH0KKysKKysgIC8vIC0tLSBTdGF0aWMgcGF0Y2hpbmcgQVBJLgorKyAgc3Rh dGljIHVpbnQ2NF90IEV4dHJhY3RMb2FkNjRWYWx1ZShJbnN0cnVjdGlvbiogaW5zdDApOworKyAg c3RhdGljIHZvaWQgVXBkYXRlTG9hZDY0VmFsdWUoSW5zdHJ1Y3Rpb24qIGluc3QwLCB1aW50NjRf dCB2YWx1ZSk7CisrICBzdGF0aWMgdm9pZCBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucyhJbnN0cnVj dGlvbiogaW5zdDAsIFJlZ2lzdGVyIHJlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ2NF90IHZhbHVlKTsKKysKKysgIHN0YXRpYyB2b2lkIFBhdGNoV3JpdGVf SW1tMzIoQ29kZUxvY2F0aW9uTGFiZWwgbGFiZWwsIEltbTMyIGltbSk7CisrICBzdGF0aWMgdWlu dDhfdCogTmV4dEluc3RydWN0aW9uKHVpbnQ4X3QqIGluc3RydWN0aW9uLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogY291bnQgPSBudWxscHRyKTsKKysgIHN0 YXRpYyB2b2lkIFRvZ2dsZVRvSm1wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RfKTsKKysgIHN0YXRp YyB2b2lkIFRvZ2dsZVRvQ21wKENvZGVMb2NhdGlvbkxhYmVsIGluc3RfKTsKKysKKysgIHZvaWQg dmVyaWZ5SGVhcEFjY2Vzc0Rpc2Fzc2VtYmx5KHVpbnQzMl90IGJlZ2luLCB1aW50MzJfdCBlbmQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEaXNhc3NlbWJsZXI6 OkhlYXBBY2Nlc3MmIGhhKSB7fQorKworKyAgLy8gLS0tIFB1YmxpYyBwYXRjaGluZyBBUEkgKHJl cXVpcmVkIGJ5IHNoYXJlZCBjb2RlKS4KKysgIHN0YXRpYyB2b2lkIEJpbmQodWludDhfdCogcmF3 Q29kZSwgY29uc3QgQ29kZUxhYmVsJiBsYWJlbCk7CisrICB2b2lkIHByb2Nlc3NDb2RlTGFiZWxz KHVpbnQ4X3QqIHJhd0NvZGUpOworKworKyAgc3RhdGljIHZvaWQgVHJhY2VKdW1wUmVsb2NhdGlv bnMoSlNUcmFjZXIqIHRyYywgSml0Q29kZSogY29kZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENvbXBhY3RCdWZmZXJSZWFkZXImIHJlYWRlcik7CisrICBzdGF0aWMgdm9p ZCBUcmFjZURhdGFSZWxvY2F0aW9ucyhKU1RyYWNlciogdHJjLCBKaXRDb2RlKiBjb2RlLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFjdEJ1ZmZlclJlYWRlciYgcmVh ZGVyKTsKKysKKysgIHZvaWQgZXhlY3V0YWJsZUNvcHkodWludDhfdCogYnVmZmVyKTsKKysKKysg IHN0YXRpYyB1aW50MzJfdCBQYXRjaFdyaXRlX05lYXJDYWxsU2l6ZSgpOworKyAgc3RhdGljIHZv aWQgUGF0Y2hXcml0ZV9OZWFyQ2FsbChDb2RlTG9jYXRpb25MYWJlbCBzdGFydCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdG9DYWxsKTsKKysg IHN0YXRpYyB2b2lkIFBhdGNoRGF0YVdpdGhWYWx1ZUNoZWNrKENvZGVMb2NhdGlvbkxhYmVsIGxh YmVsLCBJbW1QdHIgbmV3VmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbW1QdHIgZXhwZWN0ZWRWYWx1ZSk7CisrICBzdGF0aWMgdm9pZCBQYXRjaERhdGFXaXRo VmFsdWVDaGVjayhDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBhdGNoZWRJbW1QdHIgbmV3VmFsdWUsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkSW1tUHRyIGV4cGVjdGVkVmFsdWUpOwor KyAgc3RhdGljIHZvaWQgVG9nZ2xlQ2FsbChDb2RlTG9jYXRpb25MYWJlbCBpbnN0XywgYm9vbCBl bmFibGVkKTsKKysKKysgcHJpdmF0ZToKKysgIEdlbmVyYWxSZWdpc3RlclNldCBzY3JhdGNoX3Jl Z2lzdGVyX2xpc3RfOworKworKyBwdWJsaWM6CisrICBHZW5lcmFsUmVnaXN0ZXJTZXQqIEdldFNj cmF0Y2hSZWdpc3Rlckxpc3QoKSB7CisrICAgIHJldHVybiAmc2NyYXRjaF9yZWdpc3Rlcl9saXN0 XzsKKysgIH0KKyt9OyAgLy8gQXNzZW1ibGVyCisrCisraW5saW5lIGJvb2wgSXNVbmFsaWduZWQo Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzKSB7CisrICBpZiAoIWFjY2Vzcy5h bGlnbigpKSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysgIHJldHVybiBhY2Nlc3MuYWxp Z24oKSA8IGFjY2Vzcy5ieXRlU2l6ZSgpOworK30KKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0Cisr fSAgLy8gbmFtZXNwYWNlIGpzCisrCisrLy8gV2hldGhlciBhbiBJbW0zMiBmaXRzIGluIGFuIHVu c2lnbmVkIDE2LWJpdCBpbW1lZGlhdGUuCisrI2RlZmluZSBQUENfSU1NX09LX1UoeCkgKE1PWl9M SUtFTFkoKCh4KS52YWx1ZSAmIDB4ZmZmZjAwMDApID09IDApKQorKworKy8vIFdoZXRoZXIgYW4g SW1tMzIgZml0cyBpbiBhIHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRlLgorKyNkZWZpbmUgUFBDX0lN TV9PS19TKHgpICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKE1PWl9MSUtFTFkoKCh4KS52 YWx1ZSAmIDB4ZmZmZjgwMDApID09IDAgfHwgXAorKyAgICAgICAgICAgICAgKCh4KS52YWx1ZSAm IDB4ZmZmZjgwMDApID09IDB4ZmZmZjgwMDApKQorKworKy8vIFdoZXRoZXIgdGhlIG9mZnNldCBw YXJ0IG9mIGFuIEFkZHJlc3MgZml0cyBpbiBhIHNpZ25lZCAxNi1iaXQgaW1tZWRpYXRlLgorKyNk ZWZpbmUgUFBDX09GRlNfT0soeCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIChNT1pf TElLRUxZKCgoeCkub2Zmc2V0ICYgMHhmZmZmODAwMCkgPT0gMCB8fCBcCisrICAgICAgICAgICAg ICAoKHgpLm9mZnNldCAmIDB4ZmZmZjgwMDApID09IDB4ZmZmZjgwMDApKQorKworKy8vIFNhbWUg dGVzdCBidXQgY2hlY2tpbmcgYSBiaXQgYWhlYWQgKGZvciBwYWlyZWQgbG9hZHMpLgorKyNkZWZp bmUgUFBDX09GRlNfSU5DUl9PSyh4LCBpbmNyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAor KyAgKE1PWl9MSUtFTFkoKCgoeCkub2Zmc2V0ICsgKGluY3IpKSAmIDB4ZmZmZjgwMDApID09IDAg fHwgXAorKyAgICAgICAgICAgICAgKCgoeCkub2Zmc2V0ICsgKGluY3IpKSAmIDB4ZmZmZjgwMDAp ID09IDB4ZmZmZjgwMDApKQorKworKyNlbmRpZiAvKiBqaXRfcHBjNjRfQXNzZW1ibGVyX3BwYzY0 X2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQu Y3BwIGIvanMvc3JjL2ppdC9wcGM2NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmNwcAorbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMGE0MzZmYjEyMDFhCistLS0gL2Rldi9u dWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuY3BwCitAQCAt MCwwICsxLDM2NDcgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10 YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBz dHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAu IElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICog ZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4g Ki8KKysKKysjaW5jbHVkZSAiaml0L3BwYzY0L0NvZGVHZW5lcmF0b3ItcHBjNjQuaCIKKysKKysj aW5jbHVkZSAibW96aWxsYS9NYXRoQWxnb3JpdGhtcy5oIgorKworKyNpbmNsdWRlIDxiaXQ+Cisr CisrI2luY2x1ZGUgImJ1aWx0aW4vTnVtYmVyLmgiCisrI2luY2x1ZGUgImppdC9Db2RlR2VuZXJh dG9yLmgiCisrI2luY2x1ZGUgImppdC9JbmxpbmVTY3JpcHRUcmVlLmgiCisrI2luY2x1ZGUgImpp dC9KaXRSdW50aW1lLmgiCisrI2luY2x1ZGUgImppdC9NSVItd2FzbS5oIgorKyNpbmNsdWRlICJq aXQvTUlSLmgiCisrI2luY2x1ZGUgImppdC9NSVJHcmFwaC5oIgorKyNpbmNsdWRlICJ2bS9KU0Nv bnRleHQuaCIKKysjaW5jbHVkZSAidm0vUmVhbG0uaCIKKysjaW5jbHVkZSAidm0vU2hhcGUuaCIK KysKKysjaW5jbHVkZSAiaml0L3NoYXJlZC9Db2RlR2VuZXJhdG9yLXNoYXJlZC1pbmwuaCIKKysj aW5jbHVkZSAidm0vSlNTY3JpcHQtaW5sLmgiCisrCisrdXNpbmcgbmFtZXNwYWNlIGpzOworK3Vz aW5nIG5hbWVzcGFjZSBqczo6aml0OworKworK3VzaW5nIEpTOjpHZW5lcmljTmFOOworK3VzaW5n IG1vemlsbGE6Ok5lZ2F0aXZlSW5maW5pdHk7CisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3Bh Y2Ugaml0IHsKKysKKytDb2RlR2VuZXJhdG9yUFBDNjQ6OkNvZGVHZW5lcmF0b3JQUEM2NChNSVJH ZW5lcmF0b3IqIGdlbiwgTElSR3JhcGgqIGdyYXBoLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyKiBtYXNtLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206OkNvZGVNZXRhZGF0YSogY29kZU1ldGEp CisrICAgIDogQ29kZUdlbmVyYXRvclNoYXJlZChnZW4sIGdyYXBoLCBtYXNtLCBjb2RlTWV0YSkg e30KKysKKytPcGVyYW5kIENvZGVHZW5lcmF0b3JQUEM2NDo6VG9PcGVyYW5kKGNvbnN0IExBbGxv Y2F0aW9uJiBhKSB7CisrICBpZiAoYS5pc0dlbmVyYWxSZWcoKSkgeworKyAgICByZXR1cm4gT3Bl cmFuZChhLnRvR2VuZXJhbFJlZygpLT5yZWcoKSk7CisrICB9CisrICBpZiAoYS5pc0Zsb2F0UmVn KCkpIHsKKysgICAgcmV0dXJuIE9wZXJhbmQoYS50b0Zsb2F0UmVnKCktPnJlZygpKTsKKysgIH0K KysgIHJldHVybiBPcGVyYW5kKFRvQWRkcmVzcyhhKSk7CisrfQorKworK09wZXJhbmQgQ29kZUdl bmVyYXRvclBQQzY0OjpUb09wZXJhbmQoY29uc3QgTEFsbG9jYXRpb24qIGEpIHsKKysgIHJldHVy biBUb09wZXJhbmQoKmEpOworK30KKysKKytNb3ZlT3BlcmFuZCBDb2RlR2VuZXJhdG9yUFBDNjQ6 OnRvTW92ZU9wZXJhbmQoTEFsbG9jYXRpb24gYSkgY29uc3QgeworKyAgaWYgKGEuaXNHZW5lcmFs UmVnKCkpIHsKKysgICAgcmV0dXJuIE1vdmVPcGVyYW5kKFRvUmVnaXN0ZXIoYSkpOworKyAgfQor KyAgaWYgKGEuaXNGbG9hdFJlZygpKSB7CisrICAgIHJldHVybiBNb3ZlT3BlcmFuZChUb0Zsb2F0 UmVnaXN0ZXIoYSkpOworKyAgfQorKyAgTW92ZU9wZXJhbmQ6OktpbmQga2luZCA9IGEuaXNTdGFj a0FyZWEoKSA/IE1vdmVPcGVyYW5kOjpLaW5kOjpFZmZlY3RpdmVBZGRyZXNzCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTW92ZU9wZXJhbmQ6OktpbmQ6Ok1l bW9yeTsKKysgIEFkZHJlc3MgYWRkcmVzcyA9IFRvQWRkcmVzcyhhKTsKKysgIE1PWl9BU1NFUlQo KGFkZHJlc3Mub2Zmc2V0ICYgMykgPT0gMCk7CisrICByZXR1cm4gTW92ZU9wZXJhbmQoYWRkcmVz cywga2luZCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpiYWlsb3V0RnJvbShM YWJlbCogbGFiZWwsIExTbmFwc2hvdCogc25hcHNob3QpIHsKKysgIE1PWl9BU1NFUlRfSUYoIW1h c20ub29tKCksIGxhYmVsLT51c2VkKCkpOworKyAgTU9aX0FTU0VSVF9JRighbWFzbS5vb20oKSwg IWxhYmVsLT5ib3VuZCgpKTsKKysKKysgIGVuY29kZShzbmFwc2hvdCk7CisrCisrICBJbmxpbmVT Y3JpcHRUcmVlKiB0cmVlID0gc25hcHNob3QtPm1pcigpLT5ibG9jaygpLT50cmFja2VkVHJlZSgp OworKyAgYXV0byogb29sID0gbmV3IChhbGxvYygpKSBMYW1iZGFPdXRPZkxpbmVDb2RlKFs9LCB0 aGlzXShPdXRPZkxpbmVDb2RlJiBvb2wpIHsKKysgICAgLy8gUHVzaCBzbmFwc2hvdE9mZnNldCBh bmQgbWFrZSBzdXJlIHN0YWNrIGlzIGFsaWduZWQuCisrICAgIG1hc20uc3ViUHRyKEltbTMyKHNp emVvZihWYWx1ZSkpLCBTdGFja1BvaW50ZXIpOworKyAgICBtYXNtLnN0b3JlUHRyKEltbVdvcmQo c25hcHNob3QtPnNuYXBzaG90T2Zmc2V0KCkpLAorKyAgICAgICAgICAgICAgICAgIEFkZHJlc3Mo U3RhY2tQb2ludGVyLCAwKSk7CisrICAgIG1hc20uanVtcCgmZGVvcHRMYWJlbF8pOworKyAgfSk7 CisrICBhZGRPdXRPZkxpbmVDb2RlKG9vbCwKKysgICAgICAgICAgICAgICAgICAgbmV3IChhbGxv YygpKSBCeXRlY29kZVNpdGUodHJlZSwgdHJlZS0+c2NyaXB0KCktPmNvZGUoKSkpOworKworKyAg bWFzbS5yZXRhcmdldChsYWJlbCwgb29sLT5lbnRyeSgpKTsKKyt9CisrCisrdm9pZCBDb2RlR2Vu ZXJhdG9yUFBDNjQ6OmJhaWxvdXQoTFNuYXBzaG90KiBzbmFwc2hvdCkgeworKyAgTGFiZWwgbGFi ZWw7CisrICBtYXNtLmp1bXAoJmxhYmVsKTsKKysgIGJhaWxvdXRGcm9tKCZsYWJlbCwgc25hcHNo b3QpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6YmFpbG91dElmRmFsc2VCb29s KFJlZ2lzdGVyIGxocywgTFNuYXBzaG90KiBzbmFwc2hvdCkgeworKyAgTGFiZWwgYmFpbDsKKysg IG1hc20uYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgbGhzLCBJbW0zMigweEZGKSwgJmJh aWwpOworKyAgYmFpbG91dEZyb20oJmJhaWwsIHNuYXBzaG90KTsKKyt9CisrCisrYm9vbCBDb2Rl R2VuZXJhdG9yUFBDNjQ6OmdlbmVyYXRlT3V0T2ZMaW5lQ29kZSgpIHsKKysgIGlmICghQ29kZUdl bmVyYXRvclNoYXJlZDo6Z2VuZXJhdGVPdXRPZkxpbmVDb2RlKCkpIHsKKysgICAgcmV0dXJuIGZh bHNlOworKyAgfQorKworKyAgaWYgKGRlb3B0TGFiZWxfLnVzZWQoKSkgeworKyAgICBtYXNtLmJp bmQoJmRlb3B0TGFiZWxfKTsKKysKKysgICAgLy8gRnJhbWUgc2l6ZSBpcyBzdG9yZWQgaW4gTFIg YW5kIHB1c2hlZCBieSBHZW5lcmF0ZUJhaWxvdXRUaHVuaworKyAgICAvLyAodmlhIFB1c2hCYWls b3V0RnJhbWUgLT4gcHVzaFJldHVybkFkZHJlc3MgLT4gbWZscikuCisrICAgIHsKKysgICAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1hc20ubW92ZVB0cihJbW1Xb3JkKGZyYW1l U2l6ZSgpKSwgc2NyYXRjaCk7CisrICAgICAgbWFzbS54c19tdGxyKHNjcmF0Y2gpOworKyAgICB9 CisrCisrICAgIFRyYW1wb2xpbmVQdHIgaGFuZGxlciA9IGdlbi0+aml0UnVudGltZSgpLT5nZXRH ZW5lcmljQmFpbG91dEhhbmRsZXIoKTsKKysgICAgbWFzbS5qdW1wKGhhbmRsZXIpOworKyAgfQor KworKyAgcmV0dXJuICFtYXNtLm9vbSgpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3JQUEM2 NDo6YnJhbmNoVG9CbG9jayhNQmFzaWNCbG9jayogYmxvY2spIHsKKysgIExhYmVsKiBsYWJlbCA9 IHNraXBUcml2aWFsQmxvY2tzKGJsb2NrKS0+bGlyKCktPmxhYmVsKCk7CisrICBtYXNtLmp1bXAo bGFiZWwpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3JQUEM2NDo6YnJhbmNoVG9CbG9jayhB c3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQmFzaWNCbG9jayogbWlyKSB7 CisrICBMYWJlbCogbGFiZWwgPSBza2lwVHJpdmlhbEJsb2NrcyhtaXIpLT5saXIoKS0+bGFiZWwo KTsKKysgIG1hc20uYnJhbmNoRG91YmxlKGNvbmQsIGxocywgcmhzLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6RmxvYXRG b3JtYXQgZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2Vt Ymxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1CYXNpY0Jsb2NrKiBtaXIpIHsKKysg IExhYmVsKiBsYWJlbCA9IHNraXBUcml2aWFsQmxvY2tzKG1pciktPmxpcigpLT5sYWJlbCgpOwor KyAgaWYgKGZtdCA9PSBBc3NlbWJsZXI6OkRvdWJsZUZsb2F0KSB7CisrICAgIG1hc20uYnJhbmNo RG91YmxlKGNvbmQsIGxocywgcmhzLCBsYWJlbCk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmJy YW5jaEZsb2F0KGNvbmQsIGxocywgcmhzLCBsYWJlbCk7CisrICB9CisrfQorKworK2NsYXNzIE91 dE9mTGluZVRhYmxlU3dpdGNoIDogcHVibGljIE91dE9mTGluZUNvZGVCYXNlPENvZGVHZW5lcmF0 b3JQUEM2ND4geworKyAgTVRhYmxlU3dpdGNoKiBtaXJfOworKyAgQ29kZUxhYmVsIGp1bXBMYWJl bF87CisrCisrICB2b2lkIGFjY2VwdChDb2RlR2VuZXJhdG9yUFBDNjQqIGNvZGVnZW4pIHsKKysg ICAgY29kZWdlbi0+dmlzaXRPdXRPZkxpbmVUYWJsZVN3aXRjaCh0aGlzKTsKKysgIH0KKysKKysg cHVibGljOgorKyAgZXhwbGljaXQgT3V0T2ZMaW5lVGFibGVTd2l0Y2goTVRhYmxlU3dpdGNoKiBt aXIpIDogbWlyXyhtaXIpIHt9CisrCisrICBNVGFibGVTd2l0Y2gqIG1pcigpIGNvbnN0IHsgcmV0 dXJuIG1pcl87IH0KKysgIENvZGVMYWJlbCoganVtcExhYmVsKCkgeyByZXR1cm4gJmp1bXBMYWJl bF87IH0KKyt9OworKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjplbWl0VGFibGVTd2l0Y2hE aXNwYXRjaChNVGFibGVTd2l0Y2gqIG1pciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgaW5kZXgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGJhc2UpIHsKKysgIExhYmVs KiBkZWZhdWx0Y2FzZSA9IHNraXBUcml2aWFsQmxvY2tzKG1pci0+Z2V0RGVmYXVsdCgpKS0+bGly KCktPmxhYmVsKCk7CisrCisrICBpZiAobWlyLT5sb3coKSAhPSAwKSB7CisrICAgIG1hc20uc3Vi UHRyKEltbTMyKG1pci0+bG93KCkpLCBpbmRleCk7CisrICB9CisrCisrICBpbnQzMl90IGNhc2Vz ID0gbWlyLT5udW1DYXNlcygpOworKyAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpBYm92ZU9y RXF1YWwsIGluZGV4LCBJbW1Xb3JkKGNhc2VzKSwgZGVmYXVsdGNhc2UpOworKworKyAgT3V0T2ZM aW5lVGFibGVTd2l0Y2gqIG9vbCA9IG5ldyAoYWxsb2MoKSkgT3V0T2ZMaW5lVGFibGVTd2l0Y2go bWlyKTsKKysgIGFkZE91dE9mTGluZUNvZGUob29sLCBtaXIpOworKworKyAgbWFzbS5tb3Yob29s LT5qdW1wTGFiZWwoKSwgYmFzZSk7CisrCisrICBCYXNlSW5kZXggcG9pbnRlcihiYXNlLCBpbmRl eCwgU2NhbGVQb2ludGVyKTsKKysgIG1hc20uYnJhbmNoVG9Db21wdXRlZEFkZHJlc3MocG9pbnRl cik7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjpnZW5lcmF0ZUludmFsaWRhdGVF cGlsb2d1ZSgpIHsKKysgIC8vIFBhZCB3aXRoIGVub3VnaCBub3BzIHNvIHRoYXQgUGF0Y2hXcml0 ZV9OZWFyQ2FsbCBvbiB0aGUgbGFzdCBPU0kgcG9pbnQKKysgIC8vIGNhbm5vdCBvdmVybGFwIHRo ZSBpbnZhbGlkYXRpb24gZXBpbG9ndWUuIFRoZSBwYXRjaCBhcmVhIGlzCisrICAvLyBQYXRjaFdy aXRlX05lYXJDYWxsU2l6ZSAoNDApIGJ5dGVzOyB0aGUgbGFzdCBPU0kgcG9pbnQgY291bGQgYmUg cmlnaHQKKysgIC8vIGJlZm9yZSB0aGlzIGVwaWxvZ3VlLgorKyAgZm9yIChzaXplX3QgaSA9IDA7 IGkgPCBBc3NlbWJsZXI6OlBhdGNoV3JpdGVfTmVhckNhbGxTaXplKCk7CisrICAgICAgIGkgKz0g QXNzZW1ibGVyOjpOb3BTaXplKCkpIHsKKysgICAgbWFzbS5ub3AoKTsKKysgIH0KKysKKysgIG1h c20uYmluZCgmaW52YWxpZGF0ZV8pOworKworKyAgLy8gUHVzaCB0aGUgcmV0dXJuIGFkZHJlc3Mg KExSKSBvbnRvIHRoZSBzdGFjay4KKysgIG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKKysKKysg IGludmFsaWRhdGVFcGlsb2d1ZURhdGFfID0gbWFzbS5wdXNoV2l0aFBhdGNoKEltbVdvcmQodWlu dHB0cl90KC0xKSkpOworKworKyAgVHJhbXBvbGluZVB0ciB0aHVuayA9IGdlbi0+aml0UnVudGlt ZSgpLT5nZXRJbnZhbGlkYXRpb25UaHVuaygpOworKyAgbWFzbS5qdW1wKHRodW5rKTsKKyt9Cisr Cisrdm9pZCBDb2RlR2VuZXJhdG9yUFBDNjQ6OnZpc2l0T3V0T2ZMaW5lVGFibGVTd2l0Y2goT3V0 T2ZMaW5lVGFibGVTd2l0Y2gqIG9vbCkgeworKyAgTVRhYmxlU3dpdGNoKiBtaXIgPSBvb2wtPm1p cigpOworKworKyAgbWFzbS5oYWx0aW5nQWxpZ24oc2l6ZW9mKHZvaWQqKSk7CisrICBtYXNtLmJp bmQob29sLT5qdW1wTGFiZWwoKSk7CisrICBtYXNtLmFkZENvZGVMYWJlbCgqb29sLT5qdW1wTGFi ZWwoKSk7CisrCisrICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1pci0+bnVtQ2FzZXMoKTsgaSsr KSB7CisrICAgIExCbG9jayogY2FzZWJsb2NrID0gc2tpcFRyaXZpYWxCbG9ja3MobWlyLT5nZXRD YXNlKGkpKS0+bGlyKCk7CisrICAgIExhYmVsKiBjYXNlaGVhZGVyID0gY2FzZWJsb2NrLT5sYWJl bCgpOworKyAgICB1aW50MzJfdCBjYXNlb2Zmc2V0ID0gY2FzZWhlYWRlci0+b2Zmc2V0KCk7Cisr CisrICAgIENvZGVMYWJlbCBjbDsKKysgICAgbWFzbS53cml0ZUNvZGVQb2ludGVyKCZjbCk7Cisr ICAgIGNsLnRhcmdldCgpLT5iaW5kKGNhc2VvZmZzZXQpOworKyAgICBtYXNtLmFkZENvZGVMYWJl bChjbCk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0Ojp2aXNpdE91dE9m TGluZVdhc21UcnVuY2F0ZUNoZWNrKAorKyAgICBPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayog b29sKSB7CisrICBpZiAob29sLT50b1R5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgeworKyAgICBt YXNtLm91dE9mTGluZVdhc21UcnVuY2F0ZVRvSW50MzJDaGVjayhvb2wtPmlucHV0KCksIG9vbC0+ b3V0cHV0KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9v bC0+ZnJvbVR5cGUoKSwgb29sLT5mbGFncygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvb2wtPnJlam9pbigpLCBvb2wtPnRyYXBTaXRlRGVzYygpKTsKKysg IH0gZWxzZSB7CisrICAgIE1PWl9BU1NFUlQob29sLT50b1R5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2 NCk7CisrICAgIG1hc20ub3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKG9vbC0+aW5w dXQoKSwgb29sLT5vdXRwdXQ2NCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvb2wtPmZyb21UeXBlKCksIG9vbC0+ZmxhZ3MoKSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sLT5yZWpvaW4oKSwgb29sLT50cmFwU2l0 ZURlc2MoKSk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjplbWl0Qmln SW50UHRyRGl2KExCaWdJbnRQdHJEaXYqIGlucywgUmVnaXN0ZXIgZGl2aWRlbmQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGl2aXNvciwgUmVn aXN0ZXIgb3V0cHV0KSB7CisrICBtYXNtLmFzX2RpdmQob3V0cHV0LCBkaXZpZGVuZCwgZGl2aXNv cik7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvclBQQzY0OjplbWl0QmlnSW50UHRyTW9kKExC aWdJbnRQdHJNb2QqIGlucywgUmVnaXN0ZXIgZGl2aWRlbmQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGl2aXNvciwgUmVnaXN0ZXIgb3V0cHV0 KSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgbWFzbS5hc19tb2RzZChvdXRwdXQsIGRp dmlkZW5kLCBkaXZpc29yKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfZGl2ZChvdXRwdXQs IGRpdmlkZW5kLCBkaXZpc29yKTsKKysgICAgbWFzbS5hc19tdWxsZChvdXRwdXQsIG91dHB1dCwg ZGl2aXNvcik7CisrICAgIG1hc20uYXNfc3ViZihvdXRwdXQsIG91dHB1dCwgZGl2aWRlbmQpOwor KyAgfQorK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBWaXNpdG9yczogQm94L1VuYm94CisrCisrdm9p ZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEJveChMQm94KiBib3gpIHsKKysgIGNvbnN0IExBbGxvY2F0 aW9uKiBpbiA9IGJveC0+Z2V0T3BlcmFuZCgwKTsKKysgIFZhbHVlT3BlcmFuZCByZXN1bHQgPSBU b091dFZhbHVlKGJveCk7CisrCisrICBtYXNtLm1vdmVWYWx1ZShUeXBlZE9yVmFsdWVSZWdpc3Rl cihib3gtPnR5cGUoKSwgVG9BbnlSZWdpc3RlcihpbikpLCByZXN1bHQpOworK30KKysKKyt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0VW5ib3goTFVuYm94KiB1bmJveCkgeworKyAgTVVuYm94KiBt aXIgPSB1bmJveC0+bWlyKCk7CisrCisrICBSZWdpc3RlciByZXN1bHQgPSBUb1JlZ2lzdGVyKHVu Ym94LT5vdXRwdXQoKSk7CisrCisrICBpZiAobWlyLT5mYWxsaWJsZSgpKSB7CisrICAgIFZhbHVl T3BlcmFuZCB2YWx1ZSA9IFRvVmFsdWUodW5ib3gtPmlucHV0KCkpOworKyAgICBMYWJlbCBiYWls OworKyAgICBzd2l0Y2ggKG1pci0+dHlwZSgpKSB7CisrICAgICAgY2FzZSBNSVJUeXBlOjpJbnQz MjoKKysgICAgICAgIG1hc20uZmFsbGlibGVVbmJveEludDMyKHZhbHVlLCByZXN1bHQsICZiYWls KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgTUlSVHlwZTo6Qm9vbGVhbjoKKysgICAg ICAgIG1hc20uZmFsbGlibGVVbmJveEJvb2xlYW4odmFsdWUsIHJlc3VsdCwgJmJhaWwpOworKyAg ICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBNSVJUeXBlOjpPYmplY3Q6CisrICAgICAgICBtYXNt LmZhbGxpYmxlVW5ib3hPYmplY3QodmFsdWUsIHJlc3VsdCwgJmJhaWwpOworKyAgICAgICAgYnJl YWs7CisrICAgICAgY2FzZSBNSVJUeXBlOjpTdHJpbmc6CisrICAgICAgICBtYXNtLmZhbGxpYmxl VW5ib3hTdHJpbmcodmFsdWUsIHJlc3VsdCwgJmJhaWwpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgY2FzZSBNSVJUeXBlOjpTeW1ib2w6CisrICAgICAgICBtYXNtLmZhbGxpYmxlVW5ib3hTeW1i b2wodmFsdWUsIHJlc3VsdCwgJmJhaWwpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBN SVJUeXBlOjpCaWdJbnQ6CisrICAgICAgICBtYXNtLmZhbGxpYmxlVW5ib3hCaWdJbnQodmFsdWUs IHJlc3VsdCwgJmJhaWwpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAg ICAgIE1PWl9DUkFTSCgiR2l2ZW4gTUlSVHlwZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKKysgICAg fQorKyAgICBiYWlsb3V0RnJvbSgmYmFpbCwgdW5ib3gtPnNuYXBzaG90KCkpOworKyAgICByZXR1 cm47CisrICB9CisrCisrICBMQWxsb2NhdGlvbiogaW5wdXQgPSB1bmJveC0+Z2V0T3BlcmFuZChM VW5ib3g6OklucHV0KTsKKysgIGlmIChpbnB1dC0+aXNHZW5lcmFsUmVnKCkpIHsKKysgICAgUmVn aXN0ZXIgaW5wdXRSZWcgPSBUb1JlZ2lzdGVyKGlucHV0KTsKKysgICAgc3dpdGNoIChtaXItPnR5 cGUoKSkgeworKyAgICAgIGNhc2UgTUlSVHlwZTo6SW50MzI6CisrICAgICAgICBtYXNtLnVuYm94 SW50MzIoVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOwor KyAgICAgIGNhc2UgTUlSVHlwZTo6Qm9vbGVhbjoKKysgICAgICAgIG1hc20udW5ib3hCb29sZWFu KFZhbHVlT3BlcmFuZChpbnB1dFJlZyksIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysgICAg ICBjYXNlIE1JUlR5cGU6Ok9iamVjdDoKKysgICAgICAgIG1hc20udW5ib3hPYmplY3QoVmFsdWVP cGVyYW5kKGlucHV0UmVnKSwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2Ug TUlSVHlwZTo6U3RyaW5nOgorKyAgICAgICAgbWFzbS51bmJveFN0cmluZyhWYWx1ZU9wZXJhbmQo aW5wdXRSZWcpLCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBNSVJUeXBl OjpTeW1ib2w6CisrICAgICAgICBtYXNtLnVuYm94U3ltYm9sKFZhbHVlT3BlcmFuZChpbnB1dFJl ZyksIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIE1JUlR5cGU6OkJpZ0lu dDoKKysgICAgICAgIG1hc20udW5ib3hCaWdJbnQoVmFsdWVPcGVyYW5kKGlucHV0UmVnKSwgcmVz dWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JB U0goIkdpdmVuIE1JUlR5cGUgY2Fubm90IGJlIHVuYm94ZWQuIik7CisrICAgIH0KKysgICAgcmV0 dXJuOworKyAgfQorKworKyAgQWRkcmVzcyBpbnB1dEFkZHIgPSBUb0FkZHJlc3MoaW5wdXQpOwor KyAgc3dpdGNoIChtaXItPnR5cGUoKSkgeworKyAgICBjYXNlIE1JUlR5cGU6OkludDMyOgorKyAg ICAgIG1hc20udW5ib3hJbnQzMihpbnB1dEFkZHIsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgTUlSVHlwZTo6Qm9vbGVhbjoKKysgICAgICBtYXNtLnVuYm94Qm9vbGVhbihpbnB1 dEFkZHIsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTUlSVHlwZTo6T2JqZWN0 OgorKyAgICAgIG1hc20udW5ib3hPYmplY3QoaW5wdXRBZGRyLCByZXN1bHQpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIE1JUlR5cGU6OlN0cmluZzoKKysgICAgICBtYXNtLnVuYm94U3RyaW5n KGlucHV0QWRkciwgcmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBNSVJUeXBlOjpT eW1ib2w6CisrICAgICAgbWFzbS51bmJveFN5bWJvbChpbnB1dEFkZHIsIHJlc3VsdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2UgTUlSVHlwZTo6QmlnSW50OgorKyAgICAgIG1hc20udW5ib3hC aWdJbnQoaW5wdXRBZGRyLCByZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0Ogor KyAgICAgIE1PWl9DUkFTSCgiR2l2ZW4gTUlSVHlwZSBjYW5ub3QgYmUgdW5ib3hlZC4iKTsKKysg IH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6IEludGVnZXIgQXJpdGhtZXRpYwor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBZGRJKExBZGRJKiBpbnMpIHsKKysgIExBbGxv Y2F0aW9uKiBsaHMgPSBpbnMtPmdldE9wZXJhbmQoMCk7CisrICBMQWxsb2NhdGlvbiogcmhzID0g aW5zLT5nZXRPcGVyYW5kKDEpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5n ZXREZWYoMCkpOworKworKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAgIEltbTMyIGlt bShUb0ludDMyKHJocykpOworKyAgICBpZiAoaW5zLT5zbmFwc2hvdCgpKSB7CisrICAgICAgbWFz bS5tb3ZlMzIoVG9SZWdpc3RlcihsaHMpLCBkZXN0KTsKKysgICAgICBMYWJlbCBvdmVyZmxvdzsK KysgICAgICBtYXNtLmJyYW5jaEFkZDMyKEFzc2VtYmxlcjo6T3ZlcmZsb3csIGltbSwgZGVzdCwg Jm92ZXJmbG93KTsKKysgICAgICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3Qo KSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5hZGQzMihpbW0sIFRvUmVnaXN0ZXIobGhz KSwgZGVzdCk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFJlZ2lzdGVyIHJoc1JlZyA9IFRv UmVnaXN0ZXIocmhzKTsKKysgICAgaWYgKGlucy0+c25hcHNob3QoKSkgeworKyAgICAgIC8vIFVz ZSAzLW9wZXJhbmQgYWRkIHRvIGF2b2lkIGNsb2JiZXJpbmcgcmhzIHdoZW4gcmhzID09IGRlc3Qu CisrICAgICAgbWFzbS5hc19hZGQoZGVzdCwgVG9SZWdpc3RlcihsaHMpLCByaHNSZWcpOworKyAg ICAgIC8vIENoZWNrIDMyLWJpdCBvdmVyZmxvdzogc2lnbi1leHRlbmQgbG93ZXIgMzIgYW5kIGNv bXBhcmUuCisrICAgICAgbWFzbS5hc19leHRzdyhTZWNvbmRTY3JhdGNoUmVnLCBkZXN0KTsKKysg ICAgICBMYWJlbCBvdmVyZmxvdzsKKysgICAgICBtYXNtLmFzX2NtcGQoZGVzdCwgU2Vjb25kU2Ny YXRjaFJlZyk7CisrICAgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZvdmVyZmxv dyk7CisrICAgICAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgICBiYWlsb3V0RnJv bSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFz bS5hc19hZGQoZGVzdCwgVG9SZWdpc3RlcihsaHMpLCByaHNSZWcpOworKyAgICAgIG1hc20uYXNf ZXh0c3coZGVzdCwgZGVzdCk7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdEFkZEludFB0cihMQWRkSW50UHRyKiBpbnMpIHsKKysgIFJlZ2lzdGVyIGRlc3Qg PSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0 ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBpbnMt PmdldE9wZXJhbmQoMSk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgaWYg KGxocyAhPSBkZXN0KSB7CisrICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgIH0K KysgICAgbWFzbS5hZGRQdHIoSW1tV29yZChUb0ludFB0cihyaHMpKSwgZGVzdCk7CisrICB9IGVs c2UgeworKyAgICBtYXNtLmFzX2FkZChkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7CisrICB9 CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBZGRJNjQoTEFkZEk2NCogbGlyKSB7 CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihsaXItPmdldERlZigwKSk7CisrICBSZWdp c3RlciBsaHMgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgwKSk7CisrICBjb25zdCBMQWxs b2NhdGlvbiogcmhzID0gbGlyLT5nZXRPcGVyYW5kKDEpOworKworKyAgaWYgKHJocy0+aXNDb25z dGFudCgpKSB7CisrICAgIGlmIChsaHMgIT0gZGVzdCkgeworKyAgICAgIG1hc20ubW92ZVB0cihs aHMsIGRlc3QpOworKyAgICB9CisrICAgIG1hc20uYWRkUHRyKEltbVdvcmQoVG9JbnQ2NChyaHMp KSwgZGVzdCk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX2FkZChkZXN0LCBsaHMsIFRvUmVn aXN0ZXIocmhzKSk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTdWJJ KExTdWJJKiBpbnMpIHsKKysgIExBbGxvY2F0aW9uKiBsaHMgPSBpbnMtPmdldE9wZXJhbmQoMCk7 CisrICBMQWxsb2NhdGlvbiogcmhzID0gaW5zLT5nZXRPcGVyYW5kKDEpOworKyAgUmVnaXN0ZXIg ZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOworKworKyAgaWYgKHJocy0+aXNDb25z dGFudCgpKSB7CisrICAgIEltbTMyIGltbShUb0ludDMyKHJocykpOworKyAgICBpZiAoaW5zLT5z bmFwc2hvdCgpKSB7CisrICAgICAgbWFzbS5tb3ZlMzIoVG9SZWdpc3RlcihsaHMpLCBkZXN0KTsK KysgICAgICBMYWJlbCBvdmVyZmxvdzsKKysgICAgICBtYXNtLmJyYW5jaFN1YjMyKEFzc2VtYmxl cjo6T3ZlcmZsb3csIGltbSwgZGVzdCwgJm92ZXJmbG93KTsKKysgICAgICBiYWlsb3V0RnJvbSgm b3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS5t b3ZlMzIoVG9SZWdpc3RlcihsaHMpLCBkZXN0KTsKKysgICAgICBtYXNtLnN1YjMyKGltbSwgZGVz dCk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFJlZ2lzdGVyIHJoc1JlZyA9IFRvUmVnaXN0 ZXIocmhzKTsKKysgICAgaWYgKGlucy0+c25hcHNob3QoKSkgeworKyAgICAgIC8vIGFzX3N1YmYo ZCwgYSwgYikgY29tcHV0ZXMgZCA9IGIgLSBhLCBzbyBzdWJmKGRlc3QsIHJocywgbGhzKSA9IGxo cyAtCisrICAgICAgLy8gcmhzCisrICAgICAgbWFzbS5hc19zdWJmKGRlc3QsIHJoc1JlZywgVG9S ZWdpc3RlcihsaHMpKTsKKysgICAgICBtYXNtLmFzX2V4dHN3KFNlY29uZFNjcmF0Y2hSZWcsIGRl c3QpOworKyAgICAgIExhYmVsIG92ZXJmbG93OworKyAgICAgIG1hc20uYXNfY21wZChkZXN0LCBT ZWNvbmRTY3JhdGNoUmVnKTsKKysgICAgICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwg Jm92ZXJmbG93KTsKKysgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIGJh aWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfSBlbHNlIHsKKysg ICAgICBtYXNtLmFzX3N1YmYoZGVzdCwgcmhzUmVnLCBUb1JlZ2lzdGVyKGxocykpOworKyAgICAg IG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFN1YkludFB0cihMU3ViSW50UHRyKiBpbnMpIHsKKysgIFJlZ2lz dGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKKysgIFJlZ2lzdGVyIGxocyA9 IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uKiBy aHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsK KysgICAgaWYgKGxocyAhPSBkZXN0KSB7CisrICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7 CisrICAgIH0KKysgICAgbWFzbS5zdWJQdHIoSW1tMzIoVG9JbnRQdHIocmhzKSksIGRlc3QpOwor KyAgfSBlbHNlIHsKKysgICAgLy8gYXNfc3ViZihkLCBhLCBiKSA9IGIgLSBhCisrICAgIG1hc20u YXNfc3ViZihkZXN0LCBUb1JlZ2lzdGVyKHJocyksIGxocyk7CisrICB9CisrfQorKworK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRTdWJJNjQoTFN1Ykk2NCogbGlyKSB7CisrICBSZWdpc3RlciBk ZXN0ID0gVG9SZWdpc3RlcihsaXItPmdldERlZigwKSk7CisrICBSZWdpc3RlciBsaHMgPSBUb1Jl Z2lzdGVyKGxpci0+Z2V0T3BlcmFuZCgwKSk7CisrICBjb25zdCBMQWxsb2NhdGlvbiogcmhzID0g bGlyLT5nZXRPcGVyYW5kKDEpOworKworKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAg IGlmIChsaHMgIT0gZGVzdCkgeworKyAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAg ICB9CisrICAgIG1hc20uc3ViNjQoSW1tNjQoVG9JbnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0 KSk7CisrICB9IGVsc2UgeworKyAgICAvLyBhc19zdWJmKGQsIGEsIGIpID0gYiAtIGEKKysgICAg bWFzbS5hc19zdWJmKGRlc3QsIFRvUmVnaXN0ZXIocmhzKSwgbGhzKTsKKysgIH0KKyt9CisrCisr dm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE11bEkoTE11bEkqIGlucykgeworKyAgUmVnaXN0ZXIg ZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5nZXREZWYoMCkpOworKyAgUmVnaXN0ZXIgbGhzID0gVG9S ZWdpc3RlcihpbnMtPmdldE9wZXJhbmQoMCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9 IGlucy0+Z2V0T3BlcmFuZCgxKTsKKysgIE1NdWwqIG11bCA9IGlucy0+bWlyKCk7CisrCisrICBp ZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgaW50MzJfdCBjb25zdGFudCA9IFRvSW50MzIo cmhzKTsKKysgICAgUmVnaXN0ZXIgc3JjID0gbGhzOworKworKyAgICAvLyBCYWlsb3V0IG9uIC0w LjAgYmVmb3JlIHRoZSBzcGVjaWFsLWNhc2UgaGFuZGxpbmcgYmVsb3csIHNpbmNlIGNhc2VzCisr ICAgIC8vIGxpa2UgLTEgYW5kIDAgcmV0dXJuIGVhcmx5IGFuZCB3b3VsZCBza2lwIHRoZSBjaGVj ay4KKysgICAgaWYgKG11bC0+Y2FuQmVOZWdhdGl2ZVplcm8oKSAmJiBjb25zdGFudCA8PSAwKSB7 CisrICAgICAgQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCA9CisrICAgICAgICAgIChjb25zdGFu dCA9PSAwKSA/IEFzc2VtYmxlcjo6U2lnbmVkIDogQXNzZW1ibGVyOjpFcXVhbDsKKysgICAgICBi YWlsb3V0Q21wMzIoY29uZCwgc3JjLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAg fQorKworKyAgICBzd2l0Y2ggKGNvbnN0YW50KSB7CisrICAgICAgY2FzZSAtMToKKysgICAgICAg IGlmIChtdWwtPmNhbk92ZXJmbG93KCkpIHsKKysgICAgICAgICAgTGFiZWwgb2s7CisrICAgICAg ICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQz Ml9NSU4pLCAmb2spOworKyAgICAgICAgICBiYWlsb3V0KGlucy0+c25hcHNob3QoKSk7CisrICAg ICAgICAgIG1hc20uYmluZCgmb2spOworKyAgICAgICAgfQorKyAgICAgICAgbWFzbS5hc19uZWco ZGVzdCwgc3JjKTsKKysgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAg ICByZXR1cm47CisrICAgICAgY2FzZSAwOgorKyAgICAgICAgbWFzbS5tb3ZlMzIoSW1tMzIoMCks IGRlc3QpOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIGNhc2UgMToKKysgICAgICAgIG1hc20u bW92ZTMyKHNyYywgZGVzdCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgY2FzZSAyOgorKyAg ICAgICAgaWYgKG11bC0+Y2FuT3ZlcmZsb3coKSkgeworKyAgICAgICAgICBtYXNtLm1vdmUzMihz cmMsIGRlc3QpOworKyAgICAgICAgICBMYWJlbCBvdmVyZmxvdzsKKysgICAgICAgICAgbWFzbS5i cmFuY2hBZGQzMihBc3NlbWJsZXI6Ok92ZXJmbG93LCBkZXN0LCBkZXN0LCAmb3ZlcmZsb3cpOwor KyAgICAgICAgICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7CisrICAg ICAgICB9IGVsc2UgeworKyAgICAgICAgICBtYXNtLm1vdmUzMihzcmMsIGRlc3QpOworKyAgICAg ICAgICBtYXNtLmFkZDMyKGRlc3QsIGRlc3QpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0dXJu OworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyBD aGVjayBmb3IgcG93ZXIgb2YgMiAocG9zaXRpdmUpLgorKyAgICB1aW50MzJfdCBhYnNDc3QgPSBt b3ppbGxhOjpBYnMoY29uc3RhbnQpOworKyAgICBpZiAoYWJzQ3N0ID4gMCAmJiAoYWJzQ3N0ICYg KGFic0NzdCAtIDEpKSA9PSAwICYmICFtdWwtPmNhbk92ZXJmbG93KCkpIHsKKysgICAgICB1aW50 MzJfdCBzaGlmdCA9IG1vemlsbGE6OkZsb29yTG9nMihhYnNDc3QpOworKyAgICAgIG1hc20ueF9z bHdpKGRlc3QsIHNyYywgc2hpZnQpOworKyAgICAgIGlmIChjb25zdGFudCA8IDApIHsKKysgICAg ICAgIG1hc20uYXNfbmVnKGRlc3QsIGRlc3QpOworKyAgICAgIH0KKysgICAgICBtYXNtLmFzX2V4 dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICAvLyBHZW5l cmFsIGNhc2UuCisrICAgIGlmIChtdWwtPmNhbk92ZXJmbG93KCkpIHsKKysgICAgICBtYXNtLm1v dmUzMihzcmMsIGRlc3QpOworKyAgICAgIExhYmVsIG92ZXJmbG93OworKyAgICAgIG1hc20uYnJh bmNoTXVsMzIoQXNzZW1ibGVyOjpPdmVyZmxvdywgSW1tMzIoY29uc3RhbnQpLCBkZXN0LCAmb3Zl cmZsb3cpOworKyAgICAgIGJhaWxvdXRGcm9tKCZvdmVyZmxvdywgaW5zLT5zbmFwc2hvdCgpKTsK KysgICAgfSBlbHNlIHsKKysgICAgICBtYXNtLm1vdmUzMihzcmMsIGRlc3QpOworKyAgICAgIG1h c20ubXVsMzIoSW1tMzIoY29uc3RhbnQpLCBkZXN0KTsKKysgICAgfQorKworKyAgICAvLyBDaGVj ayBmb3IgbmVnYXRpdmUgemVybyAoZm9yIGNvbnN0YW50cyBub3QgaGFuZGxlZCBhYm92ZSkuCisr ICAgIGlmIChtdWwtPmNhbkJlTmVnYXRpdmVaZXJvKCkgJiYgY29uc3RhbnQgPCAwKSB7CisrICAg ICAgTGFiZWwgb2s7CisrICAgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg ZGVzdCwgSW1tV29yZCgwKSwgJm9rKTsKKysgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpT aWduZWQsIHNyYywgc3JjLCBpbnMtPnNuYXBzaG90KCkpOworKyAgICAgIG1hc20uYmluZCgmb2sp OworKyAgICB9CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIFJlZ2lzdGVyIHJoc1JlZyA9IFRv UmVnaXN0ZXIocmhzKTsKKysKKysgIGlmIChtdWwtPmNhbk92ZXJmbG93KCkpIHsKKysgICAgLy8g VXNlIDY0LWJpdCBtdWx0aXBseSBzbyB0aGUgZnVsbCByZXN1bHQgaXMgZGV0ZXJtaW5pc3RpYywg dGhlbiBjaGVjaworKyAgICAvLyB3aGV0aGVyIHRydW5jYXRpbmcgdG8gMzIgYml0cyBjaGFuZ2Vz IHRoZSB2YWx1ZS4gTWF0Y2ggdGhlCisrICAgIC8vIHZpc2l0QWRkSS92aXNpdFN1Ykkgb3JkZXJp bmc6IGJyYW5jaCBmaXJzdCwgdHJ1bmNhdGUgb25seSBvbiB0aGUKKysgICAgLy8gc3VjY2VzcyBw YXRoICh0aGUgYmFpbG91dCBkaXNjYXJkcyBkZXN0IGFueXdheSkuIGV4dHN3IGlzCisrICAgIC8v IG5vbi1yZWNvcmRpbmcgKElTQSB2My4wQikgc28gaXQgZG9lc24ndCBkaXN0dXJiIENSMAorKyAg ICAvLyBlaXRoZXIgd2F5OyB0aGUgY2hvaWNlIGlzIGZvciBjb25zaXN0ZW5jeS4KKysgICAgbWFz bS5hc19tdWxsZChkZXN0LCBsaHMsIHJoc1JlZyk7CisrICAgIG1hc20uYXNfZXh0c3coU2Vjb25k U2NyYXRjaFJlZywgZGVzdCk7CisrICAgIExhYmVsIG92ZXJmbG93OworKyAgICBtYXNtLmFzX2Nt cGQoZGVzdCwgU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5v dEVxdWFsLCAmb3ZlcmZsb3cpOworKyAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAg ICBiYWlsb3V0RnJvbSgmb3ZlcmZsb3csIGlucy0+c25hcHNob3QoKSk7CisrICB9IGVsc2Ugewor KyAgICBtYXNtLmFzX211bGx3KGRlc3QsIGxocywgcmhzUmVnKTsKKysgICAgbWFzbS5hc19leHRz dyhkZXN0LCBkZXN0KTsKKysgIH0KKysKKysgIGlmIChtdWwtPmNhbkJlTmVnYXRpdmVaZXJvKCkp IHsKKysgICAgTGFiZWwgZG9uZTsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgZGVzdCwgSW1tV29yZCgwKSwgJmRvbmUpOworKyAgICAvLyBSZXN1bHQgaXMgMC4gQ2hl Y2sgaWYgbGhzfHJocyB3YXMgbmVnYXRpdmUuCisrICAgIHsKKysgICAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgICAgIG1hc20uYXNfb3JfKHNjcmF0Y2gsIGxocywgcmhzUmVnKTsKKysg ICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpTaWduZWQsIHNjcmF0Y2gsIHNjcmF0Y2gsIGlu cy0+c25hcHNob3QoKSk7CisrICAgIH0KKysgICAgbWFzbS5iaW5kKCZkb25lKTsKKysgIH0KKyt9 CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE11bEludFB0cihMTXVsSW50UHRyKiBpbnMp IHsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKKysgIFJl Z2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5nZXRPcGVyYW5kKDApKTsKKysgIGNvbnN0IExB bGxvY2F0aW9uKiByaHMgPSBpbnMtPmdldE9wZXJhbmQoMSk7CisrCisrICBpZiAocmhzLT5pc0Nv bnN0YW50KCkpIHsKKysgICAgaWYgKGxocyAhPSBkZXN0KSB7CisrICAgICAgbWFzbS5tb3ZlUHRy KGxocywgZGVzdCk7CisrICAgIH0KKysgICAgbWFzbS5tdWxQdHIoSW1tV29yZChUb0ludFB0cihy aHMpKSwgZGVzdCk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX211bGxkKGRlc3QsIGxocywg VG9SZWdpc3RlcihyaHMpKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dE11bEk2NChMTXVsSTY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGxp ci0+Z2V0RGVmKDApKTsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVy YW5kKDApKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBsaXItPmdldE9wZXJhbmQoMSk7 CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgaWYgKGxocyAhPSBkZXN0KSB7 CisrICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgIH0KKysgICAgbWFzbS5tdWxQ dHIoSW1tV29yZChUb0ludDY0KHJocykpLCBkZXN0KTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20u YXNfbXVsbGQoZGVzdCwgbGhzLCBUb1JlZ2lzdGVyKHJocykpOworKyAgfQorK30KKysKKyt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0RGl2SShMRGl2SSogaW5zKSB7CisrICBSZWdpc3RlciBsaHMg PSBUb1JlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgUmVnaXN0ZXIgcmhzID0gVG9SZWdpc3Rlcihp bnMtPnJocygpKTsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OworKyAgUmVnaXN0ZXIgdGVtcCA9IFRvUmVnaXN0ZXIoaW5zLT50ZW1wMCgpKTsKKysgIE1EaXYq IG1pciA9IGlucy0+bWlyKCk7CisrCisrICBMYWJlbCBkb25lOworKworKyAgLy8gSGFuZGxlIGRp dmlkZSBieSB6ZXJvLgorKyAgaWYgKG1pci0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgeworKyAgICBp ZiAobWlyLT50cmFwT25FcnJvcigpKSB7CisrICAgICAgTGFiZWwgbm9uWmVybzsKKysgICAgICBt YXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25a ZXJvKTsKKysgICAgICBtYXNtLndhc21UcmFwKHdhc206OlRyYXA6OkludGVnZXJEaXZpZGVCeVpl cm8sIG1pci0+dHJhcFNpdGVEZXNjKCkpOworKyAgICAgIG1hc20uYmluZCgmbm9uWmVybyk7Cisr ICAgIH0gZWxzZSBpZiAobWlyLT5jYW5UcnVuY2F0ZUluZmluaXRpZXMoKSkgeworKyAgICAgIExh YmVsIG5vblplcm87CisrICAgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg cmhzLCBJbW1Xb3JkKDApLCAmbm9uWmVybyk7CisrICAgICAgbWFzbS5tb3ZlMzIoSW1tMzIoMCks IGRlc3QpOworKyAgICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgICAgbWFzbS5iaW5kKCZub25a ZXJvKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUoKSk7 CisrICAgICAgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6RXF1YWwsIHJocywgSW1tMzIoMCksIGlu cy0+c25hcHNob3QoKSk7CisrICAgIH0KKysgIH0KKysKKysgIC8vIEhhbmRsZSBJTlQzMl9NSU4g LyAtMSBvdmVyZmxvdy4KKysgIGlmIChtaXItPmNhbkJlTmVnYXRpdmVPdmVyZmxvdygpKSB7Cisr ICAgIExhYmVsIG5vdE1pbkludDsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZub3RNaW5JbnQpOworKyAgICBtYXNtLmJy YW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEpLCAmbm90TWluSW50 KTsKKysKKysgICAgaWYgKG1pci0+dHJhcE9uRXJyb3IoKSkgeworKyAgICAgIG1hc20ud2FzbVRy YXAod2FzbTo6VHJhcDo6SW50ZWdlck92ZXJmbG93LCBtaXItPnRyYXBTaXRlRGVzYygpKTsKKysg ICAgfSBlbHNlIGlmIChtaXItPmNhblRydW5jYXRlT3ZlcmZsb3coKSkgeworKyAgICAgIG1hc20u bW92ZTMyKEltbTMyKElOVDMyX01JTiksIGRlc3QpOworKyAgICAgIG1hc20uanVtcCgmZG9uZSk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0FTU0VSVChtaXItPmZhbGxpYmxlKCkpOworKyAg ICAgIGJhaWxvdXQoaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKyAgICBtYXNtLmJpbmQoJm5v dE1pbkludCk7CisrICB9CisrCisrICAvLyBIYW5kbGUgbmVnYXRpdmUgemVyby4KKysgIGlmICgh bWlyLT5jYW5UcnVuY2F0ZU5lZ2F0aXZlWmVybygpICYmIG1pci0+Y2FuQmVOZWdhdGl2ZVplcm8o KSkgeworKyAgICBMYWJlbCBvazsKKysgICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RF cXVhbCwgbGhzLCBJbW1Xb3JkKDApLCAmb2spOworKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVy OjpMZXNzVGhhbiwgcmhzLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgbWFzbS5i aW5kKCZvayk7CisrICB9CisrCisrICAvLyBQZXJmb3JtIHRoZSBkaXZpc2lvbi4KKysgIG1hc20u YXNfZGl2dyhkZXN0LCBsaHMsIHJocyk7CisrICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwor KworKyAgLy8gQ2hlY2sgcmVtYWluZGVyIGlmIG5vdCB0cnVuY2F0YWJsZS4KKysgIGlmICghbWly LT5jYW5UcnVuY2F0ZVJlbWFpbmRlcigpKSB7CisrICAgIC8vIENvbXB1dGUgcmVtYWluZGVyOiB0 ZW1wID0gbGhzIC0gKGRlc3QgKiByaHMpCisrICAgIG1hc20uYXNfbXVsbHcodGVtcCwgZGVzdCwg cmhzKTsKKysgICAgbWFzbS5hc19zdWJmKHRlbXAsIHRlbXAsIGxocyk7ICAvLyB0ZW1wID0gbGhz IC0gdGVtcAorKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcCwgSW1t MzIoMCksIGlucy0+c25hcHNob3QoKSk7CisrICB9CisrCisrICBtYXNtLmJpbmQoJmRvbmUpOwor K30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0RGl2UG93VHdvSShMRGl2UG93VHdvSSog aW5zKSB7CisrICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bnVtZXJhdG9yKCkpOwor KyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIGludDMyX3Qgc2hpZnQgPSBpbnMtPnNoaWZ0KCk7CisrCisrICBpZiAoc2hp ZnQgIT0gMCkgeworKyAgICBNRGl2KiBtaXIgPSBpbnMtPm1pcigpOworKworKyAgICBpZiAoIW1p ci0+aXNUcnVuY2F0ZWQoKSkgeworKyAgICAgIC8vIElmIHJlbWFpbmRlciAhPSAwLCBiYWlsb3V0 IChjaGVjayBsb3dlciAnc2hpZnQnIGJpdHMpLgorKyAgICAgIG1hc20ueF9zbHdpKHRtcCwgbGhz LCAzMiAtIHNoaWZ0KTsKKysgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwg dG1wLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKworKyAgICBpZiAoIW1p ci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkpIHsKKysgICAgICAvLyBOb24tbmVnYXRpdmUgZGl2 aWRlbmQ6IHNpbXBsZSByaWdodCBzaGlmdC4KKysgICAgICBtYXNtLmFzX3NyYXdpKGRlc3QsIGxo cywgc2hpZnQpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIE5lZWQgcm91bmRpbmcgYWRqdXN0 bWVudCBmb3IgbmVnYXRpdmUgbnVtYmVycy4KKysgICAgICAvLyBBZGQgKDEgPDwgc2hpZnQpIC0g MSBpZiBsaHMgaXMgbmVnYXRpdmUuCisrICAgICAgaWYgKHNoaWZ0ID4gMSkgeworKyAgICAgICAg bWFzbS5hc19zcmF3aSh0bXAsIGxocywgMzEpOworKyAgICAgICAgbWFzbS5hc19ybHdpbm0odG1w LCB0bXAsIDAsIDMyIC0gc2hpZnQsIDMxKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgLy8g c2hpZnQgPT0gMTogZXh0cmFjdCBzaWduIGJpdCBpbnRvIGJpdCAzMQorKyAgICAgICAgbWFzbS5h c19ybHdpbm0odG1wLCBsaHMsIDEsIDMxLCAzMSk7CisrICAgICAgfQorKyAgICAgIG1hc20uYWRk MzIobGhzLCB0bXApOworKyAgICAgIG1hc20uYXNfc3Jhd2koZGVzdCwgdG1wLCBzaGlmdCk7Cisr ICAgIH0KKysgIH0gZWxzZSB7CisrICAgIG1hc20ubW92ZTMyKGxocywgZGVzdCk7CisrICB9Cisr fQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNb2RJKExNb2RJKiBpbnMpIHsKKysgIFJl Z2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBSZWdpc3RlciByaHMgPSBU b1JlZ2lzdGVyKGlucy0+cmhzKCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5z LT5vdXRwdXQoKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysg IFJlZ2lzdGVyIHRlbXAgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBNTW9kKiBtaXIgPSBpbnMtPm1p cigpOworKyAgTGFiZWwgZG9uZTsKKysKKysgIC8vIEhhbmRsZSBkaXZpZGUgYnkgemVyby4KKysg IGlmIChtaXItPmNhbkJlRGl2aWRlQnlaZXJvKCkpIHsKKysgICAgaWYgKG1pci0+aXNUcnVuY2F0 ZWQoKSkgeworKyAgICAgIGlmIChtaXItPnRyYXBPbkVycm9yKCkpIHsKKysgICAgICAgIExhYmVs IG5vblplcm87CisrICAgICAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBy aHMsIEltbVdvcmQoMCksICZub25aZXJvKTsKKysgICAgICAgIG1hc20ud2FzbVRyYXAod2FzbTo6 VHJhcDo6SW50ZWdlckRpdmlkZUJ5WmVybywgbWlyLT50cmFwU2l0ZURlc2MoKSk7CisrICAgICAg ICBtYXNtLmJpbmQoJm5vblplcm8pOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvLyBUcnVu Y2F0ZWQgZGl2aXNpb24gYnkgemVybyB5aWVsZHMgaW50ZWdlciB6ZXJvLgorKyAgICAgICAgbWFz bS5tb3ZlMzIocmhzLCBkZXN0KTsKKysgICAgICAgIExhYmVsIG5vblplcm87CisrICAgICAgICBt YXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoMCksICZub25a ZXJvKTsKKysgICAgICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgICAgICBtYXNtLmJpbmQoJm5v blplcm8pOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKG1pci0+ ZmFsbGlibGUoKSk7CisrICAgICAgYmFpbG91dENtcDMyKEFzc2VtYmxlcjo6RXF1YWwsIHJocywg SW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7CisrICAgIH0KKysgIH0KKysKKysgIC8vIEhhbmRs ZSBJTlQzMl9NSU4gJSAtMS4KKysgIC8vIFBQQzY0IGRpdncgaXMgdW5kZWZpbmVkIGZvciBJTlQz Ml9NSU4gLyAtMSAocXVvdGllbnQgb3ZlcmZsb3dzKSwgc28gd2UKKysgIC8vIG11c3QgcmV0dXJu IDAgZXhwbGljaXRseS4gIFRoZSB3YXNtIHNwZWMgYWxzbyBkZWZpbmVzIHJlbV9zKE1JTiwgLTEp ID0gMC4KKysgIGlmICghbWlyLT5pc1Vuc2lnbmVkKCkpIHsKKysgICAgTGFiZWwgbm90TWluT3Zl cmZsb3c7CisrICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1t V29yZChJTlQzMl9NSU4pLAorKyAgICAgICAgICAgICAgICAgICAmbm90TWluT3ZlcmZsb3cpOwor KyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEp LCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBtYXNtLm1vdmUzMihJbW0zMigwKSwgZGVzdCk7Cisr ICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgIG1hc20uYmluZCgmbm90TWluT3ZlcmZsb3cpOwor KyAgfQorKworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIG1hc20uYXNfbW9kc3coZGVzdCwg bGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hc19kaXZ3KHRlbXAsIGxocywgcmhz KTsKKysgICAgbWFzbS5hc19tdWxsdyh0ZW1wLCB0ZW1wLCByaHMpOworKyAgICBtYXNtLmFzX3N1 YmYoZGVzdCwgdGVtcCwgbGhzKTsKKysgIH0KKysgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7 CisrCisrICAvLyBJZiBYJVkgPT0gMCBhbmQgWCA8IDAsIHRoZSByZXN1bHQgaXMgLTAsIGFuZCB3 ZSBuZWVkIHRvIGJhaWwgb3V0LgorKyAgaWYgKG1pci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkg JiYgIW1pci0+aXNUcnVuY2F0ZWQoKSkgeworKyAgICBNT1pfQVNTRVJUKG1pci0+ZmFsbGlibGUo KSk7CisrICAgIExhYmVsIG9rOworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVx dWFsLCBkZXN0LCBJbW1Xb3JkKDApLCAmb2spOworKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVy OjpTaWduZWQsIGxocywgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7CisrICAgIG1hc20uYmlu ZCgmb2spOworKyAgfQorKworKyAgbWFzbS5iaW5kKCZkb25lKTsKKyt9CisrCisrdm9pZCBDb2Rl R2VuZXJhdG9yOjp2aXNpdE1vZFBvd1R3b0koTE1vZFBvd1R3b0kqIGlucykgeworKyAgUmVnaXN0 ZXIgaW4gPSBUb1JlZ2lzdGVyKGlucy0+Z2V0T3BlcmFuZCgwKSk7CisrICBSZWdpc3RlciBvdXQg PSBUb1JlZ2lzdGVyKGlucy0+Z2V0RGVmKDApKTsKKysgIE1Nb2QqIG1pciA9IGlucy0+bWlyKCk7 CisrICBpbnQzMl90IHNoaWZ0ID0gaW5zLT5zaGlmdCgpOworKyAgdWludDMyX3QgbWFzayA9ICh1 aW50MzJfdCgxKSA8PCBzaGlmdCkgLSAxOworKworKyAgaWYgKG1pci0+Y2FuQmVOZWdhdGl2ZURp dmlkZW5kKCkgJiYgIW1pci0+aXNUcnVuY2F0ZWQoKSkgeworKyAgICBMYWJlbCBub25OZWc7Cisr ICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGluLCBJbW1Xb3JkKDApLCAm bm9uTmVnKTsKKysgICAgLy8gaW4gPT0gMDogbW9kIGlzIDAsIGNoZWNrIGZvciBuZWdhdGl2ZSB6 ZXJvLgorKyAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpTaWduZWQsIGluLCBpbiwgaW5zLT5z bmFwc2hvdCgpKTsKKysgICAgbWFzbS5iaW5kKCZub25OZWcpOworKyAgfQorKworKyAgTGFiZWwg bmVnYXRpdmUsIGRvbmU7CisrICBtYXNtLmJyYW5jaDMyKEFzc2VtYmxlcjo6U2lnbmVkLCBpbiwg aW4sICZuZWdhdGl2ZSk7CisrCisrICAvLyBQb3NpdGl2ZSBjYXNlOiBqdXN0IG1hc2suCisrICBt YXNtLmFuZDMyKEltbTMyKG1hc2spLCBpbiwgb3V0KTsKKysgIG1hc20uanVtcCgmZG9uZSk7Cisr CisrICAvLyBOZWdhdGl2ZSBjYXNlOiBuZWdhdGUsIG1hc2ssIG5lZ2F0ZSBiYWNrLgorKyAgbWFz bS5iaW5kKCZuZWdhdGl2ZSk7CisrICBtYXNtLmFzX25lZyhvdXQsIGluKTsKKysgIG1hc20uYW5k MzIoSW1tMzIobWFzayksIG91dCk7CisrICBtYXNtLmFzX25lZyhvdXQsIG91dCk7CisrICBtYXNt LmFzX2V4dHN3KG91dCwgb3V0KTsKKysKKysgIGlmICghbWlyLT5pc1RydW5jYXRlZCgpICYmIG1p ci0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCkpIHsKKysgICAgTGFiZWwgb2s7CisrICAgIG1hc20u YnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIG91dCwgSW1tV29yZCgwKSwgJm9rKTsKKysg ICAgYmFpbG91dChpbnMtPnNuYXBzaG90KCkpOworKyAgICBtYXNtLmJpbmQoJm9rKTsKKysgIH0K KysKKysgIG1hc20uYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXRNb2RNYXNrSShMTW9kTWFza0kqIGlucykgeworKyAgUmVnaXN0ZXIgc3JjID0gVG9SZWdpc3Rl cihpbnMtPmlucHV0KCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVnaXN0ZXIoaW5zLT5vdXRw dXQoKSk7CisrICBSZWdpc3RlciB0bXAwID0gVG9SZWdpc3RlcihpbnMtPnRlbXAwKCkpOworKyAg UmVnaXN0ZXIgdG1wMSA9IFRvUmVnaXN0ZXIoaW5zLT50ZW1wMSgpKTsKKysgIE1Nb2QqIG1pciA9 IGlucy0+bWlyKCk7CisrCisrICBpZiAoIW1pci0+aXNUcnVuY2F0ZWQoKSAmJiBtaXItPmNhbkJl TmVnYXRpdmVEaXZpZGVuZCgpKSB7CisrICAgIE1PWl9BU1NFUlQobWlyLT5mYWxsaWJsZSgpKTsK KysKKysgICAgTGFiZWwgYmFpbDsKKysgICAgbWFzbS5tYV9tb2RfbWFzayhzcmMsIGRlc3QsIHRt cDAsIHRtcDEsIGlucy0+c2hpZnQoKSwgJmJhaWwpOworKyAgICBiYWlsb3V0RnJvbSgmYmFpbCwg aW5zLT5zbmFwc2hvdCgpKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20ubWFfbW9kX21hc2soc3Jj LCBkZXN0LCB0bXAwLCB0bXAxLCBpbnMtPnNoaWZ0KCksIG51bGxwdHIpOworKyAgfQorK30KKysK Kyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TmVnSShMTmVnSSogaW5zKSB7CisrICBSZWdpc3Rl ciBpbnB1dCA9IFRvUmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9 IFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBtYXNtLmFzX25lZyhvdXRwdXQsIGlucHV0 KTsKKysgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOworK30KKysKKyt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0TmVnSTY0KExOZWdJNjQqIGlucykgeworKyAgUmVnaXN0ZXIgaW5wdXQg PSBUb1JlZ2lzdGVyNjQoaW5zLT5pbnB1dCgpKS5yZWc7CisrICBSZWdpc3RlciBvdXRwdXQgPSBU b091dFJlZ2lzdGVyNjQoaW5zKS5yZWc7CisrICBtYXNtLmFzX25lZyhvdXRwdXQsIGlucHV0KTsK Kyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFVEaXZPck1vZChMVURpdk9yTW9kKiBp bnMpIHsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBSZWdp c3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmhzKCkpOworKyAgUmVnaXN0ZXIgb3V0cHV0ID0g VG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKG1hc20pOworKyAgUmVnaXN0ZXIgdGVtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIExhYmVs IGRvbmU7CisrCisrICAvLyBEaXZpc2lvbiBieSB6ZXJvIGNoZWNrLgorKyAgaWYgKGlucy0+Y2Fu QmVEaXZpZGVCeVplcm8oKSkgeworKyAgICBpZiAoaW5zLT5taXIoKS0+aXNUcnVuY2F0ZWQoKSkg eworKyAgICAgIGlmIChpbnMtPnRyYXBPbkVycm9yKCkpIHsKKysgICAgICAgIExhYmVsIG5vblpl cm87CisrICAgICAgICBtYXNtLmJyYW5jaDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHJocywgSW1t MzIoMCksICZub25aZXJvKTsKKysgICAgICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50 ZWdlckRpdmlkZUJ5WmVybywgaW5zLT50cmFwU2l0ZURlc2MoKSk7CisrICAgICAgICBtYXNtLmJp bmQoJm5vblplcm8pOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBMYWJlbCBub25aZXJvOwor KyAgICAgICAgbWFzbS5icmFuY2gzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbTMyKDAp LCAmbm9uWmVybyk7CisrICAgICAgICBtYXNtLm1vdmUzMihJbW0zMigwKSwgb3V0cHV0KTsKKysg ICAgICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgICAgICBtYXNtLmJpbmQoJm5vblplcm8pOwor KyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpF cXVhbCwgcmhzLCBJbW0zMigwKSwgaW5zLT5zbmFwc2hvdCgpKTsKKysgICAgfQorKyAgfQorKwor KyAgLy8gWmVyby1leHRlbmQgYm90aCBvcGVyYW5kcyB0byA2NCBiaXRzIGZvciB1bnNpZ25lZCBk aXZpZGUuCisrICBtYXNtLm1vdmUzMlRvNjRaZXJvRXh0ZW5kKGxocywgUmVnaXN0ZXI2NChsaHMp KTsKKysgIG1hc20ubW92ZTMyVG82NFplcm9FeHRlbmQocmhzLCBSZWdpc3RlcjY0KHJocykpOwor KworKyAgaWYgKGlucy0+bWlyKCktPmlzRGl2KCkpIHsKKysgICAgLy8gRGl2aXNpb24gcGF0aDog Y29tcHV0ZSBxdW90aWVudC4gQ2hlY2sgcmVtYWluZGVyIGlmIG5lZWRlZC4KKysgICAgaWYgKCFp bnMtPm1pcigpLT50b0RpdigpLT5jYW5UcnVuY2F0ZVJlbWFpbmRlcigpKSB7CisrICAgICAgaWYg KEhhc1BPV0VSOSgpKSB7CisrICAgICAgICBtYXNtLmFzX21vZHV3KHRlbXAsIGxocywgcmhzKTsK KysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5hc19kaXZ3dSh0ZW1wLCBsaHMsIHJocyk7 CisrICAgICAgICBtYXNtLmFzX211bGx3KHRlbXAsIHRlbXAsIHJocyk7CisrICAgICAgICBtYXNt LmFzX3N1YmYodGVtcCwgdGVtcCwgbGhzKTsKKysgICAgICB9CisrICAgICAgYmFpbG91dENtcDMy KEFzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90KCkpOwor KyAgICB9CisrICAgIG1hc20uYXNfZGl2d3Uob3V0cHV0LCBsaHMsIHJocyk7CisrICB9IGVsc2Ug eworKyAgICAvLyBNb2R1bG8gcGF0aC4KKysgICAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgICAg bWFzbS5hc19tb2R1dyhvdXRwdXQsIGxocywgcmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBt YXNtLmFzX2Rpdnd1KHRlbXAsIGxocywgcmhzKTsKKysgICAgICBtYXNtLmFzX211bGx3KHRlbXAs IHRlbXAsIHJocyk7CisrICAgICAgbWFzbS5hc19zdWJmKG91dHB1dCwgdGVtcCwgbGhzKTsKKysg ICAgfQorKyAgfQorKworKyAgbWFzbS5hc19leHRzdyhvdXRwdXQsIG91dHB1dCk7CisrCisrICBp ZiAoIWlucy0+bWlyKCktPmlzVHJ1bmNhdGVkKCkpIHsKKysgICAgYmFpbG91dENtcDMyKEFzc2Vt Ymxlcjo6TGVzc1RoYW4sIG91dHB1dCwgSW1tMzIoMCksIGlucy0+c25hcHNob3QoKSk7CisrICB9 CisrCisrICBtYXNtLmJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0RGl2T3JNb2RJNjQoTERpdk9yTW9kSTY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGxocyA9IFRv UmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKKysgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0 ZXIobGlyLT5nZXRPcGVyYW5kKDEpKTsKKysgIFJlZ2lzdGVyIG91dHB1dCA9IFRvUmVnaXN0ZXIo bGlyLT5vdXRwdXQoKSk7CisrCisrICBMYWJlbCBkb25lOworKworKyAgLy8gRGl2aXNpb24gYnkg emVybyB0cmFwLgorKyAgaWYgKGxpci0+Y2FuQmVEaXZpZGVCeVplcm8oKSkgeworKyAgICBMYWJl bCBub25aZXJvOworKyAgICBtYXNtLmJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMs IEltbVdvcmQoMCksICZub25aZXJvKTsKKysgICAgbWFzbS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJ bnRlZ2VyRGl2aWRlQnlaZXJvLCBsaXItPnRyYXBTaXRlRGVzYygpKTsKKysgICAgbWFzbS5iaW5k KCZub25aZXJvKTsKKysgIH0KKysKKysgIC8vIElOVDY0X01JTiAvIC0xIG92ZXJmbG93IHRyYXAg KGZvciBkaXYgb25seSkuCisrICBpZiAobGlyLT5jYW5CZU5lZ2F0aXZlT3ZlcmZsb3coKSkgewor KyAgICBMYWJlbCBub3RNaW5JbnQ7CisrICAgIG1hc20uYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90 RXF1YWwsIGxocywgSW1tV29yZChJTlQ2NF9NSU4pLCAmbm90TWluSW50KTsKKysgICAgbWFzbS5i cmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5vdE1pbklu dCk7CisrICAgIGlmIChsaXItPm1pcigpLT5pc0RpdigpKSB7CisrICAgICAgbWFzbS53YXNtVHJh cCh3YXNtOjpUcmFwOjpJbnRlZ2VyT3ZlcmZsb3csIGxpci0+dHJhcFNpdGVEZXNjKCkpOworKyAg ICB9IGVsc2UgeworKyAgICAgIG1hc20ubW92ZVB0cihJbW1Xb3JkKDApLCBvdXRwdXQpOworKyAg ICAgIG1hc20uanVtcCgmZG9uZSk7CisrICAgIH0KKysgICAgbWFzbS5iaW5kKCZub3RNaW5JbnQp OworKyAgfQorKworKyAgaWYgKGxpci0+bWlyKCktPmlzRGl2KCkpIHsKKysgICAgbWFzbS5hc19k aXZkKG91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgeworKyAg ICBtYXNtLmFzX21vZHNkKG91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgbWFz bS5hc19kaXZkKG91dHB1dCwgbGhzLCByaHMpOworKyAgICBtYXNtLmFzX211bGxkKG91dHB1dCwg b3V0cHV0LCByaHMpOworKyAgICBtYXNtLmFzX3N1YmYob3V0cHV0LCBvdXRwdXQsIGxocyk7Cisr ICB9CisrCisrICBtYXNtLmJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6 OnZpc2l0VURpdk9yTW9kSTY0KExVRGl2T3JNb2RJNjQqIGxpcikgeworKyAgUmVnaXN0ZXIgbGhz ID0gVG9SZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMCkpOworKyAgUmVnaXN0ZXIgcmhzID0gVG9S ZWdpc3RlcihsaXItPmdldE9wZXJhbmQoMSkpOworKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdp c3RlcihsaXItPm91dHB1dCgpKTsKKysKKysgIC8vIERpdmlzaW9uIGJ5IHplcm8gdHJhcC4KKysg IGlmIChsaXItPmNhbkJlRGl2aWRlQnlaZXJvKCkpIHsKKysgICAgTGFiZWwgbm9uWmVybzsKKysg ICAgbWFzbS5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKDApLCAm bm9uWmVybyk7CisrICAgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6SW50ZWdlckRpdmlkZUJ5 WmVybywgbGlyLT50cmFwU2l0ZURlc2MoKSk7CisrICAgIG1hc20uYmluZCgmbm9uWmVybyk7Cisr ICB9CisrCisrICBpZiAobGlyLT5taXIoKS0+aXNEaXYoKSkgeworKyAgICBtYXNtLmFzX2RpdmR1 KG91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBt YXNtLmFzX21vZHVkKG91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5h c19kaXZkdShvdXRwdXQsIGxocywgcmhzKTsKKysgICAgbWFzbS5hc19tdWxsZChvdXRwdXQsIG91 dHB1dCwgcmhzKTsKKysgICAgbWFzbS5hc19zdWJmKG91dHB1dCwgb3V0cHV0LCBsaHMpOworKyAg fQorK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysvLyBWaXNpdG9yczogQml0d2lzZQorKworK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRCaXROb3RJKExCaXROb3RJKiBpbnMpIHsKKysgIFJlZ2lzdGVyIGlu cHV0ID0gVG9SZWdpc3RlcihpbnMtPmlucHV0KCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRvUmVn aXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBtYXNtLmFzX25vcihkZXN0LCBpbnB1dCwgaW5wdXQp OworKyAgbWFzbS5hc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdEJpdE5vdEk2NChMQml0Tm90STY0KiBpbnMpIHsKKysgIFJlZ2lzdGVyIGlucHV0 ID0gVG9SZWdpc3RlcjY0KGlucy0+aW5wdXQoKSkucmVnOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRv T3V0UmVnaXN0ZXI2NChpbnMpLnJlZzsKKysgIG1hc20uYXNfbm9yKGRlc3QsIGlucHV0LCBpbnB1 dCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRCaXRPcEkoTEJpdE9wSSogaW5z KSB7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPmdldERlZigwKSk7CisrICBS ZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+Z2V0T3BlcmFuZCgwKSk7CisrICBjb25zdCBM QWxsb2NhdGlvbiogcmhzID0gaW5zLT5nZXRPcGVyYW5kKDEpOworKworKyAgc3dpdGNoIChpbnMt PmJpdG9wKCkpIHsKKysgICAgY2FzZSBKU09wOjpCaXRPcjoKKysgICAgICBpZiAocmhzLT5pc0Nv bnN0YW50KCkpIHsKKysgICAgICAgIG1hc20ub3IzMihJbW0zMihUb0ludDMyKHJocykpLCBsaHMs IGRlc3QpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLmFzX29yXyhkZXN0LCBsaHMs IFRvUmVnaXN0ZXIocmhzKSk7CisrICAgICAgICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOwor KyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBKU09wOjpCaXRYb3I6CisrICAgICAg aWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAgICAgICBtYXNtLnhvcjMyKEltbTMyKFRvSW50 MzIocmhzKSksIGxocywgZGVzdCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNf eG9yXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7CisrICAgICAgICBtYXNtLmFzX2V4dHN3 KGRlc3QsIGRlc3QpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBKU09wOjpC aXRBbmQ6CisrICAgICAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAgICAgICBtYXNtLmFu ZDMyKEltbTMyKFRvSW50MzIocmhzKSksIGxocywgZGVzdCk7CisrICAgICAgfSBlbHNlIHsKKysg ICAgICAgIG1hc20uYXNfYW5kXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7CisrICAgICAg ICBtYXNtLmFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysg ICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYmluYXJ5IG9wY29kZSIp OworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Qml0T3BJNjQoTEJpdE9w STY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGxpci0+Z2V0RGVmKDAp KTsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIobGlyLT5nZXRPcGVyYW5kKDApKTsKKysg IGNvbnN0IExBbGxvY2F0aW9uKiByaHMgPSBsaXItPmdldE9wZXJhbmQoMSk7CisrCisrICBzd2l0 Y2ggKGxpci0+Yml0b3AoKSkgeworKyAgICBjYXNlIEpTT3A6OkJpdE9yOgorKyAgICAgIGlmIChy aHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICAgICAgaWYgKGxocyAhPSBkZXN0KSB7CisrICAgICAg ICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAgICAgICAgfQorKyAgICAgICAgbWFzbS5v cjY0KEltbTY0KFRvSW50NjQocmhzKSksIFJlZ2lzdGVyNjQoZGVzdCkpOworKyAgICAgIH0gZWxz ZSB7CisrICAgICAgICBtYXNtLmFzX29yXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhzKSk7Cisr ICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6OkJpdFhvcjoKKysgICAgICBp ZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgICAgIGlmIChsaHMgIT0gZGVzdCkgeworKyAg ICAgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgICAgIH0KKysgICAgICAgIG1h c20ueG9yNjQoSW1tNjQoVG9JbnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7CisrICAgICAg fSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNfeG9yXyhkZXN0LCBsaHMsIFRvUmVnaXN0ZXIocmhz KSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6OkJpdEFuZDoKKysg ICAgICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgICAgIGlmIChsaHMgIT0gZGVzdCkg eworKyAgICAgICAgICBtYXNtLm1vdmVQdHIobGhzLCBkZXN0KTsKKysgICAgICAgIH0KKysgICAg ICAgIG1hc20uYW5kNjQoSW1tNjQoVG9JbnQ2NChyaHMpKSwgUmVnaXN0ZXI2NChkZXN0KSk7Cisr ICAgICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20uYXNfYW5kXyhkZXN0LCBsaHMsIFRvUmVnaXN0 ZXIocmhzKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAg IE1PWl9DUkFTSCgidW5leHBlY3RlZCBiaW5hcnkgb3Bjb2RlIik7CisrICB9CisrfQorKworK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRTaGlmdEkoTFNoaWZ0SSogaW5zKSB7CisrICBSZWdpc3Rl ciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJo cyA9IGlucy0+cmhzKCk7CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1 dCgpKTsKKysKKysgIGlmIChyaHMtPmlzQ29uc3RhbnQoKSkgeworKyAgICBpbnQzMl90IHNoaWZ0 ID0gVG9JbnQzMihyaHMpICYgMHgxZjsKKysgICAgc3dpdGNoIChpbnMtPmJpdG9wKCkpIHsKKysg ICAgICBjYXNlIEpTT3A6OkxzaDoKKysgICAgICAgIGlmIChzaGlmdCkgeworKyAgICAgICAgICBt YXNtLmxzaGlmdDMyKEltbTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKKysgICAgICAgIH0gZWxzZSB7 CisrICAgICAgICAgIG1hc20ubW92ZTMyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAg ICBicmVhazsKKysgICAgICBjYXNlIEpTT3A6OlJzaDoKKysgICAgICAgIGlmIChzaGlmdCkgewor KyAgICAgICAgICBtYXNtLnJzaGlmdDMyQXJpdGhtZXRpYyhJbW0zMihzaGlmdCksIGxocywgZGVz dCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBtYXNtLm1vdmUzMihsaHMsIGRlc3Qp OworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpVcnNoOgor KyAgICAgICAgaWYgKHNoaWZ0KSB7CisrICAgICAgICAgIG1hc20ucnNoaWZ0MzIoSW1tMzIoc2hp ZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgLy8geCA+Pj4g MCBjYW4gcHJvZHVjZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgYXMgdW5zaWduZWQu CisrICAgICAgICAgIG1hc20ubW92ZTMyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAg ICBpZiAoaW5zLT5taXIoKS0+dG9VcnNoKCktPmZhbGxpYmxlKCkpIHsKKysgICAgICAgICAgLy8g eCA+Pj4gMCBjYW4gcHJvZHVjZSB2YWx1ZXMgdGhhdCBkb24ndCBmaXQgaW4gc2lnbmVkIGludDMy LgorKyAgICAgICAgICBiYWlsb3V0Q21wMzIoQXNzZW1ibGVyOjpMZXNzVGhhbiwgZGVzdCwgSW1t MzIoMCksIGlucy0+c25hcHNob3QoKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysg ICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9wY29k ZSIpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBSZWdpc3RlciBzaGlmdFJlZyA9IFRvUmVn aXN0ZXIocmhzKTsKKysgICAgLy8gUFBDIHNsdy9zcncvc3JhdyB1c2UgNiBiaXRzIG9mIHNoaWZ0 IGFtb3VudDsgSlMgcmVxdWlyZXMgbW9kIDMyLgorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhtYXNtKTsKKysgICAgUmVnaXN0ZXIgbWFza2VkID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBtYXNtLmFzX3Jsd2lubShtYXNrZWQsIHNoaWZ0UmVnLCAwLCAyNywgMzEpOworKyAgICBz d2l0Y2ggKGlucy0+Yml0b3AoKSkgeworKyAgICAgIGNhc2UgSlNPcDo6THNoOgorKyAgICAgICAg bWFzbS5hc19zbHcoZGVzdCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAgbWFzbS5hc19leHRzdyhk ZXN0LCBkZXN0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgSlNPcDo6UnNoOgorKyAg ICAgICAgbWFzbS5hc19zcmF3KGRlc3QsIGxocywgbWFza2VkKTsKKysgICAgICAgIGJyZWFrOwor KyAgICAgIGNhc2UgSlNPcDo6VXJzaDoKKysgICAgICAgIG1hc20uYXNfc3J3KGRlc3QsIGxocywg bWFza2VkKTsKKysgICAgICAgIG1hc20uYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAgICBp ZiAoaW5zLT5taXIoKS0+dG9VcnNoKCktPmZhbGxpYmxlKCkpIHsKKysgICAgICAgICAgYmFpbG91 dENtcDMyKEFzc2VtYmxlcjo6TGVzc1RoYW4sIGRlc3QsIEltbTMyKDApLCBpbnMtPnNuYXBzaG90 KCkpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAg ICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsKKysgICAgfQorKyAgfQor K30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0U2hpZnRJbnRQdHIoTFNoaWZ0SW50UHRy KiBpbnMpIHsKKysgIFJlZ2lzdGVyIGxocyA9IFRvUmVnaXN0ZXIoaW5zLT5saHMoKSk7CisrICBS ZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysKKysgIGlmIChpbnMt PnJocygpLT5pc0NvbnN0YW50KCkpIHsKKysgICAgLy8gU2hpZnRJbnRQdHIncyBSSFMgY29uc3Rh bnQgaXMgSW50UHRyLSBvciBJbnQzMi10eXBlZCwgbm90IEludDY0LiBVc2UKKysgICAgLy8gVG9J bnRQdHIoKSB3aGljaCBkaXNwYXRjaGVzIG9uIHRoZSB1bmRlcmx5aW5nIE1JUlR5cGUgKHRoZSBw cmV2aW91cworKyAgICAvLyBNQ29uc3RhbnQ6OnRvSW50NjQoKSBjYWxsIGFzc2VydGVkIHdoZW4g dGhlIGNvbnN0YW50IHdhc24ndCBJbnQ2NCkuCisrICAgIGludDMyX3Qgc2hpZnQgPSBpbnQzMl90 KFRvSW50UHRyKGlucy0+cmhzKCkpKSAmIDB4M2Y7CisrICAgIHN3aXRjaCAoaW5zLT5iaXRvcCgp KSB7CisrICAgICAgY2FzZSBKU09wOjpMc2g6CisrICAgICAgICBpZiAoc2hpZnQpIHsKKysgICAg ICAgICAgbWFzbS5sc2hpZnRQdHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAg fSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgICAgICB9 CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEpTT3A6OlJzaDoKKysgICAgICAgIGlmIChz aGlmdCkgeworKyAgICAgICAgICBtYXNtLnJzaGlmdFB0ckFyaXRobWV0aWMoSW1tMzIoc2hpZnQp LCBsaHMsIGRlc3QpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgbWFzbS5tb3ZlUHRy KGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEpT T3A6OlVyc2g6CisrICAgICAgICBpZiAoc2hpZnQpIHsKKysgICAgICAgICAgbWFzbS5yc2hpZnRQ dHIoSW1tMzIoc2hpZnQpLCBsaHMsIGRlc3QpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgbWFzbS5tb3ZlUHRyKGxocywgZGVzdCk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsK KysgICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHNoaWZ0IG9w Y29kZSIpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBSZWdpc3RlciBzaGlmdFJlZyA9IFRv UmVnaXN0ZXIoaW5zLT5yaHMoKSk7CisrICAgIC8vIHNsZC9zcmQvc3JhZCB1c2UgdGhlIGxvdyA3 IGJpdHMgb2YgdGhlIHNoaWZ0IGNvdW50OiBjb3VudHMgPj0gNjQKKysgICAgLy8gcHJvZHVjZSAw IChzaWduLWZpbGwgZm9yIHNyYWQpLiBNYXNrIHRvIDYgYml0cyBmb3IgbW9kLTY0IHNlbWFudGlj cy4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAgIFJlZ2lz dGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbWFzbS5hc19ybGRpY2wobWFza2Vk LCBzaGlmdFJlZywgMCwgNTgpOworKyAgICBzd2l0Y2ggKGlucy0+Yml0b3AoKSkgeworKyAgICAg IGNhc2UgSlNPcDo6THNoOgorKyAgICAgICAgbWFzbS5hc19zbGQoZGVzdCwgbGhzLCBtYXNrZWQp OworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpSc2g6CisrICAgICAgICBtYXNt LmFzX3NyYWQoZGVzdCwgbGhzLCBtYXNrZWQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2Fz ZSBKU09wOjpVcnNoOgorKyAgICAgICAgbWFzbS5hc19zcmQoZGVzdCwgbGhzLCBtYXNrZWQpOwor KyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgidW5l eHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0U2hpZnRJNjQoTFNoaWZ0STY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyIGxo cyA9IFRvUmVnaXN0ZXI2NChsaXItPmxocygpKS5yZWc7CisrICBSZWdpc3RlciBkZXN0ID0gVG9P dXRSZWdpc3RlcjY0KGxpcikucmVnOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHJocyA9IGxpci0+ cmhzKCk7CisrCisrICBpZiAocmhzLT5pc0NvbnN0YW50KCkpIHsKKysgICAgaW50MzJfdCBzaGlm dCA9IGludDMyX3QocmhzLT50b0NvbnN0YW50KCktPnRvSW50NjQoKSkgJiAweDNmOworKyAgICBz d2l0Y2ggKGxpci0+Yml0b3AoKSkgeworKyAgICAgIGNhc2UgSlNPcDo6THNoOgorKyAgICAgICAg aWYgKHNoaWZ0KSB7CisrICAgICAgICAgIG1hc20ubHNoaWZ0UHRyKEltbTMyKHNoaWZ0KSwgbGhz LCBkZXN0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMs IGRlc3QpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBKU09wOjpS c2g6CisrICAgICAgICBpZiAoc2hpZnQpIHsKKysgICAgICAgICAgbWFzbS5yc2hpZnRQdHJBcml0 aG1ldGljKEltbTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAg ICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAgICAgICAgfQorKyAgICAgICAgYnJl YWs7CisrICAgICAgY2FzZSBKU09wOjpVcnNoOgorKyAgICAgICAgaWYgKHNoaWZ0KSB7CisrICAg ICAgICAgIG1hc20ucnNoaWZ0UHRyKEltbTMyKHNoaWZ0KSwgbGhzLCBkZXN0KTsKKysgICAgICAg IH0gZWxzZSB7CisrICAgICAgICAgIG1hc20ubW92ZVB0cihsaHMsIGRlc3QpOworKyAgICAgICAg fQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgIE1PWl9DUkFTSCgi dW5leHBlY3RlZCBzaGlmdCBvcGNvZGUiKTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgUmVn aXN0ZXIgc2hpZnRSZWcgPSBUb1JlZ2lzdGVyKHJocyk7CisrICAgIC8vIFdhc20gaTY0IHNoaWZ0 cyByZXF1aXJlIHNoaWZ0IGNvdW50IG1vZHVsbyA2NC4gUFBDNjQgc2xkL3NyZC9zcmFkCisrICAg IC8vIHVzZSBhIDctYml0IHNoaWZ0IGZpZWxkLCBzbyBzaGlmdHMgPj0gNjQgcHJvZHVjZSAwIChv ciBzaWduLWZpbGwKKysgICAgLy8gZm9yIHNyYWQpLiBNYXNrIHRvIDYgYml0cyBmaXJzdC4KKysg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAgIFJlZ2lzdGVyIG1h c2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbWFzbS5hc19ybGRpY2wobWFza2VkLCBzaGlm dFJlZywgMCwgNTgpOyAgLy8gY2xybGRpOiBrZWVwIGxvdyA2IGJpdHMKKysgICAgc3dpdGNoIChs aXItPmJpdG9wKCkpIHsKKysgICAgICBjYXNlIEpTT3A6OkxzaDoKKysgICAgICAgIG1hc20uYXNf c2xkKGRlc3QsIGxocywgbWFza2VkKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgSlNP cDo6UnNoOgorKyAgICAgICAgbWFzbS5hc19zcmFkKGRlc3QsIGxocywgbWFza2VkKTsKKysgICAg ICAgIGJyZWFrOworKyAgICAgIGNhc2UgSlNPcDo6VXJzaDoKKysgICAgICAgIG1hc20uYXNfc3Jk KGRlc3QsIGxocywgbWFza2VkKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1bHQ6Cisr ICAgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgc2hpZnQgb3Bjb2RlIik7CisrICAgIH0KKysg IH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFVyc2hEKExVcnNoRCogaW5zKSB7 CisrICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgY29uc3QgTEFs bG9jYXRpb24qIHJocyA9IGlucy0+cmhzKCk7CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrCisrICBSZWdpc3RlciB0ZW1wID0gVG9SZWdp c3RlcihpbnMtPnRlbXAwKCkpOworKworKyAgaWYgKHJocy0+aXNDb25zdGFudCgpKSB7CisrICAg IGludDMyX3Qgc2hpZnQgPSBUb0ludDMyKHJocykgJiAweDFmOworKyAgICBpZiAoc2hpZnQpIHsK KysgICAgICBtYXNtLnJzaGlmdDMyKEltbTMyKHNoaWZ0KSwgbGhzLCB0ZW1wKTsKKysgICAgfSBl bHNlIHsKKysgICAgICBtYXNtLm1vdmUzMihsaHMsIHRlbXApOworKyAgICB9CisrICB9IGVsc2Ug eworKyAgICBtYXNtLm1vdmUzMihsaHMsIHRlbXApOworKyAgICBtYXNtLnJzaGlmdDMyKFRvUmVn aXN0ZXIocmhzKSwgdGVtcCk7CisrICB9CisrCisrICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJs ZSh0ZW1wLCBkZXN0KTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6IEZsb2F0aW5n LXBvaW50IGFyaXRobWV0aWMKKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TWF0aEQoTE1h dGhEKiBtYXRoKSB7CisrICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRo LT5saHMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5y aHMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIobWF0aC0+b3V0 cHV0KCkpOworKworKyAgc3dpdGNoIChtYXRoLT5qc29wKCkpIHsKKysgICAgY2FzZSBKU09wOjpB ZGQ6CisrICAgICAgbWFzbS5hc19mYWRkKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSBKU09wOjpTdWI6CisrICAgICAgbWFzbS5hc19mc3ViKGRlc3QsIGxocywgcmhz KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBKU09wOjpNdWw6CisrICAgICAgbWFzbS5hc19m bXVsKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBKU09wOjpEaXY6 CisrICAgICAgbWFzbS5hc19mZGl2KGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsKKysg ICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgZG91YmxlIG9wY29kZSIp OworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0TWF0aEYoTE1hdGhGKiBt YXRoKSB7CisrICBGbG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5saHMo KSk7CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3RlcihtYXRoLT5yaHMoKSk7 CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIobWF0aC0+b3V0cHV0KCkp OworKworKyAgc3dpdGNoIChtYXRoLT5qc29wKCkpIHsKKysgICAgY2FzZSBKU09wOjpBZGQ6Cisr ICAgICAgbWFzbS5hc19mYWRkcyhkZXN0LCBsaHMsIHJocyk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgSlNPcDo6U3ViOgorKyAgICAgIG1hc20uYXNfZnN1YnMoZGVzdCwgbGhzLCByaHMpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIEpTT3A6Ok11bDoKKysgICAgICBtYXNtLmFzX2ZtdWxz KGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBKU09wOjpEaXY6Cisr ICAgICAgbWFzbS5hc19mZGl2cyhkZXN0LCBsaHMsIHJocyk7CisrICAgICAgYnJlYWs7CisrICAg IGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGZsb2F0MzIgb3Bjb2RlIik7 CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNaW5NYXhEKExNaW5NYXhE KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgZmlyc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5m aXJzdCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgc2Vjb25kID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+ c2Vjb25kKCkpOworKyAgbW96aWxsYTo6RGVidWdPbmx5PEZsb2F0UmVnaXN0ZXI+IG91dHB1dCA9 IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysKKysgIE1PWl9BU1NFUlQoZmlyc3Qg PT0gb3V0cHV0KTsKKysgIGlmIChpbnMtPm1pcigpLT5pc01heCgpKSB7CisrICAgIG1hc20ubWF4 RG91YmxlKHNlY29uZCwgZmlyc3QsIC8qIGhhbmRsZU5hTiA9ICovIHRydWUpOworKyAgfSBlbHNl IHsKKysgICAgbWFzbS5taW5Eb3VibGUoc2Vjb25kLCBmaXJzdCwgLyogaGFuZGxlTmFOID0gKi8g dHJ1ZSk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRNaW5NYXhGKExN aW5NYXhGKiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgZmlyc3QgPSBUb0Zsb2F0UmVnaXN0ZXIo aW5zLT5maXJzdCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgc2Vjb25kID0gVG9GbG9hdFJlZ2lzdGVy KGlucy0+c2Vjb25kKCkpOworKyAgbW96aWxsYTo6RGVidWdPbmx5PEZsb2F0UmVnaXN0ZXI+IG91 dHB1dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysKKysgIE1PWl9BU1NFUlQo Zmlyc3QgPT0gb3V0cHV0KTsKKysgIGlmIChpbnMtPm1pcigpLT5pc01heCgpKSB7CisrICAgIG1h c20ubWF4RmxvYXQzMihzZWNvbmQsIGZpcnN0LCAvKiBoYW5kbGVOYU4gPSAqLyB0cnVlKTsKKysg IH0gZWxzZSB7CisrICAgIG1hc20ubWluRmxvYXQzMihzZWNvbmQsIGZpcnN0LCAvKiBoYW5kbGVO YU4gPSAqLyB0cnVlKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdE5l Z0QoTE5lZ0QqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPmlucHV0KCkpOworKyAgRmxvYXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0 ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBtYXNtLmFzX2ZuZWcob3V0cHV0LCBpbnB1dCk7CisrfQor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXROZWdGKExOZWdGKiBpbnMpIHsKKysgIEZsb2F0 UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKKysgIEZsb2F0 UmVnaXN0ZXIgb3V0cHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgbWFz bS5hc19mbmVnKG91dHB1dCwgaW5wdXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0UG93SGFsZkQoTFBvd0hhbGZEKiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBU b0Zsb2F0UmVnaXN0ZXIoaW5zLT5pbnB1dCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgb3V0cHV0ID0g VG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKworKyAgTGFiZWwgZG9uZSwgc2tpcDsK KysKKysgIC8vIENoZWNrIGZvciAtSW5maW5pdHkuCisrICBtYXNtLmxvYWRDb25zdGFudERvdWJs ZShOZWdhdGl2ZUluZmluaXR5PGRvdWJsZT4oKSwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBtYXNt LmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGlucHV0 LAorKyAgICAgICAgICAgICAgICAgICAgU2NyYXRjaERvdWJsZVJlZywgJnNraXApOworKyAgbWFz bS5sb2FkQ29uc3RhbnREb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0 eSgpLCBvdXRwdXQpOworKyAgbWFzbS5qdW1wKCZkb25lKTsKKysKKysgIG1hc20uYmluZCgmc2tp cCk7CisrICAvLyBBZGQgMC4wIHRvIGhhbmRsZSAtMC4KKysgIG1hc20ubG9hZENvbnN0YW50RG91 YmxlKDAuMCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBtYXNtLmFzX2ZhZGQob3V0cHV0LCBpbnB1 dCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBtYXNtLmFzX2ZzcXJ0KG91dHB1dCwgb3V0cHV0KTsK KysKKysgIG1hc20uYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXROb3REKExOb3REKiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5pbnB1dCgpKTsKKysgIFJlZ2lzdGVyIGRlc3QgPSBUb1JlZ2lzdGVyKGlucy0+ b3V0cHV0KCkpOworKworKyAgbWFzbS5sb2FkQ29uc3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91 YmxlUmVnKTsKKysgIG1hc20uYXNfZmNtcHUoaW5wdXQsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAg bWFzbS5tYV9jbXBfc2V0X2RibChkZXN0LCBBc3NlbWJsZXI6OkRvdWJsZUVxdWFsT3JVbm9yZGVy ZWQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Tm90RihMTm90RiogaW5zKSB7 CisrICBGbG9hdFJlZ2lzdGVyIGlucHV0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+aW5wdXQoKSk7 CisrICBSZWdpc3RlciBkZXN0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysKKysgIG1h c20ubG9hZENvbnN0YW50RmxvYXQzMigwLjBmLCBTY3JhdGNoRmxvYXQzMlJlZyk7CisrICBtYXNt LmFzX2ZjbXB1KGlucHV0LCBTY3JhdGNoRmxvYXQzMlJlZyk7CisrICBtYXNtLm1hX2NtcF9zZXRf ZGJsKGRlc3QsIEFzc2VtYmxlcjo6RG91YmxlRXF1YWxPclVub3JkZXJlZCk7CisrfQorKworKy8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKy8vIFZpc2l0b3JzOiBGUCBjb21wYXJpc29ucyBhbmQgYnJhbmNoZXMKKysKKyt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0Q29tcGFyZUQoTENvbXBhcmVEKiBjb21wKSB7CisrICBG bG9hdFJlZ2lzdGVyIGxocyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5sZWZ0KCkpOworKyAgRmxv YXRSZWdpc3RlciByaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29tcC0+cmlnaHQoKSk7CisrICBSZWdp c3RlciBkZXN0ID0gVG9SZWdpc3Rlcihjb21wLT5vdXRwdXQoKSk7CisrICBBc3NlbWJsZXI6OkRv dWJsZUNvbmRpdGlvbiBjb25kID0KKysgICAgICBjb21wLT5taXIoKS0+anNvcCgpID09IEpTT3A6 OlN0cmljdEVxID8gQXNzZW1ibGVyOjpEb3VibGVFcXVhbAorKyAgICAgIDogY29tcC0+bWlyKCkt Pmpzb3AoKSA9PSBKU09wOjpTdHJpY3ROZQorKyAgICAgICAgICA/IEFzc2VtYmxlcjo6RG91Ymxl Tm90RXF1YWxPclVub3JkZXJlZAorKyAgICAgICAgICA6IEpTT3BUb0RvdWJsZUNvbmRpdGlvbihj b21wLT5taXIoKS0+anNvcCgpKTsKKysKKysgIG1hc20uYXNfZmNtcHUobGhzLCByaHMpOworKyAg bWFzbS5tYV9jbXBfc2V0X2RibChkZXN0LCBjb25kKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdENvbXBhcmVGKExDb21wYXJlRiogY29tcCkgeworKyAgRmxvYXRSZWdpc3RlciBs aHMgPSBUb0Zsb2F0UmVnaXN0ZXIoY29tcC0+bGVmdCgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgcmhz ID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPnJpZ2h0KCkpOworKyAgUmVnaXN0ZXIgZGVzdCA9IFRv UmVnaXN0ZXIoY29tcC0+b3V0cHV0KCkpOworKyAgQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24g Y29uZCA9CisrICAgICAgY29tcC0+bWlyKCktPmpzb3AoKSA9PSBKU09wOjpTdHJpY3RFcSA/IEFz c2VtYmxlcjo6RG91YmxlRXF1YWwKKysgICAgICA6IGNvbXAtPm1pcigpLT5qc29wKCkgPT0gSlNP cDo6U3RyaWN0TmUKKysgICAgICAgICAgPyBBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JVbm9y ZGVyZWQKKysgICAgICAgICAgOiBKU09wVG9Eb3VibGVDb25kaXRpb24oY29tcC0+bWlyKCktPmpz b3AoKSk7CisrCisrICBtYXNtLmFzX2ZjbXB1KGxocywgcmhzKTsKKysgIG1hc20ubWFfY21wX3Nl dF9kYmwoZGVzdCwgY29uZCk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21w YXJlREFuZEJyYW5jaChMQ29tcGFyZURBbmRCcmFuY2gqIGNvbXApIHsKKysgIEZsb2F0UmVnaXN0 ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPmxlZnQoKSk7CisrICBGbG9hdFJlZ2lzdGVy IHJocyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5yaWdodCgpKTsKKysKKysgIEFzc2VtYmxlcjo6 RG91YmxlQ29uZGl0aW9uIGNvbmQgPQorKyAgICAgIEpTT3BUb0RvdWJsZUNvbmRpdGlvbihjb21w LT5jbXBNaXIoKS0+anNvcCgpKTsKKysgIE1CYXNpY0Jsb2NrKiBpZlRydWUgPSBjb21wLT5pZlRy dWUoKTsKKysgIE1CYXNpY0Jsb2NrKiBpZkZhbHNlID0gY29tcC0+aWZGYWxzZSgpOworKworKyAg aWYgKGlzTmV4dEJsb2NrKGlmRmFsc2UtPmxpcigpKSkgeworKyAgICBicmFuY2hUb0Jsb2NrKEFz c2VtYmxlcjo6RG91YmxlRmxvYXQsIGNvbmQsIGxocywgcmhzLCBpZlRydWUpOworKyAgfSBlbHNl IHsKKysgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OkRvdWJsZUZsb2F0LCBBc3NlbWJsZXI6 OkludmVydENvbmRpdGlvbihjb25kKSwgbGhzLAorKyAgICAgICAgICAgICAgICAgIHJocywgaWZG YWxzZSk7CisrICAgIGp1bXBUb0Jsb2NrKGlmVHJ1ZSk7CisrICB9CisrfQorKworK3ZvaWQgQ29k ZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJlRkFuZEJyYW5jaChMQ29tcGFyZUZBbmRCcmFuY2gqIGNv bXApIHsKKysgIEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKGNvbXAtPmxlZnQo KSk7CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3Rlcihjb21wLT5yaWdodCgp KTsKKysKKysgIEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQgPQorKyAgICAgIEpTT3BU b0RvdWJsZUNvbmRpdGlvbihjb21wLT5jbXBNaXIoKS0+anNvcCgpKTsKKysgIE1CYXNpY0Jsb2Nr KiBpZlRydWUgPSBjb21wLT5pZlRydWUoKTsKKysgIE1CYXNpY0Jsb2NrKiBpZkZhbHNlID0gY29t cC0+aWZGYWxzZSgpOworKworKyAgaWYgKGlzTmV4dEJsb2NrKGlmRmFsc2UtPmxpcigpKSkgewor KyAgICBicmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6U2luZ2xlRmxvYXQsIGNvbmQsIGxocywgcmhz LCBpZlRydWUpOworKyAgfSBlbHNlIHsKKysgICAgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OlNp bmdsZUZsb2F0LCBBc3NlbWJsZXI6OkludmVydENvbmRpdGlvbihjb25kKSwgbGhzLAorKyAgICAg ICAgICAgICAgICAgIHJocywgaWZGYWxzZSk7CisrICAgIGp1bXBUb0Jsb2NrKGlmVHJ1ZSk7Cisr ICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRUZXN0REFuZEJyYW5jaChMVGVz dERBbmRCcmFuY2gqIHRlc3QpIHsKKysgIEZsb2F0UmVnaXN0ZXIgaW5wdXQgPSBUb0Zsb2F0UmVn aXN0ZXIodGVzdC0+aW5wdXQoKSk7CisrCisrICBNQmFzaWNCbG9jayogaWZUcnVlID0gdGVzdC0+ aWZUcnVlKCk7CisrICBNQmFzaWNCbG9jayogaWZGYWxzZSA9IHRlc3QtPmlmRmFsc2UoKTsKKysK KysgIG1hc20ubG9hZENvbnN0YW50RG91YmxlKDAuMCwgU2NyYXRjaERvdWJsZVJlZyk7CisrCisr ICBpZiAoaXNOZXh0QmxvY2soaWZGYWxzZS0+bGlyKCkpKSB7CisrICAgIGJyYW5jaFRvQmxvY2so QXNzZW1ibGVyOjpEb3VibGVGbG9hdCwgQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbCwgaW5wdXQs CisrICAgICAgICAgICAgICAgICAgU2NyYXRjaERvdWJsZVJlZywgaWZUcnVlKTsKKysgIH0gZWxz ZSB7CisrICAgIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpEb3VibGVGbG9hdCwgQXNzZW1ibGVy OjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkLAorKyAgICAgICAgICAgICAgICAgIGlucHV0LCBTY3Jh dGNoRG91YmxlUmVnLCBpZkZhbHNlKTsKKysgICAganVtcFRvQmxvY2soaWZUcnVlKTsKKysgIH0K Kyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFRlc3RGQW5kQnJhbmNoKExUZXN0RkFu ZEJyYW5jaCogdGVzdCkgeworKyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3Rl cih0ZXN0LT5pbnB1dCgpKTsKKysKKysgIE1CYXNpY0Jsb2NrKiBpZlRydWUgPSB0ZXN0LT5pZlRy dWUoKTsKKysgIE1CYXNpY0Jsb2NrKiBpZkZhbHNlID0gdGVzdC0+aWZGYWxzZSgpOworKworKyAg bWFzbS5sb2FkQ29uc3RhbnRGbG9hdDMyKDAuMGYsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKKysKKysg IGlmIChpc05leHRCbG9jayhpZkZhbHNlLT5saXIoKSkpIHsKKysgICAgYnJhbmNoVG9CbG9jayhB c3NlbWJsZXI6OlNpbmdsZUZsb2F0LCBBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCBpbnB1dCwK KysgICAgICAgICAgICAgICAgICBTY3JhdGNoRmxvYXQzMlJlZywgaWZUcnVlKTsKKysgIH0gZWxz ZSB7CisrICAgIGJyYW5jaFRvQmxvY2soQXNzZW1ibGVyOjpTaW5nbGVGbG9hdCwgQXNzZW1ibGVy OjpEb3VibGVFcXVhbE9yVW5vcmRlcmVkLAorKyAgICAgICAgICAgICAgICAgIGlucHV0LCBTY3Jh dGNoRmxvYXQzMlJlZywgaWZGYWxzZSk7CisrICAgIGp1bXBUb0Jsb2NrKGlmVHJ1ZSk7CisrICB9 CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKy8vIFZpc2l0b3JzOiBUcnVuY2F0aW9uCisrCisrdm9pZCBD b2RlR2VuZXJhdG9yOjp2aXNpdFRydW5jYXRlRFRvSW50MzIoTFRydW5jYXRlRFRvSW50MzIqIGlu cykgeworKyAgZW1pdFRydW5jYXRlRG91YmxlKFRvRmxvYXRSZWdpc3RlcihpbnMtPmlucHV0KCkp LCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpLAorKyAgICAgICAgICAgICAgICAgICAgIGlucy0+ bWlyKCkpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0VHJ1bmNhdGVGVG9JbnQz MihMVHJ1bmNhdGVGVG9JbnQzMiogaW5zKSB7CisrICBlbWl0VHJ1bmNhdGVGbG9hdDMyKFRvRmxv YXRSZWdpc3RlcihpbnMtPmlucHV0KCkpLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpLAorKyAg ICAgICAgICAgICAgICAgICAgICBpbnMtPm1pcigpKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8g VmlzaXRvcnM6IEludDY0IC8gV2FzbSB0eXBlIGNvbnZlcnNpb25zCisrCisrdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdEV4dGVuZEludDMyVG9JbnQ2NChMRXh0ZW5kSW50MzJUb0ludDY0KiBsaXIp IHsKKysgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3RlcihsaXItPmlucHV0KCkpOworKyAgUmVn aXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysKKysgIGlmIChsaXIt Pm1pcigpLT5pc1Vuc2lnbmVkKCkpIHsKKysgICAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChp bnB1dCwgUmVnaXN0ZXI2NChvdXRwdXQpKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfZXh0 c3cob3V0cHV0LCBpbnB1dCk7CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlz aXRXcmFwSW50NjRUb0ludDMyKExXcmFwSW50NjRUb0ludDMyKiBsaXIpIHsKKysgIGNvbnN0IExJ bnQ2NEFsbG9jYXRpb24gaW5wdXQgPSBsaXItPmlucHV0KCk7CisrICBSZWdpc3RlciBvdXRwdXQg PSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKworKyAgaWYgKGxpci0+bWlyKCktPmJvdHRv bUhhbGYoKSkgeworKyAgICBpZiAoaW5wdXQudmFsdWUoKS5pc01lbW9yeSgpKSB7CisrICAgICAg bWFzbS5sb2FkMzIoVG9BZGRyZXNzKGlucHV0KSwgb3V0cHV0KTsKKysgICAgfSBlbHNlIHsKKysg ICAgICBtYXNtLm1vdmU2NFRvMzIoVG9SZWdpc3RlcjY0KGlucHV0KSwgb3V0cHV0KTsKKysgICAg fQorKyAgfSBlbHNlIHsKKysgICAgLy8gVGhlIG9ubHkgcHJvZHVjZXIgb2YgYGJvdHRvbUhhbGY9 ZmFsc2VgIE1XcmFwSW50NjRUb0ludDMyIGluIHRoZQorKyAgICAvLyBjdXJyZW50IE1JUiBwaXBl bGluZSBpcyB0aGUgR1BSLXBhaXIgYXJndW1lbnQgc3BsaXR0ZXIgaW4KKysgICAgLy8gV2FzbUlv bkNvbXBpbGUuY3BwLCB3aGljaCBpcyBnYXRlZCBvbiBKU19DT0RFR0VOX1JFR0lTVEVSX1BBSVIK KysgICAgLy8gKDMyLWJpdCBBUk0gb25seSkuIFBQQzY0IGlzIDY0LWJpdCBhbmQgbmV2ZXIgcmVh Y2hlcyB0aGlzIHBhdGguCisrICAgIC8vIE1hdGNoZXMgdGhlIHNhbWUgZGVmZW5zaXZlIGNyYXNo IGluIHg2NCAvIEFSTTY0IGJhY2tlbmRzLgorKyAgICBNT1pfQ1JBU0goIk5vdCBpbXBsZW1lbnRl ZC4iKTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFNpZ25FeHRlbmRJ bnQ2NChMU2lnbkV4dGVuZEludDY0KiBsaXIpIHsKKysgIFJlZ2lzdGVyNjQgaW5wdXQgPSBUb1Jl Z2lzdGVyNjQobGlyLT5pbnB1dCgpKTsKKysgIFJlZ2lzdGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdp c3RlcjY0KGxpcik7CisrCisrICBzd2l0Y2ggKGxpci0+bWlyKCktPm1vZGUoKSkgeworKyAgICBj YXNlIE1TaWduRXh0ZW5kSW50NjQ6OkJ5dGU6CisrICAgICAgbWFzbS5hc19leHRzYihvdXRwdXQu cmVnLCBpbnB1dC5yZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1TaWduRXh0ZW5kSW50 NjQ6OkhhbGY6CisrICAgICAgbWFzbS5hc19leHRzaChvdXRwdXQucmVnLCBpbnB1dC5yZWcpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1TaWduRXh0ZW5kSW50NjQ6OldvcmQ6CisrICAgICAg bWFzbS5hc19leHRzdyhvdXRwdXQucmVnLCBpbnB1dC5yZWcpOworKyAgICAgIGJyZWFrOworKyAg fQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUV4dGVuZFUzMkluZGV4KExX YXNtRXh0ZW5kVTMySW5kZXgqIGxpcikgeworKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lzdGVy KGxpci0+aW5wdXQoKSk7CisrICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0 cHV0KCkpOworKyAgbWFzbS5tb3ZlMzJUbzY0WmVyb0V4dGVuZChpbnB1dCwgUmVnaXN0ZXI2NChv dXRwdXQpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21XcmFwVTMySW5k ZXgoTFdhc21XcmFwVTMySW5kZXgqIGxpcikgeworKyAgUmVnaXN0ZXIgaW5wdXQgPSBUb1JlZ2lz dGVyKGxpci0+aW5wdXQoKSk7CisrICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGxpci0+ b3V0cHV0KCkpOworKyAgbWFzbS5tb3ZlMzIoaW5wdXQsIG91dHB1dCk7CisrfQorKworK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtVHJ1bmNhdGVUb0ludDMyKExXYXNtVHJ1bmNhdGVUb0lu dDMyKiBsaXIpIHsKKysgIGF1dG8gaW5wdXQgPSBUb0Zsb2F0UmVnaXN0ZXIobGlyLT5pbnB1dCgp KTsKKysgIGF1dG8gb3V0cHV0ID0gVG9SZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysKKysgIE1X YXNtVHJ1bmNhdGVUb0ludDMyKiBtaXIgPSBsaXItPm1pcigpOworKyAgTUlSVHlwZSBmcm9tVHlw ZSA9IG1pci0+aW5wdXQoKS0+dHlwZSgpOworKworKyAgTU9aX0FTU0VSVChmcm9tVHlwZSA9PSBN SVJUeXBlOjpEb3VibGUgfHwgZnJvbVR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMik7CisrCisrICBh dXRvKiBvb2wgPSBuZXcgKGFsbG9jKCkpIE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKG1pciwg aW5wdXQsIG91dHB1dCk7CisrICBhZGRPdXRPZkxpbmVDb2RlKG9vbCwgbWlyKTsKKysKKysgIExh YmVsKiBvb2xFbnRyeSA9IG9vbC0+ZW50cnkoKTsKKysgIGlmIChtaXItPmlzVW5zaWduZWQoKSkg eworKyAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgICAgbWFzbS53 YXNtVHJ1bmNhdGVEb3VibGVUb1VJbnQzMihpbnB1dCwgb3V0cHV0LCBtaXItPmlzU2F0dXJhdGlu ZygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwor KyAgICB9IGVsc2UgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkZsb2F0MzIpIHsKKysgICAgICBt YXNtLndhc21UcnVuY2F0ZUZsb2F0MzJUb1VJbnQzMihpbnB1dCwgb3V0cHV0LCBtaXItPmlzU2F0 dXJhdGluZygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbEVu dHJ5KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgdHlwZSIp OworKyAgICB9CisrCisrICAgIG1hc20uYmluZChvb2wtPnJlam9pbigpKTsKKysgICAgcmV0dXJu OworKyAgfQorKworKyAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICBt YXNtLndhc21UcnVuY2F0ZURvdWJsZVRvSW50MzIoaW5wdXQsIG91dHB1dCwgbWlyLT5pc1NhdHVy YXRpbmcoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbEVudHJ5KTsK KysgIH0gZWxzZSBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMikgeworKyAgICBtYXNt Lndhc21UcnVuY2F0ZUZsb2F0MzJUb0ludDMyKGlucHV0LCBvdXRwdXQsIG1pci0+aXNTYXR1cmF0 aW5nKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sRW50cnkpOwor KyAgfSBlbHNlIHsKKysgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIHR5cGUiKTsKKysgIH0KKysK KysgIG1hc20uYmluZChvb2wtPnJlam9pbigpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdFdhc21UcnVuY2F0ZVRvSW50NjQoTFdhc21UcnVuY2F0ZVRvSW50NjQqIGxpcikgewor KyAgRmxvYXRSZWdpc3RlciBpbnB1dCA9IFRvRmxvYXRSZWdpc3RlcihsaXItPmlucHV0KCkpOwor KyAgUmVnaXN0ZXI2NCBvdXRwdXQgPSBUb091dFJlZ2lzdGVyNjQobGlyKTsKKysKKysgIE1XYXNt VHJ1bmNhdGVUb0ludDY0KiBtaXIgPSBsaXItPm1pcigpOworKyAgTUlSVHlwZSBmcm9tVHlwZSA9 IG1pci0+aW5wdXQoKS0+dHlwZSgpOworKworKyAgTU9aX0FTU0VSVChmcm9tVHlwZSA9PSBNSVJU eXBlOjpEb3VibGUgfHwgZnJvbVR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMik7CisrCisrICBhdXRv KiBvb2wgPSBuZXcgKGFsbG9jKCkpIE91dE9mTGluZVdhc21UcnVuY2F0ZUNoZWNrKG1pciwgaW5w dXQsIG91dHB1dCk7CisrICBhZGRPdXRPZkxpbmVDb2RlKG9vbCwgbWlyKTsKKysKKysgIExhYmVs KiBvb2xFbnRyeSA9IG9vbC0+ZW50cnkoKTsKKysgIExhYmVsKiBvb2xSZWpvaW4gPSBvb2wtPnJl am9pbigpOworKyAgYm9vbCBpc1NhdHVyYXRpbmcgPSBtaXItPmlzU2F0dXJhdGluZygpOworKwor KyAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICBpZiAobWlyLT5pc1Vu c2lnbmVkKCkpIHsKKysgICAgICBtYXNtLndhc21UcnVuY2F0ZURvdWJsZVRvVUludDY0KGlucHV0 LCBvdXRwdXQsIGlzU2F0dXJhdGluZywgb29sRW50cnksCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvb2xSZWpvaW4sIEludmFsaWRGbG9hdFJlZyk7CisrICAgIH0gZWxz ZSB7CisrICAgICAgbWFzbS53YXNtVHJ1bmNhdGVEb3VibGVUb0ludDY0KGlucHV0LCBvdXRwdXQs IGlzU2F0dXJhdGluZywgb29sRW50cnksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9vbFJlam9pbiwgSW52YWxpZEZsb2F0UmVnKTsKKysgICAgfQorKyAgfSBlbHNlIHsK KysgICAgaWYgKG1pci0+aXNVbnNpZ25lZCgpKSB7CisrICAgICAgbWFzbS53YXNtVHJ1bmNhdGVG bG9hdDMyVG9VSW50NjQoaW5wdXQsIG91dHB1dCwgaXNTYXR1cmF0aW5nLCBvb2xFbnRyeSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb2xSZWpvaW4sIEludmFsaWRG bG9hdFJlZyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbWFzbS53YXNtVHJ1bmNhdGVGbG9hdDMy VG9JbnQ2NChpbnB1dCwgb3V0cHV0LCBpc1NhdHVyYXRpbmcsIG9vbEVudHJ5LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29sUmVqb2luLCBJbnZhbGlkRmxvYXRSZWcp OworKyAgICB9CisrICB9CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRJbnQ2NFRv RmxvYXRpbmdQb2ludChMSW50NjRUb0Zsb2F0aW5nUG9pbnQqIGxpcikgeworKyAgUmVnaXN0ZXI2 NCBpbnB1dCA9IFRvUmVnaXN0ZXI2NChsaXItPmlucHV0KCkpOworKyAgRmxvYXRSZWdpc3RlciBv dXRwdXQgPSBUb0Zsb2F0UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7CisrICBNSVJUeXBlIG91dHB1 dFR5cGUgPSBsaXItPm1pcigpLT50eXBlKCk7CisrCisrICBpZiAob3V0cHV0VHlwZSA9PSBNSVJU eXBlOjpEb3VibGUpIHsKKysgICAgaWYgKGxpci0+bWlyKCktPmlzVW5zaWduZWQoKSkgeworKyAg ICAgIG1hc20uY29udmVydFVJbnQ2NFRvRG91YmxlKGlucHV0LCBvdXRwdXQsIFJlZ2lzdGVyOjpJ bnZhbGlkKCkpOworKyAgICB9IGVsc2UgeworKyAgICAgIG1hc20uY29udmVydEludDY0VG9Eb3Vi bGUoaW5wdXQsIG91dHB1dCk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIGlmIChsaXItPm1p cigpLT5pc1Vuc2lnbmVkKCkpIHsKKysgICAgICBtYXNtLmNvbnZlcnRVSW50NjRUb0Zsb2F0MzIo aW5wdXQsIG91dHB1dCwgUmVnaXN0ZXI6OkludmFsaWQoKSk7CisrICAgIH0gZWxzZSB7CisrICAg ICAgbWFzbS5jb252ZXJ0SW50NjRUb0Zsb2F0MzIoaW5wdXQsIG91dHB1dCk7CisrICAgIH0KKysg IH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21VaW50MzJUb0RvdWJsZShM V2FzbVVpbnQzMlRvRG91YmxlKiBsaXIpIHsKKysgIFJlZ2lzdGVyIGlucHV0ID0gVG9SZWdpc3Rl cihsaXItPmlucHV0KCkpOworKyAgRmxvYXRSZWdpc3RlciBvdXRwdXQgPSBUb0Zsb2F0UmVnaXN0 ZXIobGlyLT5vdXRwdXQoKSk7CisrICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZShpbnB1dCwg b3V0cHV0KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21VaW50MzJUb0Zs b2F0MzIoTFdhc21VaW50MzJUb0Zsb2F0MzIqIGxpcikgeworKyAgUmVnaXN0ZXIgaW5wdXQgPSBU b1JlZ2lzdGVyKGxpci0+aW5wdXQoKSk7CisrICBGbG9hdFJlZ2lzdGVyIG91dHB1dCA9IFRvRmxv YXRSZWdpc3RlcihsaXItPm91dHB1dCgpKTsKKysgIG1hc20uY29udmVydFVJbnQzMlRvRmxvYXQz MihpbnB1dCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21C dWlsdGluVHJ1bmNhdGVEVG9JbnQzMigKKysgICAgTFdhc21CdWlsdGluVHJ1bmNhdGVEVG9JbnQz MiogbGlyKSB7CisrICBlbWl0VHJ1bmNhdGVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGxpci0+Z2V0 T3BlcmFuZCgwKSksCisrICAgICAgICAgICAgICAgICAgICAgVG9SZWdpc3RlcihsaXItPmdldERl ZigwKSksIGxpci0+bWlyKCkpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2Fz bUJ1aWx0aW5UcnVuY2F0ZUZUb0ludDMyKAorKyAgICBMV2FzbUJ1aWx0aW5UcnVuY2F0ZUZUb0lu dDMyKiBsaXIpIHsKKysgIGVtaXRUcnVuY2F0ZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGxpci0+ Z2V0T3BlcmFuZCgwKSksCisrICAgICAgICAgICAgICAgICAgICAgIFRvUmVnaXN0ZXIobGlyLT5n ZXREZWYoMCkpLCBsaXItPm1pcigpKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmlzaXRvcnM6 IFdhc20gbG9hZC9zdG9yZQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3ZvaWQgQ29kZUdl bmVyYXRvclBQQzY0OjplbWl0V2FzbUxvYWQoVCogbGlyKSB7CisrICBjb25zdCBNV2FzbUxvYWQq IG1pciA9IGxpci0+bWlyKCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNt KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICBSZWdpc3Rl ciBtZW1vcnlCYXNlID0gVG9SZWdpc3RlcihsaXItPm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3Rl ciBwdHIgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOworKyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9 IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7CisrCisrICBpZiAobWlyLT5i YXNlKCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMikgeworKyAgICBtYXNtLm1vdmUzMlRvNjRa ZXJvRXh0ZW5kKHB0ciwgUmVnaXN0ZXI2NChzY3JhdGNoKSk7CisrICAgIHB0ciA9IHNjcmF0Y2g7 CisrICAgIHB0clNjcmF0Y2ggPSBwdHJTY3JhdGNoICE9IEludmFsaWRSZWcgPyBzY3JhdGNoIDog SW52YWxpZFJlZzsKKysgIH0KKysKKysgIG1hc20ud2FzbUxvYWQobWlyLT5hY2Nlc3MoKSwgbWVt b3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNoLAorKyAgICAgICAgICAgICAgICBUb0FueVJlZ2lzdGVy KGxpci0+b3V0cHV0KCkpKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBD b2RlR2VuZXJhdG9yUFBDNjQ6OmVtaXRXYXNtU3RvcmUoVCogbGlyKSB7CisrICBjb25zdCBNV2Fz bVN0b3JlKiBtaXIgPSBsaXItPm1pcigpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMobWFzbSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAg UmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOworKyAg UmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKKysgIFJlZ2lzdGVyIHB0clNj cmF0Y2ggPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAwKCkpOworKworKyAgaWYg KG1pci0+YmFzZSgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpIHsKKysgICAgbWFzbS5tb3Zl MzJUbzY0WmVyb0V4dGVuZChwdHIsIFJlZ2lzdGVyNjQoc2NyYXRjaCkpOworKyAgICBwdHIgPSBz Y3JhdGNoOworKyAgICBwdHJTY3JhdGNoID0gcHRyU2NyYXRjaCAhPSBJbnZhbGlkUmVnID8gc2Ny YXRjaCA6IEludmFsaWRSZWc7CisrICB9CisrCisrICBtYXNtLndhc21TdG9yZShtaXItPmFjY2Vz cygpLCBUb0FueVJlZ2lzdGVyKGxpci0+dmFsdWUoKSksIG1lbW9yeUJhc2UsIHB0ciwKKysgICAg ICAgICAgICAgICAgIHB0clNjcmF0Y2gpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZp c2l0V2FzbUxvYWQoTFdhc21Mb2FkKiBsaXIpIHsgZW1pdFdhc21Mb2FkKGxpcik7IH0KKysKKyt2 b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVN0b3JlKExXYXNtU3RvcmUqIGxpcikgeyBlbWl0 V2FzbVN0b3JlKGxpcik7IH0KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWRJ NjQoTFdhc21Mb2FkSTY0KiBsaXIpIHsKKysgIGNvbnN0IE1XYXNtTG9hZCogbWlyID0gbGlyLT5t aXIoKTsKKysKKysgIFJlZ2lzdGVyIG1lbW9yeUJhc2UgPSBUb1JlZ2lzdGVyKGxpci0+bWVtb3J5 QmFzZSgpKTsKKysgIFJlZ2lzdGVyIHB0clNjcmF0Y2ggPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxp ZChsaXItPnRlbXAwKCkpOworKworKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihsaXIt PnB0cigpKTsKKysgIGlmIChtaXItPmJhc2UoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKSB7 CisrICAgIG1hc20ubW92ZTMyWmVyb0V4dGVuZFRvUHRyKHB0clJlZywgcHRyUmVnKTsKKysgIH0K KysKKysgIG1hc20ud2FzbUxvYWRJNjQobWlyLT5hY2Nlc3MoKSwgbWVtb3J5QmFzZSwgcHRyUmVn LCBwdHJTY3JhdGNoLAorKyAgICAgICAgICAgICAgICAgICBUb091dFJlZ2lzdGVyNjQobGlyKSk7 CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU3RvcmVJNjQoTFdhc21TdG9y ZUk2NCogbGlyKSB7CisrICBjb25zdCBNV2FzbVN0b3JlKiBtaXIgPSBsaXItPm1pcigpOworKwor KyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkpOwor KyAgUmVnaXN0ZXIgcHRyU2NyYXRjaCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVt cDAoKSk7CisrCisrICBSZWdpc3RlciBwdHJSZWcgPSBUb1JlZ2lzdGVyKGxpci0+cHRyKCkpOwor KyAgaWYgKG1pci0+YmFzZSgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpIHsKKysgICAgbWFz bS5tb3ZlMzJaZXJvRXh0ZW5kVG9QdHIocHRyUmVnLCBwdHJSZWcpOworKyAgfQorKworKyAgbWFz bS53YXNtU3RvcmVJNjQobWlyLT5hY2Nlc3MoKSwgVG9SZWdpc3RlcjY0KGxpci0+dmFsdWUoKSks IG1lbW9yeUJhc2UsCisrICAgICAgICAgICAgICAgICAgICBwdHJSZWcsIHB0clNjcmF0Y2gpOwor K30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXNtSlNMb2FkSGVhcChMQXNtSlNMb2Fk SGVhcCogaW5zKSB7CisrICBjb25zdCBNQXNtSlNMb2FkSGVhcCogbWlyID0gaW5zLT5taXIoKTsK KysgIE1PWl9BU1NFUlQoIW1pci0+aGFzTWVtb3J5QmFzZSgpKTsKKysKKysgIGNvbnN0IExBbGxv Y2F0aW9uKiBwdHIgPSBpbnMtPnB0cigpOworKyAgY29uc3QgTERlZmluaXRpb24qIG91dHB1dCA9 IGlucy0+b3V0cHV0KCk7CisrICBjb25zdCBMQWxsb2NhdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9 IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgpOworKworKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdp c3RlcihwdHIpOworKyAgU2NhbGFyOjpUeXBlIGFjY2Vzc1R5cGUgPSBtaXItPmFjY2Vzc1R5cGUo KTsKKysgIGJvb2wgaXNGbG9hdCA9IGFjY2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9hdDMyIHx8IGFj Y2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9hdDY0OworKyAgTGFiZWwgZG9uZTsKKysKKysgIGlmICht aXItPm5lZWRzQm91bmRzQ2hlY2soKSkgeworKyAgICBMYWJlbCBib3VuZHNDaGVja1Bhc3NlZDsK KysgICAgUmVnaXN0ZXIgYm91bmRzQ2hlY2tMaW1pdFJlZyA9IFRvUmVnaXN0ZXIoYm91bmRzQ2hl Y2tMaW1pdCk7CisrICAgIG1hc20ud2FzbUJvdW5kc0NoZWNrMzIoQXNzZW1ibGVyOjpCZWxvdywg cHRyUmVnLCBib3VuZHNDaGVja0xpbWl0UmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICZib3VuZHNDaGVja1Bhc3NlZCk7CisrICAgIGlmIChpc0Zsb2F0KSB7CisrICAgICAgaWYgKGFj Y2Vzc1R5cGUgPT0gU2NhbGFyOjpGbG9hdDMyKSB7CisrICAgICAgICBtYXNtLmxvYWRDb25zdGFu dEZsb2F0MzIoR2VuZXJpY05hTigpLCBUb0Zsb2F0UmVnaXN0ZXIob3V0cHV0KSk7CisrICAgICAg fSBlbHNlIHsKKysgICAgICAgIG1hc20ubG9hZENvbnN0YW50RG91YmxlKEdlbmVyaWNOYU4oKSwg VG9GbG9hdFJlZ2lzdGVyKG91dHB1dCkpOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAg ICBtYXNtLm1vdmVQdHIoSW1tV29yZCgwKSwgVG9SZWdpc3RlcihvdXRwdXQpKTsKKysgICAgfQor KyAgICBtYXNtLmp1bXAoJmRvbmUpOworKyAgICBtYXNtLmJpbmQoJmJvdW5kc0NoZWNrUGFzc2Vk KTsKKysgIH0KKysKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1hc20ubW92ZTMyVG82NFpl cm9FeHRlbmQocHRyUmVnLCBSZWdpc3RlcjY0KHNjcmF0Y2gpKTsKKysKKysgIHN3aXRjaCAoYWNj ZXNzVHlwZSkgeworKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKKysgICAgICBtYXNtLmFzX2xiengo VG9SZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBtYXNtLmFzX2V4 dHNiKFRvUmVnaXN0ZXIob3V0cHV0KSwgVG9SZWdpc3RlcihvdXRwdXQpKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQ4OgorKyAgICAgIG1hc20uYXNfbGJ6eChUb1JlZ2lz dGVyKG91dHB1dCksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IFNjYWxhcjo6SW50MTY6CisrICAgICAgbWFzbS5hc19saGF4KFRvUmVnaXN0ZXIob3V0cHV0KSwg SGVhcFJlZywgc2NyYXRjaCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpVaW50 MTY6CisrICAgICAgbWFzbS5hc19saHp4KFRvUmVnaXN0ZXIob3V0cHV0KSwgSGVhcFJlZywgc2Ny YXRjaCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQzMjoKKysgICAgICBt YXNtLmFzX2x3engoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAg ICBtYXNtLmFzX2V4dHN3KFRvUmVnaXN0ZXIob3V0cHV0KSwgVG9SZWdpc3RlcihvdXRwdXQpKTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKKysgICAgICBtYXNtLmFz X2x3engoVG9SZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSBTY2FsYXI6OkZsb2F0NjQ6CisrICAgICAgbWFzbS5hc19sZmR4KFRvRmxv YXRSZWdpc3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBTY2FsYXI6OkZsb2F0MzI6CisrICAgICAgbWFzbS5hc19sZnN4KFRvRmxvYXRSZWdp c3RlcihvdXRwdXQpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBicmVhazsKKysgICAgZGVm YXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOworKyAgfQor KworKyAgaWYgKGRvbmUudXNlZCgpKSB7CisrICAgIG1hc20uYmluZCgmZG9uZSk7CisrICB9Cisr fQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBc21KU1N0b3JlSGVhcChMQXNtSlNTdG9y ZUhlYXAqIGlucykgeworKyAgY29uc3QgTUFzbUpTU3RvcmVIZWFwKiBtaXIgPSBpbnMtPm1pcigp OworKyAgTU9aX0FTU0VSVCghbWlyLT5oYXNNZW1vcnlCYXNlKCkpOworKworKyAgY29uc3QgTEFs bG9jYXRpb24qIHZhbHVlID0gaW5zLT52YWx1ZSgpOworKyAgY29uc3QgTEFsbG9jYXRpb24qIHB0 ciA9IGlucy0+cHRyKCk7CisrICBjb25zdCBMQWxsb2NhdGlvbiogYm91bmRzQ2hlY2tMaW1pdCA9 IGlucy0+Ym91bmRzQ2hlY2tMaW1pdCgpOworKworKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdp c3RlcihwdHIpOworKworKyAgTGFiZWwgZG9uZTsKKysgIGlmIChtaXItPm5lZWRzQm91bmRzQ2hl Y2soKSkgeworKyAgICBSZWdpc3RlciBib3VuZHNDaGVja0xpbWl0UmVnID0gVG9SZWdpc3Rlcihi b3VuZHNDaGVja0xpbWl0KTsKKysgICAgbWFzbS53YXNtQm91bmRzQ2hlY2szMihBc3NlbWJsZXI6 OkFib3ZlT3JFcXVhbCwgcHRyUmVnLCBib3VuZHNDaGVja0xpbWl0UmVnLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICZkb25lKTsKKysgIH0KKysKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKG1hc20pOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgIG1hc20ubW92ZTMyVG82NFplcm9FeHRlbmQocHRyUmVnLCBSZWdpc3RlcjY0KHNjcmF0Y2gp KTsKKysKKysgIHN3aXRjaCAobWlyLT5hY2Nlc3NUeXBlKCkpIHsKKysgICAgY2FzZSBTY2FsYXI6 OkludDg6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50ODoKKysgICAgICBtYXNtLmFzX3N0YngoVG9S ZWdpc3Rlcih2YWx1ZSksIEhlYXBSZWcsIHNjcmF0Y2gpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIFNjYWxhcjo6SW50MTY6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50MTY6CisrICAgICAgbWFz bS5hc19zdGh4KFRvUmVnaXN0ZXIodmFsdWUpLCBIZWFwUmVnLCBzY3JhdGNoKTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkludDMyOgorKyAgICBjYXNlIFNjYWxhcjo6VWludDMy OgorKyAgICAgIG1hc20uYXNfc3R3eChUb1JlZ2lzdGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRj aCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpGbG9hdDY0OgorKyAgICAgIG1h c20uYXNfc3RmZHgoVG9GbG9hdFJlZ2lzdGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpGbG9hdDMyOgorKyAgICAgIG1hc20uYXNf c3Rmc3goVG9GbG9hdFJlZ2lzdGVyKHZhbHVlKSwgSGVhcFJlZywgc2NyYXRjaCk7CisrICAgICAg YnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJ1bmV4cGVjdGVkIGFycmF5 IHR5cGUiKTsKKysgIH0KKysKKysgIGlmIChkb25lLnVzZWQoKSkgeworKyAgICBtYXNtLmJpbmQo JmRvbmUpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVN0YWNr QXJnKExXYXNtU3RhY2tBcmcqIGlucykgeworKyAgY29uc3QgTVdhc21TdGFja0FyZyogbWlyID0g aW5zLT5taXIoKTsKKysgIGlmIChpbnMtPmFyZygpLT5pc0NvbnN0YW50KCkpIHsKKysgICAgbWFz bS5zdG9yZVB0cihJbW1Xb3JkKFRvSW50MzIoaW5zLT5hcmcoKSkpLAorKyAgICAgICAgICAgICAg ICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBtaXItPnNwT2Zmc2V0KCkpKTsKKysgIH0gZWxzZSB7 CisrICAgIGlmIChpbnMtPmFyZygpLT5pc0dlbmVyYWxSZWcoKSkgeworKyAgICAgIG1hc20uc3Rv cmVQdHIoVG9SZWdpc3RlcihpbnMtPmFyZygpKSwKKysgICAgICAgICAgICAgICAgICAgIEFkZHJl c3MoU3RhY2tQb2ludGVyLCBtaXItPnNwT2Zmc2V0KCkpKTsKKysgICAgfSBlbHNlIGlmIChtaXIt PmlucHV0KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgICBtYXNtLnN0b3Jl RG91YmxlKFRvRmxvYXRSZWdpc3RlcihpbnMtPmFyZygpKSwKKysgICAgICAgICAgICAgICAgICAg ICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCBtaXItPnNwT2Zmc2V0KCkpKTsKKysjaWZkZWYgRU5B QkxFX1dBU01fU0lNRAorKyAgICB9IGVsc2UgaWYgKG1pci0+aW5wdXQoKS0+dHlwZSgpID09IE1J UlR5cGU6OlNpbWQxMjgpIHsKKysgICAgICBtYXNtLnN0b3JlVW5hbGlnbmVkU2ltZDEyOChUb0Zs b2F0UmVnaXN0ZXIoaW5zLT5hcmcoKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQWRkcmVzcyhTdGFja1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSkpOworKyNlbmRpZgorKyAg ICB9IGVsc2UgeworKyAgICAgIG1hc20uc3RvcmVGbG9hdDMyKFRvRmxvYXRSZWdpc3RlcihpbnMt PmFyZygpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzKFN0YWNrUG9pbnRlciwg bWlyLT5zcE9mZnNldCgpKSk7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFdhc21TdGFja0FyZ0k2NChMV2FzbVN0YWNrQXJnSTY0KiBpbnMpIHsKKysgIGNv bnN0IE1XYXNtU3RhY2tBcmcqIG1pciA9IGlucy0+bWlyKCk7CisrICBBZGRyZXNzIGRzdChTdGFj a1BvaW50ZXIsIG1pci0+c3BPZmZzZXQoKSk7CisrICBpZiAoSXNDb25zdGFudChpbnMtPmFyZygp KSkgeworKyAgICBtYXNtLnN0b3JlNjQoSW1tNjQoVG9JbnQ2NChpbnMtPmFyZygpKSksIGRzdCk7 CisrICB9IGVsc2UgeworKyAgICBtYXNtLnN0b3JlNjQoVG9SZWdpc3RlcjY0KGlucy0+YXJnKCkp LCBkc3QpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNlbGVj dChMV2FzbVNlbGVjdCogaW5zKSB7CisrICBNSVJUeXBlIG1pclR5cGUgPSBpbnMtPm1pcigpLT50 eXBlKCk7CisrCisrICBSZWdpc3RlciBjb25kID0gVG9SZWdpc3RlcihpbnMtPmNvbmRFeHByKCkp OworKyAgY29uc3QgTEFsbG9jYXRpb24qIGZhbHNlRXhwciA9IGlucy0+ZmFsc2VFeHByKCk7Cisr CisrICBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpJbnQzMiB8fCBtaXJUeXBlID09IE1JUlR5cGU6 Oldhc21BbnlSZWYpIHsKKysgICAgUmVnaXN0ZXIgb3V0ID0gVG9SZWdpc3RlcihpbnMtPm91dHB1 dCgpKTsKKysgICAgTU9aX0FTU0VSVChUb1JlZ2lzdGVyKGlucy0+dHJ1ZUV4cHIoKSkgPT0gb3V0 LAorKyAgICAgICAgICAgICAgICJ0cnVlIGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRwdXQi KTsKKysgICAgaWYgKGZhbHNlRXhwci0+aXNHZW5lcmFsUmVnKCkpIHsKKysgICAgICBtYXNtLm1v dmVJZlplcm8ob3V0LCBUb1JlZ2lzdGVyKGZhbHNlRXhwciksIGNvbmQpOworKyAgICB9IGVsc2Ug eworKyAgICAgIG1hc20uY21wMzJMb2FkMzIoQXNzZW1ibGVyOjpaZXJvLCBjb25kLCBjb25kLCBU b0FkZHJlc3MoZmFsc2VFeHByKSwgb3V0KTsKKysgICAgfQorKyAgICByZXR1cm47CisrICB9Cisr CisrICBGbG9hdFJlZ2lzdGVyIG91dCA9IFRvRmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsK KysgIE1PWl9BU1NFUlQoVG9GbG9hdFJlZ2lzdGVyKGlucy0+dHJ1ZUV4cHIoKSkgPT0gb3V0LAor KyAgICAgICAgICAgICAidHJ1ZSBleHByIGlucHV0IGlzIHJldXNlZCBmb3Igb3V0cHV0Iik7Cisr CisrICBpZiAoZmFsc2VFeHByLT5pc0Zsb2F0UmVnKCkpIHsKKysgICAgTGFiZWwgZG9uZTsKKysg ICAgLy8gVGhlIHNlbGVjdCBjb25kaXRpb24gaXMgYSAzMi1iaXQgdmFsdWU7IHRlc3QgMzIgYml0 cyBzbyBoaWdoLWJpdCBnYXJiYWdlCisrICAgIC8vIGRvZXMgbm90IG1ha2UgYSB6ZXJvIGNvbmRp dGlvbiByZWFkIGFzIG5vbi16ZXJvLgorKyAgICBtYXNtLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6 Ok5vblplcm8sIGNvbmQsIGNvbmQsICZkb25lKTsKKysgICAgaWYgKG1pclR5cGUgPT0gTUlSVHlw ZTo6RmxvYXQzMikgeworKyAgICAgIG1hc20ubW92ZUZsb2F0MzIoVG9GbG9hdFJlZ2lzdGVyKGZh bHNlRXhwciksIG91dCk7CisrICAgIH0gZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpEb3Vi bGUpIHsKKysgICAgICBtYXNtLm1vdmVEb3VibGUoVG9GbG9hdFJlZ2lzdGVyKGZhbHNlRXhwciks IG91dCk7CisrICAgIH0gZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBlOjpTaW1kMTI4KSB7Cisr ICAgICAgbWFzbS5tb3ZlU2ltZDEyOChUb0Zsb2F0UmVnaXN0ZXIoZmFsc2VFeHByKSwgb3V0KTsK KysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQ1JBU0goInVuaGFuZGxlZCB0eXBlIGluIHZpc2l0 V2FzbVNlbGVjdCEiKTsKKysgICAgfQorKyAgICBtYXNtLmJpbmQoJmRvbmUpOworKyAgfSBlbHNl IHsKKysgICAgTGFiZWwgZG9uZTsKKysgICAgLy8gVGhlIHNlbGVjdCBjb25kaXRpb24gaXMgYSAz Mi1iaXQgdmFsdWU7IHRlc3QgMzIgYml0cyBzbyBoaWdoLWJpdCBnYXJiYWdlCisrICAgIC8vIGRv ZXMgbm90IG1ha2UgYSB6ZXJvIGNvbmRpdGlvbiByZWFkIGFzIG5vbi16ZXJvLgorKyAgICBtYXNt LmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGNvbmQsIGNvbmQsICZkb25lKTsKKysK KysgICAgaWYgKG1pclR5cGUgPT0gTUlSVHlwZTo6RmxvYXQzMikgeworKyAgICAgIG1hc20ubG9h ZEZsb2F0MzIoVG9BZGRyZXNzKGZhbHNlRXhwciksIG91dCk7CisrICAgIH0gZWxzZSBpZiAobWly VHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgICBtYXNtLmxvYWREb3VibGUoVG9BZGRy ZXNzKGZhbHNlRXhwciksIG91dCk7CisrICAgIH0gZWxzZSBpZiAobWlyVHlwZSA9PSBNSVJUeXBl OjpTaW1kMTI4KSB7CisrICAgICAgbWFzbS5sb2FkVW5hbGlnbmVkU2ltZDEyOChUb0FkZHJlc3Mo ZmFsc2VFeHByKSwgb3V0KTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQ1JBU0goInVuaGFu ZGxlZCB0eXBlIGluIHZpc2l0V2FzbVNlbGVjdCEiKTsKKysgICAgfQorKworKyAgICBtYXNtLmJp bmQoJmRvbmUpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNl bGVjdEk2NChMV2FzbVNlbGVjdEk2NCogbGlyKSB7CisrICBNT1pfQVNTRVJUKGxpci0+bWlyKCkt PnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7CisrCisrICBSZWdpc3RlciBjb25kID0gVG9SZWdp c3RlcihsaXItPmNvbmRFeHByKCkpOworKyAgTEludDY0QWxsb2NhdGlvbiBmYWxzZUV4cHIgPSBs aXItPmZhbHNlRXhwcigpOworKworKyAgUmVnaXN0ZXI2NCBvdXQgPSBUb091dFJlZ2lzdGVyNjQo bGlyKTsKKysgIE1PWl9BU1NFUlQoVG9SZWdpc3RlcjY0KGxpci0+dHJ1ZUV4cHIoKSkgPT0gb3V0 LAorKyAgICAgICAgICAgICAidHJ1ZSBleHByIGlzIHJldXNlZCBmb3IgaW5wdXQiKTsKKysKKysg IGlmIChmYWxzZUV4cHIudmFsdWUoKS5pc0dlbmVyYWxSZWcoKSkgeworKyAgICBtYXNtLm1vdmVJ Zlplcm8ob3V0LnJlZywgVG9SZWdpc3RlcihmYWxzZUV4cHIudmFsdWUoKSksIGNvbmQpOworKyAg fSBlbHNlIHsKKysgICAgTGFiZWwgZG9uZTsKKysgICAgLy8gVGhlIHNlbGVjdCBjb25kaXRpb24g aXMgYSAzMi1iaXQgdmFsdWU7IHRlc3QgMzIgYml0cyBzbyBoaWdoLWJpdCBnYXJiYWdlCisrICAg IC8vIGRvZXMgbm90IG1ha2UgYSB6ZXJvIGNvbmRpdGlvbiByZWFkIGFzIG5vbi16ZXJvLgorKyAg ICBtYXNtLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGNvbmQsIGNvbmQsICZkb25l KTsKKysgICAgbWFzbS5sb2FkUHRyKFRvQWRkcmVzcyhmYWxzZUV4cHIudmFsdWUoKSksIG91dC5y ZWcpOworKyAgICBtYXNtLmJpbmQoJmRvbmUpOworKyAgfQorK30KKysKKyt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVBbmRTZWxlY3QoTFdhc21Db21wYXJlQW5kU2VsZWN0KiBp bnMpIHsKKysgIE1Db21wYXJlOjpDb21wYXJlVHlwZSBjb21wVHkgPSBpbnMtPmNvbXBhcmVUeXBl KCk7CisrICBNSVJUeXBlIGluc1R5ID0gaW5zLT5taXIoKS0+dHlwZSgpOworKyAgY29uc3QgYm9v bCBjbXBJczMyID0gY29tcFR5ID09IE1Db21wYXJlOjpDb21wYXJlX0ludDMyIHx8CisrICAgICAg ICAgICAgICAgICAgICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfVUludDMyOworKyAg Y29uc3QgYm9vbCBjbXBJczY0ID0gY29tcFR5ID09IE1Db21wYXJlOjpDb21wYXJlX0ludDY0IHx8 CisrICAgICAgICAgICAgICAgICAgICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVfVUlu dDY0OworKyAgY29uc3QgYm9vbCBzZWxJc0ludCA9IGluc1R5ID09IE1JUlR5cGU6OkludDMyIHx8 IGluc1R5ID09IE1JUlR5cGU6OkludDY0OworKworKyAgTU9aX1JFTEVBU0VfQVNTRVJUKAorKyAg ICAgIChjbXBJczMyIHx8IGNtcElzNjQpICYmIHNlbElzSW50LAorKyAgICAgICJDb2RlR2VuZXJh dG9yOjp2aXNpdFdhc21Db21wYXJlQW5kU2VsZWN0OiB1bmV4cGVjdGVkIHR5cGVzIik7CisrCisr ICBSZWdpc3RlciB0cnVlRXhwckFuZERlc3QgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOwor KyAgTU9aX0FTU0VSVChUb1JlZ2lzdGVyKGlucy0+aWZUcnVlRXhwcigpKSA9PSB0cnVlRXhwckFu ZERlc3QsCisrICAgICAgICAgICAgICJ0cnVlIGV4cHIgaW5wdXQgaXMgcmV1c2VkIGZvciBvdXRw dXQiKTsKKysKKysgIEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQgPQorKyAgICAgIEFzc2VtYmxl cjo6SW52ZXJ0Q29uZGl0aW9uKEpTT3BUb0NvbmRpdGlvbihjb21wVHksIGlucy0+anNvcCgpKSk7 CisrICBSZWdpc3RlciBsaHMgPSBUb1JlZ2lzdGVyKGlucy0+bGVmdEV4cHIoKSk7CisrICBSZWdp c3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmlnaHRFeHByKCkpOworKyAgUmVnaXN0ZXIgZmFs c2VFeHByID0gVG9SZWdpc3RlcihpbnMtPmlmRmFsc2VFeHByKCkpOworKworKyAgLy8gaXNlbCBv cGVyYXRlcyBvbiB0aGUgd2hvbGUgNjQtYml0IEdQUiByZWdhcmRsZXNzIG9mIGNvbXBhcmUgd2lk dGg7IG9ubHkKKysgIC8vIHRoZSBjb21wYXJlIGluc3RydWN0aW9uIGRpZmZlcnMgKGNtcHcvY21w bHcgdnMgY21wZC9jbXBsZCkuCisrICBpZiAoY21wSXMzMikgeworKyAgICBtYXNtLmNtcDMyTW92 ZTMyKGNvbmQsIGxocywgcmhzLCBmYWxzZUV4cHIsIHRydWVFeHByQW5kRGVzdCk7CisrICB9IGVs c2UgeworKyAgICBtYXNtLmNtcFB0ck1vdmVQdHIoY29uZCwgbGhzLCByaHMsIGZhbHNlRXhwciwg dHJ1ZUV4cHJBbmREZXN0KTsKKysgIH0KKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dFdhc21BZGRPZmZzZXQoTFdhc21BZGRPZmZzZXQqIGxpcikgeworKyAgTVdhc21BZGRPZmZzZXQq IG1pciA9IGxpci0+bWlyKCk7CisrICBSZWdpc3RlciBiYXNlID0gVG9SZWdpc3RlcihsaXItPmJh c2UoKSk7CisrICBSZWdpc3RlciBvdXQgPSBUb1JlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKwor KyAgTGFiZWwgb2s7CisrICBtYXNtLm1hX2FkZDMyVGVzdENhcnJ5KEFzc2VtYmxlcjo6Q2FycnlD bGVhciwgb3V0LCBiYXNlLCBJbW0zMihtaXItPm9mZnNldCgpKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgJm9rKTsKKysgIG1hc20ud2FzbVRyYXAod2FzbTo6VHJhcDo6T3V0T2ZCb3VuZHMs IG1pci0+dHJhcFNpdGVEZXNjKCkpOworKyAgbWFzbS5iaW5kKCZvayk7CisrfQorKworK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQWRkT2Zmc2V0NjQoTFdhc21BZGRPZmZzZXQ2NCogbGly KSB7CisrICBNV2FzbUFkZE9mZnNldCogbWlyID0gbGlyLT5taXIoKTsKKysgIFJlZ2lzdGVyNjQg YmFzZSA9IFRvUmVnaXN0ZXI2NChsaXItPmJhc2UoKSk7CisrICBSZWdpc3RlcjY0IG91dCA9IFRv T3V0UmVnaXN0ZXI2NChsaXIpOworKworKyAgTGFiZWwgb2s7CisrICBtYXNtLm1hX2FkZFB0clRl c3RDYXJyeShBc3NlbWJsZXI6OkNhcnJ5Q2xlYXIsIG91dC5yZWcsIGJhc2UucmVnLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgSW1tV29yZChtaXItPm9mZnNldCgpKSwgJm9rKTsKKysgIG1h c20ud2FzbVRyYXAod2FzbTo6VHJhcDo6T3V0T2ZCb3VuZHMsIG1pci0+dHJhcFNpdGVEZXNjKCkp OworKyAgbWFzbS5iaW5kKCZvayk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFZpc2l0b3JzOiBF ZmZlY3RpdmUgQWRkcmVzcworKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRFZmZlY3RpdmVB ZGRyZXNzMihMRWZmZWN0aXZlQWRkcmVzczIqIGlucykgeworKyAgY29uc3QgTUVmZmVjdGl2ZUFk ZHJlc3MyKiBtaXIgPSBpbnMtPm1pcigpOworKyAgUmVnaXN0ZXIgb3V0cHV0ID0gVG9SZWdpc3Rl cihpbnMtPm91dHB1dCgpKTsKKysKKysgIC8vIEVBID0gaW5kZXggKiBzY2FsZSArIGRpc3BsYWNl bWVudCAobm8gYmFzZSByZWdpc3RlcikKKysgIG1hc20ubW92ZVB0cihJbW1Xb3JkKDApLCBvdXRw dXQpOworKyAgQmFzZUluZGV4IGFkZHIob3V0cHV0LCBUb1JlZ2lzdGVyKGlucy0+aW5kZXgoKSks IG1pci0+c2NhbGUoKSwKKysgICAgICAgICAgICAgICAgIG1pci0+ZGlzcGxhY2VtZW50KCkpOwor KyAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhhZGRyLCBvdXRwdXQpOworKyAgLy8gU2ln bi1leHRlbmQgdG8gMzItYml0CisrICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKKyt9 CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdEVmZmVjdGl2ZUFkZHJlc3MzKExFZmZlY3Rp dmVBZGRyZXNzMyogaW5zKSB7CisrICBjb25zdCBNRWZmZWN0aXZlQWRkcmVzczMqIG1pciA9IGlu cy0+bWlyKCk7CisrICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OworKworKyAgQmFzZUluZGV4IGFkZHIoVG9SZWdpc3RlcihpbnMtPmJhc2UoKSksIFRvUmVnaXN0 ZXIoaW5zLT5pbmRleCgpKSwKKysgICAgICAgICAgICAgICAgIG1pci0+c2NhbGUoKSwgbWlyLT5k aXNwbGFjZW1lbnQoKSk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKGFkZHIsIG91 dHB1dCk7CisrICAvLyBTaWduLWV4dGVuZCB0byAzMi1iaXQKKysgIG1hc20uYXNfZXh0c3cob3V0 cHV0LCBvdXRwdXQpOworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbU11bEk2 NFdpZGVISTY0KExXYXNtTXVsSTY0V2lkZUhJNjQqIGlucykgeworKyAgUmVnaXN0ZXIgbGhzID0g VG9SZWdpc3RlcihpbnMtPmxocygpKTsKKysgIFJlZ2lzdGVyIHJocyA9IFRvUmVnaXN0ZXIoaW5z LT5yaHMoKSk7CisrICBSZWdpc3RlciBvdXRwdXQgPSBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OworKworKyAgaWYgKGlucy0+aXNTaWduZWQoKSkgeworKyAgICBtYXNtLmFzX211bGhkKG91dHB1 dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hc19tdWxoZHUob3V0cHV0LCBs aHMsIHJocyk7CisrICB9CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFZpc2l0b3JzOiBUeXBlZCBB cnJheSBBdG9taWNzCisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdENvbXBhcmVFeGNoYW5n ZVR5cGVkQXJyYXlFbGVtZW50KAorKyAgICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1l bnQqIGxpcikgeworKyAgUmVnaXN0ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVu dHMoKSk7CisrICBBbnlSZWdpc3RlciBvdXRwdXQgPSBUb0FueVJlZ2lzdGVyKGxpci0+b3V0cHV0 KCkpOworKyAgUmVnaXN0ZXIgb3V0VGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+ dGVtcDAoKSk7CisrCisrICBSZWdpc3RlciBvbGR2YWwgPSBUb1JlZ2lzdGVyKGxpci0+b2xkdmFs KCkpOworKyAgUmVnaXN0ZXIgbmV3dmFsID0gVG9SZWdpc3RlcihsaXItPm5ld3ZhbCgpKTsKKysg IFJlZ2lzdGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDEo KSk7CisrICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGly LT50ZW1wMigpKTsKKysgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFs aWQobGlyLT50ZW1wMygpKTsKKysgIFNjYWxhcjo6VHlwZSBhcnJheVR5cGUgPSBsaXItPm1pcigp LT5hcnJheVR5cGUoKTsKKysKKysgIGF1dG8gZGVzdCA9IFRvQWRkcmVzc09yQmFzZUluZGV4KGVs ZW1lbnRzLCBsaXItPmluZGV4KCksIGFycmF5VHlwZSk7CisrCisrICBkZXN0Lm1hdGNoKFsmXShj b25zdCBhdXRvJiBkZXN0KSB7CisrICAgIG1hc20uY29tcGFyZUV4Y2hhbmdlSlMoYXJyYXlUeXBl LCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwgZGVzdCwgb2xkdmFsLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5ld3ZhbCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0 VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworKyAgfSk7CisrfQor KworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVt ZW50KAorKyAgICBMQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCogbGlyKSB7CisrICBS ZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKKysgIEFueVJl Z2lzdGVyIG91dHB1dCA9IFRvQW55UmVnaXN0ZXIobGlyLT5vdXRwdXQoKSk7CisrICBSZWdpc3Rl ciBvdXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKKysKKysg IFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdpc3RlcihsaXItPnZhbHVlKCkpOworKyAgUmVnaXN0ZXIg dmFsdWVUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsKKysgIFJl Z2lzdGVyIG9mZnNldFRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRlbXAyKCkp OworKyAgUmVnaXN0ZXIgbWFza1RlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChsaXItPnRl bXAzKCkpOworKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlw ZSgpOworKworKyAgYXV0byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxp ci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKKysKKysgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8m IGRlc3QpIHsKKysgICAgbWFzbS5hdG9taWNFeGNoYW5nZUpTKGFycmF5VHlwZSwgU3luY2hyb25p emF0aW9uOjpGdWxsKCksIGRlc3QsIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg dmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0VGVtcCwgb3V0cHV0KTsKKysgIH0p OworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXRvbWljVHlwZWRBcnJheUVsZW1l bnRCaW5vcCgKKysgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3AqIGxpcikgeworKyAg TU9aX0FTU0VSVCghbGlyLT5taXIoKS0+aXNGb3JFZmZlY3QoKSk7CisrCisrICBBbnlSZWdpc3Rl ciBvdXRwdXQgPSBUb0FueVJlZ2lzdGVyKGxpci0+b3V0cHV0KCkpOworKyAgUmVnaXN0ZXIgZWxl bWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxlbWVudHMoKSk7CisrICBSZWdpc3RlciBvdXRUZW1w ID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMCgpKTsKKysgIFJlZ2lzdGVyIHZh bHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDEoKSk7CisrICBSZWdp c3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMigpKTsK KysgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1w MygpKTsKKysgIFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdpc3RlcihsaXItPnZhbHVlKCkpOworKyAg U2NhbGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOworKworKyAg YXV0byBtZW0gPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBh cnJheVR5cGUpOworKworKyAgbWVtLm1hdGNoKFsmXShjb25zdCBhdXRvJiBtZW0pIHsKKysgICAg bWFzbS5hdG9taWNGZXRjaE9wSlMoYXJyYXlUeXBlLCBTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgbGlyLT5taXIoKS0+b3BlcmF0aW9uKCksIHZhbHVl LCBtZW0sIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwg bWFza1RlbXAsIG91dFRlbXAsIG91dHB1dCk7CisrICB9KTsKKyt9CisrCisrdm9pZCBDb2RlR2Vu ZXJhdG9yOjp2aXNpdEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3QoCisrICAg IExBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZmZWN0KiBsaXIpIHsKKysgIE1PWl9B U1NFUlQobGlyLT5taXIoKS0+aXNGb3JFZmZlY3QoKSk7CisrCisrICBSZWdpc3RlciBlbGVtZW50 cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyIHZhbHVlVGVtcCA9 IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGxpci0+dGVtcDAoKSk7CisrICBSZWdpc3RlciBvZmZz ZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMSgpKTsKKysgIFJlZ2lz dGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQobGlyLT50ZW1wMigpKTsKKysg IFJlZ2lzdGVyIHZhbHVlID0gVG9SZWdpc3RlcihsaXItPnZhbHVlKCkpOworKyAgU2NhbGFyOjpU eXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOworKworKyAgYXV0byBtZW0g PSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGlyLT5pbmRleCgpLCBhcnJheVR5cGUp OworKworKyAgbWVtLm1hdGNoKFsmXShjb25zdCBhdXRvJiBtZW0pIHsKKysgICAgbWFzbS5hdG9t aWNFZmZlY3RPcEpTKGFycmF5VHlwZSwgU3luY2hyb25pemF0aW9uOjpGdWxsKCksCisrICAgICAg ICAgICAgICAgICAgICAgICAgICBsaXItPm1pcigpLT5vcGVyYXRpb24oKSwgdmFsdWUsIG1lbSwg dmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1Rl bXApOworKyAgfSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRDb21wYXJlRXhj aGFuZ2VUeXBlZEFycmF5RWxlbWVudDY0KAorKyAgICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJh eUVsZW1lbnQ2NCogbGlyKSB7CisrICBSZWdpc3RlciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGly LT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyNjQgb2xkdmFsID0gVG9SZWdpc3RlcjY0KGxpci0+ b2xkdmFsKCkpOworKyAgUmVnaXN0ZXI2NCBuZXd2YWwgPSBUb1JlZ2lzdGVyNjQobGlyLT5uZXd2 YWwoKSk7CisrICBSZWdpc3RlcjY0IG91dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOworKyAgU2Nh bGFyOjpUeXBlIGFycmF5VHlwZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOworKworKyAgYXV0 byBkZXN0ID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJy YXlUeXBlKTsKKysKKysgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKKysgICAg bWFzbS5jb21wYXJlRXhjaGFuZ2U2NChTeW5jaHJvbml6YXRpb246OkZ1bGwoKSwgZGVzdCwgb2xk dmFsLCBuZXd2YWwsIG91dCk7CisrICB9KTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NCgKKysgICAgTEF0b21pY0V4Y2hh bmdlVHlwZWRBcnJheUVsZW1lbnQ2NCogbGlyKSB7CisrICBSZWdpc3RlciBlbGVtZW50cyA9IFRv UmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lz dGVyNjQobGlyLT52YWx1ZSgpKTsKKysgIFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0 KGxpcik7CisrICBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBl KCk7CisrCisrICBhdXRvIGRlc3QgPSBUb0FkZHJlc3NPckJhc2VJbmRleChlbGVtZW50cywgbGly LT5pbmRleCgpLCBhcnJheVR5cGUpOworKworKyAgZGVzdC5tYXRjaChbJl0oY29uc3QgYXV0byYg ZGVzdCkgeworKyAgICBtYXNtLmF0b21pY0V4Y2hhbmdlNjQoU3luY2hyb25pemF0aW9uOjpGdWxs KCksIGRlc3QsIHZhbHVlLCBvdXQpOworKyAgfSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRv cjo6dmlzaXRBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wNjQoCisrICAgIExBdG9taWNUeXBl ZEFycmF5RWxlbWVudEJpbm9wNjQqIGxpcikgeworKyAgTU9aX0FTU0VSVChsaXItPm1pcigpLT5o YXNVc2VzKCkpOworKworKyAgUmVnaXN0ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxl bWVudHMoKSk7CisrICBSZWdpc3RlcjY0IHZhbHVlID0gVG9SZWdpc3RlcjY0KGxpci0+dmFsdWUo KSk7CisrICBSZWdpc3RlcjY0IHRlbXAgPSBUb1JlZ2lzdGVyNjQobGlyLT50ZW1wMCgpKTsKKysg IFJlZ2lzdGVyNjQgb3V0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7CisrCisrICBTY2FsYXI6OlR5 cGUgYXJyYXlUeXBlID0gbGlyLT5taXIoKS0+YXJyYXlUeXBlKCk7CisrICBBdG9taWNPcCBhdG9t aWNPcCA9IGxpci0+bWlyKCktPm9wZXJhdGlvbigpOworKworKyAgYXV0byBkZXN0ID0gVG9BZGRy ZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgYXJyYXlUeXBlKTsKKysKKysg IGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRlc3QpIHsKKysgICAgbWFzbS5hdG9taWNGZXRj aE9wNjQoU3luY2hyb25pemF0aW9uOjpGdWxsKCksIGF0b21pY09wLCB2YWx1ZSwgZGVzdCwgdGVt cCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgb3V0KTsKKysgIH0pOworK30KKysKKyt2b2lk IENvZGVHZW5lcmF0b3I6OnZpc2l0QXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVj dDY0KAorKyAgICBMQXRvbWljVHlwZWRBcnJheUVsZW1lbnRCaW5vcEZvckVmZmVjdDY0KiBsaXIp IHsKKysgIE1PWl9BU1NFUlQoIWxpci0+bWlyKCktPmhhc1VzZXMoKSk7CisrCisrICBSZWdpc3Rl ciBlbGVtZW50cyA9IFRvUmVnaXN0ZXIobGlyLT5lbGVtZW50cygpKTsKKysgIFJlZ2lzdGVyNjQg dmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKKysgIFJlZ2lzdGVyNjQgdGVtcCA9 IFRvUmVnaXN0ZXI2NChsaXItPnRlbXAwKCkpOworKworKyAgU2NhbGFyOjpUeXBlIGFycmF5VHlw ZSA9IGxpci0+bWlyKCktPmFycmF5VHlwZSgpOworKyAgQXRvbWljT3AgYXRvbWljT3AgPSBsaXIt Pm1pcigpLT5vcGVyYXRpb24oKTsKKysKKysgIGF1dG8gZGVzdCA9IFRvQWRkcmVzc09yQmFzZUlu ZGV4KGVsZW1lbnRzLCBsaXItPmluZGV4KCksIGFycmF5VHlwZSk7CisrCisrICBkZXN0Lm1hdGNo KFsmXShjb25zdCBhdXRvJiBkZXN0KSB7CisrICAgIG1hc20uYXRvbWljRWZmZWN0T3A2NChTeW5j aHJvbml6YXRpb246OkZ1bGwoKSwgYXRvbWljT3AsIHZhbHVlLCBkZXN0LCB0ZW1wKTsKKysgIH0p OworK30KKysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0QXRvbWljTG9hZDY0KExBdG9taWNM b2FkNjQqIGxpcikgeworKyAgUmVnaXN0ZXIgZWxlbWVudHMgPSBUb1JlZ2lzdGVyKGxpci0+ZWxl bWVudHMoKSk7CisrICBSZWdpc3RlcjY0IG91dCA9IFRvT3V0UmVnaXN0ZXI2NChsaXIpOworKyAg U2NhbGFyOjpUeXBlIHN0b3JhZ2VUeXBlID0gbGlyLT5taXIoKS0+c3RvcmFnZVR5cGUoKTsKKysK KysgIGF1dG8gc291cmNlID0gVG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5k ZXgoKSwgc3RvcmFnZVR5cGUpOworKworKyAgYXV0byBzeW5jID0gU3luY2hyb25pemF0aW9uOjpM b2FkKCk7CisrICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7CisrICBzb3VyY2UubWF0 Y2goWyZdKGNvbnN0IGF1dG8mIHNvdXJjZSkgeyBtYXNtLmxvYWQ2NChzb3VyY2UsIG91dCk7IH0p OworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7CisrfQorKworK3ZvaWQgQ29kZUdl bmVyYXRvcjo6dmlzaXRBdG9taWNTdG9yZTY0KExBdG9taWNTdG9yZTY0KiBsaXIpIHsKKysgIFJl Z2lzdGVyIGVsZW1lbnRzID0gVG9SZWdpc3RlcihsaXItPmVsZW1lbnRzKCkpOworKyAgUmVnaXN0 ZXI2NCB2YWx1ZSA9IFRvUmVnaXN0ZXI2NChsaXItPnZhbHVlKCkpOworKyAgU2NhbGFyOjpUeXBl IHdyaXRlVHlwZSA9IGxpci0+bWlyKCktPndyaXRlVHlwZSgpOworKworKyAgYXV0byBkZXN0ID0g VG9BZGRyZXNzT3JCYXNlSW5kZXgoZWxlbWVudHMsIGxpci0+aW5kZXgoKSwgd3JpdGVUeXBlKTsK KysKKysgIGF1dG8gc3luYyA9IFN5bmNocm9uaXphdGlvbjo6U3RvcmUoKTsKKysgIG1hc20ubWVt b3J5QmFycmllckJlZm9yZShzeW5jKTsKKysgIGRlc3QubWF0Y2goWyZdKGNvbnN0IGF1dG8mIGRl c3QpIHsgbWFzbS5zdG9yZTY0KHZhbHVlLCBkZXN0KTsgfSk7CisrICBtYXNtLm1lbW9yeUJhcnJp ZXJBZnRlcihzeW5jKTsKKyt9CisrCisrLy8gV2FzbSBBdG9taWNzCisrdm9pZCBDb2RlR2VuZXJh dG9yOjp2aXNpdFdhc21Db21wYXJlRXhjaGFuZ2VIZWFwKAorKyAgICBMV2FzbUNvbXBhcmVFeGNo YW5nZUhlYXAqIGlucykgeworKyAgTVdhc21Db21wYXJlRXhjaGFuZ2VIZWFwKiBtaXIgPSBpbnMt Pm1pcigpOworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlC YXNlKCkpOworKyAgUmVnaXN0ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKKysg IEJhc2VJbmRleCBzcmNBZGRyKG1lbW9yeUJhc2UsIHB0clJlZywgVGltZXNPbmUsIG1pci0+YWNj ZXNzKCkub2Zmc2V0MzIoKSk7CisrCisrICBSZWdpc3RlciBvbGR2YWwgPSBUb1JlZ2lzdGVyKGlu cy0+b2xkVmFsdWUoKSk7CisrICBSZWdpc3RlciBuZXd2YWwgPSBUb1JlZ2lzdGVyKGlucy0+bmV3 VmFsdWUoKSk7CisrICBSZWdpc3RlciB2YWx1ZVRlbXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxp ZChpbnMtPnRlbXAwKCkpOworKyAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCA9IFRvVGVtcFJlZ2lzdGVy T3JJbnZhbGlkKGlucy0+dGVtcDEoKSk7CisrICBSZWdpc3RlciBtYXNrVGVtcCA9IFRvVGVtcFJl Z2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDIoKSk7CisrCisrICBtYXNtLndhc21Db21wYXJlRXhj aGFuZ2UobWlyLT5hY2Nlc3MoKSwgc3JjQWRkciwgb2xkdmFsLCBuZXd2YWwsIHZhbHVlVGVtcCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgVG9SZWdp c3RlcihpbnMtPm91dHB1dCgpKSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRX YXNtQXRvbWljRXhjaGFuZ2VIZWFwKExXYXNtQXRvbWljRXhjaGFuZ2VIZWFwKiBpbnMpIHsKKysg IE1XYXNtQXRvbWljRXhjaGFuZ2VIZWFwKiBtaXIgPSBpbnMtPm1pcigpOworKyAgUmVnaXN0ZXIg bWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkpOworKyAgUmVnaXN0ZXIg cHRyUmVnID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKKysgIFJlZ2lzdGVyIHZhbHVlID0gVG9S ZWdpc3RlcihpbnMtPnZhbHVlKCkpOworKyAgQmFzZUluZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwg cHRyUmVnLCBUaW1lc09uZSwgbWlyLT5hY2Nlc3MoKS5vZmZzZXQzMigpKTsKKysKKysgIFJlZ2lz dGVyIHZhbHVlVGVtcCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDAoKSk7Cisr ICBSZWdpc3RlciBvZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1w MSgpKTsKKysgIFJlZ2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5z LT50ZW1wMigpKTsKKysKKysgIG1hc20ud2FzbUF0b21pY0V4Y2hhbmdlKG1pci0+YWNjZXNzKCks IHNyY0FkZHIsIHZhbHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXNrVGVtcCwgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7CisrfQorKwor K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljQmlub3BIZWFwKExXYXNtQXRvbWlj Qmlub3BIZWFwKiBpbnMpIHsKKysgIE1PWl9BU1NFUlQoaW5zLT5taXIoKS0+aGFzVXNlcygpKTsK KysKKysgIE1XYXNtQXRvbWljQmlub3BIZWFwKiBtaXIgPSBpbnMtPm1pcigpOworKyAgUmVnaXN0 ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkpOworKyAgUmVnaXN0 ZXIgcHRyUmVnID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKKysgIFJlZ2lzdGVyIHZhbHVlVGVt cCA9IFRvVGVtcFJlZ2lzdGVyT3JJbnZhbGlkKGlucy0+dGVtcDAoKSk7CisrICBSZWdpc3RlciBv ZmZzZXRUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMSgpKTsKKysgIFJl Z2lzdGVyIG1hc2tUZW1wID0gVG9UZW1wUmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMigpKTsK KysKKysgIEJhc2VJbmRleCBzcmNBZGRyKG1lbW9yeUJhc2UsIHB0clJlZywgVGltZXNPbmUsIG1p ci0+YWNjZXNzKCkub2Zmc2V0MzIoKSk7CisrCisrICBtYXNtLndhc21BdG9taWNGZXRjaE9wKG1p ci0+YWNjZXNzKCksIG1pci0+b3BlcmF0aW9uKCksCisrICAgICAgICAgICAgICAgICAgICAgICAg IFRvUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwgc3JjQWRkciwgdmFsdWVUZW1wLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgVG9SZWdpc3RlcihpbnMtPm91 dHB1dCgpKSk7CisrfQorKworK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQXRvbWljQmlu b3BIZWFwRm9yRWZmZWN0KAorKyAgICBMV2FzbUF0b21pY0Jpbm9wSGVhcEZvckVmZmVjdCogaW5z KSB7CisrICBNT1pfQVNTRVJUKCFpbnMtPm1pcigpLT5oYXNVc2VzKCkpOworKworKyAgTVdhc21B dG9taWNCaW5vcEhlYXAqIG1pciA9IGlucy0+bWlyKCk7CisrICBSZWdpc3RlciBtZW1vcnlCYXNl ID0gVG9SZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHJSZWcgPSBU b1JlZ2lzdGVyKGlucy0+cHRyKCkpOworKyAgUmVnaXN0ZXIgdmFsdWVUZW1wID0gVG9UZW1wUmVn aXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKKysgIFJlZ2lzdGVyIG9mZnNldFRlbXAgPSBU b1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAxKCkpOworKyAgUmVnaXN0ZXIgbWFza1Rl bXAgPSBUb1RlbXBSZWdpc3Rlck9ySW52YWxpZChpbnMtPnRlbXAyKCkpOworKworKyAgQmFzZUlu ZGV4IHNyY0FkZHIobWVtb3J5QmFzZSwgcHRyUmVnLCBUaW1lc09uZSwgbWlyLT5hY2Nlc3MoKS5v ZmZzZXQzMigpKTsKKysgIG1hc20ud2FzbUF0b21pY0VmZmVjdE9wKG1pci0+YWNjZXNzKCksIG1p ci0+b3BlcmF0aW9uKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICBUb1JlZ2lzdGVyKGlu cy0+dmFsdWUoKSksIHNyY0FkZHIsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2 aXNpdFdhc21Db21wYXJlRXhjaGFuZ2VJNjQoTFdhc21Db21wYXJlRXhjaGFuZ2VJNjQqIGxpcikg eworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1vcnlCYXNlKCkp OworKyAgUmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKKysgIFJlZ2lzdGVy NjQgb2xkVmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT5vbGRWYWx1ZSgpKTsKKysgIFJlZ2lzdGVy NjQgbmV3VmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT5uZXdWYWx1ZSgpKTsKKysgIFJlZ2lzdGVy NjQgb3V0cHV0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7CisrICB1aW50MzJfdCBvZmZzZXQgPSBs aXItPm1pcigpLT5hY2Nlc3MoKS5vZmZzZXQzMigpOworKworKyAgQmFzZUluZGV4IGFkZHIobWVt b3J5QmFzZSwgcHRyLCBUaW1lc09uZSwgb2Zmc2V0KTsKKysgIG1hc20ud2FzbUNvbXBhcmVFeGNo YW5nZTY0KGxpci0+bWlyKCktPmFjY2VzcygpLCBhZGRyLCBvbGRWYWx1ZSwgbmV3VmFsdWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQpOworK30KKysKKyt2b2lkIENvZGVH ZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21pY0V4Y2hhbmdlSTY0KExXYXNtQXRvbWljRXhjaGFuZ2VJ NjQqIGxpcikgeworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIobGlyLT5tZW1v cnlCYXNlKCkpOworKyAgUmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihsaXItPnB0cigpKTsKKysg IFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsKKysgIFJlZ2lz dGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7CisrICB1aW50MzJfdCBvZmZzZXQg PSBsaXItPm1pcigpLT5hY2Nlc3MoKS5vZmZzZXQzMigpOworKworKyAgQmFzZUluZGV4IGFkZHIo bWVtb3J5QmFzZSwgcHRyLCBUaW1lc09uZSwgb2Zmc2V0KTsKKysgIG1hc20ud2FzbUF0b21pY0V4 Y2hhbmdlNjQobGlyLT5taXIoKS0+YWNjZXNzKCksIGFkZHIsIHZhbHVlLCBvdXRwdXQpOworK30K KysKKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbUF0b21pY0Jpbm9wSTY0KExXYXNtQXRv bWljQmlub3BJNjQqIGxpcikgeworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIo bGlyLT5tZW1vcnlCYXNlKCkpOworKyAgUmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihsaXItPnB0 cigpKTsKKysgIFJlZ2lzdGVyNjQgdmFsdWUgPSBUb1JlZ2lzdGVyNjQobGlyLT52YWx1ZSgpKTsK KysgIFJlZ2lzdGVyNjQgb3V0cHV0ID0gVG9PdXRSZWdpc3RlcjY0KGxpcik7CisrICBSZWdpc3Rl cjY0IHRlbXAgPSBUb1JlZ2lzdGVyNjQobGlyLT50ZW1wMCgpKTsKKysgIHVpbnQzMl90IG9mZnNl dCA9IGxpci0+bWlyKCktPmFjY2VzcygpLm9mZnNldDMyKCk7CisrCisrICBCYXNlSW5kZXggYWRk cihtZW1vcnlCYXNlLCBwdHIsIFRpbWVzT25lLCBvZmZzZXQpOworKworKyAgbWFzbS53YXNtQXRv bWljRmV0Y2hPcDY0KGxpci0+bWlyKCktPmFjY2VzcygpLCBsaXItPm1pcigpLT5vcGVyYXRpb24o KSwgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwgdGVtcCwgb3V0cHV0 KTsKKyt9CisrCisrLy8gU0lNRCBjb2RlIGdlbmVyYXRvcnMuCisrdm9pZCBDb2RlR2VuZXJhdG9y Ojp2aXNpdFNpbWQxMjgoTFNpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0g VG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgbWFzbS5sb2FkQ29uc3RhbnRTaW1k MTI4KGlucy0+c2ltZDEyOCgpLCBkZXN0KTsKKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dFdhc21UZXJuYXJ5U2ltZDEyOChMV2FzbVRlcm5hcnlTaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0 UmVnaXN0ZXIgdjAgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT52MCgpKTsKKysgIEZsb2F0UmVnaXN0 ZXIgdjEgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT52MSgpKTsKKysgIEZsb2F0UmVnaXN0ZXIgdjIg PSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT52MigpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRv RmxvYXRSZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkg eworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEJpdHNlbGVjdDoKKysgICAgICAvLyBiaXRz ZWxlY3QodjAsIHYxLCB2Mik6IHJlc3VsdCA9ICh2MCAmIHYyKSB8ICh2MSAmIH52MikKKysgICAg ICAvLyB4eHNlbDogWEM9MOKGklhBLCBYQz0x4oaSWEIg4oaSIChYQSAmIH5YQykgfCAoWEIgJiBY QykKKysgICAgICAvLyBOZWVkIFhBPXYxLCBYQj12MCwgWEM9djIuCisrICAgICAgbWFzbS5hc194 eHNlbChkZXN0LCB2MSwgdjAsIHYyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6Okk4eDE2UmVsYXhlZExhbmVTZWxlY3Q6CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OFJlbGF4ZWRMYW5lU2VsZWN0OgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxh eGVkTGFuZVNlbGVjdDoKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyUmVsYXhlZExhbmVT ZWxlY3Q6CisrICAgICAgLy8gcmVsYXhlZCBsYW5lU2VsZWN0KHYwLCB2MSwgbWFzaz12Mik6IHNh bWUgYXMgYml0c2VsZWN0CisrICAgICAgbWFzbS5hc194eHNlbChkZXN0LCB2MSwgdjAsIHYyKTsK KysgICAgICBicmVhazsKKysgICAgLy8gTG93ZXJpbmcgdXNlcyBkZWZpbmVSZXVzZUlucHV0IG9u IFYySW5kZXggZm9yIHRlcm5hcnkgb3BzIOKAlCB0aGUKKysgICAgLy8gYWxsb2NhdG9yIGlzIHJl cXVpcmVkIHRvIHBsYWNlIGBkZXN0YCBpbiB2MidzIHNsb3QuIEFzc2VydCB0aGF0CisrICAgIC8v IGhlcmU7IHRoZSBGTUEvZG90IGhlbHBlcnMgd3JpdGUgdGhlaXIgcmVzdWx0IHRocm91Z2ggdjIg aW4tcGxhY2UsCisrICAgIC8vIHNvIGRlc3QgPT0gdjIgbWFrZXMgdGhlIHRyYWlsaW5nIG1vdmVT aW1kMTI4IHVubmVjZXNzYXJ5LgorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVk RG90STh4MTZJN3gxNkFkZFM6CisrICAgICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsKKysgICAg ICBtYXNtLmRvdEludDh4MTZJbnQ3eDE2VGhlbkFkZCh2MCwgdjEsIHYyLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPnRlbXAwKCkpKTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0UmVsYXhlZE1hZGQ6 CisrICAgICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsKKysgICAgICBtYXNtLmZtYUZsb2F0MzJ4 NCh2MCwgdjEsIHYyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2 NHgyUmVsYXhlZE1hZGQ6CisrICAgICAgTU9aX0FTU0VSVChkZXN0ID09IHYyKTsKKysgICAgICBt YXNtLmZtYUZsb2F0NjR4Mih2MCwgdjEsIHYyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkYzMng0UmVsYXhlZE5tYWRkOgorKyAgICAgIE1PWl9BU1NFUlQoZGVzdCA9 PSB2Mik7CisrICAgICAgbWFzbS5mbm1hRmxvYXQzMng0KHYwLCB2MSwgdjIpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZWxheGVkTm1hZGQ6CisrICAgICAg TU9aX0FTU0VSVChkZXN0ID09IHYyKTsKKysgICAgICBtYXNtLmZubWFGbG9hdDY0eDIodjAsIHYx LCB2Mik7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQ UEM2NDogTllJIFNJTUQgdGVybmFyeSBvcCIpOworKyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0 b3I6OnZpc2l0V2FzbUJpbmFyeVNpbWQxMjgoTFdhc21CaW5hcnlTaW1kMTI4KiBpbnMpIHsKKysg IEZsb2F0UmVnaXN0ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgRmxv YXRSZWdpc3RlciByaHMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5yaHMoKSk7CisrICBGbG9hdFJl Z2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBzd2l0Y2gg KGlucy0+c2ltZE9wKCkpIHsKKysgICAgLy8gQml0d2lzZQorKyAgICBjYXNlIHdhc206OlNpbWRP cDo6VjEyOEFuZDoKKysgICAgICBtYXNtLmJpdHdpc2VBbmRTaW1kMTI4KGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhPcjoKKysgICAg ICBtYXNtLmJpdHdpc2VPclNpbWQxMjgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOFhvcjoKKysgICAgICBtYXNtLmJpdHdpc2VYb3JT aW1kMTI4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OlYxMjhBbmROb3Q6CisrICAgICAgbWFzbS5iaXR3aXNlQW5kTm90U2ltZDEyOChsaHMs IHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIEludGVnZXIgYWRkCisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkFkZDoKKysgICAgICBtYXNtLmFkZEludDh4MTYobGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhB ZGQ6CisrICAgICAgbWFzbS5hZGRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0QWRkOgorKyAgICAgIG1hc20uYWRkSW50 MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4MkFkZDoKKysgICAgICBtYXNtLmFkZEludDY0eDIobGhzLCByaHMsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICAvLyBJbnRlZ2VyIHN1YgorKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STh4MTZTdWI6CisrICAgICAgbWFzbS5zdWJJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U3ViOgorKyAgICAgIG1h c20uc3ViSW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMzJ4NFN1YjoKKysgICAgICBtYXNtLnN1YkludDMyeDQobGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJTdWI6 CisrICAgICAgbWFzbS5zdWJJbnQ2NHgyKGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgLy8gU2F0dXJhdGluZyBhZGQKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2QWRk U2F0UzoKKysgICAgICBtYXNtLmFkZFNhdEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBZGRTYXRVOgorKyAgICAgIG1h c20udW5zaWduZWRBZGRTYXRJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWRkU2F0UzoKKysgICAgICBtYXNtLmFkZFNh dEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STE2eDhBZGRTYXRVOgorKyAgICAgIG1hc20udW5zaWduZWRBZGRTYXRJbnQxNng4 KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gU2F0dXJhdGluZyBzdWIK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U3ViU2F0UzoKKysgICAgICBtYXNtLnN1YlNh dEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STh4MTZTdWJTYXRVOgorKyAgICAgIG1hc20udW5zaWduZWRTdWJTYXRJbnQ4eDE2 KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkxNng4U3ViU2F0UzoKKysgICAgICBtYXNtLnN1YlNhdEludDE2eDgobGhzLCByaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTdWJTYXRVOgor KyAgICAgIG1hc20udW5zaWduZWRTdWJTYXRJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgLy8gSW50ZWdlciBtdWx0aXBseQorKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STE2eDhNdWw6CisrICAgICAgbWFzbS5tdWxJbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TXVsOgorKyAgICAgIG1h c20ubXVsSW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIElu dGVnZXIgbWluL21heCBzaWduZWQKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TWluUzoK KysgICAgICBtYXNtLm1pbkludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZNYXhTOgorKyAgICAgIG1hc20ubWF4SW50OHgx NihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJMTZ4OE1pblM6CisrICAgICAgbWFzbS5taW5JbnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TWF4UzoKKysgICAgICBt YXNtLm1heEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRNaW5TOgorKyAgICAgIG1hc20ubWluSW50MzJ4NChsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE1h eFM6CisrICAgICAgbWFzbS5tYXhJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgLy8gSW50ZWdlciBtaW4vbWF4IHVuc2lnbmVkCisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJOHgxNk1pblU6CisrICAgICAgbWFzbS51bnNpZ25lZE1pbkludDh4MTYobGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZNYXhV OgorKyAgICAgIG1hc20udW5zaWduZWRNYXhJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TWluVToKKysgICAgICBtYXNt LnVuc2lnbmVkTWluSW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OE1heFU6CisrICAgICAgbWFzbS51bnNpZ25lZE1heElu dDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STMyeDRNaW5VOgorKyAgICAgIG1hc20udW5zaWduZWRNaW5JbnQzMng0KGxocywgcmhz LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TWF4 VToKKysgICAgICBtYXNtLnVuc2lnbmVkTWF4SW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIC8vIEF2ZXJhZ2UgdW5zaWduZWQKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6Okk4eDE2QXZnclU6CisrICAgICAgbWFzbS51bnNpZ25lZEF2ZXJhZ2VJbnQ4eDE2KGxocywg cmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4 QXZnclU6CisrICAgICAgbWFzbS51bnNpZ25lZEF2ZXJhZ2VJbnQxNng4KGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgLy8gUTE1IG11bHRpcGx5CisrICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJMTZ4OFExNU11bHJTYXRTOgorKyAgICAgIG1hc20ucTE1TXVsclNhdEludDE2eDgo bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmUK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2RXE6CisrICAgICAgbWFzbS5jb21wYXJlSW50 OHgxNihBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk5lOgorKyAgICAgIG1hc20uY29tcGFyZUludDh4 MTYoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZMdFM6CisrICAgICAgbWFzbS5jb21wYXJlSW50 OHgxNihBc3NlbWJsZXI6Okxlc3NUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkd0UzoKKysgICAgICBtYXNtLmNvbXBhcmVJ bnQ4eDE2KEFzc2VtYmxlcjo6R3JlYXRlclRoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TGVTOgorKyAgICAgIG1hc20uY29t cGFyZUludDh4MTYoQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2R2VTOgorKyAgICAg IG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywg cmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2 THRVOgorKyAgICAgIG1hc20uY29tcGFyZUludDh4MTYoQXNzZW1ibGVyOjpCZWxvdywgbGhzLCBy aHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZH dFU6CisrICAgICAgbWFzbS5jb21wYXJlSW50OHgxNihBc3NlbWJsZXI6OkFib3ZlLCBsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkxl VToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ OHgxNkdlVToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6QWJvdmVPckVx dWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJMTZ4OEVxOgorKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpFcXVh bCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STE2eDhOZToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Tm90RXF1 YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkxNng4THRTOgorKyAgICAgIG1hc20uY29tcGFyZUludDE2eDgoQXNzZW1ibGVyOjpMZXNz VGhhbiwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STE2eDhHdFM6CisrICAgICAgbWFzbS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6Okdy ZWF0ZXJUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMTZ4OExlUzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4KEFzc2VtYmxl cjo6TGVzc1RoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEdlUzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQxNng4 KEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEx0VToKKysgICAgICBtYXNtLmNv bXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6QmVsb3csIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4R3RVOgorKyAgICAgIG1hc20uY29t cGFyZUludDE2eDgoQXNzZW1ibGVyOjpBYm92ZSwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhMZVU6CisrICAgICAgbWFzbS5jb21w YXJlSW50MTZ4OChBc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhHZVU6CisrICAgICAgbWFz bS5jb21wYXJlSW50MTZ4OChBc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgbGhzLCByaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFcToKKysgICAg ICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6RXF1YWwsIGxocywgcmhzLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0TmU6CisrICAgICAg bWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHJocywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEx0UzoKKysgICAg ICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxlcjo6TGVzc1RoYW4sIGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0R3RTOgorKyAg ICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgbGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRMZVM6 CisrICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbCwg bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRHZVM6CisrICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkdyZWF0ZXJU aGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6STMyeDRMdFU6CisrICAgICAgbWFzbS5jb21wYXJlSW50MzJ4NChBc3NlbWJs ZXI6OkJlbG93LCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2Fz bTo6U2ltZE9wOjpJMzJ4NEd0VToKKysgICAgICBtYXNtLmNvbXBhcmVJbnQzMng0KEFzc2VtYmxl cjo6QWJvdmUsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkkzMng0TGVVOgorKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNzZW1ibGVy OjpCZWxvd09yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6OkkzMng0R2VVOgorKyAgICAgIG1hc20uY29tcGFyZUludDMyeDQoQXNz ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyRXE6CisrICAgICAgbWFzbS5jb21wYXJlSW50NjR4 MihBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4Mk5lOgorKyAgICAgIG1hc20uY29tcGFyZUludDY0eDIo QXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJMdFM6CisrICAgICAgbWFzbS5jb21wYXJlSW50NjR4 MihBc3NlbWJsZXI6Okxlc3NUaGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4Mkd0UzoKKysgICAgICBtYXNtLmNvbXBhcmVJbnQ2 NHgyKEFzc2VtYmxlcjo6R3JlYXRlclRoYW4sIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyTGVTOgorKyAgICAgIG1hc20uY29tcGFy ZUludDY0eDIoQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyR2VTOgorKyAgICAgIG1h c20uY29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhz LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gRmxvYXQgY29tcGFyZQorKyAgICBjYXNl IHdhc206OlNpbWRPcDo6RjMyeDRFcToKKysgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNz ZW1ibGVyOjpFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6RjMyeDROZToKKysgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQoQXNz ZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIHdhc206OlNpbWRPcDo6RjMyeDRMdDoKKysgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMyeDQo QXNzZW1ibGVyOjpMZXNzVGhhbiwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRHdDoKKysgICAgICBtYXNtLmNvbXBhcmVGbG9hdDMy eDQoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRMZToKKysgICAgICBtYXNtLmNvbXBhcmVG bG9hdDMyeDQoQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0R2U6CisrICAgICAgbWFz bS5jb21wYXJlRmxvYXQzMng0KEFzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MkVx OgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkVxdWFsLCBsaHMsIHJo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk5l OgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMs IHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4 Mkx0OgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6Okxlc3NUaGFuLCBs aHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpG NjR4Mkd0OgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6OkdyZWF0ZXJU aGFuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGNjR4MkxlOgorKyAgICAgIG1hc20uY29tcGFyZUZsb2F0NjR4MihBc3NlbWJsZXI6Okxl c3NUaGFuT3JFcXVhbCwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6RjY0eDJHZToKKysgICAgICBtYXNtLmNvbXBhcmVGbG9hdDY0eDIoQXNz ZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgLy8gRmxvYXQgYXJpdGhtZXRpYworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMy eDRBZGQ6CisrICAgICAgbWFzbS5hZGRGbG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRTdWI6CisrICAgICAgbWFzbS5z dWJGbG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDRNdWw6CisrICAgICAgbWFzbS5tdWxGbG9hdDMyeDQobGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDREaXY6 CisrICAgICAgbWFzbS5kaXZGbG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRNaW46CisrICAgICAgbWFzbS5taW5GbG9h dDMyeDQobGhzLCByaHMsIGRlc3QsIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMCkpLAor KyAgICAgICAgICAgICAgICAgICAgICAgICBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDEp KSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NE1heDoKKysg ICAgICBtYXNtLm1heEZsb2F0MzJ4NChsaHMsIHJocywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlu cy0+Z2V0VGVtcCgwKSksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3Rl cihpbnMtPmdldFRlbXAoMSkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkYzMng0UE1pbjoKKysgICAgICBtYXNtLnBzZXVkb01pbkZsb2F0MzJ4NChsaHMsIHJocywg ZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFBNYXg6 CisrICAgICAgbWFzbS5wc2V1ZG9NYXhGbG9hdDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJBZGQ6CisrICAgICAgbWFzbS5h ZGRGbG9hdDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjY0eDJTdWI6CisrICAgICAgbWFzbS5zdWJGbG9hdDY0eDIobGhzLCByaHMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJNdWw6 CisrICAgICAgbWFzbS5tdWxGbG9hdDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0eDJEaXY6CisrICAgICAgbWFzbS5kaXZGbG9h dDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6RjY0eDJNaW46CisrICAgICAgbWFzbS5taW5GbG9hdDY0eDIobGhzLCByaHMsIGRlc3Qs IFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMCkpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5nZXRUZW1wKDEpKSk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk1heDoKKysgICAgICBtYXNtLm1heEZsb2F0NjR4 MihsaHMsIHJocywgZGVzdCwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+Z2V0VGVtcCgwKSksCisrICAg ICAgICAgICAgICAgICAgICAgICAgIFRvRmxvYXRSZWdpc3RlcihpbnMtPmdldFRlbXAoMSkpKTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUE1pbjoKKysgICAg ICBtYXNtLnBzZXVkb01pbkZsb2F0NjR4MihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlBNYXg6CisrICAgICAgbWFzbS5wc2V1ZG9N YXhGbG9hdDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBOYXJy b3cKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TmFycm93STE2eDhTOgorKyAgICAgIG1h c20ubmFycm93SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNk5hcnJvd0kxNng4VToKKysgICAgICBtYXNtLnVuc2lnbmVk TmFycm93SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMTZ4OE5hcnJvd0kzMng0UzoKKysgICAgICBtYXNtLm5hcnJvd0ludDMy eDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STE2eDhOYXJyb3dJMzJ4NFU6CisrICAgICAgbWFzbS51bnNpZ25lZE5hcnJvd0ludDMyeDQo bGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBpNjQgbXVsdGlwbHkKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyTXVsOiB7CisrICAgICAgRmxvYXRSZWdpc3RlciB0 ZW1wMCA9IFRvVGVtcEZsb2F0UmVnaXN0ZXJPckludmFsaWQoaW5zLT50ZW1wMCgpKTsKKysgICAg ICBGbG9hdFJlZ2lzdGVyIHRlbXAxZiA9IFRvVGVtcEZsb2F0UmVnaXN0ZXJPckludmFsaWQoaW5z LT50ZW1wMSgpKTsKKysgICAgICBtYXNtLm11bEludDY0eDIobGhzLCByaHMsIGRlc3QsIHRlbXAw LCB0ZW1wMWYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIC8vIEV4dGVuZGVkIG11bHRp cGx5CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dG11bExvd0k4eDE2UzoKKysgICAg ICBtYXNtLmV4dE11bExvd0ludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRtdWxIaWdoSTh4MTZTOgorKyAgICAgIG1h c20uZXh0TXVsSGlnaEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRtdWxMb3dJOHgxNlU6CisrICAgICAgbWFzbS51 bnNpZ25lZEV4dE11bExvd0ludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRtdWxIaWdoSTh4MTZVOgorKyAgICAgIG1h c20udW5zaWduZWRFeHRNdWxIaWdoSW50OHgxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dG11bExvd0kxNng4UzoKKysgICAg ICBtYXNtLmV4dE11bExvd0ludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRtdWxIaWdoSTE2eDhTOgorKyAgICAgIG1h c20uZXh0TXVsSGlnaEludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRtdWxMb3dJMTZ4OFU6CisrICAgICAgbWFzbS51 bnNpZ25lZEV4dE11bExvd0ludDE2eDgobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRtdWxIaWdoSTE2eDhVOgorKyAgICAgIG1h c20udW5zaWduZWRFeHRNdWxIaWdoSW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dG11bExvd0kzMng0UzoKKysgICAg ICBtYXNtLmV4dE11bExvd0ludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRtdWxIaWdoSTMyeDRTOgorKyAgICAgIG1h c20uZXh0TXVsSGlnaEludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRtdWxMb3dJMzJ4NFU6CisrICAgICAgbWFzbS51 bnNpZ25lZEV4dE11bExvd0ludDMyeDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJFeHRtdWxIaWdoSTMyeDRVOgorKyAgICAgIG1h c20udW5zaWduZWRFeHRNdWxIaWdoSW50MzJ4NChsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIC8vIERvdCBwcm9kdWN0CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NERv dEkxNng4UzoKKysgICAgICBtYXNtLndpZGVuRG90SW50MTZ4OChsaHMsIHJocywgZGVzdCk7Cisr ICAgICAgYnJlYWs7CisrICAgIC8vIFJlbGF4ZWQgYmluYXJ5IG9wcworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6RjMyeDRSZWxheGVkTWluOgorKyAgICAgIG1hc20ubWluRmxvYXQzMng0UmVsYXhl ZChyaHMsIGxocyk7CisrICAgICAgaWYgKGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVTaW1kMTI4KGxo cywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFJl bGF4ZWRNYXg6CisrICAgICAgbWFzbS5tYXhGbG9hdDMyeDRSZWxheGVkKHJocywgbGhzKTsKKysg ICAgICBpZiAoZGVzdCAhPSBsaHMpIG1hc20ubW92ZVNpbWQxMjgobGhzLCBkZXN0KTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUmVsYXhlZE1pbjoKKysgICAg ICBtYXNtLm1pbkZsb2F0NjR4MlJlbGF4ZWQocmhzLCBsaHMpOworKyAgICAgIGlmIChkZXN0ICE9 IGxocykgbWFzbS5tb3ZlU2ltZDEyOChsaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIHdhc206OlNpbWRPcDo6RjY0eDJSZWxheGVkTWF4OgorKyAgICAgIG1hc20ubWF4RmxvYXQ2 NHgyUmVsYXhlZChyaHMsIGxocyk7CisrICAgICAgaWYgKGRlc3QgIT0gbGhzKSBtYXNtLm1vdmVT aW1kMTI4KGxocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpJOHgxNlJlbGF4ZWRTd2l6emxlOgorKyAgICAgIG1hc20uc3dpenpsZUludDh4MTZSZWxheGVk KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkxNng4UmVsYXhlZFExNU11bHJTOgorKyAgICAgIG1hc20ucTE1TXVsckludDE2eDhSZWxheGVk KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gU3dpenpsZQorKyAgICBj YXNlIHdhc206OlNpbWRPcDo6STh4MTZTd2l6emxlOgorKyAgICAgIG1hc20uc3dpenpsZUludDh4 MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STE2eDhSZWxheGVkRG90STh4MTZJN3gxNlM6CisrICAgICAgbWFzbS5kb3RJbnQ4eDE2SW50 N3gxNihsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAg ICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgYmluYXJ5IG9wIik7CisrICB9CisrfQorK3Zv aWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQmluYXJ5U2ltZDEyOFdpdGhDb25zdGFudCgKKysg ICAgTFdhc21CaW5hcnlTaW1kMTI4V2l0aENvbnN0YW50KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0 ZXIgbGhzID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+bGhzKCkpOworKyAgRmxvYXRSZWdpc3RlciBk ZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgU2ltZENvbnN0YW50IHJo cyA9IGlucy0+cmhzKCk7CisrICAvLyBMb2FkIHRoZSBjb25zdGFudCBpbnRvIHNjcmF0Y2gsIHRo ZW4gdXNlIHRoZSBiaW5hcnkgb3AuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gobWFz bSk7CisrICBtYXNtLmxvYWRDb25zdGFudFNpbWQxMjgocmhzLCBzY3JhdGNoKTsKKysgIHN3aXRj aCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysgICAgLy8gQml0d2lzZQorKyAgICBjYXNlIHdh c206OlNpbWRPcDo6VjEyOEFuZDoKKysgICAgICBtYXNtLmJpdHdpc2VBbmRTaW1kMTI4KGxocywg c2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpW MTI4T3I6CisrICAgICAgbWFzbS5iaXR3aXNlT3JTaW1kMTI4KGxocywgc2NyYXRjaCwgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4WG9yOgorKyAgICAg IG1hc20uYml0d2lzZVhvclNpbWQxMjgobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OlYxMjhBbmROb3Q6CisrICAgICAgbWFzbS5iaXR3 aXNlQW5kTm90U2ltZDEyOChsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICAvLyBJbnRlZ2VyIGFkZAorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBZGQ6CisrICAg ICAgbWFzbS5hZGRJbnQ4eDE2KGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFkZDoKKysgICAgICBtYXNtLmFkZEludDE2eDgo bGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkzMng0QWRkOgorKyAgICAgIG1hc20uYWRkSW50MzJ4NChsaHMsIHNjcmF0Y2gsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0eDJBZGQ6CisrICAg ICAgbWFzbS5hZGRJbnQ2NHgyKGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIC8vIEludGVnZXIgc3ViCisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlN1YjoKKysg ICAgICBtYXNtLnN1YkludDh4MTYobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U3ViOgorKyAgICAgIG1hc20uc3ViSW50MTZ4 OChsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STMyeDRTdWI6CisrICAgICAgbWFzbS5zdWJJbnQzMng0KGxocywgc2NyYXRjaCwgZGVz dCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlN1YjoKKysg ICAgICBtYXNtLnN1YkludDY0eDIobGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgLy8gSW50ZWdlciBtdWx0aXBseSAoMTYtLzMyLWJpdCBsYW5lczsgSTY0eDIgdW5yZWFj aGFibGUsIHNlZSBiZWxvdykKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4TXVsOgorKyAg ICAgIG1hc20ubXVsSW50MTZ4OChsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRNdWw6CisrICAgICAgbWFzbS5tdWxJbnQzMng0 KGxocywgc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJNjR4Mk11bDoKKysgICAgICAvLyBVbnJlYWNoYWJsZSBvbiBQUEM2NDogTVdhc21CaW5h cnlTaW1kMTI4OjpzcGVjaWFsaXplRm9yQ29uc3RhbnRSaHMKKysgICAgICAvLyByZXR1cm5zIGZh bHNlIGluIExvd2VyaW5nLXBwYzY0LmNwcCwgc28gTUlSIHdpdGggYSBjb25zdGFudCByaHMKKysg ICAgICAvLyB0byBJNjR4Mk11bCBpcyBuZXZlciBjcmVhdGVkIG9uIHRoaXMgYmFja2VuZC4KKysg ICAgICAvLworKyAgICAgIC8vIFRoZSBwcmV2aW91cyBpbi1wbGFjZSBpbXBsZW1lbnRhdGlvbiB3 YXMgYnJva2VuIGluIHRocmVlIHdheXM6CisrICAgICAgLy8gaGFyZC1jb2RlZCBWUjAvVlIxIHN0 YWdpbmcgYXNzdW1lZCBhbiBvcmRlcmluZyB0aGF0IGRpZG4ndCBtYXRjaAorKyAgICAgIC8vIHRo ZSBzdXJyb3VuZGluZyBjb2RlOyBhIGRlYWQgYG1mdnNyZChhLCBmMClgIGNsb2JiZXJlZCBgYWAK KysgICAgICAvLyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIG5leHQgbWZ2c3JkOyBhbmQgdGhlIHRy YWlsaW5nCisrICAgICAgLy8gYHh4cGVybWRpKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIDApYCB3aXRo IERNPTAgcGxhY2VkIGxhbmUtMCBpbiB0aGUKKysgICAgICAvLyB3cm9uZyBoYWxmLiBSYXRoZXIg dGhhbiBzaGlwIGRlYWQtYnV0LWJyb2tlbiBjb2RlLCBjcmFzaCBsb3VkbHkKKysgICAgICAvLyBp ZiByZWFjaGFiaWxpdHkgZXZlciBjaGFuZ2VzIOKAlCB0aGUgZnV0dXJlIGVuYWJsZXIgbXVzdCB3 cml0ZSBhCisrICAgICAgLy8gY29ycmVjdCBsb3dlcmluZyAoZS5nLiB2aWEgbWFzbS5tdWxJbnQ2 NHgyIHdpdGggZXhwbGljaXQgdGVtcHMpLgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IEk2NHgy TXVsIHdpdGggY29uc3RhbnQgcmhzIHVuaW1wbGVtZW50ZWQgIgorKyAgICAgICAgICAgICAgICAi KHNwZWNpYWxpemVGb3JDb25zdGFudFJocyByZXR1cm5zIGZhbHNlKSIpOworKyAgICAvLyBDb21w YXJlCisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkVxOgorKyAgICAgIG1hc20uY29tcGFy ZUludDh4MTYoQXNzZW1ibGVyOjpFcXVhbCwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TmU6CisrICAgICAgbWFzbS5jb21w YXJlSW50OHgxNihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworKyAg ICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBT SU1EIGJpbmFyeS13aXRoLWNvbnN0YW50IG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRXYXNtVmFyaWFibGVTaGlmdFNpbWQxMjgoCisrICAgIExXYXNtVmFyaWFibGVT aGlmdFNpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVnaXN0 ZXIoaW5zLT5saHMoKSk7CisrICBSZWdpc3RlciByaHMgPSBUb1JlZ2lzdGVyKGlucy0+cmhzKCkp OworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkp OworKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1kT3AoKSkgeworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STh4MTZTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQ4eDE2KGxocywgcmhzLCBk ZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyUzoK KysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ4eDE2KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyVToKKysgICAgICBtYXNtLnVu c2lnbmVkUmlnaHRTaGlmdEludDh4MTYobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJ bnQxNng4KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQxNng4KGxocywgcmhz LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hy VToKKysgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgobGhzLCByaHMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaGw6CisrICAg ICAgbWFzbS5sZWZ0U2hpZnRJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hp ZnRJbnQzMng0KGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6OkkzMng0U2hyVToKKysgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDMy eDQobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STY0eDJTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQ2NHgyKGxocywgcmhzLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoKKysg ICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2NHgyKGxocywgcmhzLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyVToKKysgICAgICBtYXNtLnVuc2ln bmVkUmlnaHRTaGlmdEludDY0eDIobGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHZhcmlhYmxlIHNo aWZ0IG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtQ29uc3Rh bnRTaGlmdFNpbWQxMjgoCisrICAgIExXYXNtQ29uc3RhbnRTaGlmdFNpbWQxMjgqIGlucykgewor KyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5zcmMoKSk7CisrICBG bG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBp bnQzMl90IHNoaWZ0ID0gaW5zLT5zaGlmdCgpOworKyAgc3dpdGNoIChpbnMtPm1pcigpLT5zaW1k T3AoKSkgeworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZTaGw6CisrICAgICAgbWFzbS5s ZWZ0U2hpZnRJbnQ4eDE2KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hp ZnRJbnQ4eDE2KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyVToKKysgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRT aGlmdEludDh4MTYoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAg ICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQx Nng4KEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQxNng4KElt bTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkxNng4U2hyVToKKysgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgo SW1tMzIoc2hpZnQpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206 OlNpbWRPcDo6STMyeDRTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQzMng0KEltbTMyKHNo aWZ0KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6 OkkzMng0U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQzMng0KEltbTMyKHNoaWZ0KSwg c3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0 U2hyVToKKysgICAgICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDMyeDQoSW1tMzIoc2hpZnQp LCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STY0 eDJTaGw6CisrICAgICAgbWFzbS5sZWZ0U2hpZnRJbnQ2NHgyKEltbTMyKHNoaWZ0KSwgc3JjLCBk ZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoK KysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyKHNoaWZ0KSwgc3JjLCBkZXN0KTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyVToKKysgICAg ICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDY0eDIoSW1tMzIoc2hpZnQpLCBzcmMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6 IE5ZSSBTSU1EIGNvbnN0YW50IHNoaWZ0IG9wIik7CisrICB9CisrfQorK3ZvaWQgQ29kZUdlbmVy YXRvcjo6dmlzaXRXYXNtU2lnblJlcGxpY2F0aW9uU2ltZDEyOCgKKysgICAgTFdhc21TaWduUmVw bGljYXRpb25TaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJl Z2lzdGVyKGlucy0+c3JjKCkpOworKyAgRmxvYXRSZWdpc3RlciBkZXN0ID0gVG9GbG9hdFJlZ2lz dGVyKGlucy0+b3V0cHV0KCkpOworKyAgLy8gU2lnbiByZXBsaWNhdGlvbiA9IGFyaXRobWV0aWMg cmlnaHQgc2hpZnQgYnkgbWF4IGFtb3VudCAoYWxsIHNpZ24gYml0cykuCisrICBzd2l0Y2ggKGlu cy0+bWlyKCktPnNpbWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNoclM6 CisrICAgICAgbWFzbS5yaWdodFNoaWZ0SW50OHgxNihJbW0zMig3KSwgc3JjLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hyUzoKKysgICAgICBt YXNtLnJpZ2h0U2hpZnRJbnQxNng4KEltbTMyKDE1KSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U2hyUzoKKysgICAgICBtYXNtLnJpZ2h0 U2hpZnRJbnQzMng0KEltbTMyKDMxKSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU2hyUzoKKysgICAgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2 NHgyKEltbTMyKDYzKSwgc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgc2lnbiByZXBsaWNhdGlvbiBvcCIpOworKyAg fQorK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNodWZmbGVTaW1kMTI4KExXYXNt U2h1ZmZsZVNpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBsaHMgPSBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5saHMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIHJocyA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPnJocygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3Rlcihp bnMtPm91dHB1dCgpKTsKKysgIFNpbWRDb25zdGFudCBjdHJsID0gaW5zLT5jb250cm9sKCk7Cisr ICBjb25zdCB1aW50OF90KiBsYW5lcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+ KGN0cmwuYnl0ZXMoKSk7CisrICBtYXNtLnNodWZmbGVJbnQ4eDE2KGxhbmVzLCBsaHMsIHJocywg ZGVzdCk7CisrfQorK3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUGVybXV0ZVNpbWQxMjgo TFdhc21QZXJtdXRlU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxv YXRSZWdpc3RlcihpbnMtPnNyYygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRS ZWdpc3RlcihpbnMtPm91dHB1dCgpKTsKKysgIC8vIFBQQzY0OiB0aGUgc2h1ZmZsZSBhbmFseXNp cyB0cmFuc2Zvcm1zIGNvbnRyb2wgYnl0ZXMgaW50byBzcGVjaWFsaXplZAorKyAgLy8gZm9ybWF0 cy4gUmVjb25zdHJ1Y3QgcmF3IFdhc20gYnl0ZSBpbmRpY2VzIGZvciBvdXIgdnBlcm0gaW1wbGVt ZW50YXRpb24uCisrICBTaW1kQ29uc3RhbnQgY3RybCA9IGlucy0+Y29udHJvbCgpOworKyAgdWlu dDhfdCByYXdMYW5lc1sxNl07CisrICBzd2l0Y2ggKGlucy0+b3AoKSkgeworKyAgICBjYXNlIFNp bWRQZXJtdXRlT3A6Ok1PVkU6CisrICAgICAgbWFzbS5tb3ZlU2ltZDEyOChzcmMsIGRlc3QpOwor KyAgICAgIHJldHVybjsKKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRFXzMyeDQ6IHsK KysgICAgICBjb25zdCBpbnQzMl90KiB3b3JkcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50 MzJfdCo+KGN0cmwuYnl0ZXMoKSk7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKysp CisrICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGorKykKKysgICAgICAgICAgcmF3TGFu ZXNbaSAqIDQgKyBqXSA9IHdvcmRzW2ldICogNCArIGo7CisrICAgICAgYnJlYWs7CisrICAgIH0K KysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpQRVJNVVRFXzE2eDg6IHsKKysgICAgICAvLyBjb250 cm9sIGhhcyBpbnQxNiBoYWxmd29yZCBpbmRpY2VzLiBIaWdoIGJ5dGUgb2YgaGFsZnNbMF0gbWF5 IGhhdmUKKysgICAgICAvLyBwbGF0Zm9ybS1zcGVjaWZpYyBmbGFncyAoUGVybTE2eDhBY3Rpb24p LiBNYXNrIHRvIGdldCB0aGUgaW5kZXggb25seS4KKysgICAgICBjb25zdCBpbnQxNl90KiBoYWxm cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MTZfdCo+KGN0cmwuYnl0ZXMoKSk7CisrICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIGludCBod0lkeCA9IGhh bGZzW2ldICYgMHg3OworKyAgICAgICAgcmF3TGFuZXNbaSAqIDJdID0gaHdJZHggKiAyOworKyAg ICAgICAgcmF3TGFuZXNbaSAqIDIgKyAxXSA9IGh3SWR4ICogMiArIDE7CisrICAgICAgfQorKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6QlJPQURDQVNUXzh4 MTY6IHsKKysgICAgICB1aW50OF90IGxhbmUgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhf dCo+KGN0cmwuYnl0ZXMoKSlbMF07CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsr KSByYXdMYW5lc1tpXSA9IGxhbmU7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBT aW1kUGVybXV0ZU9wOjpCUk9BRENBU1RfMTZ4ODogeworKyAgICAgIHVpbnQ4X3QgbGFuZSA9IHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygpKVswXTsKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgcmF3TGFuZXNbaSAqIDJdID0g bGFuZSAqIDI7CisrICAgICAgICByYXdMYW5lc1tpICogMiArIDFdID0gbGFuZSAqIDIgKyAxOwor KyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6 OlJPVEFURV9SSUdIVF84eDE2OiB7CisrICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0 X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygpKVswXTsKKysgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDE2OyBpKyspIHJhd0xhbmVzW2ldID0gKGkgKyBzaGlmdCkgJSAxNjsKKysgICAg ICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlNISUZUX0xFRlRfOHgx NjogeworKyAgICAgIC8vIFNoaWZ0ZWQtb3V0IHBvc2l0aW9ucyBtdXN0IGJlIHplcm8uIFVzZSBp bmRleCAxNisgdG8gcGljayBmcm9tIHplcm8uCisrICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygpKVswXTsKKysgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDE2OyBpKyspCisrICAgICAgICByYXdMYW5lc1tpXSA9IChpID49IHNo aWZ0KSA/IChpIC0gc2hpZnQpIDogKDE2ICsgaSk7CisrICAgICAgZ290byBuZWVkc1plcm9SaHM7 CisrICAgIH0KKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpTSElGVF9SSUdIVF84eDE2OiB7Cisr ICAgICAgdWludDhfdCBzaGlmdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3Ry bC5ieXRlcygpKVswXTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspCisrICAg ICAgICByYXdMYW5lc1tpXSA9IChpICsgc2hpZnQgPCAxNikgPyAoaSArIHNoaWZ0KSA6ICgxNiAr IGkpOworKyAgICAgIGdvdG8gbmVlZHNaZXJvUmhzOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBl cm11dGVPcDo6UkVWRVJTRV8xNng4OiB7CisrICAgICAgLy8gUmV2ZXJzZSBieXRlcyB3aXRoaW4g ZWFjaCAxNi1iaXQgbGFuZTogWzEsMCwzLDIsNSw0LC4uLl0KKysgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgcmF3TGFuZXNbaSAqIDJdID0gaSAqIDIgKyAxOwor KyAgICAgICAgcmF3TGFuZXNbaSAqIDIgKyAxXSA9IGkgKiAyOworKyAgICAgIH0KKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlJFVkVSU0VfMzJ4NDogewor KyAgICAgIC8vIFJldmVyc2UgYnl0ZXMgd2l0aGluIGVhY2ggMzItYml0IGxhbmU6IFszLDIsMSww LDcsNiw1LDQsLi4uXQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQorKyAgICAg ICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspCisrICAgICAgICAgIHJhd0xhbmVzW2kgKiA0 ICsgal0gPSBpICogNCArICgzIC0gaik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzY0eDI6IHsKKysgICAgICAvLyBSZXZlcnNlIGJ5dGVz IHdpdGhpbiBlYWNoIDY0LWJpdCBsYW5lOiBbNyw2LDUsNCwzLDIsMSwwLDE1LC4uLl0KKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgODsgaisrKQorKyAgICAgICAgICByYXdMYW5lc1tpICogOCArIGpdID0gaSAqIDggKyAoNyAt IGopOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6WkVS T19FWFRFTkRfOHgxNl9UT18xNng4OgorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9fRVhU RU5EXzh4MTZfVE9fMzJ4NDoKKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVORF84 eDE2X1RPXzY0eDI6CisrICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6WkVST19FWFRFTkRfMTZ4OF9U T18zMng0OgorKyAgICBjYXNlIFNpbWRQZXJtdXRlT3A6OlpFUk9fRVhURU5EXzE2eDhfVE9fNjR4 MjoKKysgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpaRVJPX0VYVEVORF8zMng0X1RPXzY0eDI6IHsK KysgICAgICBjb25zdCBpbnQ4X3QqIGJ5dGVzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4 X3QqPihjdHJsLmJ5dGVzKCkpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykg cmF3TGFuZXNbaV0gPSBieXRlc1tpXTsKKysgICAgICBnb3RvIG5lZWRzWmVyb1JoczsKKysgICAg fQorKyAgICBkZWZhdWx0OiB7CisrICAgICAgLy8gUEVSTVVURV84eDE2IGFuZCBvdGhlcnM6IGNv bnRyb2wgaGFzIHJhdyBieXRlIGluZGljZXMuCisrICAgICAgY29uc3QgaW50OF90KiBieXRlcyA9 IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4oY3RybC5ieXRlcygpKTsKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHJhd0xhbmVzW2ldID0gYnl0ZXNbaV07CisrICAg ICAgYnJlYWs7CisrICAgIH0KKysgIH0KKysgIG1hc20uc2h1ZmZsZUludDh4MTYocmF3TGFuZXMs IHNyYywgc3JjLCBkZXN0KTsKKysgIHJldHVybjsKKysKKysgIG5lZWRzWmVyb1JoczogeworKyAg ICAvLyBXYXNtIGNvbnZlbnRpb246IHJhd0xhbmVzW2ldIGluIDAuLjE1IHNlbGVjdHMgc3JjLkxF X2J5dGVbaWR4XSwgYW5kCisrICAgIC8vIHJhd0xhbmVzW2ldID49IDE2IG1lYW5zICJ6ZXJvIi4g V2l0aG91dCBzcGlsbGluZywgd2UgY2FuJ3Qgc2F0aXNmeQorKyAgICAvLyB2cGVybSdzIHRocmVl LWlucHV0IGNvbnN0cmFpbnQgQU5EIGtlZXAgc3JjIGFsaXZlIHdoZW4gZGVzdCA9PSBzcmMuCisr ICAgIC8vIFN0cmF0ZWd5OiB2cGVybSBzcmMgd2l0aCBpdHNlbGYgKGFueSB2YWxpZCBieXRlIGZv ciB0aGUgInplcm8iCisrICAgIC8vIHBvc2l0aW9ucywgYnl0ZXMgZ2V0IG1hc2tlZCBvdXQgYmVs b3cpLCB0aGVuIEFORCB3aXRoIGEgbWFzayB0aGF0CisrICAgIC8vIHplcm9zIHRob3NlIHBvc2l0 aW9ucy4KKysgICAgaW50OF90IGN0cmxbMTZdLCBtYXNrWzE2XTsKKysgICAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICB1aW50OF90IGlkeCA9IHJhd0xhbmVzW2ld OworKyAgICAgIGlmIChpZHggPCAxNikgeworKyAgICAgICAgY3RybFtpXSA9IDE1IC0gaWR4Owor KyAgICAgICAgbWFza1tpXSA9IC0xOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBjdHJsW2ld ID0gMDsKKysgICAgICAgIG1hc2tbaV0gPSAwOworKyAgICAgIH0KKysgICAgfQorKyAgICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gobWFzbSk7CisrICAgIG1hc20ubG9hZENvbnN0YW50U2lt ZDEyOChTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihjdHJsKSwgc2NyYXRjaCk7CisrICAgIG1hc20u YXNfdnBlcm0oZGVzdC5lbmNvZGluZygpICYgMzEsCisrICAgICAgICAgICAgICAgICAgc3JjLmVu Y29kaW5nKCkgJiAzMSwKKysgICAgICAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxLAor KyAgICAgICAgICAgICAgICAgIHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxKTsKKysgICAgbWFzbS5s b2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KG1hc2spLCBzY3JhdGNo KTsKKysgICAgbWFzbS5hc194eGxhbmQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7CisrICAgIHJldHVy bjsKKysgIH0KKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21SZXBsYWNlTGFuZVNp bWQxMjgoTFdhc21SZXBsYWNlTGFuZVNpbWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBs aHNEZXN0ID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpOworKyAgTU9aX0FTU0VSVChU b0Zsb2F0UmVnaXN0ZXIoaW5zLT5saHMoKSkgPT0gbGhzRGVzdCk7CisrICB1aW50MzJfdCBsYW5l ID0gaW5zLT5taXIoKS0+bGFuZUluZGV4KCk7CisrICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRP cCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlJlcGxhY2VMYW5lOgorKyAgICAg IG1hc20ucmVwbGFjZUxhbmVJbnQ4eDE2KGxhbmUsIFRvUmVnaXN0ZXIoaW5zLT5yaHMoKSksIGxo c0Rlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhSZXBs YWNlTGFuZToKKysgICAgICBtYXNtLnJlcGxhY2VMYW5lSW50MTZ4OChsYW5lLCBUb1JlZ2lzdGVy KGlucy0+cmhzKCkpLCBsaHNEZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkzMng0UmVwbGFjZUxhbmU6CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDMyeDQo bGFuZSwgVG9SZWdpc3RlcihpbnMtPnJocygpKSwgbGhzRGVzdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFJlcGxhY2VMYW5lOgorKyAgICAgIG1hc20ucmVw bGFjZUxhbmVGbG9hdDMyeDQobGFuZSwgVG9GbG9hdFJlZ2lzdGVyKGlucy0+cmhzKCkpLCBsaHNE ZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyUmVwbGFj ZUxhbmU6CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUZsb2F0NjR4MihsYW5lLCBUb0Zsb2F0UmVn aXN0ZXIoaW5zLT5yaHMoKSksIGxoc0Rlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0 OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHJlcGxhY2UgbGFuZSBvcCIpOwor KyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVJlcGxhY2VJbnQ2NExhbmVT aW1kMTI4KAorKyAgICBMV2FzbVJlcGxhY2VJbnQ2NExhbmVTaW1kMTI4KiBpbnMpIHsKKysgIE1P Wl9BU1NFUlQoaW5zLT5taXIoKS0+c2ltZE9wKCkgPT0gd2FzbTo6U2ltZE9wOjpJNjR4MlJlcGxh Y2VMYW5lKTsKKysgIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCA9IFRvRmxvYXRSZWdpc3RlcihpbnMt Pm91dHB1dCgpKTsKKysgIE1PWl9BU1NFUlQoVG9GbG9hdFJlZ2lzdGVyKGlucy0+bGhzKCkpID09 IGxoc0Rlc3QpOworKyAgbWFzbS5yZXBsYWNlTGFuZUludDY0eDIoaW5zLT5taXIoKS0+bGFuZUlu ZGV4KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICBUb1JlZ2lzdGVyNjQoaW5zLT5yaHMo KSksIGxoc0Rlc3QpOworK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVNjYWxhclRv U2ltZDEyOChMV2FzbVNjYWxhclRvU2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIGRl c3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSk7CisrICBzd2l0Y2ggKGlucy0+bWly KCktPnNpbWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNlNwbGF0OgorKyAg ICAgIG1hc20uc3BsYXRYMTYoVG9SZWdpc3RlcihpbnMtPnNyYygpKSwgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFNwbGF0OgorKyAgICAgIG1hc20u c3BsYXRYOChUb1JlZ2lzdGVyKGlucy0+c3JjKCkpLCBkZXN0KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0U3BsYXQ6CisrICAgICAgbWFzbS5zcGxhdFg0KFRv UmVnaXN0ZXIoaW5zLT5zcmMoKSksIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDRTcGxhdDoKKysgICAgICBtYXNtLnNwbGF0WDQoVG9GbG9hdFJlZ2lz dGVyKGlucy0+c3JjKCkpLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkY2NHgyU3BsYXQ6CisrICAgICAgbWFzbS5zcGxhdFgyKFRvRmxvYXRSZWdpc3Rlcihp bnMtPnNyYygpKSwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAg TU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgc2NhbGFyLXRvLXNpbWQgb3AiKTsKKysgIH0KKyt9 Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21JbnQ2NFRvU2ltZDEyOChMV2FzbUludDY0 VG9TaW1kMTI4KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdpc3Rl cihpbnMtPm91dHB1dCgpKTsKKysgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysg ICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2NHgyU3BsYXQ6CisrICAgICAgbWFzbS5zcGxhdFgyKFRv UmVnaXN0ZXI2NChpbnMtPnNyYygpKSwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1 bHQ6CisrICAgICAgTU9aX0NSQVNIKCJQUEM2NDogTllJIFNJTUQgaW50NjQtdG8tc2ltZCBvcCIp OworKyAgfQorK30KKyt2b2lkIENvZGVHZW5lcmF0b3I6OnZpc2l0V2FzbVVuYXJ5U2ltZDEyOChM V2FzbVVuYXJ5U2ltZDEyOCogaW5zKSB7CisrICBGbG9hdFJlZ2lzdGVyIHNyYyA9IFRvRmxvYXRS ZWdpc3RlcihpbnMtPnNyYygpKTsKKysgIEZsb2F0UmVnaXN0ZXIgZGVzdCA9IFRvRmxvYXRSZWdp c3RlcihpbnMtPm91dHB1dCgpKTsKKysgIHN3aXRjaCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsK KysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2TmVnOgorKyAgICAgIG1hc20ubmVnSW50OHgx NihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2 eDhOZWc6CisrICAgICAgbWFzbS5uZWdJbnQxNng4KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NE5lZzoKKysgICAgICBtYXNtLm5lZ0ludDMy eDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk2 NHgyTmVnOgorKyAgICAgIG1hc20ubmVnSW50NjR4MihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4MTZBYnM6CisrICAgICAgbWFzbS5hYnNJbnQ4 eDE2KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ MTZ4OEFiczoKKysgICAgICBtYXNtLmFic0ludDE2eDgoc3JjLCBkZXN0KTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0QWJzOgorKyAgICAgIG1hc20uYWJzSW50 MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STY0eDJBYnM6CisrICAgICAgbWFzbS5hYnNJbnQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4Tm90OgorKyAgICAgIG1hc20uYml0d2lz ZU5vdFNpbWQxMjgoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkYzMng0TmVnOgorKyAgICAgIG1hc20ubmVnRmxvYXQzMng0KHNyYywgZGVzdCk7Cisr ICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4Mk5lZzoKKysgICAgICBt YXNtLm5lZ0Zsb2F0NjR4MihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdh c206OlNpbWRPcDo6RjMyeDRBYnM6CisrICAgICAgbWFzbS5hYnNGbG9hdDMyeDQoc3JjLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyQWJzOgorKyAg ICAgIG1hc20uYWJzRmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NFNxcnQ6CisrICAgICAgbWFzbS5zcXJ0RmxvYXQzMng0KHNy YywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlNx cnQ6CisrICAgICAgbWFzbS5zcXJ0RmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NENlaWw6CisrICAgICAgbWFzbS5jZWlsRmxv YXQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9w OjpGNjR4MkNlaWw6CisrICAgICAgbWFzbS5jZWlsRmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGMzJ4NEZsb29yOgorKyAgICAgIG1h c20uZmxvb3JGbG9hdDMyeDQoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkY2NHgyRmxvb3I6CisrICAgICAgbWFzbS5mbG9vckZsb2F0NjR4MihzcmMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjMyeDRUcnVu YzoKKysgICAgICBtYXNtLnRydW5jRmxvYXQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpGNjR4MlRydW5jOgorKyAgICAgIG1hc20udHJ1bmNG bG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkYzMng0TmVhcmVzdDoKKysgICAgICBtYXNtLm5lYXJlc3RGbG9hdDMyeDQoc3JjLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyTmVhcmVzdDoK KysgICAgICBtYXNtLm5lYXJlc3RGbG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsK KysgICAgLy8gQ29udmVyc2lvbnMKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Q29udmVy dEkzMng0UzoKKysgICAgICBtYXNtLmNvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQoc3JjLCBkZXN0 KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0Q29udmVydEkz Mng0VToKKysgICAgICBtYXNtLnVuc2lnbmVkQ29udmVydEludDMyeDRUb0Zsb2F0MzJ4NChzcmMs IGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRUcnVu Y1NhdEYzMng0UzoKKysgICAgICBtYXNtLnRydW5jU2F0RmxvYXQzMng0VG9JbnQzMng0KHNyYywg ZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFRydW5j U2F0RjMyeDRVOgorKyAgICAgIG1hc20udW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4NFRvSW50MzJ4 NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0 eDJDb252ZXJ0TG93STMyeDRTOgorKyAgICAgIG1hc20uY29udmVydEludDMyeDRUb0Zsb2F0NjR4 MihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6RjY0 eDJDb252ZXJ0TG93STMyeDRVOgorKyAgICAgIG1hc20udW5zaWduZWRDb252ZXJ0SW50MzJ4NFRv RmxvYXQ2NHgyKHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpGMzJ4NERlbW90ZUY2NHgyWmVybzoKKysgICAgICBtYXNtLmNvbnZlcnRGbG9hdDY0eDJU b0Zsb2F0MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6RjY0eDJQcm9tb3RlTG93RjMyeDQ6CisrICAgICAgbWFzbS5jb252ZXJ0RmxvYXQzMng0 VG9GbG9hdDY0eDIoc3JjLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpT aW1kT3A6OkkzMng0VHJ1bmNTYXRGNjR4MlNaZXJvOgorKyAgICAgIG1hc20udHJ1bmNTYXRGbG9h dDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFRydW5jU2F0RjY0eDJVWmVybzoKKysg ICAgICBtYXNtLnVuc2lnbmVkVHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0LCBT Y3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIFdpZGVuCisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEV4dGVuZExvd0k4eDE2UzoKKysgICAgICBtYXNtLndpZGVu TG93SW50OHgxNihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STE2eDhFeHRlbmRIaWdoSTh4MTZTOgorKyAgICAgIG1hc20ud2lkZW5IaWdoSW50OHgx NihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2 eDhFeHRlbmRMb3dJOHgxNlU6CisrICAgICAgbWFzbS51bnNpZ25lZFdpZGVuTG93SW50OHgxNihz cmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhF eHRlbmRIaWdoSTh4MTZVOgorKyAgICAgIG1hc20udW5zaWduZWRXaWRlbkhpZ2hJbnQ4eDE2KHNy YywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4 dGVuZExvd0kxNng4UzoKKysgICAgICBtYXNtLndpZGVuTG93SW50MTZ4OChzcmMsIGRlc3QpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRlbmRIaWdoSTE2 eDhTOgorKyAgICAgIG1hc20ud2lkZW5IaWdoSW50MTZ4OChzcmMsIGRlc3QpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRlbmRMb3dJMTZ4OFU6CisrICAg ICAgbWFzbS51bnNpZ25lZFdpZGVuTG93SW50MTZ4OChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRFeHRlbmRIaWdoSTE2eDhVOgorKyAgICAg IG1hc20udW5zaWduZWRXaWRlbkhpZ2hJbnQxNng4KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7 CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkV4dGVuZExvd0kzMng0UzoKKysgICAgICBt YXNtLndpZGVuTG93SW50MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STY0eDJFeHRlbmRIaWdoSTMyeDRTOgorKyAgICAgIG1hc20ud2lkZW5I aWdoSW50MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNp bWRPcDo6STY0eDJFeHRlbmRMb3dJMzJ4NFU6CisrICAgICAgbWFzbS51bnNpZ25lZFdpZGVuTG93 SW50MzJ4NChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRP cDo6STY0eDJFeHRlbmRIaWdoSTMyeDRVOgorKyAgICAgIG1hc20udW5zaWduZWRXaWRlbkhpZ2hJ bnQzMng0KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIC8vIEV4dGVuZGVkIGFkZCBw YWlyd2lzZQorKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRhZGRQYWlyd2lzZUk4eDE2 UzoKKysgICAgICBtYXNtLmV4dEFkZFBhaXJ3aXNlSW50OHgxNihzcmMsIGRlc3QpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRhZGRQYWlyd2lzZUk4eDE2 VToKKysgICAgICBtYXNtLnVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQ4eDE2KHNyYywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGFkZFBhaXJ3 aXNlSTE2eDhTOgorKyAgICAgIG1hc20uZXh0QWRkUGFpcndpc2VJbnQxNng4KHNyYywgZGVzdCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEV4dGFkZFBhaXJ3 aXNlSTE2eDhVOgorKyAgICAgIG1hc20udW5zaWduZWRFeHRBZGRQYWlyd2lzZUludDE2eDgoc3Jj LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgLy8gUmVsYXhlZCB0cnVuY2F0aW9uCisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NFJlbGF4ZWRUcnVuY0YzMng0UzoKKysgICAgICBtYXNt LnRydW5jRmxvYXQzMng0VG9JbnQzMng0UmVsYXhlZChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFr OworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkVHJ1bmNGMzJ4NFU6CisrICAg ICAgbWFzbS51bnNpZ25lZFRydW5jRmxvYXQzMng0VG9JbnQzMng0UmVsYXhlZChzcmMsIGRlc3Qp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRSZWxheGVkVHJ1 bmNGNjR4MlNaZXJvOgorKyAgICAgIG1hc20udHJ1bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxheGVk KHNyYywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4 NFJlbGF4ZWRUcnVuY0Y2NHgyVVplcm86CisrICAgICAgbWFzbS51bnNpZ25lZFRydW5jRmxvYXQ2 NHgyVG9JbnQzMng0UmVsYXhlZChzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICAvLyBQ b3BjbnQKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2UG9wY250OgorKyAgICAgIG1hc20u cG9wY250SW50OHgxNihzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0Ogor KyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHVuYXJ5IG9wIik7CisrICB9CisrfQor K3ZvaWQgQ29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtUmVkdWNlU2ltZDEyOChMV2FzbVJlZHVjZVNp bWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5zcmMoKSk7CisrICB1aW50MzJfdCBpbW0gPSBpbnMtPm1pcigpLT5pbW0oKTsKKysgIHN3aXRj aCAoaW5zLT5taXIoKS0+c2ltZE9wKCkpIHsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2 RXh0cmFjdExhbmVTOgorKyAgICAgIG1hc20uZXh0cmFjdExhbmVJbnQ4eDE2KGltbSwgc3JjLCBU b1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk4eDE2RXh0cmFjdExhbmVVOgorKyAgICAgIG1hc20udW5zaWduZWRFeHRyYWN0 TGFuZUludDh4MTYoaW1tLCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRyYWN0TGFuZVM6CisrICAg ICAgbWFzbS5leHRyYWN0TGFuZUludDE2eDgoaW1tLCBzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRw dXQoKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhFeHRy YWN0TGFuZVU6CisrICAgICAgbWFzbS51bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4OChpbW0sIHNy YywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMzJ4NEV4dHJhY3RMYW5lOgorKyAgICAgIG1hc20uZXh0cmFjdExhbmVJ bnQzMng0KGltbSwgc3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVh azsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkYzMng0RXh0cmFjdExhbmU6CisrICAgICAgbWFz bS5leHRyYWN0TGFuZUZsb2F0MzJ4NChpbW0sIHNyYywgVG9GbG9hdFJlZ2lzdGVyKGlucy0+b3V0 cHV0KCkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkY2NHgyRXh0 cmFjdExhbmU6CisrICAgICAgbWFzbS5leHRyYWN0TGFuZUZsb2F0NjR4MihpbW0sIHNyYywgVG9G bG9hdFJlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OlYxMjhBbnlUcnVlOgorKyAgICAgIG1hc20uYW55VHJ1ZVNpbWQxMjgoc3Jj LCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk4eDE2QWxsVHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJbnQ4eDE2KHNy YywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpJMTZ4OEFsbFRydWU6CisrICAgICAgbWFzbS5hbGxUcnVlSW50MTZ4OChz cmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IHdhc206OlNpbWRPcDo6STMyeDRBbGxUcnVlOgorKyAgICAgIG1hc20uYWxsVHJ1ZUludDMyeDQo c3JjLCBUb1JlZ2lzdGVyKGlucy0+b3V0cHV0KCkpKTsKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSB3YXNtOjpTaW1kT3A6Okk2NHgyQWxsVHJ1ZToKKysgICAgICBtYXNtLmFsbFRydWVJbnQ2NHgy KHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNh c2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkJpdG1hc2s6CisrICAgICAgbWFzbS5iaXRtYXNrSW50OHgx NihzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSksIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4Qml0bWFzazoKKysgICAg ICBtYXNtLmJpdG1hc2tJbnQxNng4KHNyYywgVG9SZWdpc3RlcihpbnMtPm91dHB1dCgpKSwgU2Ny YXRjaFNpbWQxMjhSZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6 STMyeDRCaXRtYXNrOgorKyAgICAgIG1hc20uYml0bWFza0ludDMyeDQoc3JjLCBUb1JlZ2lzdGVy KGlucy0+b3V0cHV0KCkpLCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkJpdG1hc2s6CisrICAgICAgbWFzbS5iaXRtYXNrSW50 NjR4MihzcmMsIFRvUmVnaXN0ZXIoaW5zLT5vdXRwdXQoKSksIFNjcmF0Y2hTaW1kMTI4UmVnKTsK KysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlBQQzY0OiBO WUkgU0lNRCByZWR1Y2Ugb3AiKTsKKysgIH0KKyt9Cisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNp dFdhc21SZWR1Y2VBbmRCcmFuY2hTaW1kMTI4KAorKyAgICBMV2FzbVJlZHVjZUFuZEJyYW5jaFNp bWQxMjgqIGlucykgeworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5zcmMoKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJl Z2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHN3aXRjaCAoaW5zLT5zaW1kT3AoKSkg eworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOEFueVRydWU6CisrICAgICAgbWFzbS5hbnlU cnVlU2ltZDEyOChzcmMsIHRtcCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpJOHgxNkFsbFRydWU6CisrICAgICAgbWFzbS5hbGxUcnVlSW50OHgxNihzcmMsIHRtcCk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OEFsbFRydWU6Cisr ICAgICAgbWFzbS5hbGxUcnVlSW50MTZ4OChzcmMsIHRtcCk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2Ugd2FzbTo6U2ltZE9wOjpJMzJ4NEFsbFRydWU6CisrICAgICAgbWFzbS5hbGxUcnVlSW50 MzJ4NChzcmMsIHRtcCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJ NjR4MkFsbFRydWU6CisrICAgICAgbWFzbS5hbGxUcnVlSW50NjR4MihzcmMsIHRtcCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJOHgxNkJpdG1hc2s6CisrICAgICAg bWFzbS5iaXRtYXNrSW50OHgxNihzcmMsIHRtcCwgU2NyYXRjaFNpbWQxMjhSZWcpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIHdhc206OlNpbWRPcDo6STE2eDhCaXRtYXNrOgorKyAgICAgIG1h c20uYml0bWFza0ludDE2eDgoc3JjLCB0bXAsIFNjcmF0Y2hTaW1kMTI4UmVnKTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0Qml0bWFzazoKKysgICAgICBtYXNt LmJpdG1hc2tJbnQzMng0KHNyYywgdG1wLCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MkJpdG1hc2s6CisrICAgICAgbWFzbS5i aXRtYXNrSW50NjR4MihzcmMsIHRtcCwgU2NyYXRjaFNpbWQxMjhSZWcpOworKyAgICAgIGJyZWFr OworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHJlZHVj ZS1hbmQtYnJhbmNoIG9wIik7CisrICB9CisrICBtYXNtLmFzX2NtcGRpKHRtcCwgMCk7CisrICAv LyBCcmFuY2ggdG8gaWZUcnVlIGlmIG5vbnplcm8sIGZhbGwgdGhyb3VnaCB0byBpZkZhbHNlLgor KyAgTGFiZWwqIGlmVHJ1ZSA9IHNraXBUcml2aWFsQmxvY2tzKGlucy0+aWZUcnVlKCkpLT5saXIo KS0+bGFiZWwoKTsKKysgIExhYmVsKiBpZkZhbHNlID0gc2tpcFRyaXZpYWxCbG9ja3MoaW5zLT5p ZkZhbHNlKCkpLT5saXIoKS0+bGFiZWwoKTsKKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVx dWFsLCBpZlRydWUpOworKyAgbWFzbS5qdW1wKGlmRmFsc2UpOworK30KKyt2b2lkIENvZGVHZW5l cmF0b3I6OnZpc2l0V2FzbVJlZHVjZVNpbWQxMjhUb0ludDY0KAorKyAgICBMV2FzbVJlZHVjZVNp bWQxMjhUb0ludDY0KiBpbnMpIHsKKysgIEZsb2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lz dGVyKGlucy0+c3JjKCkpOworKyAgUmVnaXN0ZXI2NCBkZXN0ID0gVG9PdXRSZWdpc3RlcjY0KGlu cyk7CisrICBzd2l0Y2ggKGlucy0+bWlyKCktPnNpbWRPcCgpKSB7CisrICAgIGNhc2Ugd2FzbTo6 U2ltZE9wOjpJNjR4MkV4dHJhY3RMYW5lOgorKyAgICAgIG1hc20uZXh0cmFjdExhbmVJbnQ2NHgy KGlucy0+bWlyKCktPmltbSgpLCBzcmMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZh dWx0OgorKyAgICAgIE1PWl9DUkFTSCgiUFBDNjQ6IE5ZSSBTSU1EIHJlZHVjZS10by1pbnQ2NCBv cCIpOworKyAgfQorK30KKytzdGF0aWMgaW5saW5lIHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MgRGVy aXZlTWVtb3J5QWNjZXNzRGVzYygKKysgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYg YWNjZXNzLCBTY2FsYXI6OlR5cGUgdHlwZSkgeworKyAgcmV0dXJuIHdhc206Ok1lbW9yeUFjY2Vz c0Rlc2MoYWNjZXNzLm1lbW9yeUluZGV4KCksIHR5cGUsIGFjY2Vzcy5hbGlnbigpLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm9mZnNldDMyKCksIGFjY2Vzcy50cmFw RGVzYygpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzLmlzSHVnZU1l bW9yeSgpKTsKKyt9CisrCisrdm9pZCBDb2RlR2VuZXJhdG9yOjp2aXNpdFdhc21Mb2FkTGFuZVNp bWQxMjgoTFdhc21Mb2FkTGFuZVNpbWQxMjgqIGlucykgeworKyAgY29uc3QgTVdhc21Mb2FkTGFu ZVNpbWQxMjgqIG1pciA9IGlucy0+bWlyKCk7CisrICBSZWdpc3RlciBtZW1vcnlCYXNlID0gVG9S ZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSk7CisrICBSZWdpc3RlciBwdHIgPSBUb1JlZ2lzdGVy KGlucy0+cHRyKCkpOworKyAgRmxvYXRSZWdpc3RlciBzcmMgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5z LT5zcmMoKSk7CisrICBGbG9hdFJlZ2lzdGVyIGRlc3QgPSBUb0Zsb2F0UmVnaXN0ZXIoaW5zLT5v dXRwdXQoKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJl Z2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1hc20ubW92ZVNpbWQxMjgoc3JjLCBk ZXN0KTsKKysgIHN3aXRjaCAobWlyLT5sYW5lU2l6ZSgpKSB7CisrICAgIGNhc2UgMToKKysgICAg ICBtYXNtLndhc21Mb2FkKERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2Nh bGFyOjpJbnQ4KSwKKysgICAgICAgICAgICAgICAgICAgIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBB bnlSZWdpc3Rlcih0bXApKTsKKysgICAgICBtYXNtLnJlcGxhY2VMYW5lSW50OHgxNihtaXItPmxh bmVJbmRleCgpLCB0bXAsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDI6CisrICAg ICAgbWFzbS53YXNtTG9hZChEZXJpdmVNZW1vcnlBY2Nlc3NEZXNjKG1pci0+YWNjZXNzKCksIFNj YWxhcjo6SW50MTYpLAorKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFzZSwgcHRyLCBwdHIs IEFueVJlZ2lzdGVyKHRtcCkpOworKyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQxNng4KG1pci0+ bGFuZUluZGV4KCksIHRtcCwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDoKKysg ICAgICBtYXNtLndhc21Mb2FkKERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwg U2NhbGFyOjpJbnQzMiksCisrICAgICAgICAgICAgICAgICAgICBtZW1vcnlCYXNlLCBwdHIsIHB0 ciwgQW55UmVnaXN0ZXIodG1wKSk7CisrICAgICAgbWFzbS5yZXBsYWNlTGFuZUludDMyeDQobWly LT5sYW5lSW5kZXgoKSwgdG1wLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSA4OiB7 CisrICAgICAgbWFzbS53YXNtTG9hZEk2NChEZXJpdmVNZW1vcnlBY2Nlc3NEZXNjKG1pci0+YWNj ZXNzKCksIFNjYWxhcjo6SW50NjQpLAorKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5QmFz ZSwgcHRyLCBwdHIsCisrICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0KHRtcCkpOwor KyAgICAgIG1hc20ucmVwbGFjZUxhbmVJbnQ2NHgyKG1pci0+bGFuZUluZGV4KCksIFJlZ2lzdGVy NjQodG1wKSwgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgZGVmYXVsdDoKKysg ICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgbGFuZSBzaXplIik7CisrICB9CisrfQorK3ZvaWQg Q29kZUdlbmVyYXRvcjo6dmlzaXRXYXNtU3RvcmVMYW5lU2ltZDEyOChMV2FzbVN0b3JlTGFuZVNp bWQxMjgqIGlucykgeworKyAgY29uc3QgTVdhc21TdG9yZUxhbmVTaW1kMTI4KiBtaXIgPSBpbnMt Pm1pcigpOworKyAgUmVnaXN0ZXIgbWVtb3J5QmFzZSA9IFRvUmVnaXN0ZXIoaW5zLT5tZW1vcnlC YXNlKCkpOworKyAgUmVnaXN0ZXIgcHRyID0gVG9SZWdpc3RlcihpbnMtPnB0cigpKTsKKysgIEZs b2F0UmVnaXN0ZXIgc3JjID0gVG9GbG9hdFJlZ2lzdGVyKGlucy0+c3JjKCkpOworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBzd2l0Y2ggKG1pci0+bGFuZVNpemUoKSkgeworKyAgICBjYXNlIDE6Cisr ICAgICAgbWFzbS51bnNpZ25lZEV4dHJhY3RMYW5lSW50OHgxNihtaXItPmxhbmVJbmRleCgpLCBz cmMsIHRtcCk7CisrICAgICAgbWFzbS53YXNtU3RvcmUoRGVyaXZlTWVtb3J5QWNjZXNzRGVzYyht aXItPmFjY2VzcygpLCBTY2FsYXI6OkludDgpLAorKyAgICAgICAgICAgICAgICAgICAgIEFueVJl Z2lzdGVyKHRtcCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSAyOgorKyAgICAgIG1hc20udW5zaWduZWRFeHRyYWN0TGFuZUludDE2eDgobWlyLT5sYW5l SW5kZXgoKSwgc3JjLCB0bXApOworKyAgICAgIG1hc20ud2FzbVN0b3JlKERlcml2ZU1lbW9yeUFj Y2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQxNiksCisrICAgICAgICAgICAgICAg ICAgICAgQW55UmVnaXN0ZXIodG1wKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOworKyAgICAgIGJy ZWFrOworKyAgICBjYXNlIDQ6CisrICAgICAgbWFzbS5leHRyYWN0TGFuZUludDMyeDQobWlyLT5s YW5lSW5kZXgoKSwgc3JjLCB0bXApOworKyAgICAgIG1hc20ud2FzbVN0b3JlKERlcml2ZU1lbW9y eUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQzMiksCisrICAgICAgICAgICAg ICAgICAgICAgQW55UmVnaXN0ZXIodG1wKSwgbWVtb3J5QmFzZSwgcHRyLCBwdHIpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIDg6CisrICAgICAgbWFzbS5leHRyYWN0TGFuZUludDY0eDIobWly LT5sYW5lSW5kZXgoKSwgc3JjLCBSZWdpc3RlcjY0KHRtcCkpOworKyAgICAgIG1hc20ud2FzbVN0 b3JlSTY0KERlcml2ZU1lbW9yeUFjY2Vzc0Rlc2MobWlyLT5hY2Nlc3MoKSwgU2NhbGFyOjpJbnQ2 NCksCisrICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCh0bXApLCBtZW1vcnlCYXNl LCBwdHIsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NS QVNIKCJVbmV4cGVjdGVkIGxhbmUgc2l6ZSIpOworKyAgfQorK30KKysKKyt9ICAvLyBuYW1lc3Bh Y2Ugaml0CisrfSAgLy8gbmFtZXNwYWNlIGpzCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2 NC9Db2RlR2VuZXJhdG9yLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0b3It cHBjNjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uMzQxNGVj ZWI1YWM0CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L0NvZGVHZW5lcmF0 b3ItcHBjNjQuaAorQEAgLTAsMCArMSwxMDEgQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk dGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICog dmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUg Rm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBM aWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQg d2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxh Lm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaWZuZGVmIGppdF9wcGM2NF9Db2RlR2VuZXJhdG9yX3Bw YzY0X2gKKysjZGVmaW5lIGppdF9wcGM2NF9Db2RlR2VuZXJhdG9yX3BwYzY0X2gKKysKKysjaW5j bHVkZSAiaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIgorKyNpbmNsdWRlICJqaXQvc2hhcmVk L0NvZGVHZW5lcmF0b3Itc2hhcmVkLmgiCisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ug aml0IHsKKysKKytjbGFzcyBDb2RlR2VuZXJhdG9yUFBDNjQ7CisrY2xhc3MgT3V0T2ZMaW5lVGFi bGVTd2l0Y2g7CisrCisrdXNpbmcgT3V0T2ZMaW5lV2FzbVRydW5jYXRlQ2hlY2sgPQorKyAgICBP dXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVja0Jhc2U8Q29kZUdlbmVyYXRvclBQQzY0PjsKKysKKytj bGFzcyBDb2RlR2VuZXJhdG9yUFBDNjQgOiBwdWJsaWMgQ29kZUdlbmVyYXRvclNoYXJlZCB7Cisr ICBmcmllbmQgY2xhc3MgTW92ZVJlc29sdmVyUFBDNjQ7CisrCisrIHByb3RlY3RlZDoKKysgIENv ZGVHZW5lcmF0b3JQUEM2NChNSVJHZW5lcmF0b3IqIGdlbiwgTElSR3JhcGgqIGdyYXBoLCBNYWNy b0Fzc2VtYmxlciogbWFzbSwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpDb2Rl TWV0YWRhdGEqIGNvZGVNZXRhKTsKKysKKysgIE5vbkFzc2VydGluZ0xhYmVsIGRlb3B0TGFiZWxf OworKworKyAgT3BlcmFuZCBUb09wZXJhbmQoY29uc3QgTEFsbG9jYXRpb24mIGEpOworKyAgT3Bl cmFuZCBUb09wZXJhbmQoY29uc3QgTEFsbG9jYXRpb24qIGEpOworKyAgTW92ZU9wZXJhbmQgdG9N b3ZlT3BlcmFuZChMQWxsb2NhdGlvbiBhKSBjb25zdDsKKysKKysgIHRlbXBsYXRlIDx0eXBlbmFt ZSBUMSwgdHlwZW5hbWUgVDI+CisrICB2b2lkIGJhaWxvdXRDbXAzMihBc3NlbWJsZXI6OkNvbmRp dGlvbiBjLCBUMSBsaHMsIFQyIHJocywKKysgICAgICAgICAgICAgICAgICAgIExTbmFwc2hvdCog c25hcHNob3QpIHsKKysgICAgTGFiZWwgYmFpbDsKKysgICAgbWFzbS5icmFuY2gzMihjLCBsaHMs IHJocywgJmJhaWwpOworKyAgICBiYWlsb3V0RnJvbSgmYmFpbCwgc25hcHNob3QpOworKyAgfQor KyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KKysgIHZvaWQgYmFpbG91dENt cFB0cihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjLCBUMSBsaHMsIFQyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICBMU25hcHNob3QqIHNuYXBzaG90KSB7CisrICAgIExhYmVsIGJhaWw7CisrICAg IG1hc20uYnJhbmNoUHRyKGMsIGxocywgcmhzLCAmYmFpbCk7CisrICAgIGJhaWxvdXRGcm9tKCZi YWlsLCBzbmFwc2hvdCk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1l IFQyPgorKyAgdm9pZCBiYWlsb3V0VGVzdDMyKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGMsIFQxIGxo cywgVDIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgIExTbmFwc2hvdCogc25hcHNob3QpIHsK KysgICAgTGFiZWwgYmFpbDsKKysgICAgbWFzbS5icmFuY2hUZXN0MzIoYywgbGhzLCByaHMsICZi YWlsKTsKKysgICAgYmFpbG91dEZyb20oJmJhaWwsIHNuYXBzaG90KTsKKysgIH0KKysgIHZvaWQg YmFpbG91dElmRmFsc2VCb29sKFJlZ2lzdGVyIGxocywgTFNuYXBzaG90KiBzbmFwc2hvdCk7Cisr ICB2b2lkIGJhaWxvdXRGcm9tKExhYmVsKiBsYWJlbCwgTFNuYXBzaG90KiBzbmFwc2hvdCk7Cisr ICB2b2lkIGJhaWxvdXQoTFNuYXBzaG90KiBzbmFwc2hvdCk7CisrCisrIHByb3RlY3RlZDoKKysg IGJvb2wgZ2VuZXJhdGVPdXRPZkxpbmVDb2RlKCk7CisrICB2b2lkIGJyYW5jaFRvQmxvY2soTUJh c2ljQmxvY2sqIGJsb2NrKTsKKysKKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBi cmFuY2hUb0Jsb2NrKEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgVCBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgTUJhc2ljQmxvY2sqIG1pcikgeworKyAgICBMYWJl bCogbGFiZWwgPSBza2lwVHJpdmlhbEJsb2NrcyhtaXIpLT5saXIoKS0+bGFiZWwoKTsKKysgICAg bWFzbS5icmFuY2gzMihjb25kLCBsaHMsIHJocywgbGFiZWwpOworKyAgfQorKyAgdm9pZCBicmFu Y2hUb0Jsb2NrKEFzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmQsIEZsb2F0UmVnaXN0ZXIg bGhzLAorKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBNQmFzaWNCbG9j ayogbWlyKTsKKysgIHZvaWQgYnJhbmNoVG9CbG9jayhBc3NlbWJsZXI6OkZsb2F0Rm9ybWF0IGZt dCwKKysgICAgICAgICAgICAgICAgICAgICBBc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25k LCBGbG9hdFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IHJocywgTUJhc2ljQmxvY2sqIG1pcik7CisrCisrICB2b2lkIGVtaXRUYWJsZVN3aXRjaERpc3Bh dGNoKE1UYWJsZVN3aXRjaCogbWlyLCBSZWdpc3RlciBpbmRleCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgYmFzZSk7CisrCisrICB2b2lkIGVtaXRCaWdJbnRQdHJE aXYoTEJpZ0ludFB0ckRpdiogaW5zLCBSZWdpc3RlciBkaXZpZGVuZCwgUmVnaXN0ZXIgZGl2aXNv ciwKKysgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpOworKyAgdm9pZCBl bWl0QmlnSW50UHRyTW9kKExCaWdJbnRQdHJNb2QqIGlucywgUmVnaXN0ZXIgZGl2aWRlbmQsIFJl Z2lzdGVyIGRpdmlzb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0 KTsKKysKKysgIHZvaWQgZ2VuZXJhdGVJbnZhbGlkYXRlRXBpbG9ndWUoKTsKKysKKysgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBlbWl0V2FzbUxvYWQoVCogbGlyKTsKKysgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBlbWl0V2FzbVN0b3JlKFQqIGxpcik7CisrCisrIHB1 YmxpYzoKKysgIHZvaWQgdmlzaXRPdXRPZkxpbmVUYWJsZVN3aXRjaChPdXRPZkxpbmVUYWJsZVN3 aXRjaCogb29sKTsKKysgIHZvaWQgdmlzaXRPdXRPZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayhPdXRP ZkxpbmVXYXNtVHJ1bmNhdGVDaGVjayogb29sKTsKKyt9OworKworK3R5cGVkZWYgQ29kZUdlbmVy YXRvclBQQzY0IENvZGVHZW5lcmF0b3JTcGVjaWZpYzsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0 CisrfSAgLy8gbmFtZXNwYWNlIGpzCisrCisrI2VuZGlmIC8qIGppdF9wcGM2NF9Db2RlR2VuZXJh dG9yX3BwYzY0X2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L0xJUi1wcGM2NC5o IGIvanMvc3JjL2ppdC9wcGM2NC9MSVItcHBjNjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2lu ZGV4IDAwMDAwMDAwMDAwMC4uNjg2ODc1MDU2MTI3CistLS0gL2Rldi9udWxsCisrKysgYi9qcy9z cmMvaml0L3BwYzY0L0xJUi1wcGM2NC5oCitAQCAtMCwwICsxLDEzNSBAQAorKy8qIC0qLSBNb2Rl OiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNl dDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhp cyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxh IFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5v dCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQg aHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X0xJ Ul9wcGM2NF9oCisrI2RlZmluZSBqaXRfcHBjNjRfTElSX3BwYzY0X2gKKysKKytuYW1lc3BhY2Ug anMgeworK25hbWVzcGFjZSBqaXQgeworKworK2NsYXNzIExVbmJveCA6IHB1YmxpYyBMSW5zdHJ1 Y3Rpb25IZWxwZXI8MSwgQk9YX1BJRUNFUywgMD4geworKyBwdWJsaWM6CisrICBMSVJfSEVBREVS KFVuYm94KTsKKysKKysgIGV4cGxpY2l0IExVbmJveChjb25zdCBMQWxsb2NhdGlvbiYgaW5wdXQp IDogTEluc3RydWN0aW9uSGVscGVyKGNsYXNzT3Bjb2RlKSB7CisrICAgIHNldE9wZXJhbmQoMCwg aW5wdXQpOworKyAgfQorKworKyAgc3RhdGljIGNvbnN0IHNpemVfdCBJbnB1dCA9IDA7CisrCisr ICBMQm94QWxsb2NhdGlvbiBpbnB1dCgpIGNvbnN0IHsgcmV0dXJuIGdldEJveE9wZXJhbmQoSW5w dXQpOyB9CisrCisrICBNVW5ib3gqIG1pcigpIGNvbnN0IHsgcmV0dXJuIG1pcl8tPnRvVW5ib3go KTsgfQorKyAgY29uc3QgY2hhciogZXh0cmFOYW1lKCkgY29uc3QgeyByZXR1cm4gU3RyaW5nRnJv bU1JUlR5cGUobWlyKCktPnR5cGUoKSk7IH0KKyt9OworKworK2NsYXNzIExVRGl2T3JNb2QgOiBw dWJsaWMgTEJpbmFyeU1hdGg8MD4geworKyBwdWJsaWM6CisrICBMSVJfSEVBREVSKFVEaXZPck1v ZCk7CisrCisrICBMVURpdk9yTW9kKCkgOiBMQmluYXJ5TWF0aChjbGFzc09wY29kZSkge30KKysK KysgIE1CaW5hcnlBcml0aEluc3RydWN0aW9uKiBtaXIoKSBjb25zdCB7CisrICAgIE1PWl9BU1NF UlQobWlyXy0+aXNEaXYoKSB8fCBtaXJfLT5pc01vZCgpKTsKKysgICAgcmV0dXJuIHN0YXRpY19j YXN0PE1CaW5hcnlBcml0aEluc3RydWN0aW9uKj4obWlyXyk7CisrICB9CisrCisrICBib29sIGNh bkJlRGl2aWRlQnlaZXJvKCkgY29uc3QgeworKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgeworKyAg ICAgIHJldHVybiBtaXJfLT50b01vZCgpLT5jYW5CZURpdmlkZUJ5WmVybygpOworKyAgICB9Cisr ICAgIHJldHVybiBtaXJfLT50b0RpdigpLT5jYW5CZURpdmlkZUJ5WmVybygpOworKyAgfQorKwor KyAgYm9vbCB0cmFwT25FcnJvcigpIGNvbnN0IHsKKysgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsK KysgICAgICByZXR1cm4gbWlyXy0+dG9Nb2QoKS0+dHJhcE9uRXJyb3IoKTsKKysgICAgfQorKyAg ICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+dHJhcE9uRXJyb3IoKTsKKysgIH0KKysKKysgIHdhc206 OlRyYXBTaXRlRGVzYyB0cmFwU2l0ZURlc2MoKSBjb25zdCB7CisrICAgIE1PWl9BU1NFUlQobWly Xy0+aXNEaXYoKSB8fCBtaXJfLT5pc01vZCgpKTsKKysgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsK KysgICAgICByZXR1cm4gbWlyXy0+dG9Nb2QoKS0+dHJhcFNpdGVEZXNjKCk7CisrICAgIH0KKysg ICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPnRyYXBTaXRlRGVzYygpOworKyAgfQorK307CisrCisr Y2xhc3MgTERpdk9yTW9kSTY0IDogcHVibGljIExCaW5hcnlNYXRoPDA+IHsKKysgcHVibGljOgor KyAgTElSX0hFQURFUihEaXZPck1vZEk2NCk7CisrCisrICBMRGl2T3JNb2RJNjQoY29uc3QgTEFs bG9jYXRpb24mIGxocywgY29uc3QgTEFsbG9jYXRpb24mIHJocykKKysgICAgICA6IExCaW5hcnlN YXRoKGNsYXNzT3Bjb2RlKSB7CisrICAgIHNldE9wZXJhbmQoMCwgbGhzKTsKKysgICAgc2V0T3Bl cmFuZCgxLCByaHMpOworKyAgfQorKworKyAgTUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qIG1pcigp IGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkp OworKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TUJpbmFyeUFyaXRoSW5zdHJ1Y3Rpb24qPihtaXJf KTsKKysgIH0KKysKKysgIGJvb2wgY2FuQmVEaXZpZGVCeVplcm8oKSBjb25zdCB7CisrICAgIGlm IChtaXJfLT5pc01vZCgpKSB7CisrICAgICAgcmV0dXJuIG1pcl8tPnRvTW9kKCktPmNhbkJlRGl2 aWRlQnlaZXJvKCk7CisrICAgIH0KKysgICAgcmV0dXJuIG1pcl8tPnRvRGl2KCktPmNhbkJlRGl2 aWRlQnlaZXJvKCk7CisrICB9CisrICBib29sIGNhbkJlTmVnYXRpdmVPdmVyZmxvdygpIGNvbnN0 IHsKKysgICAgaWYgKG1pcl8tPmlzTW9kKCkpIHsKKysgICAgICByZXR1cm4gbWlyXy0+dG9Nb2Qo KS0+Y2FuQmVOZWdhdGl2ZURpdmlkZW5kKCk7CisrICAgIH0KKysgICAgcmV0dXJuIG1pcl8tPnRv RGl2KCktPmNhbkJlTmVnYXRpdmVPdmVyZmxvdygpOworKyAgfQorKyAgd2FzbTo6VHJhcFNpdGVE ZXNjIHRyYXBTaXRlRGVzYygpIGNvbnN0IHsKKysgICAgTU9aX0FTU0VSVChtaXJfLT5pc0Rpdigp IHx8IG1pcl8tPmlzTW9kKCkpOworKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgeworKyAgICAgIHJl dHVybiBtaXJfLT50b01vZCgpLT50cmFwU2l0ZURlc2MoKTsKKysgICAgfQorKyAgICByZXR1cm4g bWlyXy0+dG9EaXYoKS0+dHJhcFNpdGVEZXNjKCk7CisrICB9CisrfTsKKysKKytjbGFzcyBMVURp dk9yTW9kSTY0IDogcHVibGljIExCaW5hcnlNYXRoPDA+IHsKKysgcHVibGljOgorKyAgTElSX0hF QURFUihVRGl2T3JNb2RJNjQpOworKworKyAgTFVEaXZPck1vZEk2NChjb25zdCBMQWxsb2NhdGlv biYgbGhzLCBjb25zdCBMQWxsb2NhdGlvbiYgcmhzKQorKyAgICAgIDogTEJpbmFyeU1hdGgoY2xh c3NPcGNvZGUpIHsKKysgICAgc2V0T3BlcmFuZCgwLCBsaHMpOworKyAgICBzZXRPcGVyYW5kKDEs IHJocyk7CisrICB9CisrCisrICBjb25zdCBjaGFyKiBleHRyYU5hbWUoKSBjb25zdCB7CisrICAg IHJldHVybiBtaXIoKS0+aXNUcnVuY2F0ZWQoKSA/ICJUcnVuY2F0ZWQiIDogbnVsbHB0cjsKKysg IH0KKysKKysgIE1CaW5hcnlBcml0aEluc3RydWN0aW9uKiBtaXIoKSBjb25zdCB7CisrICAgIE1P Wl9BU1NFUlQobWlyXy0+aXNEaXYoKSB8fCBtaXJfLT5pc01vZCgpKTsKKysgICAgcmV0dXJuIHN0 YXRpY19jYXN0PE1CaW5hcnlBcml0aEluc3RydWN0aW9uKj4obWlyXyk7CisrICB9CisrICBib29s IGNhbkJlRGl2aWRlQnlaZXJvKCkgY29uc3QgeworKyAgICBpZiAobWlyXy0+aXNNb2QoKSkgewor KyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT5jYW5CZURpdmlkZUJ5WmVybygpOworKyAgICB9 CisrICAgIHJldHVybiBtaXJfLT50b0RpdigpLT5jYW5CZURpdmlkZUJ5WmVybygpOworKyAgfQor KyAgd2FzbTo6VHJhcFNpdGVEZXNjIHRyYXBTaXRlRGVzYygpIGNvbnN0IHsKKysgICAgTU9aX0FT U0VSVChtaXJfLT5pc0RpdigpIHx8IG1pcl8tPmlzTW9kKCkpOworKyAgICBpZiAobWlyXy0+aXNN b2QoKSkgeworKyAgICAgIHJldHVybiBtaXJfLT50b01vZCgpLT50cmFwU2l0ZURlc2MoKTsKKysg ICAgfQorKyAgICByZXR1cm4gbWlyXy0+dG9EaXYoKS0+dHJhcFNpdGVEZXNjKCk7CisrICB9Cisr fTsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNwYWNlIGpzCisrCisrI2Vu ZGlmIC8qIGppdF9wcGM2NF9MSVJfcHBjNjRfaCAqLworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQv cHBjNjQvTG93ZXJpbmctcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2 NC5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmJlMGVhZDE5 ZDI3MworLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9Mb3dlcmluZy1wcGM2 NC5jcHAKK0BAIC0wLDAgKzEsMTMyNCBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDog ODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06 IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3Jt IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vu c2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRo IHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3Jn L01QTC8yLjAvLiAqLworKworKyNpbmNsdWRlICJqaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCIK KysKKysjaW5jbHVkZSAibW96aWxsYS9NYXRoQWxnb3JpdGhtcy5oIgorKworKyNpbmNsdWRlICJq aXQvTG93ZXJpbmcuaCIKKysjaW5jbHVkZSAiaml0L01JUi13YXNtLmgiCisrI2luY2x1ZGUgImpp dC9NSVIuaCIKKysjaW5jbHVkZSAiaml0L3BwYzY0L0Fzc2VtYmxlci1wcGM2NC5oIgorKyNpbmNs dWRlICJ3YXNtL1dhc21GZWF0dXJlcy5oIiAgLy8gZm9yIHdhc206OlJlcG9ydFNpbWRBbmFseXNp cworKworKyNpbmNsdWRlICJqaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaCIKKysKKyt1 c2luZyBuYW1lc3BhY2UganM7CisrdXNpbmcgbmFtZXNwYWNlIGpzOjpqaXQ7CisrCisrdXNpbmcg bW96aWxsYTo6Rmxvb3JMb2cyOworKworK25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7 CisrCisrTFRhYmxlU3dpdGNoKiBMSVJHZW5lcmF0b3JQUEM2NDo6bmV3TFRhYmxlU3dpdGNoKGNv bnN0IExBbGxvY2F0aW9uJiBpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgTERlZmluaXRpb24mIGlucHV0Q29weSkgeworKyAgcmV0dXJu IG5ldyAoYWxsb2MoKSkgTFRhYmxlU3dpdGNoKGluLCBpbnB1dENvcHksIHRlbXAoKSk7CisrfQor KworK0xUYWJsZVN3aXRjaFYqIExJUkdlbmVyYXRvclBQQzY0OjpuZXdMVGFibGVTd2l0Y2hWKGNv bnN0IExCb3hBbGxvY2F0aW9uJiBpbikgeworKyAgcmV0dXJuIG5ldyAoYWxsb2MoKSkgTFRhYmxl U3dpdGNoVihpbiwgdGVtcCgpLCB0ZW1wRG91YmxlKCksIHRlbXAoKSk7CisrfQorKworK3ZvaWQg TElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yU2hpZnQoTEluc3RydWN0aW9uSGVscGVyPDEsIDIs IDA+KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5p dGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTURlZmluaXRpb24qIHJocykgeworKyAgbG93ZXJGb3JBTFUoaW5zLCBtaXIs IGxocywgcmhzKTsKKyt9CisrCisrdGVtcGxhdGUgPGNsYXNzIExJbnN0cj4KKyt2b2lkIExJUkdl bmVyYXRvclBQQzY0Ojpsb3dlckZvclNoaWZ0SW50NjQoTEluc3RyKiBpbnMsIE1EZWZpbml0aW9u KiBtaXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZp bml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpIHsKKysgIGlmIGNvbnN0ZXhwciAoc3RkOjpp c19zYW1lX3Y8TEluc3RyLCBMU2hpZnRJNjQ+KSB7CisrICAgIGlucy0+c2V0TGhzKHVzZUludDY0 UmVnaXN0ZXJBdFN0YXJ0KGxocykpOworKyAgICBpbnMtPnNldFJocyh1c2VSZWdpc3Rlck9yQ29u c3RhbnRBdFN0YXJ0KHJocykpOworKyAgfSBlbHNlIHsKKysgICAgaW5zLT5zZXRJbnB1dCh1c2VJ bnQ2NFJlZ2lzdGVyQXRTdGFydChsaHMpKTsKKysgICAgaW5zLT5zZXRDb3VudCh1c2VSZWdpc3Rl ck9yQ29uc3RhbnRBdFN0YXJ0KHJocykpOworKyAgfQorKyAgZGVmaW5lSW50NjQoaW5zLCBtaXIp OworK30KKysKKyt0ZW1wbGF0ZSB2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvclNoaWZ0 SW50NjQoTFNoaWZ0STY0KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0 aW9uKiByaHMpOworK3RlbXBsYXRlIHZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yU2hp ZnRJbnQ2NChMUm90YXRlSTY0KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZp bml0aW9uKiByaHMpOworKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRm9yQUxVKExJ bnN0cnVjdGlvbkhlbHBlcjwxLCAxLCAwPiogaW5zLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIsIE1EZWZpbml0aW9uKiBpbnB1dCkgeworKyAg aW5zLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lzdGVyQXRTdGFydChpbnB1dCkpOworKyAgZGVmaW5l KGlucywgbWlyKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JBTFUo TEluc3RydWN0aW9uSGVscGVyPDEsIDIsIDA+KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTURlZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGxocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKSB7CisrICBp bnMtPnNldE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGxocykpOworKyAgaW5zLT5zZXRP cGVyYW5kKDEsIHVzZVJlZ2lzdGVyT3JDb25zdGFudEF0U3RhcnQocmhzKSk7CisrICBkZWZpbmUo aW5zLCBtaXIpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckFMVUlu dDY0KAorKyAgICBMSW5zdHJ1Y3Rpb25IZWxwZXI8SU5UNjRfUElFQ0VTLCBJTlQ2NF9QSUVDRVMs IDA+KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCisrICAgIE1EZWZpbml0aW9uKiBpbnB1dCkgewor KyAgaW5zLT5zZXRJbnQ2NE9wZXJhbmQoMCwgdXNlSW50NjRSZWdpc3RlckF0U3RhcnQoaW5wdXQp KTsKKysgIGRlZmluZUludDY0KGlucywgbWlyKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQ UEM2NDo6bG93ZXJGb3JBTFVJbnQ2NCgKKysgICAgTEluc3RydWN0aW9uSGVscGVyPElOVDY0X1BJ RUNFUywgMiAqIElOVDY0X1BJRUNFUywgMD4qIGlucywKKysgICAgTURlZmluaXRpb24qIG1pciwg TURlZmluaXRpb24qIGxocywgTURlZmluaXRpb24qIHJocykgeworKyAgaW5zLT5zZXRJbnQ2NE9w ZXJhbmQoMCwgdXNlSW50NjRSZWdpc3RlckF0U3RhcnQobGhzKSk7CisrICBpbnMtPnNldEludDY0 T3BlcmFuZChJTlQ2NF9QSUVDRVMsIHVzZUludDY0UmVnaXN0ZXJPckNvbnN0YW50QXRTdGFydChy aHMpKTsKKysgIGRlZmluZUludDY0KGlucywgbWlyKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0 b3JQUEM2NDo6bG93ZXJGb3JNdWxJbnQ2NChMTXVsSTY0KiBpbnMsIE1NdWwqIG1pciwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsIE1E ZWZpbml0aW9uKiByaHMpIHsKKysgIGxvd2VyRm9yQUxVSW50NjQoaW5zLCBtaXIsIGxocywgcmhz KTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJGb3JGUFUoTEluc3RydWN0 aW9uSGVscGVyPDEsIDEsIDA+KiBpbnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTURlZmluaXRpb24qIG1pciwgTURlZmluaXRpb24qIGlucHV0KSB7CisrICBpbnMtPnNl dE9wZXJhbmQoMCwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucHV0KSk7CisrICBkZWZpbmUoaW5zLCBt aXIpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckZvckZQVShMSW5zdHJ1 Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlucywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiByaHMpIHsKKysgIGlucy0+c2V0 T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3RhcnQobGhzKSk7CisrICBpbnMtPnNldE9wZXJhbmQo MSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KHJocykpOworKyAgZGVmaW5lKGlucywgbWlyKTsKKyt9Cisr CisrTEJveEFsbG9jYXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnVzZUJveEZpeGVkKE1EZWZpbml0 aW9uKiBtaXIsIFJlZ2lzdGVyIHJlZzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJlZzIsIGJvb2wgdXNlQXRTdGFydCkgeworKyAgTU9a X0FTU0VSVChtaXItPnR5cGUoKSA9PSBNSVJUeXBlOjpWYWx1ZSk7CisrCisrICBlbnN1cmVEZWZp bmVkKG1pcik7CisrICByZXR1cm4gTEJveEFsbG9jYXRpb24oTFVzZShyZWcxLCBtaXItPnZpcnR1 YWxSZWdpc3RlcigpLCB1c2VBdFN0YXJ0KSk7CisrfQorKworK0xBbGxvY2F0aW9uIExJUkdlbmVy YXRvclBQQzY0Ojp1c2VCeXRlT3BSZWdpc3RlcihNRGVmaW5pdGlvbiogbWlyKSB7CisrICByZXR1 cm4gdXNlUmVnaXN0ZXIobWlyKTsKKyt9CisrCisrTEFsbG9jYXRpb24gTElSR2VuZXJhdG9yUFBD NjQ6OnVzZUJ5dGVPcFJlZ2lzdGVyQXRTdGFydChNRGVmaW5pdGlvbiogbWlyKSB7CisrICByZXR1 cm4gdXNlUmVnaXN0ZXJBdFN0YXJ0KG1pcik7CisrfQorKworK0xBbGxvY2F0aW9uIExJUkdlbmVy YXRvclBQQzY0Ojp1c2VCeXRlT3BSZWdpc3Rlck9yTm9uRG91YmxlQ29uc3RhbnQoCisrICAgIE1E ZWZpbml0aW9uKiBtaXIpIHsKKysgIHJldHVybiB1c2VSZWdpc3Rlck9yTm9uRG91YmxlQ29uc3Rh bnQobWlyKTsKKyt9CisrCisrTERlZmluaXRpb24gTElSR2VuZXJhdG9yUFBDNjQ6OnRlbXBCeXRl T3BSZWdpc3RlcigpIHsgcmV0dXJuIHRlbXAoKTsgfQorKworK0xEZWZpbml0aW9uIExJUkdlbmVy YXRvclBQQzY0Ojp0ZW1wVG9VbmJveCgpIHsgcmV0dXJuIHRlbXAoKTsgfQorKworK3ZvaWQgTElS R2VuZXJhdG9yUFBDNjQ6Omxvd2VyVW50eXBlZFBoaUlucHV0KE1QaGkqIHBoaSwgdWludDMyX3Qg aW5wdXRQb3NpdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMQmxvY2sqIGJsb2NrLCBzaXplX3QgbGlySW5kZXgpIHsKKysgIGxvd2VyVHlwZWRQaGlJ bnB1dChwaGksIGlucHV0UG9zaXRpb24sIGJsb2NrLCBsaXJJbmRleCk7CisrfQorKworK3ZvaWQg TElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VySW50NjRQaGlJbnB1dChNUGhpKiBwaGksIHVpbnQzMl90 IGlucHV0UG9zaXRpb24sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExCbG9jayogYmxvY2ssIHNpemVfdCBsaXJJbmRleCkgeworKyAgbG93ZXJUeXBlZFBoaUlu cHV0KHBoaSwgaW5wdXRQb3NpdGlvbiwgYmxvY2ssIGxpckluZGV4KTsKKyt9CisrCisrdm9pZCBM SVJHZW5lcmF0b3JQUEM2NDo6ZGVmaW5lSW50NjRQaGkoTVBoaSogcGhpLCBzaXplX3QgbGlySW5k ZXgpIHsKKysgIGRlZmluZVR5cGVkUGhpKHBoaSwgbGlySW5kZXgpOworK30KKysKKyt2b2lkIExJ UkdlbmVyYXRvclBQQzY0Ojpsb3dlck11bEkoTU11bCogbXVsLCBNRGVmaW5pdGlvbiogbGhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlvbiogcmhzKSB7Cisr ICBMTXVsSSogbGlyID0gbmV3IChhbGxvYygpKSBMTXVsSTsKKysgIGlmIChtdWwtPmZhbGxpYmxl KCkpIHsKKysgICAgYXNzaWduU25hcHNob3QobGlyLCBtdWwtPmJhaWxvdXRLaW5kKCkpOworKyAg fQorKyAgaWYgKG11bC0+Y2FuQmVOZWdhdGl2ZVplcm8oKSAmJiAhcmhzLT5pc0NvbnN0YW50KCkp IHsKKysgICAgbGlyLT5zZXRPcGVyYW5kKDAsIHVzZVJlZ2lzdGVyKGxocykpOworKyAgICBsaXIt PnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0ZXIocmhzKSk7CisrICAgIGRlZmluZShsaXIsIG11bCk7 CisrICAgIHJldHVybjsKKysgIH0KKysgIGxvd2VyRm9yQUxVKGxpciwgbXVsLCBsaHMsIHJocyk7 CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyRGl2SShNRGl2KiBkaXYpIHsK KysgIGlmIChkaXYtPnJocygpLT5pc0NvbnN0YW50KCkpIHsKKysgICAgaW50MzJfdCByaHMgPSBk aXYtPnJocygpLT50b0NvbnN0YW50KCktPnRvSW50MzIoKTsKKysgICAgaW50MzJfdCBzaGlmdCA9 IEZsb29yTG9nMih1aW50MzJfdChyaHMpKTsKKysgICAgaWYgKHJocyA+IDAgJiYgMSA8PCBzaGlm dCA9PSByaHMpIHsKKysgICAgICBMRGl2UG93VHdvSSogbGlyID0KKysgICAgICAgICAgbmV3IChh bGxvYygpKSBMRGl2UG93VHdvSSh1c2VSZWdpc3RlcihkaXYtPmxocygpKSwgc2hpZnQpOworKyAg ICAgIGlmIChkaXYtPmZhbGxpYmxlKCkpIHsKKysgICAgICAgIGFzc2lnblNuYXBzaG90KGxpciwg ZGl2LT5iYWlsb3V0S2luZCgpKTsKKysgICAgICB9CisrICAgICAgZGVmaW5lKGxpciwgZGl2KTsK KysgICAgICByZXR1cm47CisrICAgIH0KKysgIH0KKysgIExEaXZJKiBsaXIgPSBuZXcgKGFsbG9j KCkpCisrICAgICAgTERpdkkodXNlUmVnaXN0ZXIoZGl2LT5saHMoKSksIHVzZVJlZ2lzdGVyKGRp di0+cmhzKCkpLCB0ZW1wKCkpOworKyAgaWYgKGRpdi0+ZmFsbGlibGUoKSkgeworKyAgICBhc3Np Z25TbmFwc2hvdChsaXIsIGRpdi0+YmFpbG91dEtpbmQoKSk7CisrICB9CisrICBkZWZpbmUobGly LCBkaXYpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckRpdkk2NChNRGl2 KiBkaXYpIHsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMRGl2T3JNb2RJ NjQodXNlUmVnaXN0ZXIoZGl2LT5saHMoKSksIHVzZVJlZ2lzdGVyKGRpdi0+cmhzKCkpKTsKKysg IGRlZmluZUludDY0KGxpciwgZGl2KTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6 bG93ZXJNb2RJKE1Nb2QqIG1vZCkgeworKyAgaWYgKG1vZC0+cmhzKCktPmlzQ29uc3RhbnQoKSkg eworKyAgICBpbnQzMl90IHJocyA9IG1vZC0+cmhzKCktPnRvQ29uc3RhbnQoKS0+dG9JbnQzMigp OworKyAgICBpbnQzMl90IHNoaWZ0ID0gRmxvb3JMb2cyKHVpbnQzMl90KHJocykpOworKyAgICBp ZiAocmhzID4gMCAmJiAxIDw8IHNoaWZ0ID09IHJocykgeworKyAgICAgIExNb2RQb3dUd29JKiBs aXIgPQorKyAgICAgICAgICBuZXcgKGFsbG9jKCkpIExNb2RQb3dUd29JKHVzZVJlZ2lzdGVyKG1v ZC0+bGhzKCkpLCBzaGlmdCk7CisrICAgICAgaWYgKG1vZC0+ZmFsbGlibGUoKSkgeworKyAgICAg ICAgYXNzaWduU25hcHNob3QobGlyLCBtb2QtPmJhaWxvdXRLaW5kKCkpOworKyAgICAgIH0KKysg ICAgICBkZWZpbmUobGlyLCBtb2QpOworKyAgICAgIHJldHVybjsKKysgICAgfSBlbHNlIGlmIChz aGlmdCA8IDMxICYmICgxIDw8IChzaGlmdCArIDEpKSAtIDEgPT0gcmhzKSB7CisrICAgICAgTE1v ZE1hc2tJKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgICAgIExNb2RNYXNrSSh1c2VSZWdp c3Rlcihtb2QtPmxocygpKSwgdGVtcCgpLCB0ZW1wKCksIHNoaWZ0ICsgMSk7CisrICAgICAgaWYg KG1vZC0+ZmFsbGlibGUoKSkgeworKyAgICAgICAgYXNzaWduU25hcHNob3QobGlyLCBtb2QtPmJh aWxvdXRLaW5kKCkpOworKyAgICAgIH0KKysgICAgICBkZWZpbmUobGlyLCBtb2QpOworKyAgICAg IHJldHVybjsKKysgICAgfQorKyAgfQorKyAgYXV0byogbGlyID0KKysgICAgICBuZXcgKGFsbG9j KCkpIExNb2RJKHVzZVJlZ2lzdGVyKG1vZC0+bGhzKCkpLCB1c2VSZWdpc3Rlcihtb2QtPnJocygp KSk7CisrICBpZiAobW9kLT5mYWxsaWJsZSgpKSB7CisrICAgIGFzc2lnblNuYXBzaG90KGxpciwg bW9kLT5iYWlsb3V0S2luZCgpKTsKKysgIH0KKysgIGRlZmluZShsaXIsIG1vZCk7CisrfQorKwor K3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyTW9kSTY0KE1Nb2QqIG1vZCkgeworKyAgYXV0 byogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgIExEaXZPck1vZEk2NCh1c2VSZWdpc3Rlciht b2QtPmxocygpKSwgdXNlUmVnaXN0ZXIobW9kLT5yaHMoKSkpOworKyAgZGVmaW5lSW50NjQobGly LCBtb2QpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVEaXYoTURpdiog ZGl2KSB7CisrICBNRGVmaW5pdGlvbiogbGhzID0gZGl2LT5nZXRPcGVyYW5kKDApOworKyAgTURl ZmluaXRpb24qIHJocyA9IGRpdi0+Z2V0T3BlcmFuZCgxKTsKKysgIExVRGl2T3JNb2QqIGxpciA9 IG5ldyAoYWxsb2MoKSkgTFVEaXZPck1vZDsKKysgIC8vIHVzZVJlZ2lzdGVyQXRTdGFydDogQ29k ZUdlbmVyYXRvci1wcGM2NCdzIHZpc2l0VURpdk9yTW9kIHplcm8tZXh0ZW5kcworKyAgLy8gbGhz L3JocyBpbnRvIHRoZWlyIG93biBzbG90cyBpbiBwbGFjZSBiZWZvcmUgdGhlIDMyLWJpdCBkaXZ3 dSwgc28gdGhlCisrICAvLyBpbnB1dHMgbXVzdCBub3QgYmUgcmVxdWlyZWQgbGl2ZSBhZnRlciB0 aGUgTElSIG9wIGJlZ2lucy4KKysgIGxpci0+c2V0T3BlcmFuZCgwLCB1c2VSZWdpc3RlckF0U3Rh cnQobGhzKSk7CisrICBsaXItPnNldE9wZXJhbmQoMSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KHJocykp OworKyAgaWYgKGRpdi0+ZmFsbGlibGUoKSkgeworKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIGRp di0+YmFpbG91dEtpbmQoKSk7CisrICB9CisrICBkZWZpbmUobGlyLCBkaXYpOworK30KKysKKyt2 b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVEaXZJNjQoTURpdiogZGl2KSB7CisrICBhdXRv KiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTFVEaXZPck1vZEk2NCh1c2VSZWdpc3Rlcihk aXYtPmxocygpKSwgdXNlUmVnaXN0ZXIoZGl2LT5yaHMoKSkpOworKyAgZGVmaW5lSW50NjQobGly LCBkaXYpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVNb2QoTU1vZCog bW9kKSB7CisrICBNRGVmaW5pdGlvbiogbGhzID0gbW9kLT5nZXRPcGVyYW5kKDApOworKyAgTURl ZmluaXRpb24qIHJocyA9IG1vZC0+Z2V0T3BlcmFuZCgxKTsKKysgIExVRGl2T3JNb2QqIGxpciA9 IG5ldyAoYWxsb2MoKSkgTFVEaXZPck1vZDsKKysgIC8vIFNlZSBsb3dlclVEaXYgYWJvdmUgZm9y IHdoeSB1c2VSZWdpc3RlckF0U3RhcnQgaXMgcmVxdWlyZWQgaGVyZS4KKysgIGxpci0+c2V0T3Bl cmFuZCgwLCB1c2VSZWdpc3RlckF0U3RhcnQobGhzKSk7CisrICBsaXItPnNldE9wZXJhbmQoMSwg dXNlUmVnaXN0ZXJBdFN0YXJ0KHJocykpOworKyAgaWYgKG1vZC0+ZmFsbGlibGUoKSkgeworKyAg ICBhc3NpZ25TbmFwc2hvdChsaXIsIG1vZC0+YmFpbG91dEtpbmQoKSk7CisrICB9CisrICBkZWZp bmUobGlyLCBtb2QpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclVNb2RJ NjQoTU1vZCogbW9kKSB7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTFVE aXZPck1vZEk2NCh1c2VSZWdpc3Rlcihtb2QtPmxocygpKSwgdXNlUmVnaXN0ZXIobW9kLT5yaHMo KSkpOworKyAgZGVmaW5lSW50NjQobGlyLCBtb2QpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRv clBQQzY0Ojpsb3dlclVyc2hEKE1VcnNoKiBtaXIpIHsKKysgIE1EZWZpbml0aW9uKiBsaHMgPSBt aXItPmxocygpOworKyAgTURlZmluaXRpb24qIHJocyA9IG1pci0+cmhzKCk7CisrICBNT1pfQVNT RVJUKGxocy0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKTsKKysgIE1PWl9BU1NFUlQocmhzLT50 eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBM VXJzaEQodXNlUmVnaXN0ZXJBdFN0YXJ0KGxocyksCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1c2VSZWdpc3Rlck9yQ29uc3RhbnRBdFN0YXJ0KHJocyksIHRlbXAoKSk7Cisr ICBkZWZpbmUobGlyLCBtaXIpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dl clBvd09mVHdvSShNUG93KiBtaXIpIHsKKysgIGludDMyX3QgYmFzZSA9IG1pci0+aW5wdXQoKS0+ dG9Db25zdGFudCgpLT50b0ludDMyKCk7CisrICBNRGVmaW5pdGlvbiogcG93ZXIgPSBtaXItPnBv d2VyKCk7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExQb3dPZlR3b0kodXNlUmVnaXN0 ZXIocG93ZXIpLCBiYXNlKTsKKysgIGFzc2lnblNuYXBzaG90KGxpciwgbWlyLT5iYWlsb3V0S2lu ZCgpKTsKKysgIGRlZmluZShsaXIsIG1pcik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBD NjQ6Omxvd2VyQmlnSW50UHRyRGl2KE1CaWdJbnRQdHJEaXYqIGlucykgeworKyAgYXV0byogbGly ID0gbmV3IChhbGxvYygpKQorKyAgICAgIExCaWdJbnRQdHJEaXYodXNlUmVnaXN0ZXIoaW5zLT5s aHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+cmhzKCkpLAorKyAgICAgICAgICAgICAgICAgICAgTERl ZmluaXRpb246OkJvZ3VzVGVtcCgpLCBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCkpOworKyAgYXNz aWduU25hcHNob3QobGlyLCBpbnMtPmJhaWxvdXRLaW5kKCkpOworKyAgZGVmaW5lKGxpciwgaW5z KTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQdHJNb2QoTUJp Z0ludFB0ck1vZCogaW5zKSB7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAg TEJpZ0ludFB0ck1vZCh1c2VSZWdpc3RlcihpbnMtPmxocygpKSwgdXNlUmVnaXN0ZXIoaW5zLT5y aHMoKSksIHRlbXAoKSwKKysgICAgICAgICAgICAgICAgICAgIExEZWZpbml0aW9uOjpCb2d1c1Rl bXAoKSk7CisrICBpZiAoaW5zLT5jYW5CZURpdmlkZUJ5WmVybygpKSB7CisrICAgIGFzc2lnblNu YXBzaG90KGxpciwgaW5zLT5iYWlsb3V0S2luZCgpKTsKKysgIH0KKysgIGRlZmluZShsaXIsIGlu cyk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyQmlnSW50UHRyTHNoKE1C aWdJbnRQdHJMc2gqIGlucykgeworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMQmlnSW50 UHRyTHNoKAorKyAgICAgIHVzZVJlZ2lzdGVyKGlucy0+bGhzKCkpLCB1c2VSZWdpc3RlcihpbnMt PnJocygpKSwgdGVtcCgpLCB0ZW1wKCkpOworKyAgYXNzaWduU25hcHNob3QobGlyLCBpbnMtPmJh aWxvdXRLaW5kKCkpOworKyAgZGVmaW5lKGxpciwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5l cmF0b3JQUEM2NDo6bG93ZXJCaWdJbnRQdHJSc2goTUJpZ0ludFB0clJzaCogaW5zKSB7CisrICBh dXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExCaWdJbnRQdHJSc2goCisrICAgICAgdXNlUmVnaXN0 ZXIoaW5zLT5saHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+cmhzKCkpLCB0ZW1wKCksIHRlbXAoKSk7 CisrICBhc3NpZ25TbmFwc2hvdChsaXIsIGlucy0+YmFpbG91dEtpbmQoKSk7CisrICBkZWZpbmUo bGlyLCBpbnMpOworK30KKysKKyt2b2lkIExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlclRydW5jYXRl RFRvSW50MzIoTVRydW5jYXRlVG9JbnQzMiogaW5zKSB7CisrICBNRGVmaW5pdGlvbiogb3BkID0g aW5zLT5pbnB1dCgpOworKyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3Vi bGUpOworKyAgZGVmaW5lKG5ldyAoYWxsb2MoKSkgTFRydW5jYXRlRFRvSW50MzIodXNlUmVnaXN0 ZXIob3BkKSwgdGVtcERvdWJsZSgpKSwgaW5zKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3JQ UEM2NDo6bG93ZXJUcnVuY2F0ZUZUb0ludDMyKE1UcnVuY2F0ZVRvSW50MzIqIGlucykgeworKyAg TURlZmluaXRpb24qIG9wZCA9IGlucy0+aW5wdXQoKTsKKysgIE1PWl9BU1NFUlQob3BkLT50eXBl KCkgPT0gTUlSVHlwZTo6RmxvYXQzMik7CisrICBkZWZpbmUobmV3IChhbGxvYygpKSBMVHJ1bmNh dGVGVG9JbnQzMih1c2VSZWdpc3RlcihvcGQpLCB0ZW1wRmxvYXQzMigpKSwgaW5zKTsKKyt9Cisr Cisrdm9pZCBMSVJHZW5lcmF0b3JQUEM2NDo6bG93ZXJCdWlsdGluSW50NjRUb0Zsb2F0aW5nUG9p bnQoCisrICAgIE1CdWlsdGluSW50NjRUb0Zsb2F0aW5nUG9pbnQqIGlucykgeworKyAgTU9aX0NS QVNIKCJXZSBkb24ndCB1c2UgaXQgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlIik7CisrfQorKworK3Zv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbVNlbGVjdEkoTVdhc21TZWxlY3QqIHNlbGVj dCkgeworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgIExXYXNtU2VsZWN0KHVz ZVJlZ2lzdGVyQXRTdGFydChzZWxlY3QtPnRydWVFeHByKCkpLAorKyAgICAgICAgICAgICAgICAg IHVzZUFueShzZWxlY3QtPmZhbHNlRXhwcigpKSwgdXNlUmVnaXN0ZXIoc2VsZWN0LT5jb25kRXhw cigpKSk7CisrICBkZWZpbmVSZXVzZUlucHV0KGxpciwgc2VsZWN0LCBMV2FzbVNlbGVjdDo6VHJ1 ZUV4cHJJbmRleCk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbVNl bGVjdEk2NChNV2FzbVNlbGVjdCogc2VsZWN0KSB7CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9j KCkpIExXYXNtU2VsZWN0STY0KAorKyAgICAgIHVzZUludDY0UmVnaXN0ZXJBdFN0YXJ0KHNlbGVj dC0+dHJ1ZUV4cHIoKSksCisrICAgICAgdXNlSW50NjQoc2VsZWN0LT5mYWxzZUV4cHIoKSksIHVz ZVJlZ2lzdGVyKHNlbGVjdC0+Y29uZEV4cHIoKSkpOworKyAgZGVmaW5lSW50NjRSZXVzZUlucHV0 KGxpciwgc2VsZWN0LCBMV2FzbVNlbGVjdEk2NDo6VHJ1ZUV4cHJJbmRleCk7CisrfQorKworK3Zv aWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50MzIoCisr ICAgIE1XYXNtQnVpbHRpblRydW5jYXRlVG9JbnQzMiogaW5zKSB7CisrICBNRGVmaW5pdGlvbiog b3BkID0gaW5zLT5pbnB1dCgpOworKyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBl OjpEb3VibGUgfHwgb3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6RmxvYXQzMik7CisrCisrICBpZiAo b3BkLT50eXBlKCkgPT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgIGRlZmluZShuZXcgKGFsbG9j KCkpIExXYXNtQnVpbHRpblRydW5jYXRlRFRvSW50MzIoCisrICAgICAgICAgICAgICAgdXNlUmVn aXN0ZXIob3BkKSwgdXNlRml4ZWQoaW5zLT5pbnN0YW5jZSgpLCBJbnN0YW5jZVJlZyksCisrICAg ICAgICAgICAgICAgTERlZmluaXRpb246OkJvZ3VzVGVtcCgpKSwKKysgICAgICAgICAgIGlucyk7 CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGRlZmluZShuZXcgKGFsbG9jKCkpIExXYXNtQnVp bHRpblRydW5jYXRlRlRvSW50MzIoCisrICAgICAgICAgICAgIHVzZVJlZ2lzdGVyKG9wZCksIHVz ZUZpeGVkKGlucy0+aW5zdGFuY2UoKSwgSW5zdGFuY2VSZWcpLAorKyAgICAgICAgICAgICBMRGVm aW5pdGlvbjo6Qm9ndXNUZW1wKCkpLAorKyAgICAgICAgIGlucyk7CisrfQorKworK3ZvaWQgTElS R2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbUJ1aWx0aW5UcnVuY2F0ZVRvSW50NjQoCisrICAgIE1X YXNtQnVpbHRpblRydW5jYXRlVG9JbnQ2NCogaW5zKSB7CisrICBNT1pfQ1JBU0goIldlIGRvbid0 IHVzZSBpdCBmb3IgdGhpcyBhcmNoaXRlY3R1cmUiKTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0 b3JQUEM2NDo6bG93ZXJXYXNtQnVpbHRpbkRpdkk2NChNV2FzbUJ1aWx0aW5EaXZJNjQqIGRpdikg eworKyAgTU9aX0NSQVNIKCJXZSBkb24ndCB1c2UgcnVudGltZSBkaXYgZm9yIHRoaXMgYXJjaGl0 ZWN0dXJlIik7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6Omxvd2VyV2FzbUJ1aWx0 aW5Nb2RJNjQoTVdhc21CdWlsdGluTW9kSTY0KiBtb2QpIHsKKysgIE1PWl9DUkFTSCgiV2UgZG9u J3QgdXNlIHJ1bnRpbWUgbW9kIGZvciB0aGlzIGFyY2hpdGVjdHVyZSIpOworK30KKysKKyt2b2lk IExJUkdlbmVyYXRvclBQQzY0Ojpsb3dlckF0b21pY0xvYWQ2NChNTG9hZFVuYm94ZWRTY2FsYXIq IGlucykgeworKyAgY29uc3QgTFVzZSBlbGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVu dHMoKSk7CisrICBjb25zdCBMQWxsb2NhdGlvbiBpbmRleCA9CisrICAgICAgdXNlUmVnaXN0ZXJP ckluZGV4Q29uc3RhbnQoaW5zLT5pbmRleCgpLCBpbnMtPnN0b3JhZ2VUeXBlKCkpOworKyAgYXV0 byogbGlyID0gbmV3IChhbGxvYygpKSBMQXRvbWljTG9hZDY0KGVsZW1lbnRzLCBpbmRleCk7Cisr ICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yUFBDNjQ6 Omxvd2VyQXRvbWljU3RvcmU2NChNU3RvcmVVbmJveGVkU2NhbGFyKiBpbnMpIHsKKysgIExVc2Ug ZWxlbWVudHMgPSB1c2VSZWdpc3RlcihpbnMtPmVsZW1lbnRzKCkpOworKyAgTEFsbG9jYXRpb24g aW5kZXggPQorKyAgICAgIHVzZVJlZ2lzdGVyT3JJbmRleENvbnN0YW50KGlucy0+aW5kZXgoKSwg aW5zLT53cml0ZVR5cGUoKSk7CisrICBMSW50NjRBbGxvY2F0aW9uIHZhbHVlID0gdXNlSW50NjRS ZWdpc3RlcihpbnMtPnZhbHVlKCkpOworKyAgYWRkKG5ldyAoYWxsb2MoKSkgTEF0b21pY1N0b3Jl NjQoZWxlbWVudHMsIGluZGV4LCB2YWx1ZSksIGlucyk7CisrfQorKworKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8v IExJUkdlbmVyYXRvcjo6dmlzaXQqIGltcGxlbWVudGF0aW9ucworKworK3ZvaWQgTElSR2VuZXJh dG9yOjp2aXNpdEJveChNQm94KiBib3gpIHsKKysgIE1EZWZpbml0aW9uKiBvcGQgPSBib3gtPmdl dE9wZXJhbmQoMCk7CisrCisrICBpZiAob3BkLT5pc0NvbnN0YW50KCkgJiYgYm94LT5jYW5FbWl0 QXRVc2VzKCkpIHsKKysgICAgZW1pdEF0VXNlcyhib3gpOworKyAgICByZXR1cm47CisrICB9Cisr CisrICBpZiAob3BkLT5pc0NvbnN0YW50KCkpIHsKKysgICAgZGVmaW5lKG5ldyAoYWxsb2MoKSkg TFZhbHVlKG9wZC0+dG9Db25zdGFudCgpLT50b0pTVmFsdWUoKSksIGJveCwKKysgICAgICAgICAg IExEZWZpbml0aW9uKExEZWZpbml0aW9uOjpCT1gpKTsKKysgIH0gZWxzZSB7CisrICAgIExCb3gq IGlucyA9IG5ldyAoYWxsb2MoKSkgTEJveCh1c2VSZWdpc3RlckF0U3RhcnQob3BkKSwgb3BkLT50 eXBlKCkpOworKyAgICBkZWZpbmUoaW5zLCBib3gsIExEZWZpbml0aW9uKExEZWZpbml0aW9uOjpC T1gpKTsKKysgIH0KKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0VW5ib3goTVVuYm94 KiB1bmJveCkgeworKyAgTURlZmluaXRpb24qIGJveCA9IHVuYm94LT5nZXRPcGVyYW5kKDApOwor KyAgTU9aX0FTU0VSVChib3gtPnR5cGUoKSA9PSBNSVJUeXBlOjpWYWx1ZSk7CisrCisrICBMSW5z dHJ1Y3Rpb25IZWxwZXI8MSwgQk9YX1BJRUNFUywgMD4qIGxpcjsKKysgIGlmIChJc0Zsb2F0aW5n UG9pbnRUeXBlKHVuYm94LT50eXBlKCkpKSB7CisrICAgIE1PWl9BU1NFUlQodW5ib3gtPnR5cGUo KSA9PSBNSVJUeXBlOjpEb3VibGUpOworKyAgICBsaXIgPSBuZXcgKGFsbG9jKCkpIExVbmJveEZs b2F0aW5nUG9pbnQodXNlQm94QXRTdGFydChib3gpKTsKKysgIH0gZWxzZSBpZiAodW5ib3gtPmZh bGxpYmxlKCkpIHsKKysgICAgbGlyID0gbmV3IChhbGxvYygpKSBMVW5ib3godXNlUmVnaXN0ZXJB dFN0YXJ0KGJveCkpOworKyAgfSBlbHNlIHsKKysgICAgbGlyID0gbmV3IChhbGxvYygpKSBMVW5i b3godXNlQXRTdGFydChib3gpKTsKKysgIH0KKysKKysgIGlmICh1bmJveC0+ZmFsbGlibGUoKSkg eworKyAgICBhc3NpZ25TbmFwc2hvdChsaXIsIHVuYm94LT5iYWlsb3V0S2luZCgpKTsKKysgIH0K KysKKysgIGRlZmluZShsaXIsIHVuYm94KTsKKyt9CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZp c2l0Q29weVNpZ24oTUNvcHlTaWduKiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBsaHMgPSBpbnMt PmxocygpOworKyAgTURlZmluaXRpb24qIHJocyA9IGlucy0+cmhzKCk7CisrCisrICBNT1pfQVNT RVJUKElzRmxvYXRpbmdQb2ludFR5cGUobGhzLT50eXBlKCkpKTsKKysgIE1PWl9BU1NFUlQobGhz LT50eXBlKCkgPT0gcmhzLT50eXBlKCkpOworKyAgTU9aX0FTU0VSVChsaHMtPnR5cGUoKSA9PSBp bnMtPnR5cGUoKSk7CisrCisrICBMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGxpcjsKKysg IGlmIChsaHMtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgbGlyID0gbmV3IChh bGxvYygpKSBMQ29weVNpZ25EKCk7CisrICB9IGVsc2UgeworKyAgICBsaXIgPSBuZXcgKGFsbG9j KCkpIExDb3B5U2lnbkYoKTsKKysgIH0KKysKKysgIGxvd2VyRm9yRlBVKGxpciwgaW5zLCBsaHMs IHJocyk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdEV4dGVuZEludDMyVG9JbnQ2 NChNRXh0ZW5kSW50MzJUb0ludDY0KiBpbnMpIHsKKysgIGRlZmluZUludDY0KAorKyAgICAgIG5l dyAoYWxsb2MoKSkgTEV4dGVuZEludDMyVG9JbnQ2NCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5p bnB1dCgpKSksIGlucyk7CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFNpZ25FeHRl bmRJbnQ2NChNU2lnbkV4dGVuZEludDY0KiBpbnMpIHsKKysgIGRlZmluZUludDY0KG5ldyAoYWxs b2MoKSkKKysgICAgICAgICAgICAgICAgICBMU2lnbkV4dGVuZEludDY0KHVzZUludDY0UmVnaXN0 ZXJBdFN0YXJ0KGlucy0+aW5wdXQoKSkpLAorKyAgICAgICAgICAgICAgaW5zKTsKKyt9CisrCisr dm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0SW50NjRUb0Zsb2F0aW5nUG9pbnQoTUludDY0VG9GbG9h dGluZ1BvaW50KiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBvcGQgPSBpbnMtPmlucHV0KCk7Cisr ICBNT1pfQVNTRVJUKG9wZC0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKKysgIE1PWl9BU1NF UlQoSXNGbG9hdGluZ1BvaW50VHlwZShpbnMtPnR5cGUoKSkpOworKyAgZGVmaW5lKG5ldyAoYWxs b2MoKSkgTEludDY0VG9GbG9hdGluZ1BvaW50KHVzZUludDY0UmVnaXN0ZXIob3BkKSksIGlucyk7 CisrfQorKworK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFN1YnN0cihNU3Vic3RyKiBpbnMpIHsK KysgIExTdWJzdHIqIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMU3Vic3RyKHVzZVJlZ2lz dGVyKGlucy0+c3RyaW5nKCkpLCB1c2VSZWdpc3RlcihpbnMtPmJlZ2luKCkpLAorKyAgICAgICAg ICAgICAgdXNlUmVnaXN0ZXIoaW5zLT5sZW5ndGgoKSksIHRlbXAoKSwgdGVtcCgpLCB0ZW1wKCkp OworKyAgZGVmaW5lKGxpciwgaW5zKTsKKysgIGFzc2lnblNhZmVwb2ludChsaXIsIGlucyk7Cisr fQorKworK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFJldHVybkltcGwoTURlZmluaXRpb24qIG9w ZCwgYm9vbCBpc0dlbmVyYXRvcikgeworKyAgTU9aX0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJU eXBlOjpWYWx1ZSk7CisrICBMUmV0dXJuKiBpbnMgPSBuZXcgKGFsbG9jKCkpIExSZXR1cm4oaXNH ZW5lcmF0b3IpOworKyAgaW5zLT5zZXRPcGVyYW5kKDAsIHVzZUZpeGVkKG9wZCwgSlNSZXR1cm5S ZWcpKTsKKysgIGFkZChpbnMpOworK30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRDb21wYXJl RXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCgKKysgICAgTUNvbXBhcmVFeGNoYW5nZVR5cGVkQXJy YXlFbGVtZW50KiBpbnMpIHsKKysgIE1PWl9BU1NFUlQoIVNjYWxhcjo6aXNGbG9hdGluZ1R5cGUo aW5zLT5hcnJheVR5cGUoKSkpOworKyAgTU9aX0FTU0VSVChpbnMtPmVsZW1lbnRzKCktPnR5cGUo KSA9PSBNSVJUeXBlOjpFbGVtZW50cyk7CisrICBNT1pfQVNTRVJUKGlucy0+aW5kZXgoKS0+dHlw ZSgpID09IE1JUlR5cGU6OkludFB0cik7CisrCisrICBjb25zdCBMVXNlIGVsZW1lbnRzID0gdXNl UmVnaXN0ZXIoaW5zLT5lbGVtZW50cygpKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uIGluZGV4ID0K KysgICAgICB1c2VSZWdpc3Rlck9ySW5kZXhDb25zdGFudChpbnMtPmluZGV4KCksIGlucy0+YXJy YXlUeXBlKCkpOworKworKyAgaWYgKFNjYWxhcjo6aXNCaWdJbnRUeXBlKGlucy0+YXJyYXlUeXBl KCkpKSB7CisrICAgIExJbnQ2NEFsbG9jYXRpb24gb2xkdmFsID0gdXNlSW50NjRSZWdpc3Rlcihp bnMtPm9sZHZhbCgpKTsKKysgICAgTEludDY0QWxsb2NhdGlvbiBuZXd2YWwgPSB1c2VJbnQ2NFJl Z2lzdGVyKGlucy0+bmV3dmFsKCkpOworKworKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkp CisrICAgICAgICBMQ29tcGFyZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NChlbGVtZW50cywg aW5kZXgsIG9sZHZhbCwgbmV3dmFsKTsKKysgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOworKyAg ICByZXR1cm47CisrICB9CisrCisrICBjb25zdCBMQWxsb2NhdGlvbiBvbGR2YWwgPSB1c2VSZWdp c3RlcihpbnMtPm9sZHZhbCgpKTsKKysgIGNvbnN0IExBbGxvY2F0aW9uIG5ld3ZhbCA9IHVzZVJl Z2lzdGVyKGlucy0+bmV3dmFsKCkpOworKworKyAgTERlZmluaXRpb24gb3V0VGVtcCA9IExEZWZp bml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0 aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlv bjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpC b2d1c1RlbXAoKTsKKysKKysgIGlmIChpbnMtPmFycmF5VHlwZSgpID09IFNjYWxhcjo6VWludDMy ICYmIElzRmxvYXRpbmdQb2ludFR5cGUoaW5zLT50eXBlKCkpKSB7CisrICAgIG91dFRlbXAgPSB0 ZW1wKCk7CisrICB9CisrCisrICBpZiAoU2NhbGFyOjpieXRlU2l6ZShpbnMtPmFycmF5VHlwZSgp KSA8IDQpIHsKKysgICAgLy8gUFBDNjQgc3ViLXdvcmQgQ0FTIHVzZXMgbGJhcngvbGhhcnggKyBz dGJjeC4vc3RoY3guIChQT1dFUjcrKTsgb25seQorKyAgICAvLyB2YWx1ZVRlbXAgaXMgbmVlZGVk LCB0byBob2xkIHRoZSBleHRzYi9leHRzaC1jYW5vbmljYWxpc2VkIG9sZHZhbAorKyAgICAvLyBm b3IgdGhlIDMyLWJpdCBjbXB3LiBvZmZzZXRUZW1wL21hc2tUZW1wIGFyZSB1bnVzZWQgKG5vIHJv dW5kLWRvd24KKysgICAgLy8gKyBiaXQtaXNvbGF0ZSBkYW5jZSksIGFuZCByZW1haW4gQm9ndXNU ZW1wLgorKyAgICB2YWx1ZVRlbXAgPSB0ZW1wKCk7CisrICB9CisrCisrICBMQ29tcGFyZUV4Y2hh bmdlVHlwZWRBcnJheUVsZW1lbnQqIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMQ29tcGFy ZUV4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQoZWxlbWVudHMsIGluZGV4LCBvbGR2YWwsIG5ld3Zh bCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0VGVtcCwgdmFs dWVUZW1wLCBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXNrVGVtcCk7CisrCisrICBkZWZpbmUobGlyLCBpbnMpOworK30KKysKKyt2b2lkIExJ UkdlbmVyYXRvcjo6dmlzaXRBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAorKyAgICBN QXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCogaW5zKSB7CisrICBNT1pfQVNTRVJUKGlu cy0+ZWxlbWVudHMoKS0+dHlwZSgpID09IE1JUlR5cGU6OkVsZW1lbnRzKTsKKysgIE1PWl9BU1NF UlQoaW5zLT5pbmRleCgpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50UHRyKTsKKysKKysgIGNvbnN0 IExVc2UgZWxlbWVudHMgPSB1c2VSZWdpc3RlcihpbnMtPmVsZW1lbnRzKCkpOworKyAgY29uc3Qg TEFsbG9jYXRpb24gaW5kZXggPQorKyAgICAgIHVzZVJlZ2lzdGVyT3JJbmRleENvbnN0YW50KGlu cy0+aW5kZXgoKSwgaW5zLT5hcnJheVR5cGUoKSk7CisrCisrICBpZiAoU2NhbGFyOjppc0JpZ0lu dFR5cGUoaW5zLT5hcnJheVR5cGUoKSkpIHsKKysgICAgTEludDY0QWxsb2NhdGlvbiB2YWx1ZSA9 IHVzZUludDY0UmVnaXN0ZXIoaW5zLT52YWx1ZSgpKTsKKysKKysgICAgYXV0byogbGlyID0gbmV3 IChhbGxvYygpKQorKyAgICAgICAgTEF0b21pY0V4Y2hhbmdlVHlwZWRBcnJheUVsZW1lbnQ2NChl bGVtZW50cywgaW5kZXgsIHZhbHVlKTsKKysgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOworKyAg ICByZXR1cm47CisrICB9CisrCisrICBNT1pfQVNTRVJUKGlucy0+YXJyYXlUeXBlKCkgPD0gU2Nh bGFyOjpVaW50MzIpOworKworKyAgY29uc3QgTEFsbG9jYXRpb24gdmFsdWUgPSB1c2VSZWdpc3Rl cihpbnMtPnZhbHVlKCkpOworKworKyAgTERlZmluaXRpb24gb3V0VGVtcCA9IExEZWZpbml0aW9u OjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpC b2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9n dXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1Rl bXAoKTsKKysKKysgIGlmIChpbnMtPmFycmF5VHlwZSgpID09IFNjYWxhcjo6VWludDMyKSB7Cisr ICAgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6RG91YmxlKTsKKysgICAgb3V0 VGVtcCA9IHRlbXAoKTsKKysgIH0KKysKKysgIC8vIFBQQzY0IHN1Yi13b3JkIGF0b21pYyBleGNo YW5nZSB1c2VzIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LiBkaXJlY3RseQorKyAgLy8gKFBP V0VSNyspOyB2YWx1ZVRlbXAvb2Zmc2V0VGVtcC9tYXNrVGVtcCBhcmUgbmV2ZXIgcmVhZCBieSB0 aGUKKysgIC8vIGltcGxlbWVudGF0aW9uIChzZWUgTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwJ3Mg QXRvbWljRXhjaGFuZ2UgdGVtcGxhdGUpLgorKyAgLy8gTGVhdmUgdGhlbSBhcyBCb2d1c1RlbXAu CisrCisrICBMQXRvbWljRXhjaGFuZ2VUeXBlZEFycmF5RWxlbWVudCogbGlyID0KKysgICAgICBu ZXcgKGFsbG9jKCkpIExBdG9taWNFeGNoYW5nZVR5cGVkQXJyYXlFbGVtZW50KAorKyAgICAgICAg ICBlbGVtZW50cywgaW5kZXgsIHZhbHVlLCBvdXRUZW1wLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAs IG1hc2tUZW1wKTsKKysKKysgIGRlZmluZShsaXIsIGlucyk7CisrfQorKworK3ZvaWQgTElSR2Vu ZXJhdG9yOjp2aXNpdEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3AoCisrICAgIE1BdG9taWNU eXBlZEFycmF5RWxlbWVudEJpbm9wKiBpbnMpIHsKKysgIE1PWl9BU1NFUlQoaW5zLT5hcnJheVR5 cGUoKSAhPSBTY2FsYXI6OlVpbnQ4Q2xhbXBlZCk7CisrICBNT1pfQVNTRVJUKCFTY2FsYXI6Omlz RmxvYXRpbmdUeXBlKGlucy0+YXJyYXlUeXBlKCkpKTsKKysgIE1PWl9BU1NFUlQoaW5zLT5lbGVt ZW50cygpLT50eXBlKCkgPT0gTUlSVHlwZTo6RWxlbWVudHMpOworKyAgTU9aX0FTU0VSVChpbnMt PmluZGV4KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnRQdHIpOworKworKyAgY29uc3QgTFVzZSBl bGVtZW50cyA9IHVzZVJlZ2lzdGVyKGlucy0+ZWxlbWVudHMoKSk7CisrICBjb25zdCBMQWxsb2Nh dGlvbiBpbmRleCA9CisrICAgICAgdXNlUmVnaXN0ZXJPckluZGV4Q29uc3RhbnQoaW5zLT5pbmRl eCgpLCBpbnMtPmFycmF5VHlwZSgpKTsKKysKKysgIGlmIChTY2FsYXI6OmlzQmlnSW50VHlwZShp bnMtPmFycmF5VHlwZSgpKSkgeworKyAgICBMSW50NjRBbGxvY2F0aW9uIHZhbHVlID0gdXNlSW50 NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkpOworKyAgICBMSW50NjREZWZpbml0aW9uIHRlbXAgPSB0 ZW1wSW50NjQoKTsKKysKKysgICAgaWYgKGlucy0+aXNGb3JFZmZlY3QoKSkgeworKyAgICAgIGF1 dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JF ZmZlY3Q2NCgKKysgICAgICAgICAgZWxlbWVudHMsIGluZGV4LCB2YWx1ZSwgdGVtcCk7CisrICAg ICAgYWRkKGxpciwgaW5zKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgYXV0byog bGlyID0gbmV3IChhbGxvYygpKQorKyAgICAgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlu b3A2NChlbGVtZW50cywgaW5kZXgsIHZhbHVlLCB0ZW1wKTsKKysgICAgZGVmaW5lSW50NjQobGly LCBpbnMpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBMQWxsb2NhdGlvbiB2YWx1ZSA9IHVz ZVJlZ2lzdGVyKGlucy0+dmFsdWUoKSk7CisrICBMRGVmaW5pdGlvbiB2YWx1ZVRlbXAgPSBMRGVm aW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBvZmZzZXRUZW1wID0gTERlZmlu aXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gbWFza1RlbXAgPSBMRGVmaW5pdGlv bjo6Qm9ndXNUZW1wKCk7CisrCisrICAvLyBQUEM2NCBzdWItd29yZCBhdG9taWMtYmlub3AgdXNl cyBsYmFyeC9saGFyeCArIHN0YmN4Li9zdGhjeC4gKFBPV0VSNyspLgorKyAgLy8gVGhlIGZldGNo LW9wIHZhcmlhbnQgbmVlZHMgdmFsdWVUZW1wIHRvIGhvbGQgdGhlIHBvc3Qtb3AgdmFsdWUgYmVp bmcKKysgIC8vIGNvbmRpdGlvbi1zdG9yZWQgKE1hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcCdzIEF0 b21pY0ZldGNoT3ApOyB0aGUKKysgIC8vIGZvci1lZmZlY3QgdmFyaWFudCB1c2VzIGFuIGludGVy bmFsIHNjcmF0Y2ggYW5kIG5lZWRzIG5vIHRlbXBzIGF0CisrICAvLyBhbGwuIG9mZnNldFRlbXAv bWFza1RlbXAgYXJlIHVudXNlZCBpbiBlaXRoZXIgcGF0aC4KKysgIGlmIChTY2FsYXI6OmJ5dGVT aXplKGlucy0+YXJyYXlUeXBlKCkpIDwgNCAmJiAhaW5zLT5pc0ZvckVmZmVjdCgpKSB7CisrICAg IHZhbHVlVGVtcCA9IHRlbXAoKTsKKysgIH0KKysKKysgIGlmIChpbnMtPmlzRm9yRWZmZWN0KCkp IHsKKysgICAgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3BGb3JFZmZlY3QqIGxpciA9Cisr ICAgICAgICBuZXcgKGFsbG9jKCkpIExBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wRm9yRWZm ZWN0KAorKyAgICAgICAgICAgIGVsZW1lbnRzLCBpbmRleCwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zm c2V0VGVtcCwgbWFza1RlbXApOworKyAgICBhZGQobGlyLCBpbnMpOworKyAgICByZXR1cm47Cisr ICB9CisrCisrICBMRGVmaW5pdGlvbiBvdXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgp OworKworKyAgaWYgKGlucy0+YXJyYXlUeXBlKCkgPT0gU2NhbGFyOjpVaW50MzIgJiYgSXNGbG9h dGluZ1BvaW50VHlwZShpbnMtPnR5cGUoKSkpIHsKKysgICAgb3V0VGVtcCA9IHRlbXAoKTsKKysg IH0KKysKKysgIExBdG9taWNUeXBlZEFycmF5RWxlbWVudEJpbm9wKiBsaXIgPQorKyAgICAgIG5l dyAoYWxsb2MoKSkgTEF0b21pY1R5cGVkQXJyYXlFbGVtZW50Qmlub3AoCisrICAgICAgICAgIGVs ZW1lbnRzLCBpbmRleCwgdmFsdWUsIG91dFRlbXAsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFz a1RlbXApOworKyAgZGVmaW5lKGxpciwgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZp c2l0QXNtSlNMb2FkSGVhcChNQXNtSlNMb2FkSGVhcCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiog YmFzZSA9IGlucy0+YmFzZSgpOworKyAgTU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlw ZTo6SW50MzIpOworKworKyAgTURlZmluaXRpb24qIGJvdW5kc0NoZWNrTGltaXQgPSBpbnMtPmJv dW5kc0NoZWNrTGltaXQoKTsKKysgIE1PWl9BU1NFUlRfSUYoaW5zLT5uZWVkc0JvdW5kc0NoZWNr KCksCisrICAgICAgICAgICAgICAgIGJvdW5kc0NoZWNrTGltaXQtPnR5cGUoKSA9PSBNSVJUeXBl OjpJbnQzMik7CisrCisrICBMQWxsb2NhdGlvbiBiYXNlQWxsb2MgPSB1c2VSZWdpc3RlckF0U3Rh cnQoYmFzZSk7CisrCisrICBMQWxsb2NhdGlvbiBsaW1pdEFsbG9jID0gaW5zLT5uZWVkc0JvdW5k c0NoZWNrKCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB1c2VSZWdpc3RlckF0 U3RhcnQoYm91bmRzQ2hlY2tMaW1pdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiBMQWxsb2NhdGlvbigpOworKworKyAgTU9aX0FTU0VSVCghaW5zLT5oYXNNZW1vcnlCYXNlKCkp OworKyAgYXV0byogbGlyID0KKysgICAgICBuZXcgKGFsbG9jKCkpIExBc21KU0xvYWRIZWFwKGJh c2VBbGxvYywgbGltaXRBbGxvYywgTEFsbG9jYXRpb24oKSk7CisrICBkZWZpbmUobGlyLCBpbnMp OworK30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRBc21KU1N0b3JlSGVhcChNQXNtSlNTdG9y ZUhlYXAqIGlucykgeworKyAgTURlZmluaXRpb24qIGJhc2UgPSBpbnMtPmJhc2UoKTsKKysgIE1P Wl9BU1NFUlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKTsKKysKKysgIE1EZWZpbml0 aW9uKiBib3VuZHNDaGVja0xpbWl0ID0gaW5zLT5ib3VuZHNDaGVja0xpbWl0KCk7CisrICBNT1pf QVNTRVJUX0lGKGlucy0+bmVlZHNCb3VuZHNDaGVjaygpLAorKyAgICAgICAgICAgICAgICBib3Vu ZHNDaGVja0xpbWl0LT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOworKworKyAgTEFsbG9jYXRp b24gYmFzZUFsbG9jID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGJhc2UpOworKworKyAgTEFsbG9jYXRp b24gbGltaXRBbGxvYyA9IGlucy0+bmVlZHNCb3VuZHNDaGVjaygpCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID8gdXNlUmVnaXN0ZXJBdFN0YXJ0KGJvdW5kc0NoZWNrTGltaXQpCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEFsbG9jYXRpb24oKTsKKysKKysgIE1P Wl9BU1NFUlQoIWlucy0+aGFzTWVtb3J5QmFzZSgpKTsKKysgIGFkZChuZXcgKGFsbG9jKCkpIExB c21KU1N0b3JlSGVhcChiYXNlQWxsb2MsIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnZhbHVlKCkp LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0QWxsb2MsIExBbGxv Y2F0aW9uKCkpLAorKyAgICAgIGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdh c21Mb2FkKE1XYXNtTG9hZCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiogYmFzZSA9IGlucy0+YmFz ZSgpOworKyAgTU9aX0FTU0VSVChiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIgfHwgYmFz ZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDY0KTsKKysKKysgIExBbGxvY2F0aW9uIG1lbW9yeUJh c2UgPQorKyAgICAgIGlucy0+aGFzTWVtb3J5QmFzZSgpID8gTEFsbG9jYXRpb24odXNlUmVnaXN0 ZXJBdFN0YXJ0KGlucy0+bWVtb3J5QmFzZSgpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICA6IExHZW5lcmFsUmVnKEhlYXBSZWcpOworKworKyAgTEFsbG9jYXRpb24gcHRyID0gdXNlUmVn aXN0ZXJBdFN0YXJ0KGJhc2UpOworKworKyAgTERlZmluaXRpb24gcHRyQ29weSA9IExEZWZpbml0 aW9uOjpCb2d1c1RlbXAoKTsKKysgIGlmIChpbnMtPmFjY2VzcygpLm9mZnNldDMyKCkpIHsKKysg ICAgcHRyQ29weSA9IHRlbXBDb3B5KGJhc2UsIDApOworKyAgfQorKworKyAgaWYgKGlucy0+dHlw ZSgpID09IE1JUlR5cGU6OkludDY0KSB7CisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkg TFdhc21Mb2FkSTY0KHB0ciwgbWVtb3J5QmFzZSwgcHRyQ29weSk7CisrICAgIGRlZmluZUludDY0 KGxpciwgaW5zKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgYXV0byogbGlyID0gbmV3IChh bGxvYygpKSBMV2FzbUxvYWQocHRyLCBtZW1vcnlCYXNlLCBwdHJDb3B5KTsKKysgIGRlZmluZShs aXIsIGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZShNV2FzbVN0 b3JlKiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBiYXNlID0gaW5zLT5iYXNlKCk7CisrICBNT1pf QVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQzMiB8fCBiYXNlLT50eXBlKCkgPT0g TUlSVHlwZTo6SW50NjQpOworKworKyAgTURlZmluaXRpb24qIHZhbHVlID0gaW5zLT52YWx1ZSgp OworKyAgTEFsbG9jYXRpb24gbWVtb3J5QmFzZSA9CisrICAgICAgaW5zLT5oYXNNZW1vcnlCYXNl KCkgPyBMQWxsb2NhdGlvbih1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5tZW1vcnlCYXNlKCkpKQor KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7CisrCisr ICBMQWxsb2NhdGlvbiBiYXNlQWxsb2MgPSB1c2VSZWdpc3RlckF0U3RhcnQoYmFzZSk7CisrCisr ICBMRGVmaW5pdGlvbiBwdHJDb3B5ID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgaWYg KGlucy0+YWNjZXNzKCkub2Zmc2V0MzIoKSkgeworKyAgICBwdHJDb3B5ID0gdGVtcENvcHkoYmFz ZSwgMCk7CisrICB9CisrCisrICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJ bnQ2NCkgeworKyAgICBMSW50NjRBbGxvY2F0aW9uIHZhbHVlQWxsb2MgPSB1c2VJbnQ2NFJlZ2lz dGVyQXRTdGFydCh2YWx1ZSk7CisrICAgIGF1dG8qIGxpciA9CisrICAgICAgICBuZXcgKGFsbG9j KCkpIExXYXNtU3RvcmVJNjQoYmFzZUFsbG9jLCB2YWx1ZUFsbG9jLCBtZW1vcnlCYXNlLCBwdHJD b3B5KTsKKysgICAgYWRkKGxpciwgaW5zKTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgTEFs bG9jYXRpb24gdmFsdWVBbGxvYyA9IHVzZVJlZ2lzdGVyQXRTdGFydCh2YWx1ZSk7CisrICBhdXRv KiBsaXIgPQorKyAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21TdG9yZShiYXNlQWxsb2MsIHZhbHVl QWxsb2MsIG1lbW9yeUJhc2UsIHB0ckNvcHkpOworKyAgYWRkKGxpciwgaW5zKTsKKyt9Cisrdm9p ZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVRydW5jYXRlVG9JbnQ2NChNV2FzbVRydW5jYXRlVG9J bnQ2NCogaW5zKSB7CisrICBNRGVmaW5pdGlvbiogb3BkID0gaW5zLT5pbnB1dCgpOworKyAgTU9a X0FTU0VSVChvcGQtPnR5cGUoKSA9PSBNSVJUeXBlOjpEb3VibGUgfHwgb3BkLT50eXBlKCkgPT0g TUlSVHlwZTo6RmxvYXQzMik7CisrCisrICBkZWZpbmVJbnQ2NChuZXcgKGFsbG9jKCkpIExXYXNt VHJ1bmNhdGVUb0ludDY0KHVzZVJlZ2lzdGVyKG9wZCkpLCBpbnMpOworK30KKyt2b2lkIExJUkdl bmVyYXRvcjo6dmlzaXRXYXNtVW5zaWduZWRUb0RvdWJsZShNV2FzbVVuc2lnbmVkVG9Eb3VibGUq IGlucykgeworKyAgTU9aX0FTU0VSVChpbnMtPmlucHV0KCktPnR5cGUoKSA9PSBNSVJUeXBlOjpJ bnQzMik7CisrICBMV2FzbVVpbnQzMlRvRG91YmxlKiBsaXIgPQorKyAgICAgIG5ldyAoYWxsb2Mo KSkgTFdhc21VaW50MzJUb0RvdWJsZSh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7 CisrICBkZWZpbmUobGlyLCBpbnMpOworK30KKyt2b2lkIExJUkdlbmVyYXRvcjo6dmlzaXRXYXNt VW5zaWduZWRUb0Zsb2F0MzIoTVdhc21VbnNpZ25lZFRvRmxvYXQzMiogaW5zKSB7CisrICBNT1pf QVNTRVJUKGlucy0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMyKTsKKysgIExXYXNt VWludDMyVG9GbG9hdDMyKiBsaXIgPQorKyAgICAgIG5ldyAoYWxsb2MoKSkgTFdhc21VaW50MzJU b0Zsb2F0MzIodXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+aW5wdXQoKSkpOworKyAgZGVmaW5lKGxp ciwgaW5zKTsKKyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUNvbXBhcmVFeGNoYW5n ZUhlYXAoTVdhc21Db21wYXJlRXhjaGFuZ2VIZWFwKiBpbnMpIHsKKysgIE1EZWZpbml0aW9uKiBi YXNlID0gaW5zLT5iYXNlKCk7CisrICBNT1pfQVNTRVJUKGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBl OjpJbnQzMiB8fCBiYXNlLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50NjQpOworKyAgTEFsbG9jYXRp b24gbWVtb3J5QmFzZSA9IGlucy0+aGFzTWVtb3J5QmFzZSgpCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID8gTEFsbG9jYXRpb24odXNlUmVnaXN0ZXIoaW5zLT5tZW1vcnlCYXNlKCkp KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IExHZW5lcmFsUmVnKEhlYXBSZWcp OworKworKyAgaWYgKGlucy0+YWNjZXNzKCkudHlwZSgpID09IFNjYWxhcjo6SW50NjQpIHsKKysg ICAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2FzbUNvbXBhcmVFeGNoYW5nZUk2NCgKKysg ICAgICAgIHVzZVJlZ2lzdGVyKGJhc2UpLCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+b2xkVmFsdWUo KSksCisrICAgICAgICB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+bmV3VmFsdWUoKSksIG1lbW9yeUJh c2UpOworKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7CisrICAgIHJldHVybjsKKysgIH0KKysK KysgIExEZWZpbml0aW9uIHZhbHVlVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysg IExEZWZpbml0aW9uIG9mZnNldFRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBM RGVmaW5pdGlvbiBtYXNrVGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysKKysgIC8v IFBQQzY0IHN1Yi13b3JkIHdhc20gQ0FTIHVzZXMgbGJhcngvbGhhcnggKyBzdGJjeC4vc3RoY3gu IChQT1dFUjcrKTsKKysgIC8vIHZhbHVlVGVtcCBob2xkcyB0aGUgZXh0c2IvZXh0c2gtY2Fub25p Y2FsaXNlZCBvbGR2YWwgZm9yIGNtcHcsIHdoaWxlCisrICAvLyBvZmZzZXRUZW1wL21hc2tUZW1w IGFyZSB1bnVzZWQgKG5vIHJvdW5kLWRvd24gKyBiaXQtaXNvbGF0ZSBkYW5jZSkuCisrICBpZiAo aW5zLT5hY2Nlc3MoKS5ieXRlU2l6ZSgpIDwgNCkgeworKyAgICB2YWx1ZVRlbXAgPSB0ZW1wKCk7 CisrICB9CisrCisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgTFdhc21Db21w YXJlRXhjaGFuZ2VIZWFwKHVzZVJlZ2lzdGVyKGJhc2UpLCB1c2VSZWdpc3RlcihpbnMtPm9sZFZh bHVlKCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZWdpc3RlcihpbnMt Pm5ld1ZhbHVlKCkpLCBtZW1vcnlCYXNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKysKKysgIGRlZmluZShsaXIsIGlu cyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNFeGNoYW5nZUhlYXAo TVdhc21BdG9taWNFeGNoYW5nZUhlYXAqIGlucykgeworKyAgTURlZmluaXRpb24qIGJhc2UgPSBp bnMtPmJhc2UoKTsKKysgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMy IHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7CisrICBMQWxsb2NhdGlvbiBtZW1v cnlCYXNlID0gaW5zLT5oYXNNZW1vcnlCYXNlKCkKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBMQWxsb2NhdGlvbih1c2VSZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSkpCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7CisrCisr ICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2NCkgeworKyAgICBhdXRv KiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtQXRvbWljRXhjaGFuZ2VJNjQoCisrICAgICAgICB1 c2VSZWdpc3RlcihiYXNlKSwgdXNlSW50NjRSZWdpc3RlcihpbnMtPnZhbHVlKCkpLCBtZW1vcnlC YXNlKTsKKysgICAgZGVmaW5lSW50NjQobGlyLCBpbnMpOworKyAgICByZXR1cm47CisrICB9Cisr CisrICAvLyBQUEM2NCBzdWItd29yZCB3YXNtIGF0b21pYyBleGNoYW5nZSB1c2VzIGxiYXJ4L2xo YXJ4ICsgc3RiY3guL3N0aGN4LgorKyAgLy8gKFBPV0VSNyspOyB2YWx1ZVRlbXAvb2Zmc2V0VGVt cC9tYXNrVGVtcCBhcmUgbmV2ZXIgcmVhZCBieSB0aGUKKysgIC8vIGltcGxlbWVudGF0aW9uIChz ZWUgTWFjcm9Bc3NlbWJsZXItcHBjNjQuY3BwJ3MgQXRvbWljRXhjaGFuZ2UgdGVtcGxhdGUpLgor KyAgLy8gUGFzcyBCb2d1c1RlbXAgZm9yIGFsbCB0aHJlZS4KKysgIExEZWZpbml0aW9uIHZhbHVl VGVtcCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExEZWZpbml0aW9uIG9mZnNldFRl bXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBtYXNrVGVtcCA9 IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2Mo KSkKKysgICAgICBMV2FzbUF0b21pY0V4Y2hhbmdlSGVhcCh1c2VSZWdpc3RlcihiYXNlKSwgdXNl UmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt ZW1vcnlCYXNlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKysgIGRlZmluZShs aXIsIGlucyk7CisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21BdG9taWNCaW5vcEhl YXAoTVdhc21BdG9taWNCaW5vcEhlYXAqIGlucykgeworKyAgTURlZmluaXRpb24qIGJhc2UgPSBp bnMtPmJhc2UoKTsKKysgIE1PWl9BU1NFUlQoYmFzZS0+dHlwZSgpID09IE1JUlR5cGU6OkludDMy IHx8IGJhc2UtPnR5cGUoKSA9PSBNSVJUeXBlOjpJbnQ2NCk7CisrICBMQWxsb2NhdGlvbiBtZW1v cnlCYXNlID0gaW5zLT5oYXNNZW1vcnlCYXNlKCkKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyBMQWxsb2NhdGlvbih1c2VSZWdpc3RlcihpbnMtPm1lbW9yeUJhc2UoKSkpCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTEdlbmVyYWxSZWcoSGVhcFJlZyk7CisrCisr ICBpZiAoaW5zLT5hY2Nlc3MoKS50eXBlKCkgPT0gU2NhbGFyOjpJbnQ2NCkgeworKyAgICBhdXRv KiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgICBMV2FzbUF0b21pY0Jpbm9wSTY0KHVzZVJl Z2lzdGVyKGJhc2UpLCB1c2VJbnQ2NFJlZ2lzdGVyKGlucy0+dmFsdWUoKSksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1lbW9yeUJhc2UsIHRlbXBJbnQ2NCgpKTsKKysgICAgZGVmaW5l SW50NjQobGlyLCBpbnMpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBMRGVmaW5pdGlvbiB2 YWx1ZVRlbXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBMRGVmaW5pdGlvbiBvZmZz ZXRUZW1wID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgTERlZmluaXRpb24gbWFza1Rl bXAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrCisrICAvLyBQUEM2NCBzdWItd29yZCB3 YXNtIGF0b21pYy1iaW5vcCB1c2VzIGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LgorKyAgLy8g KFBPV0VSNyspLiBUaGUgZmV0Y2gtb3AgdmFyaWFudCBuZWVkcyB2YWx1ZVRlbXAgZm9yIHRoZSBw b3N0LW9wIHZhbHVlCisrICAvLyBiZWluZyBjb25kaXRpb24tc3RvcmVkOyB0aGUgZm9yLWVmZmVj dCB2YXJpYW50IHVzZXMgYW4gaW50ZXJuYWwKKysgIC8vIHNjcmF0Y2ggYW5kIG5lZWRzIG5vIHRl bXBzIGF0IGFsbC4gb2Zmc2V0VGVtcC9tYXNrVGVtcCBhcmUgdW51c2VkCisrICAvLyBpbiBlaXRo ZXIgcGF0aC4KKysgIGlmIChpbnMtPmFjY2VzcygpLmJ5dGVTaXplKCkgPCA0ICYmIGlucy0+aGFz VXNlcygpKSB7CisrICAgIHZhbHVlVGVtcCA9IHRlbXAoKTsKKysgIH0KKysKKysgIGlmICghaW5z LT5oYXNVc2VzKCkpIHsKKysgICAgTFdhc21BdG9taWNCaW5vcEhlYXBGb3JFZmZlY3QqIGxpciA9 IG5ldyAoYWxsb2MoKSkKKysgICAgICAgIExXYXNtQXRvbWljQmlub3BIZWFwRm9yRWZmZWN0KHVz ZVJlZ2lzdGVyKGJhc2UpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dXNlUmVnaXN0ZXIoaW5zLT52YWx1ZSgpKSwgbWVtb3J5QmFzZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXApOwor KyAgICBhZGQobGlyLCBpbnMpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBhdXRvKiBsaXIg PSBuZXcgKGFsbG9jKCkpCisrICAgICAgTFdhc21BdG9taWNCaW5vcEhlYXAodXNlUmVnaXN0ZXIo YmFzZSksIHVzZVJlZ2lzdGVyKGlucy0+dmFsdWUoKSksCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWVtb3J5QmFzZSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7CisrCisr ICBkZWZpbmUobGlyLCBpbnMpOworK30KKysKKysvLyBTSU1EIGxvd2VyaW5nCisrdm9pZCBMSVJH ZW5lcmF0b3I6OnZpc2l0V2FzbVRlcm5hcnlTaW1kMTI4KE1XYXNtVGVybmFyeVNpbWQxMjgqIGlu cykgeworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBNT1pfQVNTRVJUKGlucy0+dHlwZSgp ID09IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgLy8gdXNlUmVnaXN0ZXIgZm9yIHYwL3YxIGFuZCB1 c2VSZWdpc3RlckF0U3RhcnQgb25seSBmb3IgdjIg4oCUIG1hdGNoZXMKKysgIC8vIEFSTTY0J3Mg VjEyOEJpdHNlbGVjdCBwb2xpY3kuIGRlZmluZVJldXNlSW5wdXQgcmVxdWlyZXMgdGhlIHJldXNl ZAorKyAgLy8gaW5wdXQgdG8gYmUgdXNlUmVnaXN0ZXJBdFN0YXJ0IGFuZCB0aGUgb3RoZXJzIHRv IHJlbWFpbiBhbGl2ZQorKyAgLy8gKHVzZVJlZ2lzdGVyKTsgcmV1c2luZyBhbGwgdGhyZWUgcG9s aWNpZXMgYXMgdXNlUmVnaXN0ZXJBdFN0YXJ0CisrICAvLyB0cmlwcyB0aGUgYWxsb2NhdG9yJ3Mg IipkZWYtPm91dHB1dCgpICE9IGFsbG9jIiBhc3NlcnRpb24gYmVjYXVzZQorKyAgLy8gdjAvdjEg bWF5IHRoZW4gc2hhcmUgdGhlIHNsb3Qgd2l0aCB0aGUgb3V0cHV0LgorKyAgTERlZmluaXRpb24g dGVtcDAgPSBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCk7CisrICBpZiAoaW5zLT5zaW1kT3AoKSA9 PSB3YXNtOjpTaW1kT3A6OkkzMng0UmVsYXhlZERvdEk4eDE2STd4MTZBZGRTKSB7CisrICAgIHRl bXAwID0gdGVtcFNpbWQxMjgoKTsKKysgIH0KKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkg TFdhc21UZXJuYXJ5U2ltZDEyOCgKKysgICAgICB1c2VSZWdpc3RlcihpbnMtPnYwKCkpLCB1c2VS ZWdpc3RlcihpbnMtPnYxKCkpLAorKyAgICAgIHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnYyKCkp LCB0ZW1wMCwKKysgICAgICBpbnMtPnNpbWRPcCgpKTsKKysgIC8vIFRoZSBQUEM2NCB2aXNpdG9y IChDb2RlR2VuZXJhdG9yLXBwYzY0LmNwcDp2aXNpdFdhc21UZXJuYXJ5U2ltZDEyOCkKKysgIC8v IGVtaXRzIHRoZSBGTUEgLyBET1RfVEhFTl9BREQgY2hhaW4gd2l0aCB2MiBhcyB0aGUgaW1wbGlj aXQKKysgIC8vIGFjY3VtdWxhdG9yLiBkZWZpbmVSZXVzZUlucHV0IHRlbGxzIHRoZSBhbGxvY2F0 b3IgdG8gcHV0IGBkZXN0YAorKyAgLy8gaW4gdjIncyBzbG90LCBlbGltaW5hdGluZyB0aGUgcHJl dmlvdXMgY29uZGl0aW9uYWwgbW92ZVNpbWQxMjguCisrICBkZWZpbmVSZXVzZUlucHV0KGxpciwg aW5zLCBMV2FzbVRlcm5hcnlTaW1kMTI4OjpWMkluZGV4KTsKKysjZWxzZQorKyAgTU9aX0NSQVNI KCJObyBTSU1EIik7CisrI2VuZGlmCisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21C aW5hcnlTaW1kMTI4KE1XYXNtQmluYXJ5U2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9X QVNNX1NJTUQKKysgIE1PWl9BU1NFUlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7 CisrICBMRGVmaW5pdGlvbiB0ZW1wMCA9IExEZWZpbml0aW9uOjpCb2d1c1RlbXAoKTsKKysgIExE ZWZpbml0aW9uIHRlbXAxID0gTERlZmluaXRpb246OkJvZ3VzVGVtcCgpOworKyAgLy8gbXVsSW50 NjR4MiAoaTY0eDIubXVsKSByb3V0ZXMgdGhyb3VnaCBHUFJzIChtZnZzcmQvbXVsbGQvbXR2c3Jk KSBhbmQKKysgIC8vIHVzZXMgYW4gaW50ZXJuYWwgU2NyYXRjaFNpbWQxMjggKyBHUFIgc2NyYXRj aGVzOyBpdHMgRmxvYXRSZWdpc3RlcgorKyAgLy8gdGVtcDEvdGVtcDIgcGFyYW1ldGVycyBhcmUg aW5oZXJpdGVkIGZyb20gdGhlIHNoYXJlZCBBUk02NCtQUEM2NAorKyAgLy8gc2lnbmF0dXJlIGJ1 dCB1bnVzZWQgb24gUFBDNjQuIE9ubHkgRlAgbWluL21heCBuZWVkIFNJTUQgdGVtcHMgZm9yCisr ICAvLyB0aGUgd2FzbSBOYU4tY2Fub25pY2FsaXNhdGlvbiBkYW5jZS4KKysgIGlmIChpbnMtPnNp bWRPcCgpID09IHdhc206OlNpbWRPcDo6RjMyeDRNaW4gfHwKKysgICAgICBpbnMtPnNpbWRPcCgp ID09IHdhc206OlNpbWRPcDo6RjMyeDRNYXggfHwKKysgICAgICBpbnMtPnNpbWRPcCgpID09IHdh c206OlNpbWRPcDo6RjY0eDJNaW4gfHwKKysgICAgICBpbnMtPnNpbWRPcCgpID09IHdhc206OlNp bWRPcDo6RjY0eDJNYXgpIHsKKysgICAgdGVtcDAgPSB0ZW1wU2ltZDEyOCgpOworKyAgICB0ZW1w MSA9IHRlbXBTaW1kMTI4KCk7CisrICB9CisrICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExX YXNtQmluYXJ5U2ltZDEyOCgKKysgICAgICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSks IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnJocygpKSwKKysgICAgICB0ZW1wMCwgdGVtcDEsIGlu cy0+c2ltZE9wKCkpOworKyAgZGVmaW5lKGxpciwgaW5zKTsKKysjZWxzZQorKyAgTU9aX0NSQVNI KCJObyBTSU1EIik7CisrI2VuZGlmCisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21C aW5hcnlTaW1kMTI4V2l0aENvbnN0YW50KAorKyAgICBNV2FzbUJpbmFyeVNpbWQxMjhXaXRoQ29u c3RhbnQqIGlucykgeworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBNT1pfQVNTRVJUKGlu cy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgYXV0byogbGlyID0gbmV3IChhbGxv YygpKSBMV2FzbUJpbmFyeVNpbWQxMjhXaXRoQ29uc3RhbnQoCisrICAgICAgdXNlUmVnaXN0ZXJB dFN0YXJ0KGlucy0+bGhzKCkpLCBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCksIGlucy0+cmhzKCkp OworKyAgZGVmaW5lKGxpciwgaW5zKTsKKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7 CisrI2VuZGlmCisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21TaGlmdFNpbWQxMjgo TVdhc21TaGlmdFNpbWQxMjgqIGlucykgeworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBN T1pfQVNTRVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgTU9aX0FTU0VS VChpbnMtPnJocygpLT50eXBlKCkgPT0gTUlSVHlwZTo6SW50MzIpOworKworKyAgaWYgKGlucy0+ cmhzKCktPmlzQ29uc3RhbnQoKSkgeworKyAgICBpbnQzMl90IHNoaWZ0Q291bnRNYXNrOworKyAg ICBzd2l0Y2ggKGlucy0+c2ltZE9wKCkpIHsKKysgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STh4 MTZTaGw6CisrICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6Okk4eDE2U2hyVToKKysgICAgICBjYXNl IHdhc206OlNpbWRPcDo6STh4MTZTaHJTOgorKyAgICAgICAgc2hpZnRDb3VudE1hc2sgPSA3Owor KyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4U2hsOgorKyAg ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJMTZ4OFNoclU6CisrICAgICAgY2FzZSB3YXNtOjpTaW1k T3A6OkkxNng4U2hyUzoKKysgICAgICAgIHNoaWZ0Q291bnRNYXNrID0gMTU7CisrICAgICAgICBi cmVhazsKKysgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRTaGw6CisrICAgICAgY2FzZSB3 YXNtOjpTaW1kT3A6OkkzMng0U2hyVToKKysgICAgICBjYXNlIHdhc206OlNpbWRPcDo6STMyeDRT aHJTOgorKyAgICAgICAgc2hpZnRDb3VudE1hc2sgPSAzMTsKKysgICAgICAgIGJyZWFrOworKyAg ICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNobDoKKysgICAgICBjYXNlIHdhc206OlNpbWRP cDo6STY0eDJTaHJVOgorKyAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpJNjR4MlNoclM6CisrICAg ICAgICBzaGlmdENvdW50TWFzayA9IDYzOworKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVs dDoKKysgICAgICAgIE1PWl9DUkFTSCgiVW5leHBlY3RlZCBzaGlmdCBvcGVyYXRpb24iKTsKKysg ICAgfQorKyAgICBpbnQzMl90IHNoaWZ0Q291bnQgPSBpbnMtPnJocygpLT50b0NvbnN0YW50KCkt PnRvSW50MzIoKSAmIHNoaWZ0Q291bnRNYXNrOworKyNpZmRlZiBERUJVRworKyAgICBqczo6d2Fz bTo6UmVwb3J0U2ltZEFuYWx5c2lzKCJzaGlmdCAtPiBjb25zdGFudCBzaGlmdCIpOworKyNlbmRp ZgorKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpCisrICAgICAgICBMV2FzbUNvbnN0YW50 U2hpZnRTaW1kMTI4KHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmxocygpKSwgc2hpZnRDb3VudCk7 CisrICAgIGRlZmluZShsaXIsIGlucyk7CisrICB9IGVsc2UgeworKyNpZmRlZiBERUJVRworKyAg ICBqczo6d2FzbTo6UmVwb3J0U2ltZEFuYWx5c2lzKCJzaGlmdCAtPiB2YXJpYWJsZSBzaGlmdCIp OworKyNlbmRpZgorKyAgICBhdXRvKiBsaXIgPSBuZXcgKGFsbG9jKCkpIExXYXNtVmFyaWFibGVT aGlmdFNpbWQxMjgoCisrICAgICAgICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSksIHVz ZVJlZ2lzdGVyQXRTdGFydChpbnMtPnJocygpKSk7CisrICAgIGRlZmluZShsaXIsIGlucyk7Cisr ICB9CisrI2Vsc2UKKysgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOworKyNlbmRpZgorK30KKysjaWZk ZWYgRU5BQkxFX1dBU01fU0lNRAorKy8vIEhlbHBlcjogcmVjb25zdHJ1Y3QgcmF3IFdhc20gYnl0 ZSBsYW5lIGluZGljZXMgZnJvbSBhbmFseXplZCBTaW1kU2h1ZmZsZS4KKytzdGF0aWMgU2ltZENv bnN0YW50IFJlY29uc3RydWN0U2h1ZmZsZUJ5dGVzKGNvbnN0IFNpbWRTaHVmZmxlJiBzKSB7Cisr ICBpbnQ4X3QgYnl0ZXNbMTZdOworKyAgaWYgKHMucGVybXV0ZU9wKSB7CisrICAgIHN3aXRjaCAo KnMucGVybXV0ZU9wKSB7CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpNT1ZFOgorKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSBieXRlc1tpXSA9IGk7CisrICAgICAgICBy ZXR1cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworKyAgICAgIGNhc2UgU2ltZFBl cm11dGVPcDo6UEVSTVVURV8zMng0OiB7CisrICAgICAgICBjb25zdCBpbnQzMl90KiB3ID0gcmVp bnRlcnByZXRfY2FzdDxjb25zdCBpbnQzMl90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOworKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCisrICAgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgNDsgaisrKSBieXRlc1tpKjQral0gPSB3W2ldKjQrajsKKysgICAgICAgIHJldHVybiBT aW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgfQorKyAgICAgIGNhc2UgU2lt ZFBlcm11dGVPcDo6UEVSTVVURV8xNng4OiB7CisrICAgICAgICBjb25zdCBpbnQxNl90KiBoID0g cmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQxNl90Kj4ocy5jb250cm9sLmJ5dGVzKCkpOworKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgICAgaW50IGlkeCA9 IGhbaV0gJiAweDc7CisrICAgICAgICAgIGJ5dGVzW2kqMl0gPSBpZHgqMjsKKysgICAgICAgICAg Ynl0ZXNbaSoyKzFdID0gaWR4KjIrMTsKKysgICAgICAgIH0KKysgICAgICAgIHJldHVybiBTaW1k Q29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgfQorKyAgICAgIGNhc2UgU2ltZFBl cm11dGVPcDo6QlJPQURDQVNUXzh4MTY6IHsKKysgICAgICAgIGludDhfdCBsYW5lID0gcmVpbnRl cnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07CisrICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIGJ5dGVzW2ldID0gbGFuZTsKKysgICAgICAg IHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgfQorKyAgICAg IGNhc2UgU2ltZFBlcm11dGVPcDo6QlJPQURDQVNUXzE2eDg6IHsKKysgICAgICAgIGludDhfdCBs YW5lID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSlb MF07CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBi eXRlc1tpKjJdID0gbGFuZSoyOyBieXRlc1tpKjIrMV0gPSBsYW5lKjIrMTsKKysgICAgICAgIH0K KysgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAg fQorKyAgICAgIGNhc2UgU2ltZFBlcm11dGVPcDo6Uk9UQVRFX1JJR0hUXzh4MTY6IHsKKysgICAg ICAgIHVpbnQ4X3Qgc2hpZnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludDhfdCo+KHMuY29u dHJvbC5ieXRlcygpKVswXTsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykg Ynl0ZXNbaV0gPSAoaSArIHNoaWZ0KSAlIDE2OworKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFu dDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9w OjpTSElGVF9SSUdIVF84eDE2OiB7CisrICAgICAgICB1aW50OF90IHNoaWZ0ID0gcmVpbnRlcnBy ZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMoKSlbMF07CisrICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIGJ5dGVzW2ldID0gKGkrc2hpZnQgPCAxNikgPyAo aStzaGlmdCkgOiAwOworKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5 dGVzKTsKKysgICAgICB9CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpTSElGVF9MRUZUXzh4 MTY6IHsKKysgICAgICAgIHVpbnQ4X3Qgc2hpZnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGlu dDhfdCo+KHMuY29udHJvbC5ieXRlcygpKVswXTsKKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgMTY7IGkrKykgYnl0ZXNbaV0gPSAoaSA+PSBzaGlmdCkgPyAoaS1zaGlmdCkgOiAwOworKyAg ICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9Cisr ICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzE2eDg6CisrICAgICAgICAvLyBSZXZl cnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDE2LWJpdCBsYW5lOiBbMSwwLDMsMiw1LDQsLi4uXQorKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgICAgYnl0ZXNbaSoy XSA9IGkqMisxOyBieXRlc1tpKjIrMV0gPSBpKjI7CisrICAgICAgICB9CisrICAgICAgICByZXR1 cm4gU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoYnl0ZXMpOworKyAgICAgIGNhc2UgU2ltZFBlcm11 dGVPcDo6UkVWRVJTRV8zMng0OgorKyAgICAgICAgLy8gUmV2ZXJzZSBieXRlcyB3aXRoaW4gZWFj aCAzMi1iaXQgbGFuZTogWzMsMiwxLDAsNyw2LDUsNCwuLi5dCisrICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDQ7IGkrKykKKysgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKysp IGJ5dGVzW2kqNCtqXSA9IGkqNCsoMy1qKTsKKysgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6 OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgY2FzZSBTaW1kUGVybXV0ZU9wOjpSRVZFUlNFXzY0 eDI6CisrICAgICAgICAvLyBSZXZlcnNlIGJ5dGVzIHdpdGhpbiBlYWNoIDY0LWJpdCBsYW5lOiBb Nyw2LDUsNCwzLDIsMSwwLDE1LC4uLl0KKysgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKQorKyAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgYnl0ZXNbaSo4K2pd ID0gaSo4Kyg3LWopOworKyAgICAgICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5 dGVzKTsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgIH0KKysg IC8vIEhhbmRsZSBTaW1kU2h1ZmZsZU9wICh0d28tb3BlcmFuZCBwYXR0ZXJucykuCisrICBpZiAo cy5zaHVmZmxlT3ApIHsKKysgICAgc3dpdGNoICgqcy5zaHVmZmxlT3ApIHsKKysgICAgICBjYXNl IFNpbWRTaHVmZmxlT3A6OkNPTkNBVF9SSUdIVF9TSElGVF84eDE2OiB7CisrICAgICAgICAvLyBj b250cm9sWzBdID0gc3VmZml4IGxlbmd0aC4gQVJNNjQgdXNlcyAxNi1jb3VudCBhcyB0aGUgRVhU IHNoaWZ0LgorKyAgICAgICAgLy8gUmVjb25zdHJ1Y3QgcmF3IGJ5dGUgaW5kaWNlczogRVhUKHJo cywgbGhzLCAxNi1jb3VudCkgPQorKyAgICAgICAgLy8gdGFrZSAoMTYtY291bnQpIGJ5dGVzIGZy b20gcmhzIGVuZCwgdGhlbiBjb3VudCBieXRlcyBmcm9tIGxocyBzdGFydC4KKysgICAgICAgIHVp bnQ4X3QgY291bnQgPSAxNiAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50OF90Kj4ocy5jb250 cm9sLmJ5dGVzKCkpWzBdOworKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 CisrICAgICAgICAgIGludCBpZHggPSBpICsgY291bnQ7CisrICAgICAgICAgIGJ5dGVzW2ldID0g KGlkeCA8IDE2KSA/IChpZHggKyAxNikgOiAoaWR4IC0gMTYpOworKyAgICAgICAgfQorKyAgICAg ICAgcmV0dXJuIFNpbWRDb25zdGFudDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKysgICAgICB9CisrICAg ICAgY2FzZSBTaW1kU2h1ZmZsZU9wOjpCTEVORF84eDE2OiB7CisrICAgICAgICAvLyBjb250cm9s IGhhcyAwIChsaHMpIG9yIC0xIChyaHMpIHBlciBieXRlLgorKyAgICAgICAgY29uc3QgaW50OF90 KiBtYXNrID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQ4X3QqPihzLmNvbnRyb2wuYnl0ZXMo KSk7CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspCisrICAgICAgICAgIGJ5 dGVzW2ldID0gbWFza1tpXSA/IChpICsgMTYpIDogaTsKKysgICAgICAgIHJldHVybiBTaW1kQ29u c3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAgICAgfQorKyAgICAgIGNhc2UgU2ltZFNodWZm bGVPcDo6QkxFTkRfMTZ4ODogeworKyAgICAgICAgY29uc3QgaW50MTZfdCogbWFzayA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MTZfdCo+KHMuY29udHJvbC5ieXRlcygpKTsKKysgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICAgIGludCBiYXNlID0gbWFz a1tpXSA/IChpICogMiArIDE2KSA6IChpICogMik7CisrICAgICAgICAgIGJ5dGVzW2kgKiAyXSA9 IGJhc2U7CisrICAgICAgICAgIGJ5dGVzW2kgKiAyICsgMV0gPSBiYXNlICsgMTsKKysgICAgICAg IH0KKysgICAgICAgIHJldHVybiBTaW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyk7CisrICAg ICAgfQorKyNkZWZpbmUgSU5URVJMRUFWRShuYW1lLCB3aWR0aCwgbG93X3N0YXJ0LCBjb3VudCkg XAorKyAgICAgIGNhc2UgU2ltZFNodWZmbGVPcDo6bmFtZTogeyBcCisrICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsgXAorKyAgICAgICAgICBpbnQgbGhzSWR4ID0gbG93 X3N0YXJ0ICsgaSAqIHdpZHRoOyBcCisrICAgICAgICAgIGludCByaHNJZHggPSBsaHNJZHggKyAx NjsgXAorKyAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsgXAorKyAg ICAgICAgICAgIGJ5dGVzWyhpICogMikgKiB3aWR0aCArIGpdID0gbGhzSWR4ICsgajsgXAorKyAg ICAgICAgICAgIGJ5dGVzWyhpICogMiArIDEpICogd2lkdGggKyBqXSA9IHJoc0lkeCArIGo7IFwK KysgICAgICAgICAgfSBcCisrICAgICAgICB9IFwKKysgICAgICAgIHJldHVybiBTaW1kQ29uc3Rh bnQ6OkNyZWF0ZVgxNihieXRlcyk7IFwKKysgICAgICB9CisrICAgICAgSU5URVJMRUFWRShJTlRF UkxFQVZFX0xPV184eDE2LCAxLCAwLCA4KQorKyAgICAgIElOVEVSTEVBVkUoSU5URVJMRUFWRV9I SUdIXzh4MTYsIDEsIDgsIDgpCisrICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0xPV18xNng4 LCAyLCAwLCA0KQorKyAgICAgIElOVEVSTEVBVkUoSU5URVJMRUFWRV9ISUdIXzE2eDgsIDIsIDgs IDQpCisrICAgICAgSU5URVJMRUFWRShJTlRFUkxFQVZFX0xPV18zMng0LCA0LCAwLCAyKQorKyAg ICAgIElOVEVSTEVBVkUoSU5URVJMRUFWRV9ISUdIXzMyeDQsIDQsIDgsIDIpCisrICAgICAgSU5U RVJMRUFWRShJTlRFUkxFQVZFX0xPV182NHgyLCA4LCAwLCAxKQorKyAgICAgIElOVEVSTEVBVkUo SU5URVJMRUFWRV9ISUdIXzY0eDIsIDgsIDgsIDEpCisrI3VuZGVmIElOVEVSTEVBVkUKKysgICAg ICBkZWZhdWx0OgorKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgIH0KKysgIC8vIFBFUk1VVEVf OHgxNiwgU0hVRkZMRV9CTEVORF84eDE2LCBldGM6IGNvbnRyb2wgc2hvdWxkIGhhdmUgcmF3IGJ5 dGUgaW5kaWNlcy4KKysgIC8vIEZvcmNlIHRvIEludDh4MTYgdHlwZSB0byBhdm9pZCBhc3NlcnRp b25zIGZyb20gbWlzbWF0Y2hlZCB0eXBlcy4KKysgIGlmIChzLmNvbnRyb2wudHlwZSgpID09IFNp bWRDb25zdGFudDo6SW50OHgxNikgeworKyAgICByZXR1cm4gcy5jb250cm9sOworKyAgfQorKyAg Ly8gRmFsbGJhY2s6IHJlLWNyZWF0ZSBhcyBJbnQ4eDE2IGZyb20gcmF3IGJ5dGVzLgorKyAgbWVt Y3B5KGJ5dGVzLCBzLmNvbnRyb2wuYnl0ZXMoKSwgMTYpOworKyAgcmV0dXJuIFNpbWRDb25zdGFu dDo6Q3JlYXRlWDE2KGJ5dGVzKTsKKyt9CisrCisrI2VuZGlmICAvLyBFTkFCTEVfV0FTTV9TSU1E CisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVNodWZmbGVTaW1kMTI4KE1XYXNtU2h1 ZmZsZVNpbWQxMjgqIGlucykgeworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBNT1pfQVNT RVJUKGlucy0+dHlwZSgpID09IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgU2ltZFNodWZmbGUgcyA9 IGlucy0+c2h1ZmZsZSgpOworKyAgc3dpdGNoIChzLm9wZCkgeworKyAgICBjYXNlIFNpbWRTaHVm ZmxlOjpPcGVyYW5kOjpMRUZUOgorKyAgICBjYXNlIFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpSSUdI VDogeworKyAgICAgIC8vIFNpbmdsZS1vcGVyYW5kIHBlcm11dGU6IHRoZSBhbmFseXNpcyBoYXMg aWRlbnRpZmllZCB0aGF0IG9ubHkgb25lCisrICAgICAgLy8gaW5wdXQgbWF0dGVycyAodGhlIG90 aGVyIGlzIHplcm8gb3IgdW51c2VkKS4KKysgICAgICBMQWxsb2NhdGlvbiBzcmM7CisrICAgICAg aWYgKHMub3BkID09IFNpbWRTaHVmZmxlOjpPcGVyYW5kOjpMRUZUKSB7CisrICAgICAgICBzcmMg PSB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5saHMoKSk7CisrICAgICAgfSBlbHNlIHsKKysgICAg ICAgIHNyYyA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPnJocygpKTsKKysgICAgICB9CisrICAg ICAgYXV0byogbGlyID0KKysgICAgICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVBlcm11dGVTaW1k MTI4KHNyYywgKnMucGVybXV0ZU9wLCBzLmNvbnRyb2wpOworKyAgICAgIGRlZmluZShsaXIsIGlu cyk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBTaW1kU2h1ZmZsZTo6T3BlcmFu ZDo6Qk9USDoKKysgICAgY2FzZSBTaW1kU2h1ZmZsZTo6T3BlcmFuZDo6Qk9USF9TV0FQUEVEOiB7 CisrICAgICAgU2ltZENvbnN0YW50IGN0cmwgPSBSZWNvbnN0cnVjdFNodWZmbGVCeXRlcyhzKTsK KysgICAgICBMQWxsb2NhdGlvbiBsaHMsIHJoczsKKysgICAgICBpZiAocy5vcGQgPT0gU2ltZFNo dWZmbGU6Ok9wZXJhbmQ6OkJPVEhfU1dBUFBFRCkgeworKyAgICAgICAgbGhzID0gdXNlUmVnaXN0 ZXJBdFN0YXJ0KGlucy0+cmhzKCkpOworKyAgICAgICAgcmhzID0gdXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+bGhzKCkpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBsaHMgPSB1c2VSZWdpc3Rl ckF0U3RhcnQoaW5zLT5saHMoKSk7CisrICAgICAgICByaHMgPSB1c2VSZWdpc3RlckF0U3RhcnQo aW5zLT5yaHMoKSk7CisrICAgICAgfQorKyAgICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkg TFdhc21TaHVmZmxlU2ltZDEyOCgKKysgICAgICAgICAgbGhzLCByaHMsICpzLnNodWZmbGVPcCwg Y3RybCk7CisrICAgICAgZGVmaW5lKGxpciwgaW5zKTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgfQorKyNlbHNlCisrICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5kaWYKKyt9Cisrdm9p ZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbVJlcGxhY2VMYW5lU2ltZDEyOChNV2FzbVJlcGxhY2VM YW5lU2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIE1PWl9BU1NF UlQoaW5zLT50eXBlKCkgPT0gTUlSVHlwZTo6U2ltZDEyOCk7CisrICBpZiAoaW5zLT5yaHMoKS0+ dHlwZSgpID09IE1JUlR5cGU6OkludDY0KSB7CisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2Mo KSkgTFdhc21SZXBsYWNlSW50NjRMYW5lU2ltZDEyOCgKKysgICAgICAgIHVzZVJlZ2lzdGVyQXRT dGFydChpbnMtPmxocygpKSwgdXNlSW50NjRSZWdpc3RlcihpbnMtPnJocygpKSk7CisrICAgIGRl ZmluZVJldXNlSW5wdXQobGlyLCBpbnMsIExXYXNtUmVwbGFjZUludDY0TGFuZVNpbWQxMjg6Okxo c0luZGV4KTsKKysgIH0gZWxzZSB7CisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkgTFdh c21SZXBsYWNlTGFuZVNpbWQxMjgoCisrICAgICAgICB1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5s aHMoKSksIHVzZVJlZ2lzdGVyKGlucy0+cmhzKCkpKTsKKysgICAgZGVmaW5lUmV1c2VJbnB1dChs aXIsIGlucywgTFdhc21SZXBsYWNlTGFuZVNpbWQxMjg6Okxoc0luZGV4KTsKKysgIH0KKysjZWxz ZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7CisrI2VuZGlmCisrfQorK3ZvaWQgTElSR2VuZXJh dG9yOjp2aXNpdFdhc21TY2FsYXJUb1NpbWQxMjgoTVdhc21TY2FsYXJUb1NpbWQxMjgqIGlucykg eworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBNT1pfQVNTRVJUKGlucy0+dHlwZSgpID09 IE1JUlR5cGU6OlNpbWQxMjgpOworKyAgaWYgKGlucy0+aW5wdXQoKS0+dHlwZSgpID09IE1JUlR5 cGU6OkludDY0KSB7CisrICAgIGF1dG8qIGxpciA9CisrICAgICAgICBuZXcgKGFsbG9jKCkpIExX YXNtSW50NjRUb1NpbWQxMjgodXNlSW50NjRSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSk7 CisrICAgIGRlZmluZShsaXIsIGlucyk7CisrICB9IGVsc2UgeworKyAgICBhdXRvKiBsaXIgPQor KyAgICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVNjYWxhclRvU2ltZDEyOCh1c2VSZWdpc3RlckF0 U3RhcnQoaW5zLT5pbnB1dCgpKSk7CisrICAgIGRlZmluZShsaXIsIGlucyk7CisrICB9CisrI2Vs c2UKKysgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOworKyNlbmRpZgorK30KKyt2b2lkIExJUkdlbmVy YXRvcjo6dmlzaXRXYXNtVW5hcnlTaW1kMTI4KE1XYXNtVW5hcnlTaW1kMTI4KiBpbnMpIHsKKysj aWZkZWYgRU5BQkxFX1dBU01fU0lNRAorKyAgTU9aX0FTU0VSVChpbnMtPnR5cGUoKSA9PSBNSVJU eXBlOjpTaW1kMTI4KTsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2MoKSkKKysgICAgICBMV2Fz bVVuYXJ5U2ltZDEyOCh1c2VSZWdpc3RlckF0U3RhcnQoaW5zLT5pbnB1dCgpKSwKKysgICAgICAg ICAgICAgICAgICAgICAgICBMRGVmaW5pdGlvbjo6Qm9ndXNUZW1wKCkpOworKyAgZGVmaW5lKGxp ciwgaW5zKTsKKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7CisrI2VuZGlmCisrfQor KyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrYm9vbCBMSVJHZW5lcmF0b3JQUEM2NDo6Y2FuRm9s ZFJlZHVjZVNpbWQxMjhBbmRCcmFuY2god2FzbTo6U2ltZE9wIG9wKSB7CisrICBzd2l0Y2ggKG9w KSB7CisrICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4QW55VHJ1ZToKKysgICAgY2FzZSB3YXNt OjpTaW1kT3A6Okk4eDE2QWxsVHJ1ZToKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkxNng4QWxs VHJ1ZToKKysgICAgY2FzZSB3YXNtOjpTaW1kT3A6OkkzMng0QWxsVHJ1ZToKKysgICAgY2FzZSB3 YXNtOjpTaW1kT3A6Okk2NHgyQWxsVHJ1ZToKKysgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgZGVm YXVsdDoKKysgICAgICByZXR1cm4gZmFsc2U7CisrICB9CisrfQorKworK2Jvb2wgTElSR2VuZXJh dG9yUFBDNjQ6OmNhbkVtaXRXYXNtUmVkdWNlU2ltZDEyOEF0VXNlcygKKysgICAgTVdhc21SZWR1 Y2VTaW1kMTI4KiBpbnMpIHsKKysgIGlmICghaW5zLT5jYW5FbWl0QXRVc2VzKCkpIHsKKysgICAg cmV0dXJuIGZhbHNlOworKyAgfQorKyAgaWYgKGlucy0+dHlwZSgpICE9IE1JUlR5cGU6OkludDMy KSB7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysgIGlmICghY2FuRm9sZFJlZHVjZVNpbWQx MjhBbmRCcmFuY2goaW5zLT5zaW1kT3AoKSkpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQor KyAgTVVzZUl0ZXJhdG9yIGl0ZXIoaW5zLT51c2VzQmVnaW4oKSk7CisrICBpZiAoaXRlciA9PSBp bnMtPnVzZXNFbmQoKSkgeworKyAgICByZXR1cm4gdHJ1ZTsKKysgIH0KKysgIE1Ob2RlKiBub2Rl ID0gaXRlci0+Y29uc3VtZXIoKTsKKysgIGlmICghbm9kZS0+aXNEZWZpbml0aW9uKCkgfHwgIW5v ZGUtPnRvRGVmaW5pdGlvbigpLT5pc1Rlc3QoKSkgeworKyAgICByZXR1cm4gZmFsc2U7CisrICB9 CisrICBpdGVyKys7CisrICByZXR1cm4gaXRlciA9PSBpbnMtPnVzZXNFbmQoKTsKKyt9CisrI2Vu ZGlmICAvLyBFTkFCTEVfV0FTTV9TSU1ECisrCisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2Fz bVJlZHVjZVNpbWQxMjgoTVdhc21SZWR1Y2VTaW1kMTI4KiBpbnMpIHsKKysjaWZkZWYgRU5BQkxF X1dBU01fU0lNRAorKyAgaWYgKGNhbkVtaXRXYXNtUmVkdWNlU2ltZDEyOEF0VXNlcyhpbnMpKSB7 CisrICAgIGVtaXRBdFVzZXMoaW5zKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaWYgKGlucy0+ dHlwZSgpID09IE1JUlR5cGU6OkludDY0KSB7CisrICAgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2Mo KSkKKysgICAgICAgIExXYXNtUmVkdWNlU2ltZDEyOFRvSW50NjQodXNlUmVnaXN0ZXJBdFN0YXJ0 KGlucy0+aW5wdXQoKSkpOworKyAgICBkZWZpbmVJbnQ2NChsaXIsIGlucyk7CisrICB9IGVsc2Ug eworKyAgICBhdXRvKiBsaXIgPQorKyAgICAgICAgbmV3IChhbGxvYygpKSBMV2FzbVJlZHVjZVNp bWQxMjgodXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+aW5wdXQoKSkpOworKyAgICBkZWZpbmUobGly LCBpbnMpOworKyAgfQorKyNlbHNlCisrICBNT1pfQ1JBU0goIk5vIFNJTUQiKTsKKysjZW5kaWYK Kyt9Cisrdm9pZCBMSVJHZW5lcmF0b3I6OnZpc2l0V2FzbUxvYWRMYW5lU2ltZDEyOChNV2FzbUxv YWRMYW5lU2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysgIExVc2Ug YmFzZSA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmJhc2UoKSk7CisrICBMVXNlIGlucHV0VXNl ID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+dmFsdWUoKSk7CisrICBMQWxsb2NhdGlvbiBtZW1v cnlCYXNlID0KKysgICAgICBpbnMtPmhhc01lbW9yeUJhc2UoKSA/IExBbGxvY2F0aW9uKHVzZVJl Z2lzdGVyQXRTdGFydChpbnMtPm1lbW9yeUJhc2UoKSkpCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVnKTsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxsb2Mo KSkgTFdhc21Mb2FkTGFuZVNpbWQxMjgoYmFzZSwgaW5wdXRVc2UsIG1lbW9yeUJhc2UpOworKyAg ZGVmaW5lKGxpciwgaW5zKTsKKysjZWxzZQorKyAgTU9aX0NSQVNIKCJObyBTSU1EIik7CisrI2Vu ZGlmCisrfQorK3ZvaWQgTElSR2VuZXJhdG9yOjp2aXNpdFdhc21TdG9yZUxhbmVTaW1kMTI4KE1X YXNtU3RvcmVMYW5lU2ltZDEyOCogaW5zKSB7CisrI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKysg IExVc2UgYmFzZSA9IHVzZVJlZ2lzdGVyQXRTdGFydChpbnMtPmJhc2UoKSk7CisrICBMVXNlIGlu cHV0ID0gdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+dmFsdWUoKSk7CisrICBMQWxsb2NhdGlvbiBt ZW1vcnlCYXNlID0KKysgICAgICBpbnMtPmhhc01lbW9yeUJhc2UoKSA/IExBbGxvY2F0aW9uKHVz ZVJlZ2lzdGVyQXRTdGFydChpbnMtPm1lbW9yeUJhc2UoKSkpCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBMR2VuZXJhbFJlZyhIZWFwUmVnKTsKKysgIGF1dG8qIGxpciA9IG5ldyAoYWxs b2MoKSkgTFdhc21TdG9yZUxhbmVTaW1kMTI4KGJhc2UsIGlucHV0LCBtZW1vcnlCYXNlKTsKKysg IGFkZChsaXIsIGlucyk7CisrI2Vsc2UKKysgIE1PWl9DUkFTSCgiTm8gU0lNRCIpOworKyNlbmRp ZgorK30KKysKKysvLyBQUEM2NCBzcGVjaWFsaXplcyBjb21wYXJlK3NlbGVjdCBmb3Ige1UsfUlu dDMyIC8ge1UsfUludDY0IGNvbXBhcmUgd2l0aAorKy8vIEludDMyIC8gSW50NjQgcmVzdWx0LiBU aGUgQ29kZUdlbiB2aXNpdG9yCisrLy8gKENvZGVHZW5lcmF0b3ItcHBjNjQuY3BwOnZpc2l0V2Fz bUNvbXBhcmVBbmRTZWxlY3QpIGVtaXRzCisrLy8gY21wdy9jbXBsdy9jbXBkL2NtcGxkICsgaXNl bCA9IDIgaW5zbnMsIHJlcGxhY2luZyB0aGUgfjUtNyBpbnNucyB0aGUKKysvLyBnZW5lcmljIHBh dGggd291bGQgZW1pdCAoYm9vbGVhbiBtYXRlcmlhbGl6YXRpb24gKyB0ZXN0ICsgaXNlbCkuIEZQ CisrLy8gc3BlY2lhbGl6YXRpb24gaXMgbm90IHdvcnRod2hpbGUg4oCUIHRoZSBnZW5lcmljIEZQ IHNlbGVjdCBwYXRoIGFscmVhZHkKKysvLyBydW5zIGZhc3RlciB0aGFuIHRoZSBzcGVjaWFsaXpl ZCBpbnRlZ2VyIG9uZSBhbmQgUFBDNjQgbGFja3MgYSB0cnVlCisrLy8gZmNzZWwgZXF1aXZhbGVu dCAoZnNlbCBvbmx5IGNvbXBhcmVzIGFnYWluc3QgemVybykuCisrYm9vbCBMSVJHZW5lcmF0b3JT aGFyZWQ6OmNhblNwZWNpYWxpemVXYXNtQ29tcGFyZUFuZFNlbGVjdCgKKysgICAgTUNvbXBhcmU6 OkNvbXBhcmVUeXBlIGNvbXBUeSwgTUlSVHlwZSBpbnNUeSkgeworKyAgY29uc3QgYm9vbCBpbnNP ayA9IGluc1R5ID09IE1JUlR5cGU6OkludDMyIHx8IGluc1R5ID09IE1JUlR5cGU6OkludDY0Owor KyAgY29uc3QgYm9vbCBjbXBPayA9IGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9JbnQzMiB8 fAorKyAgICAgICAgICAgICAgICAgICAgIGNvbXBUeSA9PSBNQ29tcGFyZTo6Q29tcGFyZV9VSW50 MzIgfHwKKysgICAgICAgICAgICAgICAgICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBhcmVf SW50NjQgfHwKKysgICAgICAgICAgICAgICAgICAgICBjb21wVHkgPT0gTUNvbXBhcmU6OkNvbXBh cmVfVUludDY0OworKyAgcmV0dXJuIGluc09rICYmIGNtcE9rOworK30KKysKKyt2b2lkIExJUkdl bmVyYXRvclNoYXJlZDo6bG93ZXJXYXNtQ29tcGFyZUFuZFNlbGVjdChNV2FzbVNlbGVjdCogaW5z LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1E ZWZpbml0aW9uKiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTURlZmluaXRpb24qIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNQ29tcGFyZTo6Q29tcGFyZVR5cGUgY29tcFR5LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT3Ag anNvcCkgeworKyAgTU9aX0FTU0VSVChjYW5TcGVjaWFsaXplV2FzbUNvbXBhcmVBbmRTZWxlY3Qo Y29tcFR5LCBpbnMtPnR5cGUoKSkpOworKyAgYXV0byogbGlyID0gbmV3IChhbGxvYygpKSBMV2Fz bUNvbXBhcmVBbmRTZWxlY3QoCisrICAgICAgdXNlUmVnaXN0ZXIobGhzKSwgdXNlUmVnaXN0ZXIo cmhzKSwgdXNlUmVnaXN0ZXJBdFN0YXJ0KGlucy0+dHJ1ZUV4cHIoKSksCisrICAgICAgdXNlUmVn aXN0ZXIoaW5zLT5mYWxzZUV4cHIoKSksIGNvbXBUeSwganNvcCk7CisrICBkZWZpbmVSZXVzZUlu cHV0KGxpciwgaW5zLCBMV2FzbUNvbXBhcmVBbmRTZWxlY3Q6OklmVHJ1ZUV4cHJJbmRleCk7Cisr fQorKworKy8vIE1JUiBoZWxwZXJzIG5lZWRlZCBieSB0aGUgbGlua2VyCisrI2lmZGVmIEVOQUJM RV9XQVNNX1NJTUQKKytib29sIE1XYXNtVGVybmFyeVNpbWQxMjg6OnNwZWNpYWxpemVCaXRzZWxl Y3RDb25zdGFudE1hc2tBc1NodWZmbGUoCisrICAgIGludDhfdCBzaHVmZmxlWzE2XSkgeworKyAg cmV0dXJuIGZhbHNlOworK30KKysjZW5kaWYKKysKKytib29sIE1XYXNtQmluYXJ5U2ltZDEyODo6 c3BlY2lhbGl6ZUZvckNvbnN0YW50UmhzKCkgeyByZXR1cm4gZmFsc2U7IH0KKysKKysjaWZkZWYg RU5BQkxFX1dBU01fU0lNRAorK2Jvb2wgTVdhc21UZXJuYXJ5U2ltZDEyODo6Y2FuUmVsYXhCaXRz ZWxlY3QoKSB7IHJldHVybiBmYWxzZTsgfQorKyNlbmRpZgorKworKyNpZmRlZiBFTkFCTEVfV0FT TV9TSU1ECisrYm9vbCBNV2FzbUJpbmFyeVNpbWQxMjg6OmNhblBtYWRkdWJzdygpIHsgcmV0dXJu IGZhbHNlOyB9CisrI2VuZGlmCisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVz cGFjZSBqcworZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaCBi L2pzL3NyYy9qaXQvcHBjNjQvTG93ZXJpbmctcHBjNjQuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQK K2luZGV4IDAwMDAwMDAwMDAwMC4uOWMzNTE5YTdiYjIzCistLS0gL2Rldi9udWxsCisrKysgYi9q cy9zcmMvaml0L3BwYzY0L0xvd2VyaW5nLXBwYzY0LmgKK0BAIC0wLDAgKzEsMTA1IEBACisrLyog LSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFz aWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoK KysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhl IE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1Q TCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWlu IG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRf cHBjNjRfTG93ZXJpbmdfcHBjNjRfaAorKyNkZWZpbmUgaml0X3BwYzY0X0xvd2VyaW5nX3BwYzY0 X2gKKysKKysjaW5jbHVkZSAiaml0L3NoYXJlZC9Mb3dlcmluZy1zaGFyZWQuaCIKKysKKytuYW1l c3BhY2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworK2NsYXNzIExJUkdlbmVyYXRvclBQQzY0 IDogcHVibGljIExJUkdlbmVyYXRvclNoYXJlZCB7CisrIHByb3RlY3RlZDoKKysgIExJUkdlbmVy YXRvclBQQzY0KE1JUkdlbmVyYXRvciogZ2VuLCBNSVJHcmFwaCYgZ3JhcGgsIExJUkdyYXBoJiBs aXJHcmFwaCkKKysgICAgICA6IExJUkdlbmVyYXRvclNoYXJlZChnZW4sIGdyYXBoLCBsaXJHcmFw aCkge30KKysKKysgIExUYWJsZVN3aXRjaCogbmV3TFRhYmxlU3dpdGNoKGNvbnN0IExBbGxvY2F0 aW9uJiBpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IExEZWZpbml0 aW9uJiBpbnB1dENvcHkpOworKyAgTFRhYmxlU3dpdGNoViogbmV3TFRhYmxlU3dpdGNoVihjb25z dCBMQm94QWxsb2NhdGlvbiYgaW4pOworKworKyAgdm9pZCBsb3dlckZvclNoaWZ0KExJbnN0cnVj dGlvbkhlbHBlcjwxLCAyLCAwPiogaW5zLCBNRGVmaW5pdGlvbiogbWlyLAorKyAgICAgICAgICAg ICAgICAgICAgIE1EZWZpbml0aW9uKiBsaHMsIE1EZWZpbml0aW9uKiByaHMpOworKyAgdGVtcGxh dGUgPGNsYXNzIExJbnN0cj4KKysgIHZvaWQgbG93ZXJGb3JTaGlmdEludDY0KExJbnN0ciogaW5z LCBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgTURlZmluaXRpb24qIHJocyk7CisrICB2b2lkIGxvd2VyRm9yQUxVKExJbnN0cnVj dGlvbkhlbHBlcjwxLCAxLCAwPiogaW5zLCBNRGVmaW5pdGlvbiogbWlyLAorKyAgICAgICAgICAg ICAgICAgICBNRGVmaW5pdGlvbiogaW5wdXQpOworKyAgdm9pZCBsb3dlckZvckFMVShMSW5zdHJ1 Y3Rpb25IZWxwZXI8MSwgMiwgMD4qIGlucywgTURlZmluaXRpb24qIG1pciwKKysgICAgICAgICAg ICAgICAgICAgTURlZmluaXRpb24qIGxocywgTURlZmluaXRpb24qIHJocyk7CisrICB2b2lkIGxv d2VyRm9yQUxVSW50NjQoTEluc3RydWN0aW9uSGVscGVyPElOVDY0X1BJRUNFUywgSU5UNjRfUElF Q0VTLCAwPiogaW5zLAorKyAgICAgICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9uKiBtaXIs IE1EZWZpbml0aW9uKiBpbnB1dCk7CisrICB2b2lkIGxvd2VyRm9yQUxVSW50NjQoCisrICAgICAg TEluc3RydWN0aW9uSGVscGVyPElOVDY0X1BJRUNFUywgMiAqIElOVDY0X1BJRUNFUywgMD4qIGlu cywKKysgICAgICBNRGVmaW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlv biogcmhzKTsKKysgIHZvaWQgbG93ZXJGb3JNdWxJbnQ2NChMTXVsSTY0KiBpbnMsIE1NdWwqIG1p ciwgTURlZmluaXRpb24qIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlv biogcmhzKTsKKysgIHZvaWQgbG93ZXJGb3JGUFUoTEluc3RydWN0aW9uSGVscGVyPDEsIDEsIDA+ KiBpbnMsIE1EZWZpbml0aW9uKiBtaXIsCisrICAgICAgICAgICAgICAgICAgIE1EZWZpbml0aW9u KiBpbnB1dCk7CisrICB2b2lkIGxvd2VyRm9yRlBVKExJbnN0cnVjdGlvbkhlbHBlcjwxLCAyLCAw PiogaW5zLCBNRGVmaW5pdGlvbiogbWlyLAorKyAgICAgICAgICAgICAgICAgICBNRGVmaW5pdGlv biogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKKysKKysgIHRlbXBsYXRlIDxzaXplX3QgVGVtcHM+ CisrICB2b2lkIGxvd2VyRm9yQ29tcGFyZUk2NChMSW5zdHJ1Y3Rpb25IZWxwZXI8MSwgMiAqIElO VDY0X1BJRUNFUywgVGVtcHM+KiBsaXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBNRGVm aW5pdGlvbiogbWlyLCBNRGVmaW5pdGlvbiogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKKysKKysg IExCb3hBbGxvY2F0aW9uIHVzZUJveEZpeGVkKE1EZWZpbml0aW9uKiBtaXIsIFJlZ2lzdGVyIHJl ZzEsIFJlZ2lzdGVyIHJlZzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVz ZUF0U3RhcnQgPSBmYWxzZSk7CisrCisrICBMQWxsb2NhdGlvbiB1c2VCeXRlT3BSZWdpc3RlcihN RGVmaW5pdGlvbiogbWlyKTsKKysgIExBbGxvY2F0aW9uIHVzZUJ5dGVPcFJlZ2lzdGVyQXRTdGFy dChNRGVmaW5pdGlvbiogbWlyKTsKKysgIExBbGxvY2F0aW9uIHVzZUJ5dGVPcFJlZ2lzdGVyT3JO b25Eb3VibGVDb25zdGFudChNRGVmaW5pdGlvbiogbWlyKTsKKysgIExEZWZpbml0aW9uIHRlbXBC eXRlT3BSZWdpc3RlcigpOworKworKyAgTERlZmluaXRpb24gdGVtcFRvVW5ib3goKTsKKysKKysg IGJvb2wgbmVlZFRlbXBGb3JQb3N0QmFycmllcigpIHsgcmV0dXJuIHRydWU7IH0KKysKKysgIHZv aWQgbG93ZXJVbnR5cGVkUGhpSW5wdXQoTVBoaSogcGhpLCB1aW50MzJfdCBpbnB1dFBvc2l0aW9u LCBMQmxvY2sqIGJsb2NrLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGly SW5kZXgpOworKyAgdm9pZCBsb3dlckludDY0UGhpSW5wdXQoTVBoaSogcGhpLCB1aW50MzJfdCBp bnB1dFBvc2l0aW9uLCBMQmxvY2sqIGJsb2NrLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IGxpckluZGV4KTsKKysgIHZvaWQgZGVmaW5lSW50NjRQaGkoTVBoaSogcGhpLCBzaXpl X3QgbGlySW5kZXgpOworKworKyAgdm9pZCBsb3dlck11bEkoTU11bCogbXVsLCBNRGVmaW5pdGlv biogbGhzLCBNRGVmaW5pdGlvbiogcmhzKTsKKysgIHZvaWQgbG93ZXJEaXZJKE1EaXYqIGRpdik7 CisrICB2b2lkIGxvd2VyRGl2STY0KE1EaXYqIGRpdik7CisrICB2b2lkIGxvd2VyTW9kSShNTW9k KiBtb2QpOworKyAgdm9pZCBsb3dlck1vZEk2NChNTW9kKiBtb2QpOworKyAgdm9pZCBsb3dlclVE aXYoTURpdiogZGl2KTsKKysgIHZvaWQgbG93ZXJVRGl2STY0KE1EaXYqIGRpdik7CisrICB2b2lk IGxvd2VyVU1vZChNTW9kKiBtb2QpOworKyAgdm9pZCBsb3dlclVNb2RJNjQoTU1vZCogbW9kKTsK KysgIHZvaWQgbG93ZXJVcnNoRChNVXJzaCogbWlyKTsKKysgIHZvaWQgbG93ZXJQb3dPZlR3b0ko TVBvdyogbWlyKTsKKysgIHZvaWQgbG93ZXJCaWdJbnRQdHJEaXYoTUJpZ0ludFB0ckRpdiogaW5z KTsKKysgIHZvaWQgbG93ZXJCaWdJbnRQdHJNb2QoTUJpZ0ludFB0ck1vZCogaW5zKTsKKysgIHZv aWQgbG93ZXJCaWdJbnRQdHJMc2goTUJpZ0ludFB0ckxzaCogaW5zKTsKKysgIHZvaWQgbG93ZXJC aWdJbnRQdHJSc2goTUJpZ0ludFB0clJzaCogaW5zKTsKKysgIHZvaWQgbG93ZXJUcnVuY2F0ZURU b0ludDMyKE1UcnVuY2F0ZVRvSW50MzIqIGlucyk7CisrICB2b2lkIGxvd2VyVHJ1bmNhdGVGVG9J bnQzMihNVHJ1bmNhdGVUb0ludDMyKiBpbnMpOworKyAgdm9pZCBsb3dlckJ1aWx0aW5JbnQ2NFRv RmxvYXRpbmdQb2ludChNQnVpbHRpbkludDY0VG9GbG9hdGluZ1BvaW50KiBpbnMpOworKyAgdm9p ZCBsb3dlcldhc21TZWxlY3RJKE1XYXNtU2VsZWN0KiBzZWxlY3QpOworKyAgdm9pZCBsb3dlcldh c21TZWxlY3RJNjQoTVdhc21TZWxlY3QqIHNlbGVjdCk7CisrICB2b2lkIGxvd2VyV2FzbUJ1aWx0 aW5UcnVuY2F0ZVRvSW50NjQoTVdhc21CdWlsdGluVHJ1bmNhdGVUb0ludDY0KiBpbnMpOworKyAg dm9pZCBsb3dlcldhc21CdWlsdGluVHJ1bmNhdGVUb0ludDMyKE1XYXNtQnVpbHRpblRydW5jYXRl VG9JbnQzMiogaW5zKTsKKysgIHZvaWQgbG93ZXJXYXNtQnVpbHRpbkRpdkk2NChNV2FzbUJ1aWx0 aW5EaXZJNjQqIGRpdik7CisrICB2b2lkIGxvd2VyV2FzbUJ1aWx0aW5Nb2RJNjQoTVdhc21CdWls dGluTW9kSTY0KiBtb2QpOworKyAgdm9pZCBsb3dlckF0b21pY0xvYWQ2NChNTG9hZFVuYm94ZWRT Y2FsYXIqIGlucyk7CisrICB2b2lkIGxvd2VyQXRvbWljU3RvcmU2NChNU3RvcmVVbmJveGVkU2Nh bGFyKiBpbnMpOworKworKyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICBib29sIGNhbkZvbGRS ZWR1Y2VTaW1kMTI4QW5kQnJhbmNoKHdhc206OlNpbWRPcCBvcCk7CisrICBib29sIGNhbkVtaXRX YXNtUmVkdWNlU2ltZDEyOEF0VXNlcyhNV2FzbVJlZHVjZVNpbWQxMjgqIGlucyk7CisrI2VuZGlm CisrfTsKKysKKyt0eXBlZGVmIExJUkdlbmVyYXRvclBQQzY0IExJUkdlbmVyYXRvclNwZWNpZmlj OworKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysjZW5k aWYgLyogaml0X3BwYzY0X0xvd2VyaW5nX3BwYzY0X2ggKi8KK2RpZmYgLS1naXQgYS9qcy9zcmMv aml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oIGIvanMvc3JjL2ppdC9wcGM2NC9N YWNyb0Fzc2VtYmxlci1wcGM2NC1pbmwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw MDAwMDAwMDAwMC4uZjgyY2EzNmI0ZTQwCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMvaml0 L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LWlubC5oCitAQCAtMCwwICsxLDYxNDIgQEAKKysv KiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1i YXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgw OgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0 aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUg TVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRh aW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaWZuZGVmIGpp dF9wcGM2NF9NYWNyb0Fzc2VtYmxlcl9wcGM2NF9pbmxfaAorKyNkZWZpbmUgaml0X3BwYzY0X01h Y3JvQXNzZW1ibGVyX3BwYzY0X2lubF9oCisrCisrI2luY2x1ZGUgImppdC9wcGM2NC9NYWNyb0Fz c2VtYmxlci1wcGM2NC5oIgorKworK25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7Cisr CisrLy97e3sgY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUKKysKKysvLyA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBN b3ZlIGluc3RydWN0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU2NChSZWdpc3Rl cjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICBtb3ZlUHRyKHNyYy5yZWcsIGRlc3QucmVn KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTY0KEltbTY0IGltbSwgUmVnaXN0 ZXI2NCBkZXN0KSB7CisrICBtb3ZlUHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgZGVzdC5yZWcpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlRG91YmxlVG9HUFI2NChGbG9hdFJlZ2lz dGVyIHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICBhc19tZnZzcmQoZGVzdC5yZWcsIHNyYyk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVHUFI2NFRvRG91YmxlKFJlZ2lzdGVy NjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX210dnNyZChkZXN0LCBzcmMucmVn KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUxvd0RvdWJsZVRvR1BSKEZsb2F0 UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQ1JBU0goIk5vdCBzdXBwb3J0 ZWQgZm9yIHRoaXMgdGFyZ2V0Iik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU2 NFRvMzIoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2V4dHN3KGRlc3Qs IHNyYy5yZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlMzJUbzY0WmVyb0V4 dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgLy8gY2xybGRpIGRlc3Qs IHNyYywgMzIg4oCUIGNsZWFyIHVwcGVyIDMyIGJpdHMuCisrICBhc19ybGRpY2woZGVzdC5yZWcs IHNyYywgMCwgMzIpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlOFRvNjRTaWdu RXh0ZW5kKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICBhc19leHRzYihkZXN0 LnJlZywgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZTE2VG82NFNpZ25F eHRlbmQoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX2V4dHNoKGRlc3Qu cmVnLCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlMzJUbzY0U2lnbkV4 dGVuZChSZWdpc3RlciBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgYXNfZXh0c3coZGVzdC5y ZWcsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVGbG9hdDMyVG9HUFIo RmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIEZQUiBob2xkcyBkb3Vi bGUtZm9ybWF0IHZhbHVlIChQUEMgY29udmVudGlvbikuIENvbnZlcnQgdG8KKysgIC8vIHNpbmds ZS1wcmVjaXNpb24gYml0cyBpbiBiaXRzIDA6MzEgb2YgdGhlIFZTUiwgdGhlbiBleHRyYWN0Lgor KyAgYXNfeHNjdmRwc3BuKFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7CisrICBhc19tZnZzcmQoZGVz dCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICB4X3NyZGkoZGVzdCwgZGVzdCwgMzIpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlR1BSVG9GbG9hdDMyKFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBQbGFjZSByYXcgc2luZ2xlLXByZWNpc2lvbiBiaXRz IGluIFZTUiBiaXRzIDA6MzEsIHRoZW4gY29udmVydAorKyAgLy8gdG8gZG91YmxlLXByZWNpc2lv biBmb3JtYXQgKG1hdGNoaW5nIFBQQydzIEZQUiBjb252ZW50aW9uLCBsaWtlIGxmcykuCisrICBp ZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgLy8gbXR2c3J3cyBzcGxhdHMgdGhlIDMyLWJpdCB3b3Jk IHRvIGJvdGggaGFsdmVzIG9mIHRoZSBWU1IuCisrICAgIGFzX210dnNyd3MoZGVzdCwgc3JjKTsK KysgIH0gZWxzZSB7CisrICAgIC8vIFBPV0VSODogc2hpZnQgR1BSIGxlZnQgMzIgYml0cyB0byBw bGFjZSBmbG9hdCBiaXRzIGluIHVwcGVyIHdvcmQsCisrICAgIC8vIHRoZW4gbW92ZSB0byBWU1Iu IHhzY3ZzcGRwbiByZWFkcyBmcm9tIGJpdHMgMDozMS4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICAgIHhfc2xkaSh0bXAsIHNyYywgMzIpOworKyAgICBhc19tdHZzcmQoZGVzdCwgdG1wKTsK KysgIH0KKysgIGFzX3hzY3ZzcGRwbihkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bW92ZUZsb2F0MTZUb0dQUihGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCkgeworKyAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7CisrICAvLyBzcmMgaGFzIEZQMTYgaW4g ZHcwIGJpdHMgNDg6NjM7IHJlc3Qgb2YgZHcwIGlzIDAgKHBlciB4c2N2ZHBocCAvCisrICAvLyBs eHNpaHp4IC8gbXR2c3J3eiBjb250cmFjdCkuIG1mdnNyZCByZWFkcyBkdzAg4oaSIGRlc3QgPSAw eC4uLjAwMDBfSEhISC4KKysgIC8vIE1hc2sgZGVmZW5zaXZlbHkgaW4gY2FzZSBhIGZ1dHVyZSBj YWxsZXIgaGFuZHMgdXMgYSBub24tY2Fub25pY2FsIEZQMTYuCisrICBhc19tZnZzcmQoZGVzdCwg c3JjKTsKKysgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCA0OCk7ICAvLyBjbHJsZGkgNDg6IGtl ZXAgbG93IDE2IGJpdHMKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bW92ZUdQUlRvRmxv YXQxNihSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChI YXNQT1dFUjkoKSk7CisrICAvLyBtdHZzcnd6IHplcm9zIGR3MCB3b3JkIDAgYW5kIGNvcGllcyBz cmMncyBsb3cgMzIgdG8gZHcwIHdvcmQgMTsgbWFzaworKyAgLy8gc3JjIHRvIGl0cyBsb3cgMTYg Zmlyc3Qgc28gZHcwIGJpdHMgMzI6NDcgc3RheSB6ZXJvIChjYW5vbmljYWwgRlAxNikuCisrICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgYXNfcmxkaWNsKHNjcmF0Y2gsIHNyYywgMCwgNDgpOyAg Ly8gY2xybGRpIDQ4OiBrZWVwIG9ubHkgbG93IDE2CisrICBhc19tdHZzcnd6KGRlc3QsIHNjcmF0 Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3ZlOFplcm9FeHRlbmQoUmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAvLyBybHdpbm0gZGVzdCwgc3JjLCAwLCAyNCwg MzEg4oCUIG1hc2sgdG8gbG93IDggYml0cy4KKysgIGFzX3Jsd2lubShkZXN0LCBzcmMsIDAsIDI0 LCAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmU4U2lnbkV4dGVuZChSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2V4dHNiKGRlc3QsIHNyYyk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUxNlNpZ25FeHRlbmQoUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KSB7CisrICBhc19leHRzaChkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjptb3ZlOFNpZ25FeHRlbmRUb1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsKKysgIGFzX2V4dHNiKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6Om1vdmUxNlNpZ25FeHRlbmRUb1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKKysgIGFzX2V4dHNoKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1vdmUzMlNpZ25FeHRlbmRUb1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysg IGFzX2V4dHN3KGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmUz Mlplcm9FeHRlbmRUb1B0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3Js ZGljbChkZXN0LCBzcmMsIDAsIDMyKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTG9hZCBpbnN0 cnVjdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsb2FkMzJTaWduRXh0ZW5kVG9QdHIo Y29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBsb2FkMzIoc3JjLCBkZXN0 KTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojpsb2FkQWJpUmV0dXJuQWRkcmVzcyhSZWdpc3RlciBkZXN0KSB7IHhzX21mbHIoZGVzdCk7IH0K KysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysvLyBMb2dpY2FsIGluc3RydWN0aW9ucworKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om5vdDMyKFJlZ2lzdGVyIHJlZykgeworKyAgeF9ub3QocmVnLCByZWcpOworKyAg YXNfZXh0c3cocmVnLCByZWcpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpub3RQdHIo UmVnaXN0ZXIgcmVnKSB7IHhfbm90KHJlZywgcmVnKTsgfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFuZFB0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2FuZF8oZGVz dCwgZGVzdCwgc3JjKTsKKyt9CisrCisrLy8gSWYgYG1hc2tgIGlzIGEgbm9uLXplcm8sIG5vbi1h bGwtb25lcyBjb250aWd1b3VzIHJ1biBvZiAxLWJpdHMgaW4gYQorKy8vIDMyLWJpdCB2YWx1ZSAo TFNCLW51bWJlcmluZyksIHNldCBNQi9NRSB0byB0aGUgQkUgYml0IHBvc2l0aW9ucworKy8vIChQ UEMgY29udmVudGlvbjogYml0IDAgPSBNU0IpIG5lZWRlZCBieSBgcmx3aW5tIFNIPTBgIGFuZCBy ZXR1cm4gdHJ1ZS4KKysvLyBPdGhlcndpc2UgcmV0dXJuIGZhbHNlLiBSdW4tdGltZSBjb3N0IGlz IGF0IEpJVCBlbWl0IHRpbWUgb25seS4KKytzdGF0aWMgaW5saW5lIGJvb2wgSXNDb250aWdNYXNr MzIodWludDMyX3QgbWFzaywgdW5zaWduZWQmIG1iLCB1bnNpZ25lZCYgbWUpIHsKKysgIGlmICht YXNrID09IDAgfHwgbWFzayA9PSAweEZGRkZGRkZGdSkgcmV0dXJuIGZhbHNlOworKyAgdW5zaWdu ZWQgdHogPSAodW5zaWduZWQpX19idWlsdGluX2N0eihtYXNrKTsKKysgIHVpbnQzMl90IHNoaWZ0 ZWQgPSBtYXNrID4+IHR6OworKyAgaWYgKChzaGlmdGVkICYgKHNoaWZ0ZWQgKyAxKSkgIT0gMCkg cmV0dXJuIGZhbHNlOyAgLy8gSGFzIGEgMCBiZXR3ZWVuIDFzLgorKyAgdW5zaWduZWQgd2lkdGgg PSAzMiAtICh1bnNpZ25lZClfX2J1aWx0aW5fY2x6KHNoaWZ0ZWQpOworKyAgLy8gTFNCIGJpdHMg c2V0OiBbdHosIHR6K3dpZHRoLTFdLiBCRSBiaXRzOiBbMzItdHotd2lkdGgsIDMxLXR6XS4KKysg IG1iID0gMzIgLSB0eiAtIHdpZHRoOworKyAgbWUgPSAzMSAtIHR6OworKyAgcmV0dXJuIHRydWU7 CisrfQorKworKy8vIDY0LWJpdCBjb250aWd1b3VzLW1hc2sgY2xhc3NpZmljYXRpb24gZm9yIEFO RC13aXRoLWltbSB2aWEgUFBDJ3MKKysvLyByb3RhdGUtYW5kLW1hc2sgZmFtaWx5IChTSD0wKS4g T24gc3VjY2Vzcywgc2V0cyBgbHNiYCAoTFNCLW51bWJlcmluZworKy8vIG9mIGxvd2VzdCBzZXQg Yml0KSBhbmQgYHdpZHRoYCAobnVtYmVyIG9mIGNvbnRpZ3VvdXMgMS1iaXRzKS4KKysvLyBDYWxs ZXIgcGlja3MgdGhlIGVuY29kaW5nOgorKy8vICAgLSBsc2IgPT0gMDogICAgICAgICAgICAgICAg bG93IGB3aWR0aGAgYml0cyBzZXQgICAgICAgIOKGkiBybGRpY2wKKysvLyAgIChtYjY9NjQtd2lk dGgpCisrLy8gICAtIGxzYiArIHdpZHRoID09IDY0OiAgICAgICBoaWdoIGB3aWR0aGAgYml0cyBz ZXQgICAgICAg4oaSIHJsZGljcgorKy8vICAgKG1lNj13aWR0aC0xKQorKy8vICAgLSBsc2IgKyB3 aWR0aCA8PSAzMjogICAgICAgY29udGlnIG1hc2sgd2l0aGluIGxvdyAzMiAgIOKGkiBybHdpbm0g KHplcm9zIGhpZ2gKKysvLyAgIDMyKQorKy8vICAgLSBvdGhlcndpc2UgKG1pZC1ydW4gbWFzayBz dHJhZGRsaW5nIGJpdCAzMiB3aXRoIGxzYj4wKTogbm8gU0g9MCBzaW5nbGUKKysvLyAgICAgaW5z biBmaXRzLCByZXR1cm4gZmFsc2UgdG8gZmFsbCBiYWNrIHRvIHNjcmF0Y2grYW5kLgorK3N0YXRp YyBpbmxpbmUgYm9vbCBJc0NvbnRpZ01hc2s2NCh1aW50NjRfdCBtYXNrLCB1bnNpZ25lZCYgbHNi LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCYgd2lkdGgpIHsK KysgIGlmIChtYXNrID09IDAgfHwgbWFzayA9PSB+dWludDY0X3QoMCkpIHJldHVybiBmYWxzZTsK KysgIHVuc2lnbmVkIHR6ID0gKHVuc2lnbmVkKV9fYnVpbHRpbl9jdHpsbChtYXNrKTsKKysgIHVp bnQ2NF90IHNoaWZ0ZWQgPSBtYXNrID4+IHR6OworKyAgaWYgKChzaGlmdGVkICYgKHNoaWZ0ZWQg KyAxKSkgIT0gMCkgcmV0dXJuIGZhbHNlOyAgLy8gSGFzIGEgMCBiZXR3ZWVuIDFzLgorKyAgd2lk dGggPSA2NCAtICh1bnNpZ25lZClfX2J1aWx0aW5fY2x6bGwoc2hpZnRlZCk7CisrICBsc2IgPSB0 ejsKKysgIHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmRQdHIo SW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICAvLyBhbmRpLiBoYW5kbGVzIDE2LWJpdCB1 bnNpZ25lZCBpbW1lZGlhdGVzIGluIDEgaW5zbiAoc2V0cyBDUjApLgorKyAgLy8gRm9yIHdpZGVy IHBvc2l0aXZlIGltbWVkaWF0ZXMsIElzQ29udGlnTWFzazMyIOKGkiBybHdpbm0gKDEgaW5zbiwK KysgIC8vIGFsc28gc2V0cyBDUjApLiBOT1RFOiBhbmRQdHIgc2lnbi1leHRlbmRzIEltbTMyIHRv IDY0LWJpdCBiZWZvcmUKKysgIC8vIEFORGluZywgc28gY29udGlnLW1hc2sgaXMgb25seSBzYWZl IHdoZW4gdGhlIGltbWVkaWF0ZSBpcworKyAgLy8gbm9uLW5lZ2F0aXZlIChoaWdoIGJpdCBjbGVh cikg4oCUIHJsd2lubSBhbHdheXMgemVyb3MgdGhlIGhpZ2ggMzIuCisrICB1aW50MzJfdCB1aW1t ID0gdWludDMyX3QoaW1tLnZhbHVlKTsKKysgIGlmIChpc191aW50Tih1aW1tLCAxNikpIHsKKysg ICAgYXNfYW5kaV9yYyhkZXN0LCBkZXN0LCB1aW1tKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAg dW5zaWduZWQgbWIsIG1lOworKyAgaWYgKGltbS52YWx1ZSA+PSAwICYmIElzQ29udGlnTWFzazMy KHVpbW0sIG1iLCBtZSkpIHsKKysgICAgYXNfcmx3aW5tX3JjKGRlc3QsIGRlc3QsIDAsIG1iLCBt ZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBt b3ZlUHRyKEltbVdvcmQodWludHB0cl90KGludHB0cl90KGltbS52YWx1ZSkpKSwgc2NyYXRjaCk7 CisrICBhc19hbmRfKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphbmRQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsK KysgIGlmIChzcmMgIT0gZGVzdCkgeworKyAgICB4c19tcihkZXN0LCBzcmMpOworKyAgfQorKyAg YW5kUHRyKGltbSwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDY0KElt bTY0IGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICB1aW50NjRfdCB1ID0gaW1tLnZhbHVlOwor KyAgLy8gMTYtYml0IHVuc2lnbmVkIOKGkiBhbmRpLiAoMSBpbnNuKS4KKysgIGlmICh1IDw9IDB4 RkZGRnUpIHsKKysgICAgYXNfYW5kaV9yYyhkZXN0LnJlZywgZGVzdC5yZWcsIHVpbnQxNl90KHUp KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgdW5zaWduZWQgbHNiLCB3aWR0aDsKKysgIGlmIChJ c0NvbnRpZ01hc2s2NCh1LCBsc2IsIHdpZHRoKSkgeworKyAgICBpZiAobHNiID09IDApIHsKKysg ICAgICAvLyBsb3cgYHdpZHRoYCBiaXRzIHNldDogcmxkaWNsIFNIPTAgTUI9NjQtd2lkdGguCisr ICAgICAgYXNfcmxkaWNsX3JjKGRlc3QucmVnLCBkZXN0LnJlZywgMCwgNjQgLSB3aWR0aCk7Cisr ICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGlmIChsc2IgKyB3aWR0aCA9PSA2NCkgeworKyAg ICAgIC8vIGhpZ2ggYHdpZHRoYCBiaXRzIHNldDogcmxkaWNyIFNIPTAgTUU9d2lkdGgtMS4KKysg ICAgICBhc19ybGRpY3JfcmMoZGVzdC5yZWcsIGRlc3QucmVnLCAwLCB3aWR0aCAtIDEpOworKyAg ICAgIHJldHVybjsKKysgICAgfQorKyAgICBpZiAobHNiICsgd2lkdGggPD0gMzIpIHsKKysgICAg ICAvLyBjb250aWcgbWFzayB3aXRoaW4gbG93IDMyOiBybHdpbm0gU0g9MCB6ZXJvcyBiaXRzIDAu LjMxIHRvby4KKysgICAgICAvLyBCRSBwb3NpdGlvbnM6IG1iID0gMzIgLSBsc2IgLSB3aWR0aCwg bWUgPSAzMSAtIGxzYi4KKysgICAgICBhc19ybHdpbm1fcmMoZGVzdC5yZWcsIGRlc3QucmVnLCAw LCAzMiAtIGxzYiAtIHdpZHRoLCAzMSAtIGxzYik7CisrICAgICAgcmV0dXJuOworKyAgICB9Cisr ICAgIC8vIG1pZC1ydW4gbWFzayBzdHJhZGRsaW5nIGJpdCAzMiAobHNiPjAsIGxzYit3aWR0aD4z MiwgbHNiK3dpZHRoPDY0KToKKysgICAgLy8gbm90IGVuY29kYWJsZSBhcyBTSD0wIG1hc2suIEZh bGwgdGhyb3VnaCB0byBzY3JhdGNoK2FuZC4KKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBtb3ZlUHRyKEltbVdvcmQodSksIHNjcmF0Y2gpOworKyAgYXNfYW5kXyhkZXN0LnJl ZywgZGVzdC5yZWcsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphbmQ2 NChSZWdpc3RlcjY0IHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICBhc19hbmRfKGRlc3QucmVn LCBkZXN0LnJlZywgc3JjLnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMy KFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfYW5kXyhkZXN0LCBkZXN0LCBz cmMpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgdWludDMyX3QgdWltbSA9 IHVpbnQzMl90KGltbS52YWx1ZSk7CisrICBpZiAoaXNfdWludE4odWltbSwgMTYpKSB7CisrICAg IGFzX2FuZGlfcmMoZGVzdCwgZGVzdCwgdWltbSk7CisrICB9IGVsc2UgeworKyAgICB1bnNpZ25l ZCBtYiwgbWU7CisrICAgIGlmIChJc0NvbnRpZ01hc2szMih1aW1tLCBtYiwgbWUpKSB7CisrICAg ICAgLy8gcmx3aW5tLlNIPTAgQU5EcyB3aXRoIHRoZSBjb250aWd1b3VzIG1hc2s7IHJlY29yZCBm b3JtIHNldHMgQ1IwCisrICAgICAgLy8gdG8gbWF0Y2ggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSBh bmRpLiBmYXN0IHBhdGggYWJvdmUuCisrICAgICAgYXNfcmx3aW5tX3JjKGRlc3QsIGRlc3QsIDAs IG1iLCBtZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7CisrICAgICAgYXNfYW5kXyhkZXN0LCBk ZXN0LCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAgeHNfbXIoZGVz dCwgc3JjKTsKKysgIH0KKysgIGFuZDMyKGltbSwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmFuZDMyKEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgeworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihkZXN0LCBzY3JhdGNoKTsKKysgIGFuZDMy KGltbSwgc2NyYXRjaCk7CisrICBzdG9yZTMyKHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjphbmQzMihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3Qp IHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsK KysgIGFzX2FuZF8oZGVzdCwgZGVzdCwgc2NyYXRjaCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3I2NChJbW02NCBpbW0sIFJlZ2lzdGVy NjQgZGVzdCkgeworKyAgdWludDY0X3QgdSA9IGltbS52YWx1ZTsKKysgIC8vIG9yaS9vcmlzIHpl cm8tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZXMgYW5kIGRvbid0IHRvdWNoIG90aGVyIGJpdHMsIHNv CisrICAvLyB3aGVuIGltbSBmaXRzIGluIHVuc2lnbmVkIDMyIChoaWdoIDMyID09IDApIHRoZSBw YWlyIGhhbmRsZXMgaXQgaW4KKysgIC8vIDEtMiBpbnNucyB3aXRoIG5vIHNjcmF0Y2guCisrICBp ZiAodSA8PSAweEZGRkZGRkZGdSkgeworKyAgICB1aW50MTZfdCBsbyA9IHVpbnQxNl90KHUpOwor KyAgICB1aW50MTZfdCBoaSA9IHVpbnQxNl90KHUgPj4gMTYpOworKyAgICBpZiAoaGkgPT0gMCkg eworKyAgICAgIGFzX29yaShkZXN0LnJlZywgZGVzdC5yZWcsIGxvKTsKKysgICAgfSBlbHNlIGlm IChsbyA9PSAwKSB7CisrICAgICAgYXNfb3JpcyhkZXN0LnJlZywgZGVzdC5yZWcsIGhpKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBhc19vcmkoZGVzdC5yZWcsIGRlc3QucmVnLCBsbyk7CisrICAg ICAgYXNfb3JpcyhkZXN0LnJlZywgZGVzdC5yZWcsIGhpKTsKKysgICAgfQorKyAgICByZXR1cm47 CisrICB9CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0cihJbW1Xb3JkKHUp LCBzY3JhdGNoKTsKKysgIGFzX29yXyhkZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvcjMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCkgeworKyAgYXNfb3JfKGRlc3QsIGRlc3QsIHNyYyk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVy IGRlc3QpIHsKKysgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUpOworKyAgdWlu dDE2X3QgbG8gPSB1aW1tICYgMHhGRkZGOworKyAgdWludDE2X3QgaGkgPSAodWltbSA+PiAxNikg JiAweEZGRkY7CisrICBpZiAoaGkgPT0gMCkgeworKyAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8p OworKyAgfSBlbHNlIGlmIChsbyA9PSAwKSB7CisrICAgIGFzX29yaXMoZGVzdCwgZGVzdCwgaGkp OworKyAgfSBlbHNlIHsKKysgICAgLy8gb3JpICsgb3JpcyBwYWlyIGhhbmRsZXMgYXJiaXRyYXJ5 IDMyLWJpdCB1bnNpZ25lZCBpbW0gaW4gMiBpbnNucworKyAgICAvLyB3aXRob3V0IGEgc2NyYXRj aCBHUFIuIG9yaS9vcmlzIGFyZSBub24tcmVjb3JkIGZvcm1zIChkb24ndCB0b3VjaAorKyAgICAv LyBDUjApLCBtYXRjaGluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIHByZXZpb3VzIHNjcmF0Y2grb3Jf IHBhdGgKKysgICAgLy8gKG9yXyBpcyB0aGUgcmVjb3JkIGZvcm0sIGJ1dCB0aGUgdmFsdWUtb25s eSByZXN1bHQgaXMgd2hhdCBjYWxsZXJzCisrICAgIC8vIG9ic2VydmUgdGhyb3VnaCBkZXN0KS4K KysgICAgYXNfb3JpKGRlc3QsIGRlc3QsIGxvKTsKKysgICAgYXNfb3JpcyhkZXN0LCBkZXN0LCBo aSk7CisrICB9CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6b3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewor KyAgaWYgKHNyYyAhPSBkZXN0KSB7CisrICAgIHhzX21yKGRlc3QsIHNyYyk7CisrICB9CisrICBv cjMyKGltbSwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yMzIoSW1tMzIg aW1tLCBjb25zdCBBZGRyZXNzJiBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgbG9hZDMyKGRlc3QsIHNjcmF0Y2gpOworKyAgb3IzMihpbW0sIHNjcmF0Y2gpOworKyAgc3Rv cmUzMihzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yNjQo SW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIHVpbnQ2NF90IHUgPSBpbW0udmFsdWU7 CisrICAvLyB4b3JpL3hvcmlzIHplcm8tZXh0ZW5kIHRoZWlyIGltbWVkaWF0ZXM7IGZvciB1bnNp Z25lZC0zMi1maXQgdmFsdWVzCisrICAvLyB0aGV5IHJlcGxhY2UgdGhlIHNjcmF0Y2greG9yIHNl cXVlbmNlIHdpdGggMS0yIGluc25zLgorKyAgaWYgKHUgPD0gMHhGRkZGRkZGRnUpIHsKKysgICAg dWludDE2X3QgbG8gPSB1aW50MTZfdCh1KTsKKysgICAgdWludDE2X3QgaGkgPSB1aW50MTZfdCh1 ID4+IDE2KTsKKysgICAgaWYgKGhpID09IDApIHsKKysgICAgICBhc194b3JpKGRlc3QucmVnLCBk ZXN0LnJlZywgbG8pOworKyAgICB9IGVsc2UgaWYgKGxvID09IDApIHsKKysgICAgICBhc194b3Jp cyhkZXN0LnJlZywgZGVzdC5yZWcsIGhpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc194b3Jp KGRlc3QucmVnLCBkZXN0LnJlZywgbG8pOworKyAgICAgIGFzX3hvcmlzKGRlc3QucmVnLCBkZXN0 LnJlZywgaGkpOworKyAgICB9CisrICAgIHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBtb3ZlUHRyKEltbVdvcmQodSksIHNjcmF0Y2gpOworKyAgYXNfeG9yXyhk ZXN0LnJlZywgZGVzdC5yZWcsIHNjcmF0Y2gpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpvclB0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX29yXyhkZXN0LCBk ZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvclB0cihJbW0zMiBpbW0s IFJlZ2lzdGVyIGRlc3QpIHsKKysgIHVpbnQzMl90IHVpbW0gPSB1aW50MzJfdChpbW0udmFsdWUp OworKyAgdWludDE2X3QgbG8gPSB1aW1tICYgMHhGRkZGOworKyAgdWludDE2X3QgaGkgPSAodWlt bSA+PiAxNikgJiAweEZGRkY7CisrICAvLyBvcmkvb3JpcyB6ZXJvLWV4dGVuZCB0aGVpciBpbW1l ZGlhdGVzLCBzbyBmb3Igbm9uLW5lZ2F0aXZlIEltbTMyIChoaWdoCisrICAvLyAzMiBvZiBzaWdu LWV4dGVuZGVkIHZhbHVlID0gMCkgd2UgY2FuIHVzZSBvcmkrb3JpcyB0byBPUiB0aGUgZnVsbAor KyAgLy8gMzItYml0IHBhdHRlcm4gaW4gMS0yIGluc25zLiBOZWdhdGl2ZSBJbW0zMiBzaWduLWV4 dGVuZHMgdG8gc2V0IGhpZ2gKKysgIC8vIGJpdHMgMzIuLjYzIGluIHRoZSBPUiDigJQgdGhvc2Ug Yml0cyB3b3VsZCBiZSBsb3N0IHdpdGggb3JpK29yaXMgYWxvbmUuCisrICBpZiAoaW1tLnZhbHVl ID49IDApIHsKKysgICAgaWYgKGhpID09IDApIHsKKysgICAgICBhc19vcmkoZGVzdCwgZGVzdCwg bG8pOworKyAgICB9IGVsc2UgaWYgKGxvID09IDApIHsKKysgICAgICBhc19vcmlzKGRlc3QsIGRl c3QsIGhpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8pOwor KyAgICAgIGFzX29yaXMoZGVzdCwgZGVzdCwgaGkpOworKyAgICB9CisrICAgIHJldHVybjsKKysg IH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKEltbVdvcmQodWludHB0 cl90KGludHB0cl90KGltbS52YWx1ZSkpKSwgc2NyYXRjaCk7CisrICBhc19vcl8oZGVzdCwgZGVz dCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yUHRyKEltbTMyIGlt bSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoc3JjICE9IGRlc3QpIHsK KysgICAgeHNfbXIoZGVzdCwgc3JjKTsKKysgIH0KKysgIG9yUHRyKGltbSwgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9yNjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQg ZGVzdCkgeworKyAgYXNfb3JfKGRlc3QucmVnLCBkZXN0LnJlZywgc3JjLnJlZyk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvcjY0KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRl c3QpIHsKKysgIGFzX3hvcl8oZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMucmVnKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkg eworKyAgYXNfeG9yXyhkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp4b3JQdHIoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7CisrICB1aW50MzJfdCB1aW1t ID0gdWludDMyX3QoaW1tLnZhbHVlKTsKKysgIHVpbnQxNl90IGxvID0gdWltbSAmIDB4RkZGRjsK KysgIHVpbnQxNl90IGhpID0gKHVpbW0gPj4gMTYpICYgMHhGRkZGOworKyAgaWYgKGltbS52YWx1 ZSA+PSAwKSB7CisrICAgIGlmIChoaSA9PSAwKSB7CisrICAgICAgYXNfeG9yaShkZXN0LCBkZXN0 LCBsbyk7CisrICAgIH0gZWxzZSBpZiAobG8gPT0gMCkgeworKyAgICAgIGFzX3hvcmlzKGRlc3Qs IGRlc3QsIGhpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxv KTsKKysgICAgICBhc194b3JpcyhkZXN0LCBkZXN0LCBoaSk7CisrICAgIH0KKysgICAgcmV0dXJu OworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZCh1 aW50cHRyX3QoaW50cHRyX3QoaW1tLnZhbHVlKSkpLCBzY3JhdGNoKTsKKysgIGFzX3hvcl8oZGVz dCwgZGVzdCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvclB0cihJ bW0zMiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKHNyYyAhPSBk ZXN0KSB7CisrICAgIHhzX21yKGRlc3QsIHNyYyk7CisrICB9CisrICB4b3JQdHIoaW1tLCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoUmVnaXN0ZXIgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICBhc194b3JfKGRlc3QsIGRlc3QsIHNyYyk7CisrICBhc19leHRzdyhk ZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6eG9yMzIoSW1tMzIgaW1t LCBSZWdpc3RlciBkZXN0KSB7CisrICB1aW50MzJfdCB1aW1tID0gdWludDMyX3QoaW1tLnZhbHVl KTsKKysgIHVpbnQxNl90IGxvID0gdWltbSAmIDB4RkZGRjsKKysgIHVpbnQxNl90IGhpID0gKHVp bW0gPj4gMTYpICYgMHhGRkZGOworKyAgaWYgKGhpID09IDApIHsKKysgICAgYXNfeG9yaShkZXN0 LCBkZXN0LCBsbyk7CisrICB9IGVsc2UgaWYgKGxvID09IDApIHsKKysgICAgYXNfeG9yaXMoZGVz dCwgZGVzdCwgaGkpOworKyAgfSBlbHNlIHsKKysgICAgLy8geG9yaSArIHhvcmlzIHBhaXIg4oCU IDIgaW5zbnMsIG5vIHNjcmF0Y2ggR1BSLgorKyAgICBhc194b3JpKGRlc3QsIGRlc3QsIGxvKTsK KysgICAgYXNfeG9yaXMoZGVzdCwgZGVzdCwgaGkpOworKyAgfQorKyAgYXNfZXh0c3coZGVzdCwg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnhvcjMyKEltbTMyIGltbSwgUmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAg eHNfbXIoZGVzdCwgc3JjKTsKKysgIH0KKysgIHhvcjMyKGltbSwgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnhvcjMyKEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkg eworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihkZXN0LCBzY3JhdGNoKTsK KysgIHhvcjMyKGltbSwgc2NyYXRjaCk7CisrICBzdG9yZTMyKHNjcmF0Y2gsIGRlc3QpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp4b3IzMihjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK KysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoc3JjLCBz Y3JhdGNoKTsKKysgIHhvcjMyKHNjcmF0Y2gsIGRlc3QpOworK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysv LyBTd2FwIGluc3RydWN0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJ5dGVTd2FwMTZT aWduRXh0ZW5kKFJlZ2lzdGVyIHJlZykgeworKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAv LyBicmggYnl0ZS1yZXZlcnNlcyBldmVyeSBoYWxmd29yZCBpbiByZWc7IGV4dHNoIGtlZXBzIGp1 c3QgdGhlCisrICAgIC8vIGxvdyBoYWxmd29yZCdzIGJ5dGUtcmV2ZXJzZWQgdmFsdWUsIHNpZ24t ZXh0ZW5kZWQgdG8gNjQgYml0cy4KKysgICAgYXNfYnJoKHJlZywgcmVnKTsKKysgICAgYXNfZXh0 c2gocmVnLCByZWcpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyBQT1dFUjgvOTogcm90YXRl LWFuZC1tYXNrIHN5bnRoZXNpcy4gU3dhcCBieXRlcyBpbiBsb3cgaGFsZndvcmQgdmlhCisrICAv LyAocmVnPDw4KSYweEZGMDAgfCAocmVnPj44KSYweEZGLCB0aGVuIHNpZ24tZXh0ZW5kLgorKyAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2Ny YXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFzX3Jsd2lubShzY3JhdGNoLCByZWcsIDgsIDE2 LCAyMyk7ICAvLyBzY3JhdGNoID0gKHJlZzw8OCkgJiAweEZGMDAKKysgIGFzX3Jsd2lubShyZWcs IHJlZywgMjQsIDI0LCAzMSk7ICAgICAvLyByZWcgPSAocmVnPj44KSAmIDB4RkYKKysgIGFzX29y XyhyZWcsIHJlZywgc2NyYXRjaCk7CisrICBhc19leHRzaChyZWcsIHJlZyk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJ5dGVTd2FwMTZaZXJvRXh0ZW5kKFJlZ2lzdGVyIHJlZykgewor KyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAvLyBicmggYnl0ZS1yZXZlcnNlcyBldmVyeSBo YWxmd29yZDsgcmxkaWNsIHdpdGggc2g9MCxtYj00OCB6ZXJvZXMKKysgICAgLy8gdGhlIHVwcGVy IDQ4IGJpdHMg4oCUIG5vIENSMCBzaWRlIGVmZmVjdCAodnMgYW5kaS4pLgorKyAgICBhc19icmgo cmVnLCByZWcpOworKyAgICBhc19ybGRpY2wocmVnLCByZWcsIDAsIDQ4KTsKKysgICAgcmV0dXJu OworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIC8vIEJvdGggcmx3aW5tIGZv cm1zIHplcm8tZXh0ZW5kIHRoZSA2NC1iaXQgZGVzdGluYXRpb24gcGVyIElTQSB2My4wQgorKyAg Ly8gKG1hc2sgTSA9IE1BU0soTUIrMzIsIE1FKzMyKSBpcyAwIGFib3ZlIGJpdCAzMSksIHNvIGFm dGVyIHRoZSBPUiB0aGUKKysgIC8vIHVwcGVyIDQ4IGJpdHMgYXJlIGFscmVhZHkgemVybyDigJQg bm8gZm9sbG93LXVwIGNsZWFyaW5nIG5lZWRlZC4KKysgIGFzX3Jsd2lubShzY3JhdGNoLCByZWcs IDgsIDE2LCAyMyk7CisrICBhc19ybHdpbm0ocmVnLCByZWcsIDI0LCAyNCwgMzEpOworKyAgYXNf b3JfKHJlZywgcmVnLCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0 ZVN3YXAzMihSZWdpc3RlciByZWcpIHsKKysgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgLy8g YnJ3IGJ5dGUtcmV2ZXJzZXMgYm90aCAzMi1iaXQgaGFsdmVzOyBleHRzdyBkcm9wcyB0aGUgdXBw ZXIgaGFsZgorKyAgICAvLyBhbmQgc2lnbi1leHRlbmRzIHRoZSBieXRlLXJldmVyc2VkIGxvdyB3 b3JkIHRvIDY0IGJpdHMuCisrICAgIGFzX2JydyhyZWcsIHJlZyk7CisrICAgIGFzX2V4dHN3KHJl ZywgcmVnKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgLy8gUE9XRVI4Lzk6IHJvdGF0ZS13aXRo LWluc2VydCBzeW50aGVzaXMgKDQgaW5zbnMpLgorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgIC8vIHNjcmF0Y2ggPSByb3RhdGUgcmVnIGxlZnQgOCwgbWFzayBieXRlcyAwLDMKKysgIGFz X3Jsd2lubShzY3JhdGNoLCByZWcsIDgsIDAsIDMxKTsgICAgLy8gcm90bDMyIGJ5IDgKKysgIGFz X3Jsd2ltaShzY3JhdGNoLCByZWcsIDI0LCAwLCA3KTsgICAgLy8gaW5zZXJ0IGJ5dGUgMAorKyAg YXNfcmx3aW1pKHNjcmF0Y2gsIHJlZywgMjQsIDE2LCAyMyk7ICAvLyBpbnNlcnQgYnl0ZSAyCisr ICAvLyBTaWduLWV4dGVuZCB0byA2NCBiaXRzIChhcyAzMi1iaXQgdmFsdWUpLgorKyAgYXNfZXh0 c3cocmVnLCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Ynl0ZVN3YXA2 NChSZWdpc3RlcjY0IHJlZzY0KSB7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIC8vIDEg aW5zbiwgbm8gRlBSIHJvdW5kLXRyaXAuCisrICAgIGFzX2JyZChyZWc2NC5yZWcsIHJlZzY0LnJl Zyk7CisrICB9IGVsc2UgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX210dnNyZChTY3JhdGNo RG91YmxlUmVnLCByZWc2NC5yZWcpOworKyAgICBhc194eGJyZChTY3JhdGNoRG91YmxlUmVnLCBT Y3JhdGNoRG91YmxlUmVnKTsKKysgICAgYXNfbWZ2c3JkKHJlZzY0LnJlZywgU2NyYXRjaERvdWJs ZVJlZyk7CisrICB9IGVsc2UgeworKyAgICAvLyBQT1dFUjg6IGJ5dGUtc3dhcCB2aWEgc3RhY2sg dXNpbmcgc3R3YnJ4ICh3b3JkIGJ5dGUtcmV2ZXJzZSBzdG9yZSkuCisrICAgIC8vIHN0d2JyeCBS UyxSQSxSQiBzdG9yZXMgUlMgYnl0ZS1yZXZlcnNlZCBhdCBSQStSQi4KKysgICAgLy8gRm9yIDY0 LWJpdCBzd2FwOiBzdG9yZSBoaWdoIHdvcmQgcmV2ZXJzZWQgYXQgYWRkciswLCBsb3cgd29yZCBh dCBhZGRyKzQuCisrICAgIFJlZ2lzdGVyIHIgPSByZWc2NC5yZWc7CisrICAgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNx dWlyZSgpOworKyAgICBhc19zdGR1KFN0YWNrUG9pbnRlciwgU3RhY2tQb2ludGVyLCAtMTYpOwor KyAgICAvLyBTdG9yZSBsb3cgMzIgYml0cyBieXRlLXJldmVyc2VkIGF0IFNQKzEyLgorKyAgICBh c19hZGRpKHRtcCwgU3RhY2tQb2ludGVyLCAxMik7CisrICAgIGFzX3N0d2JyeChyLCByMCwgdG1w KTsgIC8vIHIwIGFzIFJBID0gMCwgc28gYWRkciA9IHRtcAorKyAgICAvLyBTdG9yZSBoaWdoIDMy IGJpdHMgYnl0ZS1yZXZlcnNlZCBhdCBTUCs4LgorKyAgICB4X3NyZGkociwgciwgMzIpOworKyAg ICBhc19hZGRpKHRtcCwgU3RhY2tQb2ludGVyLCA4KTsKKysgICAgYXNfc3R3YnJ4KHIsIHIwLCB0 bXApOyAgLy8gYWRkciA9IHRtcAorKyAgICAvLyBMb2FkIHJldmVyc2VkIDY0LWJpdCB2YWx1ZSBm cm9tIFNQKzguCisrICAgIGFzX2xkKHIsIFN0YWNrUG9pbnRlciwgOCk7CisrICAgIGFzX2FkZGko U3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDE2KTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrLy8gQXJpdGhtZXRpYyBmdW5jdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQ dHIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19hZGQoZGVzdCwgZGVzdCwg c3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkUHRyKEltbTMyIGltbSwgUmVn aXN0ZXIgZGVzdCkgeworKyAgaW50MzJfdCB2YWwgPSBpbW0udmFsdWU7CisrICBpZiAoaXNfaW50 Tih2YWwsIDE2KSkgeworKyAgICBhc19hZGRpKGRlc3QsIGRlc3QsIHZhbCk7CisrICAgIHJldHVy bjsKKysgIH0KKysgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgLy8gSW1tMzIgYWx3YXlzIGZp dHMgMzQtYml0IHNpZ25lZDsgcGFkZGkgZG9lcyBkZXN0ID0gZGVzdCArIGltbSBpbiBvbmUKKysg ICAgLy8gcHJlZml4ZWQgaW5zdHJ1Y3Rpb24gd2l0aCBubyBzY3JhdGNoLgorKyAgICBhc19wYWRk aShkZXN0LCBkZXN0LCBpbnQ2NF90KHZhbCksIC8qUj0qL2ZhbHNlKTsKKysgICAgcmV0dXJuOwor KyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZChpbnQ2 NF90KHZhbCkpLCBzY3JhdGNoKTsKKysgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkUHRyKEltbVdvcmQgaW1tLCBSZWdpc3RlciBk ZXN0KSB7CisrICBpZiAoaXNfaW50TihpbnQ2NF90KGltbS52YWx1ZSksIDE2KSkgeworKyAgICBh c19hZGRpKGRlc3QsIGRlc3QsIGludDE2X3QoaW1tLnZhbHVlKSk7CisrICAgIHJldHVybjsKKysg IH0KKysgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpaW1tLnZhbHVlLCAz NCkpIHsKKysgICAgYXNfcGFkZGkoZGVzdCwgZGVzdCwgKGludDY0X3QpaW1tLnZhbHVlLCAvKlI9 Ki9mYWxzZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICBtb3ZlUHRyKGltbSwgc2NyYXRjaCk7CisrICBhc19hZGQoZGVzdCwgZGVzdCwgc2NyYXRj aCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZDY0KFJlZ2lzdGVyNjQgc3JjLCBS ZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX2FkZChkZXN0LnJlZywgZGVzdC5yZWcsIHNyYy5yZWcp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQ2NChJbW0zMiBpbW0sIFJlZ2lzdGVy NjQgZGVzdCkgeworKyAgYWRkUHRyKEltbTMyKGltbS52YWx1ZSksIGRlc3QucmVnKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkNjQoSW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3Qp IHsKKysgIGlmIChpc19pbnROKGludDY0X3QoaW1tLnZhbHVlKSwgMTYpKSB7CisrICAgIGFzX2Fk ZGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbnQxNl90KGltbS52YWx1ZSkpOworKyAgICByZXR1cm47 CisrICB9CisrICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludDY0X3QpaW1tLnZhbHVl LCAzNCkpIHsKKysgICAgYXNfcGFkZGkoZGVzdC5yZWcsIGRlc3QucmVnLCAoaW50NjRfdClpbW0u dmFsdWUsIC8qUj0qL2ZhbHNlKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIE1PWl9BU1NFUlQoZGVzdC5yZWcgIT0gc2NyYXRjaCk7CisrICBtb3Zl UHRyKEltbVdvcmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7CisrICBhc19hZGQoZGVzdC5yZWcsIGRl c3QucmVnLCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkMzIoUmVn aXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19hZGQoZGVzdCwgZGVzdCwgc3JjKTsK KysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph ZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChpc19pbnROKGltbS52YWx1 ZSwgMTYpKSB7CisrICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgaW1tLnZhbHVlKTsKKysgIH0gZWxz ZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKGltbSwgc2Ny YXRjaCk7CisrICAgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3JhdGNoKTsKKysgIH0KKysgIGFzX2V4 dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGQzMihJbW0z MiBpbW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgbW92ZTMyKHNyYywgZGVz dCk7CisrICBhZGQzMihpbW0sIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph ZGQzMihJbW0zMiBpbW0sIGNvbnN0IEFkZHJlc3MmIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkMzIoZGVzdCwgc2NyYXRjaCk7CisrICBhZGQzMihpbW0sIHNjcmF0 Y2gpOworKyAgc3RvcmUzMihzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YWRkMzIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VT Y3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKHNyYywgc2NyYXRjaCk7CisrICBhc19hZGQo ZGVzdCwgZGVzdCwgc2NyYXRjaCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWRkUHRyKEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVz dCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIoZGVzdCwgc2NyYXRj aCk7CisrICBhZGRQdHIoaW1tLCBzY3JhdGNoKTsKKysgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3Qp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRQdHIoY29uc3QgQWRkcmVzcyYgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0 cihzcmMsIHNjcmF0Y2gpOworKyAgYWRkUHRyKHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjphZGREb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgYXNfZmFkZChkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphZGRGbG9hdDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIGFzX2ZhZGRzKGRlc3QsIGRlc3QsIHNyYyk7CisrfQorKworK0NvZGVPZmZz ZXQgTWFjcm9Bc3NlbWJsZXI6OnN1YjMyRnJvbVN0YWNrUHRyV2l0aFBhdGNoKFJlZ2lzdGVyIGRl c3QpIHsKKysgIENvZGVPZmZzZXQgb2Zmc2V0ID0gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkp OworKyAgZW1pdExvYWQ2NFN0YW56YShkZXN0LCAwKTsKKysgIGFzX3N1YmYoZGVzdCwgZGVzdCwg U3RhY2tQb2ludGVyKTsKKysgIHJldHVybiBvZmZzZXQ7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnBhdGNoU3ViMzJGcm9tU3RhY2tQdHIoQ29kZU9mZnNldCBvZmZzZXQsIEltbTMyIGlt bSkgeworKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1Y3Rpb24qKWVkaXRTcmMoQnVmZmVy T2Zmc2V0KG9mZnNldC5vZmZzZXQoKSkpOworKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwgdWlu dDY0X3QoaW50NjRfdChpbW0udmFsdWUpKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OnN1YlB0cihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3N1YmYoZGVzdCwg c3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKEltbTMyIGlt bSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKGlzX2ludE4oLWludDY0X3QoaW1tLnZhbHVlKSwg MTYpKSB7CisrICAgIGFzX2FkZGkoZGVzdCwgZGVzdCwgLWltbS52YWx1ZSk7CisrICAgIHJldHVy bjsKKysgIH0KKysgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgLy8gLUltbTMyIGZpdHMgMzQt Yml0IHNpZ25lZCAod29yc3QgY2FzZSAtSU5UMzJfTUlOID0gKzJeMzEsIHdlbGwgd2l0aGluCisr ICAgIC8vIMKxMl4zMykuIHBhZGRpIHdpdGggdGhlIG5lZ2F0ZWQgaW1tZWRpYXRlIGRvZXMgdGhl IHN1YnRyYWN0IGluIDEgcHJlZml4ZWQKKysgICAgLy8gaW5zbiB3aXRoIG5vIHNjcmF0Y2guCisr ICAgIGFzX3BhZGRpKGRlc3QsIGRlc3QsIC1pbnQ2NF90KGltbS52YWx1ZSksIC8qUj0qL2ZhbHNl KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1v dmVQdHIoSW1tV29yZChpbnQ2NF90KGltbS52YWx1ZSkpLCBzY3JhdGNoKTsKKysgIGFzX3N1YmYo ZGVzdCwgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YjY0 KFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGFzX3N1YmYoZGVzdC5yZWcs IHNyYy5yZWcsIGRlc3QucmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViNjQo SW1tNjQgaW1tLCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIGlmIChpc19pbnROKC1pbnQ2NF90KGlt bS52YWx1ZSksIDE2KSkgeworKyAgICBhc19hZGRpKGRlc3QucmVnLCBkZXN0LnJlZywgaW50MTZf dCgtaW50NjRfdChpbW0udmFsdWUpKSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIGlmIChIYXNQ T1dFUjEwKCkgJiYgaXNfaW50TigtKGludDY0X3QpaW1tLnZhbHVlLCAzNCkpIHsKKysgICAgYXNf cGFkZGkoZGVzdC5yZWcsIGRlc3QucmVnLCAtKGludDY0X3QpaW1tLnZhbHVlLCAvKlI9Ki9mYWxz ZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBN T1pfQVNTRVJUKGRlc3QucmVnICE9IHNjcmF0Y2gpOworKyAgbW92ZVB0cihJbW1Xb3JkKGltbS52 YWx1ZSksIHNjcmF0Y2gpOworKyAgYXNfc3ViZihkZXN0LnJlZywgc2NyYXRjaCwgZGVzdC5yZWcp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWIzMihSZWdpc3RlciBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKKysgIGFzX3N1YmYoZGVzdCwgc3JjLCBkZXN0KTsKKysgIGFzX2V4dHN3KGRl c3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWIzMihJbW0zMiBpbW0s IFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChpc19pbnROKC1pbnQ2NF90KGltbS52YWx1ZSksIDE2 KSkgeworKyAgICBhc19hZGRpKGRlc3QsIGRlc3QsIC1pbW0udmFsdWUpOworKyAgfSBlbHNlIHsK KysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNo KTsKKysgICAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKKysgIH0KKysgIGFzX2V4dHN3 KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWIzMihjb25zdCBB ZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKKysgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgZGVz dCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6c3ViUHRyKFJlZ2lzdGVyIHNyYywgY29uc3QgQWRkcmVzcyYgZGVzdCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIoZGVzdCwgc2NyYXRjaCk7CisrICBhc19zdWJm KHNjcmF0Y2gsIHNyYywgc2NyYXRjaCk7CisrICBzdG9yZVB0cihzY3JhdGNoLCBkZXN0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViUHRyKGNvbnN0IEFkZHJlc3MmIGFkZHIsIFJl Z2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGFk ZHIsIHNjcmF0Y2gpOworKyAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKKysgIGFzX2ZzdWIoZGVzdCwgZGVzdCwgc3JjKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxvYXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBhc19mc3VicyhkZXN0LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptdWw2NChjb25zdCBSZWdpc3RlcjY0JiByaHMsIGNvbnN0IFJlZ2lz dGVyNjQmIHNyY0Rlc3QpIHsKKysgIGFzX211bGxkKHNyY0Rlc3QucmVnLCBzcmNEZXN0LnJlZywg cmhzLnJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0KEltbTY0IGltbSwg Y29uc3QgUmVnaXN0ZXI2NCYgZGVzdCkgeworKyAgaWYgKGlzX2ludE4oaW50NjRfdChpbW0udmFs dWUpLCAxNikpIHsKKysgICAgYXNfbXVsbGkoZGVzdC5yZWcsIGRlc3QucmVnLCBpbnQxNl90KGlt bS52YWx1ZSkpOworKyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBNT1pfQVNTRVJUKGRlc3QucmVnICE9IHNjcmF0Y2gpOworKyAgICBtb3ZlUHRyKEltbVdv cmQoaW1tLnZhbHVlKSwgc2NyYXRjaCk7CisrICAgIGFzX211bGxkKGRlc3QucmVnLCBkZXN0LnJl Zywgc2NyYXRjaCk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDY0KElt bTY0IGltbSwgY29uc3QgUmVnaXN0ZXI2NCYgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBSZWdpc3RlciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0 ZXI6OkludmFsaWQoKSk7CisrICBtdWw2NChpbW0sIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjptdWw2NChjb25zdCBSZWdpc3RlcjY0JiBzcmMsIGNvbnN0IFJlZ2lzdGVyNjQm IGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVnaXN0ZXIgdGVtcCkg eworKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOworKyAgYXNfbXVs bGQoZGVzdC5yZWcsIGRlc3QucmVnLCBzcmMucmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6bXVsUHRyKFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgYXNfbXVs bGQoc3JjRGVzdCwgc3JjRGVzdCwgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bXVsUHRyKEltbVdvcmQgcmhzLCBSZWdpc3RlciBzcmNEZXN0KSB7CisrICBpZiAoaXNfaW50Tihp bnQ2NF90KHJocy52YWx1ZSksIDE2KSkgeworKyAgICBhc19tdWxsaShzcmNEZXN0LCBzcmNEZXN0 LCBpbnQxNl90KHJocy52YWx1ZSkpOworKyAgICByZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgTU9aX0FTU0VSVChzcmNEZXN0ICE9IHNjcmF0Y2gpOworKyAgbW92 ZVB0cihyaHMsIHNjcmF0Y2gpOworKyAgbXVsUHRyKHNjcmF0Y2gsIHNyY0Rlc3QpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxCeTMoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0 KSB7CisrICAvLyBtdWxsaSBpcyB0aGUgMTYtYml0LWltbWVkaWF0ZSBmb3JtIG9mIG11bGxkLiAx IGluc24sIG5vIHNjcmF0Y2gsCisrICAvLyBzcmM9PWRlc3QgYWxpYXNpbmcgc2FmZSAoUkEgcmVh ZCBiZWZvcmUgUlQgd3JpdGUpLgorKyAgYXNfbXVsbGkoZGVzdCwgc3JjLCAzKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6bXVsMzIoUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBzcmNEZXN0 KSB7CisrICBhc19tdWxsdyhzcmNEZXN0LCBzcmNEZXN0LCByaHMpOworKyAgYXNfZXh0c3coc3Jj RGVzdCwgc3JjRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bDMyKEltbTMy IGltbSwgUmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgaWYgKGlzX2ludE4oaW1tLnZhbHVlLCAxNikp IHsKKysgICAgYXNfbXVsbGkoc3JjRGVzdCwgc3JjRGVzdCwgaW1tLnZhbHVlKTsKKysgIH0gZWxz ZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKGltbSwgc2Ny YXRjaCk7CisrICAgIGFzX211bGx3KHNyY0Rlc3QsIHNyY0Rlc3QsIHNjcmF0Y2gpOworKyAgfQor KyAgYXNfZXh0c3coc3JjRGVzdCwgc3JjRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om11bEhpZ2hVbnNpZ25lZDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBk ZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTU9aX0FTU0VSVChzcmMgIT0g c2NyYXRjaCk7CisrICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKKysgIGFzX211bGh3dShkZXN0LCBz cmMsIHNjcmF0Y2gpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om11bEZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgYXNfZm11bHMoZGVzdCwgZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bXVsRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIGFzX2ZtdWwoZGVzdCwgZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bXVsRG91YmxlUHRyKEltbVB0ciBpbW0sIFJlZ2lzdGVyIHRlbXAsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKKysgIGFzX2xm ZChTY3JhdGNoRG91YmxlUmVnLCBzY3JhdGNoLCAwKTsKKysgIGFzX2ZtdWwoZGVzdCwgZGVzdCwg U2NyYXRjaERvdWJsZVJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmluYzY0KEFi c29sdXRlQWRkcmVzcyBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBhZGRyUmVnID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92 ZVB0cihJbW1Xb3JkKHVpbnRwdHJfdChkZXN0LmFkZHIpKSwgYWRkclJlZyk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gU2Vjb25kU2NyYXRjaFJlZzsKKysgIGFzX2xkKHNjcmF0Y2gsIGFkZHJSZWcs IDApOworKyAgYXNfYWRkaShzY3JhdGNoLCBzY3JhdGNoLCAxKTsKKysgIGFzX3N0ZChzY3JhdGNo LCBhZGRyUmVnLCAwKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZGl2RmxvYXQzMihG bG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19mZGl2cyhkZXN0 LCBkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpkaXZEb3VibGUoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfZmRpdihkZXN0LCBk ZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpxdW90aWVudDMyKFJlZ2lz dGVyIGxocywgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKSB7CisrICBpZiAoaXNVbnNpZ25lZCkgewor KyAgICBhc19kaXZ3dShkZXN0LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc19kaXZ3 KGRlc3QsIGxocywgcmhzKTsKKysgIH0KKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpxdW90aWVudDY0KFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIg cmhzLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBpc1Vuc2lnbmVkKSB7CisrICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICBhc19kaXZkdShkZXN0 LCBsaHMsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc19kaXZkKGRlc3QsIGxocywgcmhzKTsK KysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmVtYWluZGVyMzIoUmVnaXN0ZXIg bGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysg ICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19tb2R1dyhkZXN0LCBsaHMsIHJocyk7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgYXNfbW9kc3coZGVzdCwgbGhzLCByaHMpOworKyAgICB9Cisr ICB9IGVsc2UgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGlmIChpc1Vu c2lnbmVkKSB7CisrICAgICAgYXNfZGl2d3Uoc2NyYXRjaCwgbGhzLCByaHMpOworKyAgICAgIGFz X211bGx3KHNjcmF0Y2gsIHNjcmF0Y2gsIHJocyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNf ZGl2dyhzY3JhdGNoLCBsaHMsIHJocyk7CisrICAgICAgYXNfbXVsbHcoc2NyYXRjaCwgc2NyYXRj aCwgcmhzKTsKKysgICAgfQorKyAgICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7CisrICB9 CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 cmVtYWluZGVyNjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1Vuc2lnbmVkKSB7CisrICBp ZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19tb2R1 ZChkZXN0LCBsaHMsIHJocyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfbW9kc2QoZGVzdCwg bGhzLCByaHMpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgICAgYXNfZGl2ZHUoc2NyYXRjaCwg bGhzLCByaHMpOworKyAgICAgIGFzX211bGxkKHNjcmF0Y2gsIHNjcmF0Y2gsIHJocyk7CisrICAg IH0gZWxzZSB7CisrICAgICAgYXNfZGl2ZChzY3JhdGNoLCBsaHMsIHJocyk7CisrICAgICAgYXNf bXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwgcmhzKTsKKysgICAgfQorKyAgICBhc19zdWJmKGRlc3Qs IHNjcmF0Y2gsIGxocyk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZzY0 KFJlZ2lzdGVyNjQgcmVnKSB7IGFzX25lZyhyZWcucmVnLCByZWcucmVnKTsgfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6Om5lZ1B0cihSZWdpc3RlciByZWcpIHsgYXNfbmVnKHJlZywgcmVnKTsg fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZzMyKFJlZ2lzdGVyIHJlZykgeworKyAgYXNf bmVnKHJlZywgcmVnKTsKKysgIGFzX2V4dHN3KHJlZywgcmVnKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6bmVnYXRlRG91YmxlKEZsb2F0UmVnaXN0ZXIgcmVnKSB7IGFzX2ZuZWcocmVn LCByZWcpOyB9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnYXRlRmxvYXQoRmxvYXRSZWdp c3RlciByZWcpIHsgYXNfZm5lZyhyZWcsIHJlZyk7IH0KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjphYnMzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBhc19zcmF3aShzY3JhdGNoLCBzcmMsIDMxKTsKKysgIGFzX3hvcl8oZGVz dCwgc3JjLCBzY3JhdGNoKTsKKysgIGFzX3N1YmYoZGVzdCwgc2NyYXRjaCwgZGVzdCk7CisrICBh c19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxv YXQzMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19mYWJz KGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0RvdWJsZShGbG9h dFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc19mYWJzKGRlc3QsIHNy Yyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNxcnRGbG9hdDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2ZzcXJ0cyhkZXN0LCBzcmMpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcXJ0RG91YmxlKEZsb2F0UmVnaXN0ZXIgc3Jj LCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2ZzcXJ0KGRlc3QsIHNyYyk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbjMyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLCBS ZWdpc3RlciBkZXN0KSB7CisrICBhc19jbXB3KGxocywgcmhzKTsKKysgIC8vIGlzZWwgcnQsIHJh LCByYiwgY29uZDogcnQgPSAoQ1JbY29uZF0gc2V0KSA/IHJhIDogcmIKKysgIC8vIExlc3NUaGFu IHNldCBpZiBsaHMgPCByaHMgKHNpZ25lZCksIHNvIHBpY2sgbGhzOyBlbHNlIHJocyA9IG1pbi4K KysgIGFzX2lzZWwoZGVzdCwgbGhzLCByaHMsIExlc3NUaGFuLCBjcjApOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjptaW4zMihSZWdpc3RlciBsaHMsIEltbTMyIHJocywgUmVnaXN0ZXIg ZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmUzMihyaHMsIHNjcmF0 Y2gpOworKyAgbWluMzIobGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWF4MzIoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3Qp IHsKKysgIGFzX2NtcHcobGhzLCByaHMpOworKyAgLy8gR1Qgc2V0IGlmIGxocyA+IHJocyAoc2ln bmVkKSwgc28gcGljayBsaHM7IGVsc2UgcmhzID0gbWF4LgorKyAgYXNfaXNlbChkZXN0LCBsaHMs IHJocywgR3JlYXRlclRoYW4sIGNyMCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1h eDMyKFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZTMyKHJocywgc2NyYXRjaCk7CisrICBtYXgzMihsaHMs IHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5QdHIoUmVn aXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX2NtcGQobGhz LCByaHMpOworKyAgYXNfaXNlbChkZXN0LCBsaHMsIHJocywgTGVzc1RoYW4sIGNyMCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pblB0cihSZWdpc3RlciBsaHMsIEltbVdvcmQgcmhz LCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0 cihyaHMsIHNjcmF0Y2gpOworKyAgbWluUHRyKGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heFB0cihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywg UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfY21wZChsaHMsIHJocyk7CisrICBhc19pc2VsKGRlc3Qs IGxocywgcmhzLCBHcmVhdGVyVGhhbiwgY3IwKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6bWF4UHRyKFJlZ2lzdGVyIGxocywgSW1tV29yZCByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNj cmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKHJocywgc2NyYXRjaCk7CisrICBt YXhQdHIobGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bWluRmxvYXQzMihGbG9hdFJlZ2lzdGVyIG90aGVyLCBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3QsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZU5hTikgeworKyAgaWYg KEhhc1BPV0VSOSgpKSB7CisrICAgIC8vIHhzbWluamRwIG1hdGNoZXMgRUNNQS0yNjIgTWF0aC5t aW4gc2VtYW50aWNzIGZvciDCsTAgYW5kIE5hTi4KKysgICAgLy8gRmxvYXQzMiB2YWx1ZXMgYXJl IHN0b3JlZCBhcyBkb3VibGVzIGluIFBQQyBGUFJzOyB0aGUgSi1mb3JtCisrICAgIC8vIHJlc3Vs dCBpcyBiaXQtZXhhY3QgZm9yIHZhbHVlcyByZXByZXNlbnRhYmxlIGluIGZsb2F0MzIgKHdoaWNo CisrICAgIC8vIGluY2x1ZGVzIGV2ZXJ5IE5hTi/CsTAvwrFJbmYgY29ybmVyIGNhc2UgSlMgb2Jz ZXJ2ZXMpLiAxIGluc24uCisrICAgIGFzX3hzbWluamRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVy KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKKysgIGFz X2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsKKysgIGlmIChoYW5kbGVOYU4pIHsKKysgICAgbWFfYihB c3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgJm5hbik7CisrICB9CisrICAvLyBIYW5kbGUgKzAg dnMgLTAuCisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlRXF1YWwsICZlcXVhbCk7CisrICBtYV9i KEFzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW4sICZkb25lKTsKKysgIGFzX2ZtcihzcmNEZXN0LCBv dGhlcik7CisrICBqdW1wKCZkb25lKTsKKysKKysgIGJpbmQoJmVxdWFsKTsKKysgIC8vIEJvdGgg b3BlcmFuZHMgYXJlIGVxdWFsLiBDaGVjayBpZiB0aGV5J3JlIHplcm8uCisrICBsb2FkQ29uc3Rh bnRGbG9hdDMyKDAuMGYsIFNjcmF0Y2hGbG9hdDMyUmVnKTsKKysgIGFzX2ZjbXB1KHNyY0Rlc3Qs IFNjcmF0Y2hGbG9hdDMyUmVnKTsKKysgIC8vIElmIG5vdCB6ZXJvLCB0aGV5J3JlIGlkZW50aWNh bDsga2VlcCBzcmNEZXN0LgorKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCAmZG9u ZSk7CisrICAvLyBCb3RoIGFyZSBzb21lIGNvbWJpbmF0aW9uIG9mICswLy0wLiBGb3IgbWluLCBy ZXN1bHQgc2hvdWxkIGJlIC0wCisrICAvLyBpZiBlaXRoZXIgaXMgLTA6IC0oKC1zcmNEZXN0KSAt IG90aGVyKSBnaXZlcyAtMCB3aGVuIGVpdGhlciBpcyAtMC4KKysgIGFzX2ZuZWcoU2NyYXRjaEZs b2F0MzJSZWcsIHNyY0Rlc3QpOworKyAgYXNfZnN1YnMoU2NyYXRjaEZsb2F0MzJSZWcsIFNjcmF0 Y2hGbG9hdDMyUmVnLCBvdGhlcik7CisrICBhc19mbmVnKHNyY0Rlc3QsIFNjcmF0Y2hGbG9hdDMy UmVnKTsKKysgIGp1bXAoJmRvbmUpOworKworKyAgaWYgKGhhbmRsZU5hTikgeworKyAgICBiaW5k KCZuYW4pOworKyAgICBhc19mYWRkcyhzcmNEZXN0LCBzcmNEZXN0LCBvdGhlcik7CisrICB9Cisr ICBiaW5kKCZkb25lKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRG91YmxlKEZs b2F0UmVnaXN0ZXIgb3RoZXIsIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBoYW5kbGVOYU4pIHsKKysgIGlmIChIYXNQT1dFUjkoKSkg eworKyAgICAvLyB4c21pbmpkcCBtYXRjaGVzIEVDTUEtMjYyIE1hdGgubWluIHNlbWFudGljcyBl eGFjdGx5IChjb3ZlcnMKKysgICAgLy8gMTkgY29ybmVyIGNhc2VzIGluY2x1ZGluZyDCsTAgYW5k IE5hTikuIDEgaW5zbiB2cyB+MTIgZm9yIHRoZQorKyAgICAvLyBmY21wdS9icmFuY2ggZmFsbGJh Y2suIFBPV0VSOCBmYWxsYmFjayBmb2xsb3dzLgorKyAgICBhc194c21pbmpkcChzcmNEZXN0LCBz cmNEZXN0LCBvdGhlcik7CisrICAgIHJldHVybjsKKysgIH0KKysgIExhYmVsIGRvbmUsIG5hbiwg ZXF1YWw7CisrICBhc19mY21wdShzcmNEZXN0LCBvdGhlcik7CisrICBpZiAoaGFuZGxlTmFOKSB7 CisrICAgIG1hX2IoQXNzZW1ibGVyOjpEb3VibGVVbm9yZGVyZWQsICZuYW4pOworKyAgfQorKyAg Ly8gSGFuZGxlICswIHZzIC0wLgorKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZUVxdWFsLCAmZXF1 YWwpOworKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuLCAmZG9uZSk7CisrICBhc19m bXIoc3JjRGVzdCwgb3RoZXIpOworKyAganVtcCgmZG9uZSk7CisrCisrICBiaW5kKCZlcXVhbCk7 CisrICBsb2FkQ29uc3RhbnREb3VibGUoMC4wLCBTY3JhdGNoRG91YmxlUmVnKTsKKysgIGFzX2Zj bXB1KHNyY0Rlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJs ZU5vdEVxdWFsLCAmZG9uZSk7CisrICAvLyAtKCgtc3JjRGVzdCkgLSBvdGhlcikgZ2l2ZXMgLTAg d2hlbiBlaXRoZXIgaXMgLTAuCisrICBhc19mbmVnKFNjcmF0Y2hEb3VibGVSZWcsIHNyY0Rlc3Qp OworKyAgYXNfZnN1YihTY3JhdGNoRG91YmxlUmVnLCBTY3JhdGNoRG91YmxlUmVnLCBvdGhlcik7 CisrICBhc19mbmVnKHNyY0Rlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAganVtcCgmZG9uZSk7 CisrCisrICBpZiAoaGFuZGxlTmFOKSB7CisrICAgIGJpbmQoJm5hbik7CisrICAgIGFzX2ZhZGQo c3JjRGVzdCwgc3JjRGVzdCwgb3RoZXIpOworKyAgfQorKyAgYmluZCgmZG9uZSk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0MzIoRmxvYXRSZWdpc3RlciBvdGhlciwgRmxv YXRSZWdpc3RlciBzcmNEZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v bCBoYW5kbGVOYU4pIHsKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAvLyBTZWUgbWluRmxv YXQzMiBhYm92ZSBmb3IgdGhlIGZsb2F0MzIg4oaUIEotZm9ybSBiaXQtZXhhY3RuZXNzIG5vdGUu CisrICAgIGFzX3hzbWF4amRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKKysgICAgcmV0dXJu OworKyAgfQorKyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKKysgIGFzX2ZjbXB1KHNyY0Rlc3Qs IG90aGVyKTsKKysgIGlmIChoYW5kbGVOYU4pIHsKKysgICAgbWFfYihBc3NlbWJsZXI6OkRvdWJs ZVVub3JkZXJlZCwgJm5hbik7CisrICB9CisrICAvLyBIYW5kbGUgKzAgdnMgLTAuCisrICBtYV9i KEFzc2VtYmxlcjo6RG91YmxlRXF1YWwsICZlcXVhbCk7CisrICBtYV9iKEFzc2VtYmxlcjo6RG91 YmxlR3JlYXRlclRoYW4sICZkb25lKTsKKysgIGFzX2ZtcihzcmNEZXN0LCBvdGhlcik7CisrICBq dW1wKCZkb25lKTsKKysKKysgIGJpbmQoJmVxdWFsKTsKKysgIGxvYWRDb25zdGFudEZsb2F0MzIo MC4wZiwgU2NyYXRjaEZsb2F0MzJSZWcpOworKyAgYXNfZmNtcHUoc3JjRGVzdCwgU2NyYXRjaEZs b2F0MzJSZWcpOworKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsLCAmZG9uZSk7Cisr ICAvLyAtMCArIC0wID0gLTAgYW5kIC0wICsgMCA9ICswLgorKyAgYXNfZmFkZHMoc3JjRGVzdCwg c3JjRGVzdCwgb3RoZXIpOworKyAganVtcCgmZG9uZSk7CisrCisrICBpZiAoaGFuZGxlTmFOKSB7 CisrICAgIGJpbmQoJm5hbik7CisrICAgIGFzX2ZhZGRzKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVy KTsKKysgIH0KKysgIGJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpt YXhEb3VibGUoRmxvYXRSZWdpc3RlciBvdGhlciwgRmxvYXRSZWdpc3RlciBzcmNEZXN0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhbmRsZU5hTikgeworKyAgaWYgKEhh c1BPV0VSOSgpKSB7CisrICAgIC8vIFNlZSBtaW5Eb3VibGUgYWJvdmUgZm9yIHRoZSBKLWZvcm0g c2VtYW50aWNzIG5vdGUuCisrICAgIGFzX3hzbWF4amRwKHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVy KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgTGFiZWwgZG9uZSwgbmFuLCBlcXVhbDsKKysgIGFz X2ZjbXB1KHNyY0Rlc3QsIG90aGVyKTsKKysgIGlmIChoYW5kbGVOYU4pIHsKKysgICAgbWFfYihB c3NlbWJsZXI6OkRvdWJsZVVub3JkZXJlZCwgJm5hbik7CisrICB9CisrICAvLyBIYW5kbGUgKzAg dnMgLTAuCisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlRXF1YWwsICZlcXVhbCk7CisrICBtYV9i KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW4sICZkb25lKTsKKysgIGFzX2ZtcihzcmNEZXN0 LCBvdGhlcik7CisrICBqdW1wKCZkb25lKTsKKysKKysgIGJpbmQoJmVxdWFsKTsKKysgIGxvYWRD b25zdGFudERvdWJsZSgwLjAsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgYXNfZmNtcHUoc3JjRGVz dCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICBtYV9iKEFzc2VtYmxlcjo6RG91YmxlTm90RXF1YWws ICZkb25lKTsKKysgIC8vIC0wICsgLTAgPSAtMCBhbmQgLTAgKyAwID0gKzAuCisrICBhc19mYWRk KHNyY0Rlc3QsIHNyY0Rlc3QsIG90aGVyKTsKKysgIGp1bXAoJmRvbmUpOworKworKyAgaWYgKGhh bmRsZU5hTikgeworKyAgICBiaW5kKCZuYW4pOworKyAgICBhc19mYWRkKHNyY0Rlc3QsIHNyY0Rl c3QsIG90aGVyKTsKKysgIH0KKysgIGJpbmQoJmRvbmUpOworK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysv LyBTaGlmdCBmdW5jdGlvbnMKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsc2hpZnQzMihSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGFz X3Jsd2lubShtYXNrZWQsIHNyYywgMCwgMjcsIDMxKTsKKysgIGFzX3NsdyhkZXN0LCBkZXN0LCBt YXNrZWQpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgbHNoaWZ0MzIo aW1tLCBkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNoaWZ0MzIo SW1tMzIgaW1tLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHhfc2x3aShkZXN0 LCBzcmMsIGltbS52YWx1ZSAmIDB4MWYpOworKyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlTHNoaWZ0MzIoUmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0KSB7CisrICBsc2hpZnQzMihzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpsc2hpZnQ2NChSZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXI2NCBkZXN0KSB7 CisrICAvLyBQUEM2NCBzbGQgdXNlcyBhIDctYml0IHNoaWZ0IGZpZWxkOyBzaGlmdHMgPj0gNjQg cHJvZHVjZSAwLgorKyAgLy8gV2FzbSBpNjQuc2hsIHJlcXVpcmVzIHNoaWZ0IGNvdW50IG1vZHVs byA2NCwgc28gbWFzayB0byA2IGJpdHMuCisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBh c19ybGRpY2wobWFza2VkLCBzaGlmdCwgMCwgNTgpOyAgLy8gY2xybGRpOiBrZWVwIGxvdyA2IGJp dHMKKysgIGFzX3NsZChkZXN0LnJlZywgZGVzdC5yZWcsIG1hc2tlZCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmxzaGlmdDY0KEltbTMyIGltbSwgUmVnaXN0ZXI2NCBkZXN0KSB7Cisr ICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52YWx1ZSA8IDY0KTsKKysgIHhfc2xk aShkZXN0LnJlZywgZGVzdC5yZWcsIGltbS52YWx1ZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmxzaGlmdFB0cihSZWdpc3RlciBzaGlmdCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf c2xkKGRlc3QsIGRlc3QsIHNoaWZ0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bHNo aWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgZGVzdCkgeworKyAgbHNoaWZ0UHRyKGltbSwgZGVz dCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxzaGlmdFB0cihJbW0zMiBp bW0sIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVCgwIDw9IGlt bS52YWx1ZSAmJiBpbW0udmFsdWUgPCA2NCk7CisrICB4X3NsZGkoZGVzdCwgc3JjLCBpbW0udmFs dWUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZUxzaGlmdFB0cihSZWdp c3RlciBzaGlmdCwgUmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgbHNoaWZ0UHRyKHNoaWZ0LCBzcmNE ZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzIoUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7CisrICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19ybHdpbm0o bWFza2VkLCBzcmMsIDAsIDI3LCAzMSk7CisrICBhc19zcncoZGVzdCwgZGVzdCwgbWFza2VkKTsK KysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpy c2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHJzaGlmdDMyKGltbSwgZGVz dCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDMyKEltbTMyIGlt bSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICB4X3Nyd2koZGVzdCwgc3JjLCBp bW0udmFsdWUgJiAweDFmKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVJzaGlmdDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIg ZGVzdCkgeworKyAgcnNoaWZ0MzIoc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6cnNoaWZ0MzJBcml0aG1ldGljKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgbWFz a2VkID0gdGVtcHMuQWNxdWlyZSgpOworKyAgYXNfcmx3aW5tKG1hc2tlZCwgc3JjLCAwLCAyNywg MzEpOworKyAgYXNfc3JhdyhkZXN0LCBkZXN0LCBtYXNrZWQpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyc2hpZnQzMkFyaXRobWV0aWMoSW1tMzIgaW1tLCBSZWdpc3RlciBkZXN0KSB7 CisrICByc2hpZnQzMkFyaXRobWV0aWMoaW1tLCBkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cnNoaWZ0MzJBcml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0ZXIgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0 KSB7CisrICBhc19zcmF3aShkZXN0LCBzcmMsIGltbS52YWx1ZSAmIDB4MWYpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVJzaGlmdDMyQXJpdGhtZXRpYyhSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIHJzaGlmdDMyQXJpdGhtZXRpYyhzcmMsIGRlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnQ2NChSZWdpc3RlciBzaGlmdCwgUmVn aXN0ZXI2NCBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBtYXNrZWQgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19ybGRpY2wo bWFza2VkLCBzaGlmdCwgMCwgNTgpOworKyAgYXNfc3JkKGRlc3QucmVnLCBkZXN0LnJlZywgbWFz a2VkKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0NjQoSW1tMzIgaW1tLCBS ZWdpc3RlcjY0IGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoMCA8PSBpbW0udmFsdWUgJiYgaW1tLnZh bHVlIDwgNjQpOworKyAgeF9zcmRpKGRlc3QucmVnLCBkZXN0LnJlZywgaW1tLnZhbHVlKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0NjRBcml0aG1ldGljKEltbTMyIGltbSwg UmVnaXN0ZXI2NCBkZXN0KSB7CisrICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52 YWx1ZSA8IDY0KTsKKysgIGFzX3NyYWRpKGRlc3QucmVnLCBkZXN0LnJlZywgaW1tLnZhbHVlKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0NjRBcml0aG1ldGljKFJlZ2lzdGVy IHNoaWZ0LCBSZWdpc3RlcjY0IGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIG1hc2tlZCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IGFzX3JsZGljbChtYXNrZWQsIHNoaWZ0LCAwLCA1OCk7CisrICBhc19zcmFkKGRlc3QucmVnLCBk ZXN0LnJlZywgbWFza2VkKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0UHRy KFJlZ2lzdGVyIHNoaWZ0LCBSZWdpc3RlciBkZXN0KSB7CisrICBhc19zcmQoZGVzdCwgZGVzdCwg c2hpZnQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnRQdHIoSW1tMzIgaW1t LCBSZWdpc3RlciBkZXN0KSB7CisrICByc2hpZnRQdHIoaW1tLCBkZXN0LCBkZXN0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cnNoaWZ0UHRyKEltbTMyIGltbSwgUmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKDAgPD0gaW1tLnZhbHVlICYmIGltbS52 YWx1ZSA8IDY0KTsKKysgIHhfc3JkaShkZXN0LCBzcmMsIGltbS52YWx1ZSk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUnNoaWZ0UHRyKFJlZ2lzdGVyIHNoaWZ0LCBSZWdp c3RlciBzcmNEZXN0KSB7CisrICByc2hpZnRQdHIoc2hpZnQsIHNyY0Rlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnRQdHJBcml0aG1ldGljKEltbTMyIGltbSwgUmVnaXN0 ZXIgZGVzdCkgeworKyAgcnNoaWZ0UHRyQXJpdGhtZXRpYyhpbW0sIGRlc3QsIGRlc3QpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyc2hpZnRQdHJBcml0aG1ldGljKEltbTMyIGltbSwg UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVCgwIDw9IGltbS52YWx1ZSAmJiBpbW0udmFs dWUgPCA2NCk7CisrICBhc19zcmFkaShkZXN0LCBzcmMsIGltbS52YWx1ZSk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnJzaGlmdFB0ckFyaXRobWV0aWMoUmVnaXN0ZXIgc2hpZnQsIFJl Z2lzdGVyIGRlc3QpIHsKKysgIGFzX3NyYWQoZGVzdCwgZGVzdCwgc2hpZnQpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVJzaGlmdFB0ckFyaXRobWV0aWMoUmVnaXN0ZXIg c2hpZnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIHNyY0Rlc3QpIHsKKysgIHJzaGlmdFB0ckFyaXRobWV0aWMoc2hpZnQsIHNyY0Rl c3QpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBSb3RhdGlvbiBmdW5jdGlvbnMKKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVMZWZ0KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlciBpbnB1 dCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gUFBDIHJvdGx3IGlzIHJsd25tIHdpdGggZnVsbCBt YXNrOiBybHdubSBkZXN0LCBpbnB1dCwgY291bnQsIDAsIDMxCisrICBhc19ybHdubShkZXN0LCBp bnB1dCwgY291bnQsIDAsIDMxKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVMZWZ0KEltbTMyIGNvdW50LCBSZWdpc3RlciBpbnB1 dCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfcmx3aW5tKGRlc3QsIGlucHV0LCBjb3VudC52YWx1 ZSAmIDMxLCAwLCAzMSk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cm90YXRlTGVmdDY0KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlcjY0IHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBkZXN0LCBS ZWdpc3RlciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQo KSk7CisrICAvLyBybGRjbCBkZXN0LCBzcmMsIGNvdW50LCAwIOKAlCByb3RhdGUgbGVmdCBkb3Vi bGV3b3JkIHRoZW4gY2xlYXIgbGVmdCAwIGJpdHMuCisrICBhc19ybGRjbChkZXN0LnJlZywgc3Jj LnJlZywgY291bnQsIDApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyb3RhdGVMZWZ0 NjQoSW1tMzIgY291bnQsIFJlZ2lzdGVyNjQgc3JjLCBSZWdpc3RlcjY0IGRlc3QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXApIHsKKysgIE1PWl9BU1NF UlQodGVtcCA9PSBSZWdpc3Rlcjo6SW52YWxpZCgpKTsKKysgIC8vIHJsZGljbCBkZXN0LCBzcmMs IGNvdW50LCAwIOKAlCByb3RhdGUgbGVmdCBkb3VibGV3b3JkIGltbWVkaWF0ZSB0aGVuIGNsZWFy LgorKyAgYXNfcmxkaWNsKGRlc3QucmVnLCBzcmMucmVnLCBjb3VudC52YWx1ZSAmIDYzLCAwKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRlUmlnaHQoUmVnaXN0ZXIgY291bnQs IFJlZ2lzdGVyIGlucHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIC8vIHJvdGF0ZVJpZ2h0KG4pID0gcm90YXRlTGVmdCgzMi1uKS4gV2hl biBkZXN0ICE9IGlucHV0LCB0aGUgbmVnYXRlZAorKyAgLy8gY291bnQgY2FuIGxhbmQgZGlyZWN0 bHkgaW4gZGVzdCwgZHJvcHBpbmcgdGhlIEdQUiBzY3JhdGNoLiBkZXN0IG1heQorKyAgLy8gYWxp YXMgY291bnQgaGFybWxlc3NseSAoc3ViZmljIHJlYWRzIGNvdW50LCB0aGVuIHdyaXRlcyBkZXN0 LCB0aGVuCisrICAvLyBybHdubSBjb25zdW1lcyB0aGUgbmV3IGRlc3QgYXMgaXRzIHJvdGF0ZS1j b3VudCkuCisrICBpZiAoZGVzdCAhPSBpbnB1dCkgeworKyAgICBhc19zdWJmaWMoZGVzdCwgY291 bnQsIDMyKTsKKysgICAgYXNfcmx3bm0oZGVzdCwgaW5wdXQsIGRlc3QsIDAsIDMxKTsKKysgICAg YXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7CisrICBhc19zdWJmaWMoc2NyYXRjaCwgY291bnQsIDMyKTsKKysgIGFzX3Js d25tKGRlc3QsIGlucHV0LCBzY3JhdGNoLCAwLCAzMSk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRlUmlnaHQoSW1tMzIgY291bnQs IFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBkZXN0KSB7CisrICByb3RhdGVMZWZ0KEltbTMyKCgz MiAtIGNvdW50LnZhbHVlKSAmIDMxKSwgaW5wdXQsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyb3RhdGVSaWdodDY0KFJlZ2lzdGVyIGNvdW50LCBSZWdpc3RlcjY0IHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCwgUmVn aXN0ZXIgdGVtcCkgeworKyAgTU9aX0FTU0VSVCh0ZW1wID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkp OworKyAgLy8gU2FtZSBzaGFwZSBhcyByb3RhdGVSaWdodDMyOiB3aGVuIGRlc3QgIT0gc3JjLCB0 aGUgbmVnYXRlZCBjb3VudAorKyAgLy8gY2FuIGxhbmQgZGlyZWN0bHkgaW4gZGVzdCwgZHJvcHBp bmcgdGhlIEdQUiBzY3JhdGNoLgorKyAgaWYgKGRlc3QucmVnICE9IHNyYy5yZWcpIHsKKysgICAg YXNfc3ViZmljKGRlc3QucmVnLCBjb3VudCwgNjQpOworKyAgICBhc19ybGRjbChkZXN0LnJlZywg c3JjLnJlZywgZGVzdC5yZWcsIDApOworKyAgICByZXR1cm47CisrICB9CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgYXNfc3ViZmljKHNjcmF0Y2gsIGNvdW50LCA2NCk7CisrICBhc19y bGRjbChkZXN0LnJlZywgc3JjLnJlZywgc2NyYXRjaCwgMCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnJvdGF0ZVJpZ2h0NjQoSW1tMzIgY291bnQsIFJlZ2lzdGVyNjQgc3JjLCBSZWdp c3RlcjY0IGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rl ciB0ZW1wKSB7CisrICBNT1pfQVNTRVJUKHRlbXAgPT0gUmVnaXN0ZXI6OkludmFsaWQoKSk7Cisr ICByb3RhdGVMZWZ0NjQoSW1tMzIoKDY0IC0gY291bnQudmFsdWUpICYgNjMpLCBzcmMsIGRlc3Qs IHRlbXApOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBCaXQgY291bnRpbmcgZnVuY3Rpb25zCisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2x6NjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQg ZGVzdCkgeworKyAgYXNfY250bHpkKGRlc3QucmVnLCBzcmMucmVnKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6Y3R6NjQoUmVnaXN0ZXI2NCBzcmMsIFJlZ2lzdGVyNjQgZGVzdCkgewor KyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX2NudHR6ZChkZXN0LnJlZywgc3JjLnJlZyk7 CisrICB9IGVsc2UgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgIFJlZ2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgYXNfbmVnKHRtcCwg c3JjLnJlZyk7CisrICAgIC8vIGFuZC4gKHJlY29yZCBmb3JtKSBzZXRzIENSMFtlcV0gYmFzZWQg b24gcmVzdWx0OyByZXN1bHQgaXMgMCBpZmYgc3JjPT0wLAorKyAgICAvLyBzbyB0aGlzIGZvbGRz IHRoZSBleHBsaWNpdCB6ZXJvLWNoZWNrIHRoYXQgd291bGQgb3RoZXJ3aXNlIG5lZWQgY21wZGku CisrICAgIGFzX2FuZF9fcmModG1wLCBzcmMucmVnLCB0bXApOyAgLy8gdG1wID0geCAmIC14OyBD UjBbZXFdID0gKHNyYyA9PSAwKQorKyAgICBhc19jbnRsemQodG1wLCB0bXApOyAgICAgICAgICAg IC8vIHRtcCA9IGNseihpc29sYXRlZCBiaXQpCisrICAgIGFzX3N1YmZpYyhkZXN0LnJlZywgdG1w LCA2Myk7ICAgLy8gZGVzdCA9IDYzIC0gY2x6ID0gY3R6IChmb3Igbm9uemVybykKKysgICAgeHNf bGkodG1wLCA2NCk7CisrICAgIGFzX2lzZWwoZGVzdC5yZWcsIHRtcCwgZGVzdC5yZWcsIEVxdWFs KTsgIC8vIENSMFtlcV0g4oaSIDY0IGlmIHNyYz09MAorKyAgfQorK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpwb3BjbnQ2NChSZWdpc3RlcjY0IGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0bXApIHsKKysgIGFzX3Bv cGNudGQob3V0cHV0LnJlZywgaW5wdXQucmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y2x6MzIoUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBib29sIGtub3duTm90WmVybykg eworKyAgYXNfY250bHp3KGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmN0ejMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwgYm9vbCBrbm93bk5vdFplcm8pIHsK KysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBhc19jbnR0encoZGVzdCwgc3JjKTsKKysgIH0g ZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAg UmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBhc19uZWcodG1wLCBzcmMpOwor KyAgICAvLyBhbmQuIHJlY29yZCBmb3JtIGZvbGRzIHRoZSBjbXB3aSBzcmMsMCB0aGF0IHdvdWxk IG90aGVyd2lzZSBiZSBuZWVkZWQKKysgICAgLy8gdG8gZHJpdmUgdGhlIGlzZWwgYmVsb3c6IHRt cCA9PSAwIGlmZiBzcmMgPT0gMC4KKysgICAgaWYgKGtub3duTm90WmVybykgeworKyAgICAgIGFz X2FuZF8odG1wLCBzcmMsIHRtcCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfYW5kX19yYyh0 bXAsIHNyYywgdG1wKTsgIC8vIENSMFtlcV0gPSAoc3JjID09IDApCisrICAgIH0KKysgICAgYXNf Y250bHp3KHRtcCwgdG1wKTsKKysgICAgYXNfc3ViZmljKGRlc3QsIHRtcCwgMzEpOworKyAgICBp ZiAoIWtub3duTm90WmVybykgeworKyAgICAgIHhzX2xpKHRtcCwgMzIpOworKyAgICAgIGFzX2lz ZWwoZGVzdCwgdG1wLCBkZXN0LCBFcXVhbCk7ICAvLyBDUjBbZXFdIOKGkiAzMiBpZiBzcmM9PTAK KysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwb3BjbnQzMihSZWdp c3RlciBpbnB1dCwgUmVnaXN0ZXIgb3V0cHV0LCBSZWdpc3RlciB0bXApIHsKKysgIGFzX3BvcGNu dHcob3V0cHV0LCBpbnB1dCk7CisrICAvLyBwb3BjbnR3IGdpdmVzIHBlci13b3JkIHJlc3VsdHM7 IG9uIDY0LWJpdCB0aGUgbG93IHdvcmQgY291bnQgaXMgaW4KKysgIC8vIGJpdHMgMzI6NjMsIHNv IGp1c3QgbWFzayB0byAzMiBiaXRzLgorKyAgYXNfcmx3aW5tKG91dHB1dCwgb3V0cHV0LCAwLCAw LCAzMSk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIENvbmRpdGlvbiBmdW5jdGlvbnMKKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA4U2V0KENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywg SW1tMzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkg eworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBs aHMuYmFzZSk7CisrICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2VtYmxlcjo6Q29uZGl0 aW9uVW5zaWduZWQpICE9IDA7CisrICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICBsb2FkOFplcm9F eHRlbmQobGhzLCBzY3JhdGNoKTsKKysgICAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwg SW1tMzIodWludDhfdChyaHMudmFsdWUpKSwgY29uZCwgdHJ1ZSk7CisrICAgIG1hX2NtcF9zZXQo ZGVzdCwgYyk7CisrICB9IGVsc2UgeworKyAgICBsb2FkOFNpZ25FeHRlbmQobGhzLCBzY3JhdGNo KTsKKysgICAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIoaW50OF90KHJocy52 YWx1ZSkpLCBjb25kLCB0cnVlKTsKKysgICAgbWFfY21wX3NldChkZXN0LCBjKTsKKysgIH0KKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMTZTZXQoQ29uZGl0aW9uIGNvbmQsIEFkZHJl c3MgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIE1PWl9BU1NFUlQoc2Ny YXRjaCAhPSBsaHMuYmFzZSk7CisrICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2VtYmxl cjo6Q29uZGl0aW9uVW5zaWduZWQpICE9IDA7CisrICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICBs b2FkMTZaZXJvRXh0ZW5kKGxocywgc2NyYXRjaCk7CisrICAgIENvbmRpdGlvbiBjID0gbWFfY21w KHNjcmF0Y2gsIEltbTMyKHVpbnQxNl90KHJocy52YWx1ZSkpLCBjb25kLCB0cnVlKTsKKysgICAg bWFfY21wX3NldChkZXN0LCBjKTsKKysgIH0gZWxzZSB7CisrICAgIGxvYWQxNlNpZ25FeHRlbmQo bGhzLCBzY3JhdGNoKTsKKysgICAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tMzIo aW50MTZfdChyaHMudmFsdWUpKSwgY29uZCwgdHJ1ZSk7CisrICAgIG1hX2NtcF9zZXQoZGVzdCwg Yyk7CisrICB9CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Cisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wMzJTZXQoQ29uZGl0aW9uIGNvbmQsIFQxIGxocywgVDIg cmhzLCBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywg Y29uZCwgdHJ1ZSk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpjbXA2NFNldChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIFJlZ2lz dGVyNjQgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3Qp IHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocy5yZWcsIHJocy5yZWcsIGNvbmQpOworKyAg bWFfY21wX3NldChkZXN0LCBjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wNjRT ZXQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLCBJbW02NCByaHMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAobGhzLnJlZywgSW1tV29yZCh1aW50NjRfdChyaHMudmFsdWUpKSwgY29uZCk7CisrICBt YV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXA2NFNl dChDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsaHMsIFJlZ2lzdGVyNjQgcmhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcChzY3JhdGNoLCByaHMucmVnLCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDY0U2V0KENvbmRpdGlvbiBjb25kLCBBZGRy ZXNzIGxocywgSW1tNjQgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK KysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywg c2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCBJbW1Xb3JkKHVpbnQ2 NF90KHJocy52YWx1ZSkpLCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKwor K3RlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+Cisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y21wUHRyU2V0KENvbmRpdGlvbiBjb25kLCBUMSBsaHMsIFQyIHJocywgUmVnaXN0ZXIgZGVz dCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOworKyAgbWFfY21w X3NldChkZXN0LCBjKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gQnJhbmNoIGZ1bmN0aW9ucwor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDgoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFk ZHJlc3MmIGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gTWlycm9yIEFS TTY0L0xvb25nQXJjaDY0L1JJU0MtVjogbmFycm93IHRoZSBpbW1lZGlhdGUgdG8gdGhlIDgtYml0 CisrICAvLyBtZW1vcnkgb3BlcmFuZCB3aWR0aCBzbyBib3RoIHNpZGVzIG9mIHRoZSBjb21wYXJl IGhhdmUgbWF0Y2hpbmcgYml0CisrICAvLyBwYXR0ZXJucyByZWdhcmRsZXNzIG9mIGhvdyBtb3Zl MzIoSW1tMzIpIG1hdGVyaWFsaXplcyB0aGUgaW1tLiBVc2UKKysgIC8vIHVpbnQ4IGNhc3QgZm9y IGVxdWFsaXR5IC8gdW5zaWduZWQsIGludDggY2FzdCBmb3Igc2lnbmVkIHJlbGF0aW9uYWwuCisr ICBib29sIGlzRXFPck5lID0gKGNvbmQgPT0gQXNzZW1ibGVyOjpFcXVhbCkgfHwgKGNvbmQgPT0g QXNzZW1ibGVyOjpOb3RFcXVhbCk7CisrICBib29sIGlzVW5zaWduZWQgPSAoY29uZCAmIEFzc2Vt Ymxlcjo6Q29uZGl0aW9uVW5zaWduZWQpICE9IDA7CisrICBJbW0zMiBuYXJyb3dlZCgwKTsKKysg IGlmIChpc0VxT3JOZSB8fCBpc1Vuc2lnbmVkKSB7CisrICAgIGxvYWQ4WmVyb0V4dGVuZChsaHMs IHNjcmF0Y2gpOworKyAgICBuYXJyb3dlZCA9IEltbTMyKHVpbnQ4X3QocmhzLnZhbHVlKSk7Cisr ICB9IGVsc2UgeworKyAgICBsb2FkOFNpZ25FeHRlbmQobGhzLCBzY3JhdGNoKTsKKysgICAgbmFy cm93ZWQgPSBJbW0zMihpbnQ4X3QocmhzLnZhbHVlKSk7CisrICB9CisrICBDb25kaXRpb24gYyA9 IG1hX2NtcChzY3JhdGNoLCBuYXJyb3dlZCwgY29uZCwgdHJ1ZSk7CisrICBtYV9iKGMsIGxhYmVs KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoOChDb25kaXRpb24gY29uZCwg Y29uc3QgQmFzZUluZGV4JiBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IGxvYWQ4WmVyb0V4dGVuZChsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo c2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2gxNihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVz cyYgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Cisr ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gU2VlIGJyYW5jaDg6 IG5hcnJvdyB0aGUgaW1tZWRpYXRlIHRvIDE2IGJpdHMgc28gYm90aCBzaWRlcyBoYXZlIG1hdGNo aW5nCisrICAvLyBiaXQgcGF0dGVybnMuIHVpbnQxNiBmb3IgZXF1YWxpdHkgLyB1bnNpZ25lZCwg aW50MTYgZm9yIHNpZ25lZCByZWxhdGlvbmFsLgorKyAgYm9vbCBpc0VxT3JOZSA9IChjb25kID09 IEFzc2VtYmxlcjo6RXF1YWwpIHx8IChjb25kID09IEFzc2VtYmxlcjo6Tm90RXF1YWwpOworKyAg Ym9vbCBpc1Vuc2lnbmVkID0gKGNvbmQgJiBBc3NlbWJsZXI6OkNvbmRpdGlvblVuc2lnbmVkKSAh PSAwOworKyAgSW1tMzIgbmFycm93ZWQoMCk7CisrICBpZiAoaXNFcU9yTmUgfHwgaXNVbnNpZ25l ZCkgeworKyAgICBsb2FkMTZaZXJvRXh0ZW5kKGxocywgc2NyYXRjaCk7CisrICAgIG5hcnJvd2Vk ID0gSW1tMzIodWludDE2X3QocmhzLnZhbHVlKSk7CisrICB9IGVsc2UgeworKyAgICBsb2FkMTZT aWduRXh0ZW5kKGxocywgc2NyYXRjaCk7CisrICAgIG5hcnJvd2VkID0gSW1tMzIoaW50MTZfdChy aHMudmFsdWUpKTsKKysgIH0KKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIG5hcnJv d2VkLCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Cisr ICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9iKGMs IGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0aW9u IGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tMzIgaW1tLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBpbW0s IGNvbmQsIHRydWUpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK KysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKKysg IENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9i KGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0 aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgIGxvYWQzMihsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2Ny YXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVB ZGRyZXNzJiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcmhz LCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFz bSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRy KEltbVdvcmQoKHVpbnRwdHJfdClsaHMuYWRkciksIHNjcmF0Y2gpOworKyAgbG9hZDMyKEFkZHJl c3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRj aCwgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVBZGRy ZXNzJiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgcmhzLCBMYWJl bCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK KysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKEltbVdv cmQoKHVpbnRwdHJfdClsaHMuYWRkciksIHNjcmF0Y2gpOworKyAgbG9hZDMyKEFkZHJlc3Moc2Ny YXRjaCwgMCksIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhz LCBjb25kLCB0cnVlKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpicmFuY2gzMihDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBsaHMsIElt bTMyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK KysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIobGhzLCBzY3JhdGNoKTsKKysg IENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9i KGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoMzIoQ29uZGl0 aW9uIGNvbmQsIHdhc206OlN5bWJvbGljQWRkcmVzcyBhZGRyLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEltbTMyIGltbSwgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgbW92ZVB0cihhZGRyLCBzY3JhdGNoKTsKKysgIGxvYWQzMihBZGRyZXNz KHNjcmF0Y2gsIDApLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gs IGltbSwgY29uZCwgdHJ1ZSk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6YnJhbmNoNjQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLCBJbW02 NCB2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIHN1Y2Nlc3MsIExh YmVsKiBmYWlsKSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMucmVnLCBJbW1Xb3JkKHVp bnQ2NF90KHZhbC52YWx1ZSkpLCBjb25kKTsKKysgIGlmIChmYWlsKSB7CisrICAgIG1hX2IoYywg c3VjY2Vzcyk7CisrICAgIGp1bXAoZmFpbCk7CisrICB9IGVsc2UgeworKyAgICBtYV9iKGMsIHN1 Y2Nlc3MpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2g2NChDb25k aXRpb24gY29uZCwgUmVnaXN0ZXI2NCBsaHMsIFJlZ2lzdGVyNjQgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBzdWNjZXNzLCBMYWJlbCogZmFpbCkgeworKyAgQ29u ZGl0aW9uIGMgPSBtYV9jbXAobGhzLnJlZywgcmhzLnJlZywgY29uZCk7CisrICBpZiAoZmFpbCkg eworKyAgICBtYV9iKGMsIHN1Y2Nlc3MpOworKyAgICBqdW1wKGZhaWwpOworKyAgfSBlbHNlIHsK KysgICAgbWFfYihjLCBzdWNjZXNzKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoNjQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tNjQgdmFs LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBzdWNjZXNzLCBMYWJlbCog ZmFpbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3Jh dGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIEltbVdvcmQodWludDY0X3Qo dmFsLnZhbHVlKSksIGNvbmQpOworKyAgaWYgKGZhaWwpIHsKKysgICAgbWFfYihjLCBzdWNjZXNz KTsKKysgICAganVtcChmYWlsKTsKKysgIH0gZWxzZSB7CisrICAgIG1hX2IoYywgc3VjY2Vzcyk7 CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaDY0KENvbmRpdGlvbiBj b25kLCBjb25zdCBBZGRyZXNzJiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXI2NCByaHMsIExhYmVsKiBzdWNjZXNzLCBMYWJlbCogZmFpbCkgeworKyAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlv biBjID0gbWFfY21wKHNjcmF0Y2gsIHJocy5yZWcsIGNvbmQpOworKyAgaWYgKGZhaWwpIHsKKysg ICAgbWFfYihjLCBzdWNjZXNzKTsKKysgICAganVtcChmYWlsKTsKKysgIH0gZWxzZSB7CisrICAg IG1hX2IoYywgc3VjY2Vzcyk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaDY0KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgcmhzLCBSZWdpc3RlciBzY3JhdGNoLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgbG9hZFB0 cihyaHMsIHNjcmF0Y2gpOworKyAgYnJhbmNoNjQoY29uZCwgbGhzLCBSZWdpc3RlcjY0KHNjcmF0 Y2gpLCBsYWJlbCwgbnVsbHB0cik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgQ29uZGl0aW9uIGMg PSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhz LCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJl bCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCBJbW1Xb3JkKGludDY0X3QocmhzLnZh bHVlKSksIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW1QdHIgcmhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIENv bmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIGxocywgSW1tR0NQdHIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMYWJlbCogbGFiZWwpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgcmhzLCBjb25k KTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2hQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1tV29yZCByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgQ29uZGl0aW9uIGMg PSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVz cyYgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhz LCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7 CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNo UHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIEltbVB0ciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBj ID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBB ZGRyZXNzJiBsaHMsIEltbUdDUHRyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0 cihsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgcmhzLCBj b25kKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpi cmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywgSW1tV29yZCByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGhzLCBzY3JhdGNoKTsKKysgIENvbmRp dGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBj b25zdCBBYnNvbHV0ZUFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClsaHMuYWRkciksIHNjcmF0Y2gpOwor KyAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIDApLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBj ID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBB YnNvbHV0ZUFkZHJlc3MmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1t V29yZCByaHMsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IG1vdmVQdHIoSW1tV29yZCgodWludHB0cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7CisrICBsb2Fk UHRyKEFkZHJlc3Moc2NyYXRjaCwgMCksIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9j bXAoc2NyYXRjaCwgcmhzLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIHdhc206OlN5bWJvbGlj QWRkcmVzcyBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJo cywgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbW92ZVB0 cihsaHMsIHNjcmF0Y2gpOworKyAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIDApLCBzY3JhdGNo KTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9i KGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoUHRyKENvbmRp dGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcChzY3JhdGNoLCByaHMsIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUlu ZGV4JiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbVdvcmQgcmhzLCBM YWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGxo cywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChzY3JhdGNoLCByaHMsIGNvbmQp OworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFByaXZhdGVQdHIoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGxocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJocywgTGFiZWwqIGxhYmVs KSB7CisrICBicmFuY2hQdHIoY29uZCwgbGhzLCByaHMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoRmxvYXQoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZsb2F0UmVn aXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIGFzX2ZjbXB1KGxocywgcmhzKTsKKysgIG1hX2Io Y29uZCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0 ZUZsb2F0MzJNYXliZU1vZFVpbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBmYWlsKSB7CisrICAvLyBDb252ZXJ0IGZsb2F0MzIgdG8gaW50NjQgKHRydW5j YXRpbmcgdG93YXJkIHplcm8pLCBmYWlsIG9uIE5hTi9vdmVyZmxvdy4KKysgIGFzX2ZjdGlkeihT Y3JhdGNoRG91YmxlUmVnLCBzcmMpOworKyAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hEb3VibGVS ZWcpOworKyAgLy8gUFBDNjQgZmN0aWR6IHNhdHVyYXRlcyB0byBJTlQ2NF9NSU4gb24gbmVnYXRp dmUgb3ZlcmZsb3cvTmFOLAorKyAgLy8gYW5kIHRvIElOVDY0X01BWCBvbiBwb3NpdGl2ZSBvdmVy Zmxvdy4gQ2hlY2sgYm90aC4KKysgIGFzTWFzbSgpLmJyYW5jaFB0cihBc3NlbWJsZXI6OkVxdWFs LCBkZXN0LCBJbW1Xb3JkKGludDY0X3QoSU5UNjRfTUlOKSksIGZhaWwpOworKyAgYXNNYXNtKCku YnJhbmNoUHRyKEFzc2VtYmxlcjo6RXF1YWwsIGRlc3QsIEltbVdvcmQoaW50NjRfdChJTlQ2NF9N QVgpKSwgZmFpbCk7CisrICAvLyBUcnVuY2F0ZSB0byB1aW50MzIgKGtlZXAgbG93IDMyIGJpdHMp LgorKyAgYXNfcmxkaWNsKGRlc3QsIGRlc3QsIDAsIDMyKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6YnJhbmNoVHJ1bmNhdGVGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QsIExhYmVsKiBmYWlsKSB7CisrICBjb252ZXJ0RmxvYXQzMlRvSW50MzIoc3JjLCBk ZXN0LCBmYWlsLCBmYWxzZSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaERv dWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBMYWJlbCogbGFiZWwp IHsKKysgIGFzX2ZjbXB1KGxocywgcmhzKTsKKysgIG1hX2IoY29uZCwgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0ZURvdWJsZU1heWJlTW9kVWludDMy KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7CisrICAv LyBDb252ZXJ0IGRvdWJsZSB0byBpbnQ2NCAodHJ1bmNhdGluZyB0b3dhcmQgemVybyksIGZhaWwg b24gTmFOL292ZXJmbG93LgorKyAgYXNfZmN0aWR6KFNjcmF0Y2hEb3VibGVSZWcsIHNyYyk7Cisr ICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJlZyk7CisrICAvLyBQUEM2NCBmY3RpZHog c2F0dXJhdGVzIHRvIElOVDY0X01JTiBvbiBuZWdhdGl2ZSBvdmVyZmxvdy9OYU4sCisrICAvLyBh bmQgdG8gSU5UNjRfTUFYIG9uIHBvc2l0aXZlIG92ZXJmbG93LiBDaGVjayBib3RoLgorKyAgYXNN YXNtKCkuYnJhbmNoUHRyKEFzc2VtYmxlcjo6RXF1YWwsIGRlc3QsIEltbVdvcmQoaW50NjRfdChJ TlQ2NF9NSU4pKSwgZmFpbCk7CisrICBhc01hc20oKS5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVh bCwgZGVzdCwgSW1tV29yZChpbnQ2NF90KElOVDY0X01BWCkpLCBmYWlsKTsKKysgIC8vIFRydW5j YXRlIHRvIHVpbnQzMiAoa2VlcCBsb3cgMzIgYml0cykuCisrICBhc19ybGRpY2woZGVzdCwgZGVz dCwgMCwgMzIpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUcnVuY2F0ZURv dWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsKSB7Cisr ICBjb252ZXJ0RG91YmxlVG9JbnQzMihzcmMsIGRlc3QsIGZhaWwsIGZhbHNlKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoSW50NjROb3RJblB0clJhbmdlKFJlZ2lzdGVyNjQg c3JjLCBMYWJlbCogbGFiZWwpIHsKKysgIC8vIE5vLW9wIG9uIDY0LWJpdC4KKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVUludDY0Tm90SW5QdHJSYW5nZShSZWdpc3RlcjY0IHNy YywgTGFiZWwqIGxhYmVsKSB7CisrICAvLyBCcmFuY2ggaWYgc3JjID49IDJeNjMgKHNpZ24gYml0 IHNldCA9IG91dCBvZiBzaWduZWQgcHRyIHJhbmdlKS4KKysgIGFzX2NtcGRpKHNyYy5yZWcsIDAp OworKyAgbWFfYihBc3NlbWJsZXI6Okxlc3NUaGFuLCBsYWJlbCk7CisrfQorKworK3RlbXBsYXRl IDx0eXBlbmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaEFkZDMyKENvbmRpdGlv biBjb25kLCBUIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogb3ZlcmZsb3cpIHsKKysgIHN3aXRjaCAoY29uZCkgeworKyAgICBjYXNl IE92ZXJmbG93OiB7CisrICAgICAgLy8gRG8gcmF3IDY0LWJpdCBhZGQgKG5vIHNpZ24gZXh0ZW5z aW9uKSBzbyB3ZSBjYW4gZGV0ZWN0IDMyLWJpdCBvdmVyZmxvdy4KKysgICAgICAvLyBCb3RoIGlu cHV0cyBzaG91bGQgYWxyZWFkeSBiZSBzaWduLWV4dGVuZGVkIDMyLWJpdCB2YWx1ZXMsIHNvIHRo ZQorKyAgICAgIC8vIDY0LWJpdCByZXN1bHQgaXMgbWF0aGVtYXRpY2FsbHkgY29ycmVjdC4gSWYg ZXh0c3cocmVzdWx0KSAhPSByZXN1bHQsCisrICAgICAgLy8gdGhlIDMyLWJpdCBhZGQgb3ZlcmZs b3dlZC4KKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7Cisr ICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBhZGRQdHIo c3JjLCBkZXN0KTsKKysgICAgICBhc19leHRzdyhzY3JhdGNoLCBkZXN0KTsKKysgICAgICBhc19j bXBkKGRlc3QsIHNjcmF0Y2gpOworKyAgICAgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgICAg IG1hX2IoTm90RXF1YWwsIG92ZXJmbG93KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBj YXNlIE5vblplcm86CisrICAgIGNhc2UgWmVybzoKKysgICAgICBhZGQzMihzcmMsIGRlc3QpOwor KyAgICAgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJvID8g Tm90RXF1YWwgOiBFcXVhbCwgb3ZlcmZsb3cpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNp Z25lZDoKKysgICAgY2FzZSBOb3RTaWduZWQ6CisrICAgICAgYWRkMzIoc3JjLCBkZXN0KTsKKysg ICAgICBhc19jbXBkaShkZXN0LCAwKTsKKysgICAgICBtYV9iKGNvbmQgPT0gU2lnbmVkID8gTGVz c1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93KTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBDYXJyeUNsZWFyOgorKyAgICBjYXNlIENhcnJ5U2V0OiB7CisrICAgICAgLy8gVW5z aWduZWQgMzItYml0IGNhcnJ5IGRldGVjdGlvbjogc2F2ZSBkZXN0LCBkbyAzMi1iaXQgYWRkLAor KyAgICAgIC8vIHRoZW4gdW5zaWduZWQtY29tcGFyZSByZXN1bHQgd2l0aCBvcmlnaW5hbC4gSWYg cmVzdWx0IDwgb3JpZ2luYWwKKysgICAgICAvLyAodW5zaWduZWQpLCBhIGNhcnJ5IG9jY3VycmVk LgorKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1vdmUzMihkZXN0 LCBzY3JhdGNoKTsKKysgICAgICBhZGQzMihzcmMsIGRlc3QpOworKyAgICAgIGFzX2NtcGx3KGRl c3QsIHNjcmF0Y2gpOworKyAgICAgIG1hX2IoY29uZCA9PSBDYXJyeVNldCA/IExlc3NUaGFuIDog R3JlYXRlclRoYW5PckVxdWFsLCBvdmVyZmxvdyk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIk5ZSSIpOworKyAgfQorK30KKysKKyt0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hTdWIzMihDb25k aXRpb24gY29uZCwgVCBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGFiZWwqIG92ZXJmbG93KSB7CisrICBzd2l0Y2ggKGNvbmQpIHsKKysgICAg Y2FzZSBPdmVyZmxvdzogeworKyAgICAgIC8vIERvIHJhdyA2NC1iaXQgc3ViIChubyBzaWduIGV4 dGVuc2lvbikgc28gd2UgY2FuIGRldGVjdCAzMi1iaXQgb3ZlcmZsb3cuCisrICAgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgc3ViUHRyKHNyYywgZGVzdCk7CisrICAgICAg YXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICAgICAgYXNfY21wZChkZXN0LCBzY3JhdGNoKTsK KysgICAgICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgICAgICBtYV9iKE5vdEVxdWFsLCBvdmVy Zmxvdyk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSBOb25aZXJvOgorKyAgICBj YXNlIFplcm86CisrICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKysgICAgICBhc19jbXBkaShkZXN0 LCAwKTsKKysgICAgICBtYV9iKGNvbmQgPT0gTm9uWmVybyA/IE5vdEVxdWFsIDogRXF1YWwsIG92 ZXJmbG93KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTaWduZWQ6CisrICAgIGNhc2UgTm90 U2lnbmVkOgorKyAgICAgIHN1YjMyKHNyYywgZGVzdCk7CisrICAgICAgYXNfY21wZGkoZGVzdCwg MCk7CisrICAgICAgbWFfYihjb25kID09IFNpZ25lZCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5P ckVxdWFsLCBvdmVyZmxvdyk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAg TU9aX0NSQVNIKCJOWUkiKTsKKysgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBS ZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBv dmVyZmxvdykgeworKyAgTU9aX0FTU0VSVChjb25kID09IE92ZXJmbG93KTsKKysgIC8vIERvIHJh dyA2NC1iaXQgbXVsdGlwbHkgKG5vIHNpZ24gZXh0ZW5zaW9uKSBzbyB3ZSBjYW4gZGV0ZWN0IDMy LWJpdAorKyAgLy8gb3ZlcmZsb3cuIGFzX211bGxkIGdpdmVzIGZ1bGwgNjQtYml0IGxvdyByZXN1 bHQ7IGlmIGV4dHN3KHJlc3VsdCkgIT0KKysgIC8vIHJlc3VsdCwgb3ZlcmZsb3cuIHNjcmF0Y2gg aXMgZGVhZCBhZnRlciB0aGUgbXVsbGQgKGNvbnN1bWVkIGFzIFJCKSwKKysgIC8vIHNvIHRoZSBz aWduLWV4dGVuc2lvbiByb3VuZC10cmlwIHJldXNlcyBpdCBpbnN0ZWFkIG9mIGFjcXVpcmluZyBh CisrICAvLyBzZWNvbmQgc2NyYXRjaC4KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBt b3ZlMzIoc3JjLCBzY3JhdGNoKTsKKysgIGFzX211bGxkKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOwor KyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwor KyAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICBtYV9iKE5vdEVxdWFsLCBvdmVyZmxvdyk7Cisr fQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5j aFJzaGlmdDMyKENvbmRpdGlvbiBjb25kLCBUIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NF UlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyk7CisrICByc2hpZnQzMihzcmMsIGRl c3QpOworKyAgYnJhbmNoMzIoY29uZCA9PSBaZXJvID8gRXF1YWwgOiBOb3RFcXVhbCwgZGVzdCwg SW1tMzIoMCksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoTmVn MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJlZywgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pf QVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cpOworKyAgbmVnMzIocmVnKTsKKysgIGJyYW5jaDMyKEVx dWFsLCByZWcsIEltbTMyKElOVDMyX01JTiksIGxhYmVsKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5 cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoQWRkUHRyKENvbmRpdGlvbiBj b25kLCBUIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBzd2l0Y2ggKGNvbmQpIHsKKysgICAgY2FzZSBPdmVy ZmxvdzogeworKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsK KysgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1vdmVQ dHIoZGVzdCwgc2NyYXRjaCk7ICAvLyBzY3JhdGNoID0gb2xkX2Rlc3QKKysgICAgICBhZGRQdHIo c3JjLCBkZXN0KTsgICAgICAgLy8gZGVzdCA9IHJlc3VsdCA9IG9sZF9kZXN0ICsgc3JjCisrICAg ICAgYXNfeG9yXyhTZWNvbmRTY3JhdGNoUmVnLCBkZXN0LAorKyAgICAgICAgICAgICAgc2NyYXRj aCk7ICAvLyBTZWNvbmRTY3JhdGNoID0gcmVzdWx0IF4gb2xkX2Rlc3QKKysgICAgICBhc19zdWJm KHNjcmF0Y2gsIHNjcmF0Y2gsCisrICAgICAgICAgICAgICBkZXN0KTsgIC8vIHNjcmF0Y2ggPSBy ZXN1bHQgLSBvbGRfZGVzdCA9IHNyY192YWx1ZQorKyAgICAgIGFzX3hvcl8oc2NyYXRjaCwgc2Ny YXRjaCwgZGVzdCk7ICAvLyBzY3JhdGNoID0gc3JjX3ZhbHVlIF4gcmVzdWx0CisrICAgICAgLy8g KG9sZF9kZXN0IF4gcmVzdWx0KSAmIChzcmNfdmFsdWUgXiByZXN1bHQpOiBiaXQgNjMgc2V0IGlm ZiBvdmVyZmxvdy4KKysgICAgICAvLyBhbmQuIHJlY29yZCBmb3JtIHNldHMgQ1IwW2x0XT0oYml0 IDYzIHNldCksIGZvbGRpbmcgdGhlIGNtcGRpLgorKyAgICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwg c2NyYXRjaCwgU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgICAgbWFfYihMZXNzVGhhbiwgbGFiZWwp OworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgTm9uWmVybzoKKysgICAgY2FzZSBa ZXJvOgorKyAgICAgIGFkZFB0cihzcmMsIGRlc3QpOworKyAgICAgIGFzX2NtcGRpKGRlc3QsIDAp OworKyAgICAgIG1hX2IoY29uZCA9PSBOb25aZXJvID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwp OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNpZ25lZDoKKysgICAgY2FzZSBOb3RTaWduZWQ6 CisrICAgICAgYWRkUHRyKHNyYywgZGVzdCk7CisrICAgICAgYXNfY21wZGkoZGVzdCwgMCk7Cisr ICAgICAgbWFfYihjb25kID09IFNpZ25lZCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFs LCBsYWJlbCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQ2FycnlDbGVhcjoKKysgICAgY2Fz ZSBDYXJyeVNldDogeworKyAgICAgIC8vIFVuc2lnbmVkIDY0LWJpdCBjYXJyeSBkZXRlY3Rpb246 IHNhdmUgZGVzdCwgZG8gNjQtYml0IGFkZCwKKysgICAgICAvLyB0aGVuIHVuc2lnbmVkLWNvbXBh cmUgcmVzdWx0IHdpdGggb3JpZ2luYWwuIElmIHJlc3VsdCA8IG9yaWdpbmFsCisrICAgICAgLy8g KHVuc2lnbmVkKSwgYSBjYXJyeSBvY2N1cnJlZC4KKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgICAgICBtb3ZlUHRyKGRlc3QsIHNjcmF0Y2gpOworKyAgICAgIGFkZFB0cihz cmMsIGRlc3QpOworKyAgICAgIGFzX2NtcGxkKGRlc3QsIHNjcmF0Y2gpOworKyAgICAgIG1hX2Io Y29uZCA9PSBDYXJyeVNldCA/IExlc3NUaGFuIDogR3JlYXRlclRoYW5PckVxdWFsLCBsYWJlbCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0go Ik5ZSSIpOworKyAgfQorK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpicmFuY2hTdWJQdHIoQ29uZGl0aW9uIGNvbmQsIFQgc3JjLCBSZWdpc3RlciBk ZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK KysgIHN3aXRjaCAoY29uZCkgeworKyAgICBjYXNlIE92ZXJmbG93OiB7CisrICAgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbW92ZVB0cihkZXN0LCBzY3JhdGNoKTsgIC8v IHNjcmF0Y2ggPSBvbGRfZGVzdAorKyAgICAgIHN1YlB0cihzcmMsIGRlc3QpOyAgICAgICAvLyBk ZXN0ID0gcmVzdWx0ID0gb2xkX2Rlc3QgLSBzcmMKKysgICAgICAvLyBPdmVyZmxvdyBpZiAob2xk X2Rlc3QgXiBzcmNfdmFsdWUpICYgKG9sZF9kZXN0IF4gcmVzdWx0KSBoYXMgYml0IDYzCisrICAg ICAgLy8gc2V0LgorKyAgICAgIGFzX3N1YmYoU2Vjb25kU2NyYXRjaFJlZywgZGVzdCwKKysgICAg ICAgICAgICAgIHNjcmF0Y2gpOyAgLy8gU2Vjb25kU2NyYXRjaCA9IG9sZF9kZXN0IC0gcmVzdWx0 ID0gc3JjX3ZhbHVlCisrICAgICAgYXNfeG9yXyhTZWNvbmRTY3JhdGNoUmVnLCBzY3JhdGNoLAor KyAgICAgICAgICAgICAgU2Vjb25kU2NyYXRjaFJlZyk7ICAgICAgICAvLyBvbGRfZGVzdCBeIHNy Y192YWx1ZQorKyAgICAgIGFzX3hvcl8oc2NyYXRjaCwgc2NyYXRjaCwgZGVzdCk7ICAvLyBvbGRf ZGVzdCBeIHJlc3VsdAorKyAgICAgIC8vIFJlY29yZC1mb3JtIEFORCBzZXRzIENSMCB0byB0aGUg c2lnbmVkIGNvbXBhcmUgb2YgdGhlIHJlc3VsdCB2cyAwLAorKyAgICAgIC8vIHNvIGEgc2VwYXJh dGUgY21wZGkgaXMgdW5uZWNlc3Nhcnk7IExlc3NUaGFuIHJlYWRzIENSMC5MVC4KKysgICAgICBh c19hbmRfX3JjKHNjcmF0Y2gsIHNjcmF0Y2gsIFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICAgIG1h X2IoTGVzc1RoYW4sIGxhYmVsKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIE5v blplcm86CisrICAgIGNhc2UgWmVybzoKKysgICAgICBzdWJQdHIoc3JjLCBkZXN0KTsKKysgICAg ICBhc19jbXBkaShkZXN0LCAwKTsKKysgICAgICBtYV9iKGNvbmQgPT0gTm9uWmVybyA/IE5vdEVx dWFsIDogRXF1YWwsIGxhYmVsKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTaWduZWQ6Cisr ICAgIGNhc2UgTm90U2lnbmVkOgorKyAgICAgIHN1YlB0cihzcmMsIGRlc3QpOworKyAgICAgIGFz X2NtcGRpKGRlc3QsIDApOworKyAgICAgIG1hX2IoY29uZCA9PSBTaWduZWQgPyBMZXNzVGhhbiA6 IEdyZWF0ZXJUaGFuT3JFcXVhbCwgbGFiZWwpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0 OgorKyAgICAgIE1PWl9DUkFTSCgiTllJIik7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmJyYW5jaE11bFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6Ok92ZXJmbG93KTsKKysgIGFzX211 bGxkbyhkZXN0LCBkZXN0LCBzcmMpOworKyAgbWFfYihPdmVyZmxvdywgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hOZWdQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyIHJlZywgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gT3ZlcmZsb3cp OworKyAgbmVnUHRyKHJlZyk7CisrICBicmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgcmVnLCBJ bW1Xb3JkKGludHB0cl90KElOVFBUUl9NSU4pKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpkZWNCcmFuY2hQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1t MzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKKysgIHN1YlB0cihyaHMsIGxocyk7CisrICBicmFuY2hQdHIoY29uZCwgbGhzLCBJbW0zMigw KSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0MzIoQ29u ZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9 PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8fAorKyAgICAgICAg ICAgICBjb25kID09IE5vdFNpZ25lZCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg aWYgKGxocyAhPSByaHMpIHsKKysgICAgYXNfYW5kXyhzY3JhdGNoLCBsaHMsIHJocyk7CisrICAg IGFzX2V4dHN3X3JjKHNjcmF0Y2gsIHNjcmF0Y2gpOyAgLy8gQ1IwIHNldCBvbiBzaWduLWV4dGVu ZGVkIGkzMjsgZm9sZHMgY21wZGkKKysgIH0gZWxzZSB7CisrICAgIGFzX2V4dHN3X3JjKHNjcmF0 Y2gsIGxocyk7CisrICB9CisrICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlv bj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOworKyAgbWFfYihiYXNlLCBsYWJl bCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3QzMihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwg Y29uZCA9PSBOb25aZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8CisrICAgICAgICAgICAgIGNvbmQg PT0gTm90U2lnbmVkKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBpZiAoaXNfdWlu dE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAgYXNfYW5kaV9yYyhzY3JhdGNoLCBsaHMsIHJocy52 YWx1ZSk7CisrICAgIC8vIGFuZGlfcmMgc2V0cyBDUjAgb24gdGhlIG1hc2tlZCB2YWx1ZSwgYnV0 IG9ubHkgdGhlIGxvdyAxNiBiaXRzIG1hdHRlcgorKyAgICAvLyBzaW5jZSByaHMgaXMgYSAxNi1i aXQgdW5zaWduZWQgbWFzayDigJQgc2lnbiBvZiB0aGUgaTMyIHJlc3VsdCBpcyBhbHdheXMKKysg ICAgLy8gMCwgc28gQ1IwW2x0XSBpcyBhbHdheXMgMC4gRm9yIFNpZ25lZC9Ob3RTaWduZWQgY29u ZGl0aW9ucyB0aGUgYW5zd2VyCisrICAgIC8vIGlzIGZpeGVkOyBmb3IgWmVyby9Ob25aZXJvIENS MFtlcV0gaXMgY29ycmVjdC4KKysgIH0gZWxzZSB7CisrICAgIG1vdmUzMihyaHMsIHNjcmF0Y2gp OworKyAgICBhc19hbmRfKHNjcmF0Y2gsIGxocywgc2NyYXRjaCk7CisrICAgIGFzX2V4dHN3X3Jj KHNjcmF0Y2gsIHNjcmF0Y2gpOyAgLy8gQ1IwIHNldCBvbiBzaWduLWV4dGVuZGVkIGkzMjsgZm9s ZHMgY21wZGkKKysgIH0KKysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9u Pihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9iKGJhc2UsIGxhYmVs KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj b25kLCBjb25zdCBBZGRyZXNzJiBsaHMsIEltbTMyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVy byB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAgICAg Y29uZCA9PSBOb3RTaWduZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQz MihsaHMsIHNjcmF0Y2gpOworKyAgLy8gYW5kMzIgcGlja3MgdXAgdGhlIHJsd2lubSBjb250aWct bWFzayBmYXN0IHBhdGggZm9yIG5vbi0xNi1iaXQtZml0CisrICAvLyBpbW1lZGlhdGVzIHRoYXQg YXJlIGEgY29udGlndW91cyBydW4gb2YgMS1iaXRzIChjb21tb246IHRhZyBtYXNrcywKKysgIC8v IGhlYWRlciBiaXQtZmllbGRzKS4gSXQgYWxzbyBlbWl0cyB0aGUgdHJhaWxpbmcgZXh0c3cuCisr ICBhbmQzMihyaHMsIHNjcmF0Y2gpOworKyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7CisrICBDb25k aXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNv bmRpdGlvblplcm8pOworKyAgbWFfYihiYXNlLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgY29uc3QgQWJzb2x1dGVBZGRy ZXNzJiBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbTMyIHJocywg TGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5v blplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWdu ZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIG1vdmVQdHIoSW1tV29yZCgodWlu dHB0cl90KWxocy5hZGRyKSwgc2NyYXRjaCk7CisrICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCAw KSwgc2NyYXRjaCk7CisrICBhbmQzMihyaHMsIHNjcmF0Y2gpOworKyAgYXNfY21wZGkoc2NyYXRj aCwgMCk7CisrICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oY29uZCAm IH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOworKyAgbWFfYihiYXNlLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RQdHIoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25k ID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQgfHwKKysgICAgICAgICAgICAgY29uZCA9PSBO b3RTaWduZWQpOworKyAgaWYgKGxocyA9PSByaHMpIHsKKysgICAgYXNfY21wZGkobGhzLCAwKTsK KysgIH0gZWxzZSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgLy8gUmVj b3JkLWZvcm0gQU5EIHNldHMgQ1IwOyBubyBmb2xsb3ctdXAgY21wZGkgbmVlZGVkLgorKyAgICBh c19hbmRfX3JjKHNjcmF0Y2gsIGxocywgcmhzKTsKKysgIH0KKysgIENvbmRpdGlvbiBiYXNlID0g c3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7 CisrICBtYV9iKGJhc2UsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdFB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9B U1NFUlQoY29uZCA9PSBaZXJvIHx8IGNvbmQgPT0gTm9uWmVybyB8fCBjb25kID09IFNpZ25lZCB8 fAorKyAgICAgICAgICAgICBjb25kID09IE5vdFNpZ25lZCk7CisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgaWYgKGlzX3VpbnROKHJocy52YWx1ZSwgMTYpKSB7CisrICAgIGFzX2FuZGlf cmMoc2NyYXRjaCwgbGhzLCByaHMudmFsdWUpOworKyAgfSBlbHNlIHsKKysgICAgbW92ZTMyKHJo cywgc2NyYXRjaCk7CisrICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgbGhzLCBzY3JhdGNoKTsgIC8v IHJlY29yZCBmb3JtIGZvbGRzIHRoZSBjbXBkaQorKyAgfQorKyAgQ29uZGl0aW9uIGJhc2UgPSBz dGF0aWNfY2FzdDxDb25kaXRpb24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsK KysgIG1hX2IoYmFzZSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFu Y2hUZXN0UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIEltbVdvcmQgcmhzLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pf QVNTRVJUKGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8gfHwgY29uZCA9PSBTaWduZWQg fHwKKysgICAgICAgICAgICAgY29uZCA9PSBOb3RTaWduZWQpOworKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIG1vdmVQdHIocmhzLCBzY3JhdGNoKTsKKysgIGFzX2FuZF9fcmMoc2NyYXRj aCwgbGhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0 aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9iKGJhc2UsIGxh YmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFB0cihDb25kaXRp b24gY29uZCwgY29uc3QgQWRkcmVzcyYgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW1tMzIgcmhzLCBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICAvLyBhbmRQdHIgcGlja3MgdXAg dGhlIHJsd2lubSBjb250aWctbWFzayBmYXN0IHBhdGggZm9yIG5vbi0xNi1iaXQtZml0CisrICAv LyBpbW1lZGlhdGVzIHRoYXQgYXJlIGEgY29udGlndW91cyBydW4gb2YgMS1iaXRzLgorKyAgYW5k UHRyKHJocywgc2NyYXRjaCk7CisrICBhc19jbXBkaShzY3JhdGNoLCAwKTsKKysgIENvbmRpdGlv biBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0 aW9uWmVybyk7CisrICBtYV9iKGJhc2UsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdDY0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGxocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByaHMsIFJlZ2lzdGVyIHRl bXAsIExhYmVsKiBzdWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogZmFpbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25a ZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8CisrICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVk KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBhc19hbmRfX3JjKHNjcmF0Y2gsIGxo cy5yZWcsIHJocy5yZWcpOworKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRp b24+KGNvbmQgJiB+QXNzZW1ibGVyOjpDb25kaXRpb25aZXJvKTsKKysgIGlmIChmYWlsKSB7Cisr ICAgIG1hX2IoYmFzZSwgc3VjY2Vzcyk7CisrICAgIGp1bXAoZmFpbCk7CisrICB9IGVsc2Ugewor KyAgICBtYV9iKGJhc2UsIHN1Y2Nlc3MpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpicmFuY2hUZXN0NjQoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyNjQgbGhzLCBJbW02NCBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBzdWNjZXNzLCBM YWJlbCogZmFpbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25a ZXJvIHx8IGNvbmQgPT0gU2lnbmVkIHx8CisrICAgICAgICAgICAgIGNvbmQgPT0gTm90U2lnbmVk KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKEltbVdvcmQodWludDY0 X3QocmhzLnZhbHVlKSksIHNjcmF0Y2gpOworKyAgYXNfYW5kX19yYyhzY3JhdGNoLCBsaHMucmVn LCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihj b25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7CisrICBpZiAoZmFpbCkgeworKyAgICBt YV9iKGJhc2UsIHN1Y2Nlc3MpOworKyAgICBqdW1wKGZhaWwpOworKyAgfSBlbHNlIHsKKysgICAg bWFfYihiYXNlLCBzdWNjZXNzKTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVmFsdWUt dHlwZSBicmFuY2ggZnVuY3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVz dFVuZGVmaW5lZChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJU KGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfVU5ERUZJTkVEKSwgY29uZCk7CisrICBtYV9iKGMs IGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFVuZGVmaW5l ZChDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQs IHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfVU5ERUZJTkVEKSwgbGFiZWwpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0VW5kZWZpbmVkKENvbmRpdGlvbiBjb25kLCBj b25zdCBBZGRyZXNzJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg UmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRl c3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX1VOREVGSU5FRCksIGxhYmVsKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFVuZGVmaW5lZChDb25kaXRpb24g Y29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJh c2VJbmRleCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lz dGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFn KGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19VTkRFRklORUQpLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RJbnQzMihDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog bGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFs KTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiks IGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmJyYW5jaFRlc3RJbnQzMihDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1 ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gp OworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBzY3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX0lOVDMy KSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0SW50MzIo Q29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7 CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiksIGxh YmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEludDMyKENvbmRp dGlvbiBjb25kLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7Cisr ICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RBR19JTlQzMiksIGxhYmVs KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEludDMyVHJ1dGh5KGJv b2wgYiwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgdW5ib3hJbnQzMih2YWx1ZSwgc2NyYXRjaCk7CisrICBhc19jbXB3aShzY3Jh dGNoLCAwKTsKKysgIG1hX2IoYiA/IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdERvdWJsZShDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwq IGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVh bCk7CisrICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3dPckVxdWFs IDogQWJvdmU7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdf TUFYX0RPVUJMRSksIGFjdHVhbCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdERvdWJsZShDb25kaXRpb24gY29uZCwgY29uc3QgVmFs dWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFn KHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3REb3VibGUoY29uZCwgc2NyYXRjaCwgbGFi ZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0RG91YmxlKENvbmRp dGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysg IGJyYW5jaFRlc3REb3VibGUoY29uZCwgdGFnLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmJyYW5jaFRlc3REb3VibGUoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRl eCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVs KiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9 IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0RG91YmxlKGNvbmQs IHRhZywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0RG91 YmxlVHJ1dGh5KGJvb2wgYiwgRmxvYXRSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIHhzX2xpKHNjcmF0Y2gsIDApOworKyAgYXNfbXR2c3JkKFNjcmF0 Y2hEb3VibGVSZWcsIHNjcmF0Y2gpOworKyAgYXNfZmNtcHUodmFsdWUsIFNjcmF0Y2hEb3VibGVS ZWcpOworKyAgRG91YmxlQ29uZGl0aW9uIGNvbmQgPSBiID8gRG91YmxlTm90RXF1YWwgOiBEb3Vi bGVFcXVhbE9yVW5vcmRlcmVkOworKyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3ROdW1iZXIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy IHRhZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJl bCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwor KyAgQ29uZGl0aW9uIGFjdHVhbCA9IChjb25kID09IEVxdWFsKSA/IEJlbG93T3JFcXVhbCA6IEFi b3ZlOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW0zMihKUzo6ZGV0YWlsOjpWYWx1 ZVVwcGVySW5jbE51bWJlclRhZyksIGFjdHVhbCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE51bWJlcihDb25kaXRpb24gY29uZCwg Y29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3ROdW1iZXIoY29uZCwgc2Ny YXRjaCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9v bGVhbihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09 IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFn LCBJbW1UYWcoSlNWQUxfVEFHX0JPT0xFQU4pLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0Qm9vbGVhbihDb25kaXRpb24g Y29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWYWx1 ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFn KHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFn KEpTVkFMX1RBR19CT09MRUFOKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpicmFuY2hUZXN0Qm9vbGVhbihDb25kaXRpb24gY29uZCwgY29uc3QgQWRkcmVzcyYgYWRkcmVz cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwp IHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0 VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRh ZyhKU1ZBTF9UQUdfQk9PTEVBTiksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6YnJhbmNoVGVzdEJvb2xlYW4oQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRk cmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRy YWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIElt bVRhZyhKU1ZBTF9UQUdfQk9PTEVBTiksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdEJvb2xlYW5UcnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9wZXJhbmQm IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHVuYm94Qm9vbGVh bih2YWx1ZSwgc2NyYXRjaCk7CisrICBhc19jbXB3aShzY3JhdGNoLCAwKTsKKysgIG1hX2IoYiA/ IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVGVzdFN0cmluZyhDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNT RVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBDb25kaXRpb24gYyA9 IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1RSSU5HKSwgY29uZCk7CisrICBtYV9iKGMs IGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN0cmluZyhD b25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RU YWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RBR19TVFJJTkcpLCBsYWJlbCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RTdHJpbmcoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1RSSU5HKSwgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3RyaW5nKENvbmRpdGlvbiBjb25kLCBj b25zdCBCYXNlSW5kZXgmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBS ZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVz dFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1RSSU5HKSwgbGFiZWwpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0U3RyaW5nVHJ1dGh5KGJvb2wgYiwgY29u c3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgIHVuYm94U3RyaW5nKHZhbHVlLCBzY3JhdGNoKTsKKysgIGxvYWQzMihBZGRyZXNzKHNjcmF0 Y2gsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaCk7CisrICBhc19jbXB3aShz Y3JhdGNoLCAwKTsKKysgIG1hX2IoYiA/IE5vdEVxdWFsIDogRXF1YWwsIGxhYmVsKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFN5bWJvbChDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIEltbVRhZyhKU1ZBTF9UQUdfU1lN Qk9MKSwgY29uZCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YnJhbmNoVGVzdFN5bWJvbChDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5k JiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBs YWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZhbHVlLCBz Y3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpTVkFMX1RB R19TWU1CT0wpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3RTeW1ib2woQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoYWRkcmVz cywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHRhZywgSW1tVGFnKEpTVkFMX1RB R19TWU1CT0wpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRl c3RTeW1ib2woQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3Ms IHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCB0YWcsIEltbVRhZyhKU1ZBTF9UQUdf U1lNQk9MKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0 QmlnSW50KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciB0YWcsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9 PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRh ZywgSW1tVGFnKEpTVkFMX1RBR19CSUdJTlQpLCBjb25kKTsKKysgIG1hX2IoYywgbGFiZWwpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0QmlnSW50KENvbmRpdGlvbiBj b25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgc3BsaXRUYWcodmFsdWUsIHNjcmF0Y2gpOworKyAgYnJhbmNoVGVzdFRhZyhjb25kLCBz Y3JhdGNoLCBJbW1UYWcoSlNWQUxfVEFHX0JJR0lOVCksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEJpZ0ludChDb25kaXRpb24gY29uZCwgY29uc3QgQWRk cmVzcyYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRh ZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQs IHRhZywgSW1tVGFnKEpTVkFMX1RBR19CSUdJTlQpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCaWdJbnQoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJhc2VJ bmRleCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRh ZyA9IGV4dHJhY3RUYWcoYWRkcmVzcywgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0VGFnKGNvbmQs IHRhZywgSW1tVGFnKEpTVkFMX1RBR19CSUdJTlQpLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RCaWdJbnRUcnV0aHkoYm9vbCBiLCBjb25zdCBWYWx1ZU9w ZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgdW5ib3hC aWdJbnQodmFsdWUsIHNjcmF0Y2gpOworKyAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgQmlnSW50 OjpvZmZzZXRPZkRpZ2l0TGVuZ3RoKCkpLCBzY3JhdGNoKTsKKysgIGFzX2NtcHdpKHNjcmF0Y2gs IDApOworKyAgbWFfYihiID8gTm90RXF1YWwgOiBFcXVhbCwgbGFiZWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TnVsbChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIg dGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkg eworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAg Q29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX05VTEwpLCBjb25kKTsK KysgIG1hX2IoYywgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hU ZXN0TnVsbChDb25kaXRpb24gY29uZCwgY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7CisrICBicmFu Y2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfTlVMTCksIGxhYmVsKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE51bGwoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg UmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRl c3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX05VTEwpLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3ROdWxsKENvbmRpdGlvbiBjb25kLCBjb25z dCBCYXNlSW5kZXgmIGFkZHJlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0 ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWco Y29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX05VTEwpLCBsYWJlbCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RPYmplY3QoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy IHRhZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJl bCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwor KyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCksIGNv bmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RPYmplY3QoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsK KysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVy IHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7 CisrICBicmFuY2hUZXN0VGFnKGNvbmQsIHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UQUdfT0JKRUNU KSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0T2JqZWN0 KENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNo KTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCks IGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdE9iamVjdChD b25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgUmVnaXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNo KTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX09CSkVDVCks IGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFByaW1pdGl2 ZShDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNj b3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICBzcGxpdFRhZyh2YWx1ZSwgc2NyYXRjaCk7CisrICBicmFuY2hUZXN0UHJpbWl0aXZl KGNvbmQsIHNjcmF0Y2gsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdEdDVGhpbmcoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGxhYmVsKSB7Cisr ICBicmFuY2hUZXN0R0NUaGluZ0ltcGwoY29uZCwgYWRkcmVzcywgbGFiZWwpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0R0NUaGluZyhDb25kaXRpb24gY29uZCwgY29u c3QgQmFzZUluZGV4JiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgYnJhbmNoVGVzdEdDVGhpbmdJbXBsKGNvbmQsIGFk ZHJlc3MsIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEdD VGhpbmcoQ29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgVmFsdWVPcGVyYW5kJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgYnJhbmNoVGVzdEdDVGhpbmdJ bXBsKGNvbmQsIGFkZHJlc3MsIGxhYmVsKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdEdDVGhpbmdJbXBsKENvbmRpdGlvbiBj b25kLCBjb25zdCBUJiBhZGRyZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8 fCBjb25kID09IE5vdEVxdWFsKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFz TWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdp c3RlciB0YWcgPSBleHRyYWN0VGFnKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGFj dHVhbCA9IChjb25kID09IEVxdWFsKSA/IEFib3ZlT3JFcXVhbCA6IEJlbG93OworKyAgQ29uZGl0 aW9uIGMgPQorKyAgICAgIG1hX2NtcCh0YWcsIEltbTMyKEpTOjpkZXRhaWw6OlZhbHVlTG93ZXJJ bmNsR0NUaGluZ1RhZyksIGFjdHVhbCk7CisrICBtYV9iKGMsIGxhYmVsKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFByaW1pdGl2ZShDb25kaXRpb24gY29uZCwgUmVn aXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1YWwpID8gQmVsb3cgOiBB Ym92ZU9yRXF1YWw7CisrICBDb25kaXRpb24gYyA9CisrICAgICAgbWFfY21wKHRhZywgSW1tMzIo SlM6OmRldGFpbDo6VmFsdWVVcHBlckV4Y2xQcmltaXRpdmVUYWcpLCBhY3R1YWwpOworKyAgbWFf YihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdp YyhDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgdGFnLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVh bCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1t VGFnKEpTVkFMX1RBR19NQUdJQyksIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29u c3QgQWRkcmVzcyYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01h c20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0 ZXIgdGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWco Y29uZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX01BR0lDKSwgbGFiZWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TWFnaWMoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IEJh c2VJbmRleCYgYWRkcmVzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGFiZWwqIGxhYmVsKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20o KSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVnaXN0ZXIg dGFnID0gZXh0cmFjdFRhZyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29u ZCwgdGFnLCBJbW1UYWcoSlNWQUxfVEFHX01BR0lDKSwgbGFiZWwpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TWFnaWMoQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVl T3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHNwbGl0VGFnKHZh bHVlLCBzY3JhdGNoKTsKKysgIGJyYW5jaFRlc3RUYWcoY29uZCwgc2NyYXRjaCwgSW1tVGFnKEpT VkFMX1RBR19NQUdJQyksIGxhYmVsKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJh bmNoVGVzdE1hZ2ljKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiB2YWxhZGRyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1doeU1hZ2ljIHdoeSwgTGFiZWwq IGxhYmVsKSB7CisrICB1aW50NjRfdCBtYWdpYyA9IE1hZ2ljVmFsdWUod2h5KS5hc1Jhd0JpdHMo KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKHZhbGFkZHIsIHNjcmF0 Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tV29yZChtYWdpYyksIGNv bmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJy YW5jaFRlc3RNYWdpYyhDb25kaXRpb24gY29uZCwgY29uc3QgQmFzZUluZGV4JiB2YWxhZGRyLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1doeU1hZ2ljIHdoeSwgTGFi ZWwqIGxhYmVsKSB7CisrICB1aW50NjRfdCBtYWdpYyA9IE1hZ2ljVmFsdWUod2h5KS5hc1Jhd0Jp dHMoKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKHZhbGFkZHIsIHNj cmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2NyYXRjaCwgSW1tV29yZChtYWdpYyks IGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBU PgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJyYW5jaFRlc3RWYWx1ZShDb25kaXRpb24gY29uZCwg Y29uc3QgVCYgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBWYWx1ZU9wZXJhbmQmIHJocywgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQg PT0gRXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgbG9hZFB0cihsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAoc2Ny YXRjaCwgcmhzLnZhbHVlUmVnKCksIGNvbmQpOworKyAgbWFfYihjLCBsYWJlbCk7CisrfQorKwor Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKy8vIFRlc3Qtc2V0IGZ1bmN0aW9ucworKworK3RlbXBsYXRlIDx0eXBlbmFt ZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3ROdW1iZXJTZXQoQ29uZGl0aW9uIGNvbmQs IGNvbnN0IFQmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVx dWFsKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBleHRy YWN0VGFnKHNyYywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYWN0dWFsID0gKGNvbmQgPT0gRXF1 YWwpID8gQmVsb3dPckVxdWFsIDogQWJvdmU7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcs IEltbTMyKEpTOjpkZXRhaWw6OlZhbHVlVXBwZXJJbmNsTnVtYmVyVGFnKSwgYWN0dWFsKTsKKysg IG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3RCb29sZWFuU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBU JiBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVz dCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOwor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWco c3JjLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFM X1RBR19CT09MRUFOKSwgY29uZCk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0U3RyaW5nU2V0 KENvbmRpdGlvbiBjb25kLCBjb25zdCBUJiBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwg fHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhh c01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgUmVn aXN0ZXIgdGFnID0gZXh0cmFjdFRhZyhzcmMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBt YV9jbXAodGFnLCBJbW1UYWcoSlNWQUxfVEFHX1NUUklORyksIGNvbmQpOworKyAgbWFfY21wX3Nl dChkZXN0LCBjKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6dGVzdFN5bWJvbFNldChDb25kaXRpb24gY29uZCwgY29uc3QgVCYgc3JjLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9a X0FTU0VSVChjb25kID09IEVxdWFsIHx8IGNvbmQgPT0gTm90RXF1YWwpOworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIHRhZyA9IGV4dHJhY3RUYWcoc3JjLCBzY3JhdGNo KTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKHRhZywgSW1tVGFnKEpTVkFMX1RBR19TWU1CT0wp LCBjb25kKTsKKysgIG1hX2NtcF9zZXQoZGVzdCwgYyk7CisrfQorKworK3RlbXBsYXRlIDx0eXBl bmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRlc3RCaWdJbnRTZXQoQ29uZGl0aW9uIGNv bmQsIGNvbnN0IFQmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5v dEVxdWFsKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBSZWdpc3RlciB0YWcgPSBl eHRyYWN0VGFnKHNyYywgc2NyYXRjaCk7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcCh0YWcsIElt bVRhZyhKU1ZBTF9UQUdfQklHSU5UKSwgY29uZCk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOwor K30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysvLyBDb21wdXRlZCBhZGRyZXNzIC8gY29uZGl0aW9uYWwgbW92 ZSAvIGNvbmRpdGlvbmFsIGxvYWQKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUb0Nv bXB1dGVkQWRkcmVzcyhjb25zdCBCYXNlSW5kZXgmIGFkZHIpIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICBsb2FkUHRyKGFkZHIsIHNjcmF0Y2gpOworKyAgYnJhbmNoKHNjcmF0Y2gp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1h X2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24gY29u ZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9 IG1hX2NtcChsaHMsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzcmMs IGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMk1vdmUzMihDb25kaXRpb24g Y29uZCwgUmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFkZHJlc3MmIHJocywgUmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICBsb2FkMzIocmhzLCBzY3JhdGNoKTsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxocywgc2Ny YXRjaCwgY29uZCwgdHJ1ZSk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGMpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMk1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz dGVyIGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIENvbmRpdGlvbiBjID0gbWFfY21wKGxo cywgcmhzLCBjb25kLCB0cnVlKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYyk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcFB0ck1vdmVQdHIoQ29uZGl0aW9uIGNvbmQsIFJl Z2lzdGVyIGxocywgSW1tMzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2Nt cChsaHMsIEltbVdvcmQoaW50NjRfdChyaHMudmFsdWUpKSwgY29uZCk7CisrICBtYV9jbXBfbW92 ZShkZXN0LCBzcmMsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJNb3Zl UHRyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkg eworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMsIGNvbmQpOworKyAgbWFfY21wX21v dmUoZGVzdCwgc3JjLCBjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y21wUHRyTW92 ZVB0cihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgcmhzLCBSZWdpc3RlciBzcmMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZFB0cihyaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9u IGMgPSBtYV9jbXAobGhzLCBzY3JhdGNoLCBjb25kKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNy YywgYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTG9hZDMyKENvbmRpdGlv biBjb25kLCBSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgQWRkcmVzcyYgcmhzLCBjb25zdCBBZGRyZXNzJiBzcmMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgIGxvYWQzMihyaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAo bGhzLCBzY3JhdGNoLCBjb25kLCB0cnVlKTsKKysgIC8vIENvbmRpdGlvbmFsIGxvYWQ6IGxvYWQg aW50byBzY3JhdGNoLCB0aGVuIGlzZWwuCisrICBsb2FkMzIoc3JjLCBzY3JhdGNoKTsKKysgIG1h X2NtcF9tb3ZlKGRlc3QsIHNjcmF0Y2gsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpjbXAzMkxvYWQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgc3JjLCBS ZWdpc3RlciBkZXN0KSB7CisrICBDb25kaXRpb24gYyA9IG1hX2NtcChsaHMsIHJocywgY29uZCwg dHJ1ZSk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKHNyYywgc2NyYXRj aCk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNoLCBjKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y21wMzJMb2FkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIGxocywgSW1t MzIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3Mm IHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgQ29uZGl0aW9uIGMgPSBtYV9jbXAobGhzLCByaHMs IGNvbmQsIHRydWUpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWQzMihzcmMs IHNjcmF0Y2gpOworKyAgbWFfY21wX21vdmUoZGVzdCwgc2NyYXRjaCwgYyk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OmNtcDMyTG9hZFB0cihDb25kaXRpb24gY29uZCwgY29uc3QgQWRk cmVzcyYgbGhzLCBJbW0zMiByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysgIGxvYWQzMihsaHMsIHNjcmF0Y2gpOworKyAgQ29uZGl0aW9uIGMgPSBtYV9j bXAoc2NyYXRjaCwgcmhzLCBjb25kLCB0cnVlKTsKKysgIGxvYWRQdHIoc3JjLCBzY3JhdGNoKTsK KysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNjcmF0Y2gsIGMpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp0ZXN0MzJMb2FkUHRyKENvbmRpdGlvbiBjb25kLCBjb25zdCBBZGRyZXNzJiBhZGRy LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgbWFzaywgY29uc3Qg QWRkcmVzcyYgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJv KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoYWRkciwgc2NyYXRjaCk7 CisrICBpZiAoaXNfdWludE4obWFzay52YWx1ZSwgMTYpKSB7CisrICAgIGFzX2FuZGlfcmMoc2Ny YXRjaCwgc2NyYXRjaCwgbWFzay52YWx1ZSk7CisrICB9IGVsc2UgeworKyAgICAvLyBVc2UgYSBu ZXN0ZWQgc2NvcGUgc28gc2NyYXRjaDIgaXMgcmVsZWFzZWQgYmVmb3JlIGxvYWRQdHIgYmVsb3cu CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzMihhc01hc20oKSk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMyLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKG1hc2ssIHNj cmF0Y2gyKTsKKysgICAgYXNfYW5kX19yYyhzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoMik7ICAv LyByZWNvcmQgZm9ybSBmb2xkcyB0aGUgY21wZGkKKysgIH0KKysgIENvbmRpdGlvbiBiYXNlID0g c3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybyk7 CisrICBsb2FkUHRyKHNyYywgc2NyYXRjaCk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzY3JhdGNo LCBiYXNlKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dGVzdDMyTW92ZVB0cihDb25k aXRpb24gY29uZCwgUmVnaXN0ZXIgb3BlcmFuZCwgSW1tMzIgbWFzaywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAg TU9aX0FTU0VSVChjb25kID09IFplcm8gfHwgY29uZCA9PSBOb25aZXJvKTsKKysgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICBpZiAoaXNfdWludE4obWFzay52YWx1ZSwgMTYpKSB7CisrICAg IGFzX2FuZGlfcmMoc2NyYXRjaCwgb3BlcmFuZCwgbWFzay52YWx1ZSk7CisrICB9IGVsc2Ugewor KyAgICBtb3ZlMzIobWFzaywgc2NyYXRjaCk7CisrICAgIGFzX2FuZF9fcmMoc2NyYXRjaCwgb3Bl cmFuZCwgc2NyYXRjaCk7ICAvLyByZWNvcmQgZm9ybSBmb2xkcyB0aGUgY21wZGkKKysgIH0KKysg IENvbmRpdGlvbiBiYXNlID0gc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfkFzc2VtYmxl cjo6Q29uZGl0aW9uWmVybyk7CisrICBtYV9jbXBfbW92ZShkZXN0LCBzcmMsIGJhc2UpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0ZXN0MzJNb3ZlUHRyKENvbmRpdGlvbiBjb25kLCBj b25zdCBBZGRyZXNzJiBhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW1tMzIgbWFzaywgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJU KGNvbmQgPT0gWmVybyB8fCBjb25kID09IE5vblplcm8pOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgIGxvYWQzMihhZGRyLCBzY3JhdGNoKTsKKysgIGFuZDMyKG1hc2ssIHNjcmF0Y2gp OworKyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7CisrICBDb25kaXRpb24gYmFzZSA9IHN0YXRpY19j YXN0PENvbmRpdGlvbj4oY29uZCAmIH5Bc3NlbWJsZXI6OkNvbmRpdGlvblplcm8pOworKyAgbWFf Y21wX21vdmUoZGVzdCwgc3JjLCBiYXNlKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gU3BlY3Ry ZSBtaXRpZ2F0aW9ucworKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVNb3ZlUHRyKENv bmRpdGlvbiBjb25kLCBSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gQXNzdW1lcyBjb21wYXJlIGFscmVhZHkg aXNzdWVkLgorKyAgQ29uZGl0aW9uIGJhc2UgPSBzdGF0aWNfY2FzdDxDb25kaXRpb24+KAorKyAg ICAgIGNvbmQgJiB+KEFzc2VtYmxlcjo6Q29uZGl0aW9uVW5zaWduZWQgfCBBc3NlbWJsZXI6OkNv bmRpdGlvblplcm8pKTsKKysgIG1hX2NtcF9tb3ZlKGRlc3QsIHNyYywgYmFzZSk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVaZXJvUmVnaXN0ZXIoQ29uZGl0aW9uIGNvbmQs IFJlZ2lzdGVyIHNjcmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciBkZXN0KSB7CisrICAvLyBBc3N1bWVzIGNvbXBhcmUgYWxyZWFkeSBpc3N1 ZWQuIFplcm8gZGVzdCBpZiBjb25kaXRpb24gaXMgdHJ1ZS4KKysgIENvbmRpdGlvbiBvcmlnQmFz ZSA9IHN0YXRpY19jYXN0PENvbmRpdGlvbj4oCisrICAgICAgY29uZCAmIH4oQXNzZW1ibGVyOjpD b25kaXRpb25VbnNpZ25lZCB8IEFzc2VtYmxlcjo6Q29uZGl0aW9uWmVybykpOworKyAgLy8gSWYg b3JpZ2luYWwgY29uZGl0aW9uIGlzIHRydWUsIHdlIHdhbnQgZGVzdD0wLgorKyAgLy8gaXNlbDog aWYgY29uZGl0aW9uIHRydWUsIHNlbGVjdCB6ZXJvOyBlbHNlIGtlZXAgZGVzdC4KKysgIHhzX2xp KHNjcmF0Y2gsIDApOworKyAgbWFfY21wX21vdmUoZGVzdCwgc2NyYXRjaCwgb3JpZ0Jhc2UpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdHJlQm91bmRzQ2hlY2szMihSZWdpc3Rl ciBpbmRleCwgUmVnaXN0ZXIgbGVuZ3RoLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIG1heWJlU2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbHVyZSkgeworKyAgQ29uZGl0aW9uIGMg PSBtYV9jbXAoaW5kZXgsIGxlbmd0aCwgQmVsb3csIHRydWUpOworKyAgaWYgKGZhaWx1cmUpIHsK KysgICAgbWFfYihJbnZlcnRDb25kaXRpb24oYyksIGZhaWx1cmUpOworKyAgfQorKyAgaWYgKG1h eWJlU2NyYXRjaCAhPSBJbnZhbGlkUmVnKSB7CisrICAgIHhzX2xpKG1heWJlU2NyYXRjaCwgMCk7 CisrICAgIG1hX2NtcF9tb3ZlKGluZGV4LCBtYXliZVNjcmF0Y2gsIEludmVydENvbmRpdGlvbihj KSk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwZWN0cmVCb3VuZHNDaGVj azMyKFJlZ2lzdGVyIGluZGV4LCBjb25zdCBBZGRyZXNzJiBsZW5ndGgsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsdXJlKSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGxlbmd0aCwgc2NyYXRjaCk7 CisrICBzcGVjdHJlQm91bmRzQ2hlY2szMihpbmRleCwgc2NyYXRjaCwgbWF5YmVTY3JhdGNoLCBm YWlsdXJlKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BlY3RyZUJvdW5kc0NoZWNr UHRyKFJlZ2lzdGVyIGluZGV4LCBSZWdpc3RlciBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1heWJlU2NyYXRjaCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWx1cmUpIHsKKysg IENvbmRpdGlvbiBjID0gbWFfY21wKGluZGV4LCBsZW5ndGgsIEJlbG93KTsKKysgIGlmIChmYWls dXJlKSB7CisrICAgIG1hX2IoSW52ZXJ0Q29uZGl0aW9uKGMpLCBmYWlsdXJlKTsKKysgIH0KKysg IGlmIChtYXliZVNjcmF0Y2ggIT0gSW52YWxpZFJlZykgeworKyAgICB4c19saShtYXliZVNjcmF0 Y2gsIDApOworKyAgICBtYV9jbXBfbW92ZShpbmRleCwgbWF5YmVTY3JhdGNoLCBJbnZlcnRDb25k aXRpb24oYykpOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGVjdHJlQm91 bmRzQ2hlY2tQdHIoUmVnaXN0ZXIgaW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGxlbmd0aCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWF5YmVTY3JhdGNoLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbHVyZSkgewor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIobGVuZ3RoLCBzY3JhdGNoKTsK KysgIHNwZWN0cmVCb3VuZHNDaGVja1B0cihpbmRleCwgc2NyYXRjaCwgbWF5YmVTY3JhdGNoLCBm YWlsdXJlKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTWVtb3J5IGFjY2VzcyBwcmltaXRpdmVz CisrCisrRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpzdG9yZUZsb2F0MzIoRmxv YXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQWRkcmVzcyYgYWRkcikgeworKyAgTU9aX0FTU0VSVChhZGRyLmJhc2Ug IT0gcjApOworKyAgaWYgKGlzX2ludE4oYWRkci5vZmZzZXQsIDE2KSkgeworKyAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZnMoc3JjLCBhZGRyLmJhc2UsIGFkZHIub2Zmc2V0KS5n ZXRPZmZzZXQoKSk7CisrICB9CisrICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4oKGludHB0 cl90KWFkZHIub2Zmc2V0LCAzNCkpIHsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgK KysgICAgICAgIGFzX3BzdGZzKHNyYywgYWRkci5iYXNlLCAoaW50NjRfdClhZGRyLm9mZnNldCwg LypSPSovZmFsc2UpCisrICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKKysgIH0KKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtb3ZlUHRyKEltbVdvcmQoYWRkci5vZmZzZXQpLCBzY3Jh dGNoKTsKKysgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3Rmc3goc3JjLCBhZGRyLmJh c2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKyt9CisrCisrRmF1bHRpbmdDb2RlT2Zmc2V0IE1h Y3JvQXNzZW1ibGVyOjpzdG9yZUZsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBh ZGRyKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgY29tcHV0ZUVmZmVjdGl2ZUFk ZHJlc3MoYWRkciwgc2NyYXRjaCk7CisrICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0 ZnMoc3JjLCBzY3JhdGNoLCAwKS5nZXRPZmZzZXQoKSk7CisrfQorKworK0ZhdWx0aW5nQ29kZU9m ZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3RvcmVEb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNz JiBhZGRyKSB7CisrICBNT1pfQVNTRVJUKGFkZHIuYmFzZSAhPSByMCk7CisrICBpZiAoaXNfaW50 TihhZGRyLm9mZnNldCwgMTYpKSB7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf c3RmZChzcmMsIGFkZHIuYmFzZSwgYWRkci5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgIH0KKysg IGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkci5vZmZzZXQsIDM0KSkg eworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgYXNfcHN0ZmQoc3Jj LCBhZGRyLmJhc2UsIChpbnQ2NF90KWFkZHIub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAg ICAgICAuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IG1vdmVQdHIoSW1tV29yZChhZGRyLm9mZnNldCksIHNjcmF0Y2gpOworKyAgcmV0dXJuIEZhdWx0 aW5nQ29kZU9mZnNldChhc19zdGZkeChzcmMsIGFkZHIuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0 KCkpOworK30KKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OnN0b3JlRG91 YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgQmFzZUluZGV4JiBhZGRyKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoYWRkciwgc2NyYXRjaCk7Cisr ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0ZmQoc3JjLCBzY3JhdGNoLCAwKS5nZXRP ZmZzZXQoKSk7CisrfQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6c3Rv cmVGbG9hdDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGRlc3QsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgeworKyAg TU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7CisrICBpZiAoZGVzdC5vZmZzZXQgPT0gMCkgeworKyAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0eHNpaHgoc3JjLCByMCwgZGVzdC5iYXNl KS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBpZiAoaXNfaW50TihkZXN0Lm9mZnNldCwgMTYpKSB7 CisrICAgIGFzX2FkZGkodGVtcCwgZGVzdC5iYXNlLCBkZXN0Lm9mZnNldCk7CisrICAgIHJldHVy biBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4c2loeChzcmMsIHIwLCB0ZW1wKS5nZXRPZmZzZXQo KSk7CisrICB9CisrICBtb3ZlUHRyKEltbVdvcmQoZGVzdC5vZmZzZXQpLCB0ZW1wKTsKKysgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4c2loeChzcmMsIGRlc3QuYmFzZSwgdGVtcCku Z2V0T2Zmc2V0KCkpOworK30KKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6 OnN0b3JlRmxvYXQxNihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIGRlc3QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkg eworKyAgTU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7CisrICBjb21wdXRlRWZmZWN0aXZlQWRkcmVz cyhkZXN0LCB0ZW1wKTsKKysgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4c2loeChz cmMsIHIwLCB0ZW1wKS5nZXRPZmZzZXQoKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1lbW9yeUJhcnJpZXIoTWVtb3J5QmFycmllciBiYXJyaWVyKSB7CisrICBpZiAoYmFycmllci5p c05vbmUoKSkgeworKyAgICByZXR1cm47CisrICB9CisrICBpZiAoYmFycmllci5oYXNTdG9yZUxv YWQoKSB8fCBiYXJyaWVyLmhhc1N5bmMoKSkgeworKyAgICBhc19zeW5jKCk7CisrICB9IGVsc2Ug eworKyAgICBhc19sd3N5bmMoKTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gQ2xhbXBp bmcgZnVuY3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2xhbXBJbnRUb1VpbnQ4KFJl Z2lzdGVyIHJlZykgeworKyAgLy8gQ2xhbXAgdG8gWzAsIDI1NV0uCisrICBMYWJlbCBkb25lOwor KyAgYXNfY21wd2kocmVnLCAyNTUpOworKyAgbWFfYihMZXNzVGhhbk9yRXF1YWwsICZkb25lKTsK KysgIG1vdmUzMihJbW0zMigyNTUpLCByZWcpOworKyAgYmluZCgmZG9uZSk7CisrICBMYWJlbCBw b3NpdGl2ZTsKKysgIGFzX2NtcHdpKHJlZywgMCk7CisrICBtYV9iKEdyZWF0ZXJUaGFuT3JFcXVh bCwgJnBvc2l0aXZlKTsKKysgIG1vdmUzMihJbW0zMigwKSwgcmVnKTsKKysgIGJpbmQoJnBvc2l0 aXZlKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gVW5ib3hpbmcKKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpmYWxsaWJsZVVuYm94UHRyKGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3Rl ciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVR5 cGUgdHlwZSwgTGFiZWwqIGZhaWwpIHsKKysgIE1PWl9BU1NFUlQodHlwZSA9PSBKU1ZBTF9UWVBF X09CSkVDVCB8fCB0eXBlID09IEpTVkFMX1RZUEVfU1RSSU5HIHx8CisrICAgICAgICAgICAgIHR5 cGUgPT0gSlNWQUxfVFlQRV9TWU1CT0wgfHwgdHlwZSA9PSBKU1ZBTF9UWVBFX0JJR0lOVCk7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgc3BsaXRUYWcoc3JjLCBzY3JhdGNoKTsKKysg IENvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIEltbVRhZyhKU1ZBTF9UWVBFX1RPX1RBRyh0 eXBlKSksIE5vdEVxdWFsKTsKKysgIG1hX2IoYywgZmFpbCk7CisrICB1bmJveE5vbkRvdWJsZShz cmMsIGRlc3QsIHR5cGUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmYWxsaWJsZVVu Ym94UHRyKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUeXBlIHR5cGUsIExhYmVsKiBmYWlsKSB7 CisrICBsb2FkVmFsdWUoc3JjLCBWYWx1ZU9wZXJhbmQoZGVzdCkpOworKyAgZmFsbGlibGVVbmJv eFB0cihWYWx1ZU9wZXJhbmQoZGVzdCksIGRlc3QsIHR5cGUsIGZhaWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpmYWxsaWJsZVVuYm94UHRyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBS ZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNW YWx1ZVR5cGUgdHlwZSwgTGFiZWwqIGZhaWwpIHsKKysgIGxvYWRWYWx1ZShzcmMsIFZhbHVlT3Bl cmFuZChkZXN0KSk7CisrICBmYWxsaWJsZVVuYm94UHRyKFZhbHVlT3BlcmFuZChkZXN0KSwgZGVz dCwgdHlwZSwgZmFpbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BZGRTdWJJ MTI4SEk2NChSZWdpc3RlciBsaHNMbywgUmVnaXN0ZXIgbGhzSGksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJoc0xvLCBSZWdpc3RlciByaHNIaSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0 LCBib29sIGlzQWRkKSB7CisrICBNT1pfUkVMRUFTRV9BU1NFUlQob3V0cHV0ICE9IGxoc0xvICYm IG91dHB1dCAhPSBsaHNIaSAmJiBvdXRwdXQgIT0gcmhzTG8gJiYKKysgICAgICAgICAgICAgICAg ICAgICBvdXRwdXQgIT0gcmhzSGkpOworKyAgaWYgKGlzQWRkKSB7CisrICAgIC8vIGFkZGMgc2V0 cyBDQSAoY2FycnkpLCBhZGRlIHVzZXMgaXQuCisrICAgIGFzX2FkZGMob3V0cHV0LCBsaHNMbywg cmhzTG8pOyAgLy8gb3V0cHV0ID0gbGhzTG8gKyByaHNMbywgQ0EgPSBjYXJyeQorKyAgICBhc19h ZGRlKG91dHB1dCwgbGhzSGksIHJoc0hpKTsgIC8vIG91dHB1dCA9IGxoc0hpICsgcmhzSGkgKyBD QQorKyAgfSBlbHNlIHsKKysgICAgLy8gc3ViZmM6IHJkID0gcmIgLSByYSwgc2V0cyBDQSAoYm9y cm93IGNvbXBsZW1lbnQpLgorKyAgICAvLyBzdWJmZTogcmQgPSByYiArIH5yYSArIENBLgorKyAg ICBhc19zdWJmYyhvdXRwdXQsIHJoc0xvLCBsaHNMbyk7ICAvLyBvdXRwdXQgPSBsaHNMbyAtIHJo c0xvLCBDQSA9IH5ib3Jyb3cKKysgICAgYXNfc3ViZmUob3V0cHV0LCByaHNIaSwgbGhzSGkpOyAg Ly8gb3V0cHV0ID0gbGhzSGkgLSByaHNIaSAtIGJvcnJvdworKyAgfQorK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjp3YXNtTXVsSTY0V2lkZUhJNjQoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91 dHB1dCwgYm9vbCBpc1NpZ25lZCkgeworKyAgaWYgKGlzU2lnbmVkKSB7CisrICAgIGFzX211bGhk KG91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgYXNfbXVsaGR1KG91dHB1dCwg bGhzLCByaHMpOworKyAgfQorK30KKysKKysvL319fSBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHls ZQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6aW5jcmVtZW50SW50MzJWYWx1 ZShjb25zdCBBZGRyZXNzJiBhZGRyKSB7CisrICBhc01hc20oKS5hZGQzMihJbW0zMigxKSwgYWRk cik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6cmV0bihJbW0zMiBu KSB7CisrICAvLyBMb2FkIHJldHVybiBhZGRyZXNzIGZyb20gW1NQLDBdIGZpcnN0LCB0aGVuIGFk anVzdCBTUCwgdGhlbiByZXR1cm4uCisrICAvLyBNdXN0IGxvYWQgUkEgYmVmb3JlIGFkanVzdGlu ZyBTUCAobGlrZSBsb29uZzY0KSwgc2luY2UgdGhlIFJBIGlzIGF0CisrICAvLyB0aGUgY3VycmVu dCB0b3Agb2Ygc3RhY2ssIG5vdCBhdCBTUCtuLgorKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysg IGFzX2xkKHNjcmF0Y2gsIFN0YWNrUG9pbnRlciwgMCk7CisrICBpZiAobi52YWx1ZSAhPSAwKSB7 CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW0zMihuLnZhbHVlKSwgU3RhY2tQb2ludGVyKTsKKysg IH0KKysgIHhzX210bHIoc2NyYXRjaCk7CisrICBhc19ibHIoKTsKKyt9CisrCisrLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrLy8gVGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zIChvdXRzaWRlIGNoZWNrX21hY3JvYXNzZW1i bGVyX3N0eWxlKQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmNtcFB0clNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbVB0ciByaHMsIFJlZ2lzdGVyIGRl c3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7 CisrICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7 CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSB2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJTZXQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRk cmVzcyByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBs b2FkUHRyKHJocywgc2NyYXRjaCk7CisrICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21w KGxocywgc2NyYXRjaCwgY29uZCk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt0 ZW1wbGF0ZSA8PgorK2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXBQdHJTZXQoQXNzZW1i bGVyOjpDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciByaHMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGxocywgc2NyYXRjaCk7CisrICBBc3NlbWJsZXI6 OkNvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCk7CisrICBtYV9jbXBfc2V0 KGRlc3QsIGMpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSB2b2lkIE1hY3JvQXNzZW1i bGVyOjpjbXAzMlNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBsaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgcmhzLCBSZWdpc3Rl ciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKHJocywgc2NyYXRj aCk7CisrICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKGxocywgc2NyYXRjaCwgY29u ZCwgdHJ1ZSk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKyt0ZW1wbGF0ZSA8Pgor K2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAzMlNldChBc3NlbWJsZXI6OkNvbmRpdGlv biBjb25kLCBBZGRyZXNzIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgcmhzLCBSZWdpc3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgbG9hZDMyKGxocywgc2NyYXRjaCk7CisrICBBc3NlbWJsZXI6OkNvbmRpdGlvbiBjID0g bWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7CisrICBtYV9jbXBfc2V0KGRlc3QsIGMp OworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjbXAz MlNldChBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGxocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tMzIgcmhzLCBSZWdpc3RlciBkZXN0KSB7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbG9hZDMyKGxocywgc2NyYXRjaCk7CisrICBBc3Nl bWJsZXI6OkNvbmRpdGlvbiBjID0gbWFfY21wKHNjcmF0Y2gsIHJocywgY29uZCwgdHJ1ZSk7Cisr ICBtYV9jbXBfc2V0KGRlc3QsIGMpOworK30KKysKKysvL3t7eyBjaGVja19tYWNyb2Fzc2VtYmxl cl9zdHlsZQorKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKy8vIFNJTUQgbG9hZC9zdG9yZSAoMTI4LWJpdCkKKysKKytG YXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmxvYWRVbmFsaWduZWRTaW1kMTI4KGNv bnN0IEFkZHJlc3MmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19p bnROKChpbnRwdHJfdClzcmMub2Zmc2V0LCAzNCkpIHsKKysgICAgLy8gUE9XRVIxMCBwcmVmaXhl ZCBsb2FkIOKAlCBuYXR1cmFsLUxFIGJ5dGUgb3JkZXIsIG5vIEdQUiBzY3JhdGNoLgorKyAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgYXNfcGx4dihkZXN0LmVuY29kaW5n KCksIHNyYy5iYXNlLCAoaW50NjRfdClzcmMub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAg ICAgICAuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIC8v IFBPV0VSOTogbHh2eCAoWC1mb3JtLCBpbmRleGVkKSBsb2FkcyAxMjggYml0cyBpbiBjb3JyZWN0 IExFIG9yZGVyLgorKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICBpZiAoc3JjLm9mZnNldCA9PSAwKSB7CisrICAgICAgLy8gUkE9MCBtZWFucyAidXNlIDAgYXMg YmFzZSIgaW4gaW5kZXhlZCBmb3Jtcywgc28gdXNlIHIwIGVuY29kaW5nLgorKyAgICAgIHJldHVy biBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2eChkZXN0LCByMCwgc3JjLmJhc2UpLmdldE9mZnNl dCgpKTsKKysgICAgfQorKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gp OworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4dngoZGVzdCwgc3JjLmJhc2Us IHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIC8vIFBPV0VSODogbHh2ZDJ4IGxvYWRz IHdpdGggZG91Ymxld29yZCBzd2FwIG9uIExFLiBGaXggd2l0aCB4eHBlcm1kaS4KKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgZmNv OworKyAgaWYgKHNyYy5vZmZzZXQgPT0gMCkgeworKyAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZz ZXQoYXNfbHh2ZDJ4KGRlc3QsIHIwLCBzcmMuYmFzZSkuZ2V0T2Zmc2V0KCkpOworKyAgfSBlbHNl IHsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHNyYy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgZmNv ID0gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4dmQyeChkZXN0LCBzcmMuYmFzZSwgc2NyYXRjaCku Z2V0T2Zmc2V0KCkpOworKyAgfQorKyAgYXNfeHhwZXJtZGkoZGVzdCwgZGVzdCwgZGVzdCwgMik7 CisrICByZXR1cm4gZmNvOworK30KKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJs ZXI6OmxvYWRVbmFsaWduZWRTaW1kMTI4KGNvbnN0IEJhc2VJbmRleCYgc3JjLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7 CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgY29tcHV0ZVNjYWxl ZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgIGlmIChzcmMub2Zmc2V0ICE9IDApIHsKKysgICAg Ly8gYWRkUHRyIHBpY2tzIHVwIFBPV0VSMTAgcGFkZGkgKDEgcHJlZml4ZWQgaW5zbikgd2hlbiBh dmFpbGFibGU7CisrICAgIC8vIGZhbGxzIGJhY2sgdG8gbW92ZVB0cithZGQgb24gUDkvUDguIERy b3BzIHRoZSBleHBsaWNpdCBzY3JhdGNoMi4KKysgICAgYWRkUHRyKEltbVdvcmQoc3JjLm9mZnNl dCksIHNjcmF0Y2gpOworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfbHh2eChkZXN0LCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkp OworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbyhhc19seHZkMngoZGVzdCwgcjAsIHNj cmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIGFzX3h4cGVybWRpKGRlc3QsIGRlc3QsIGRlc3QsIDIp OworKyAgcmV0dXJuIGZjbzsKKyt9CisrCisrRmF1bHRpbmdDb2RlT2Zmc2V0IE1hY3JvQXNzZW1i bGVyOjpzdG9yZVVuYWxpZ25lZFNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRk cmVzcyYgZGVzdCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkp OworKyAgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKChpbnRwdHJfdClkZXN0Lm9mZnNldCwg MzQpKSB7CisrICAgIC8vIFBPV0VSMTAgcHJlZml4ZWQgc3RvcmUg4oCUIG5hdHVyYWwtTEUgYnl0 ZSBvcmRlciwgbm8gR1BSIHNjcmF0Y2guCisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo CisrICAgICAgICBhc19wc3R4dihzcmMuZW5jb2RpbmcoKSwgZGVzdC5iYXNlLCAoaW50NjRfdClk ZXN0Lm9mZnNldCwgLypSPSovZmFsc2UpCisrICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKKysg IH0KKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgICBpZiAoZGVzdC5vZmZzZXQgPT0gMCkgeworKyAgICAgIHJldHVybiBG YXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4dngoc3JjLCByMCwgZGVzdC5iYXNlKS5nZXRPZmZzZXQo KSk7CisrICAgIH0KKysgICAgbW92ZVB0cihJbW1Xb3JkKGRlc3Qub2Zmc2V0KSwgc2NyYXRjaCk7 CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4dngoc3JjLCBkZXN0LmJhc2Us IHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIC8vIFBPV0VSODogc3R4dmQyeCBzdG9y ZXMgd2l0aCBkb3VibGV3b3JkIHN3YXAgb24gTEUuCisrICAvLyBTd2FwIGJlZm9yZSBzdG9yZSwg dGhlbiBzd2FwIGJhY2sgdG8gcmVzdG9yZSB0aGUgcmVnaXN0ZXIuCisrICBTY3JhdGNoU2ltZDEy OFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOworKyAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgc3Jj LCBzcmMsIDIpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIEZh dWx0aW5nQ29kZU9mZnNldCBmY287CisrICBpZiAoZGVzdC5vZmZzZXQgPT0gMCkgeworKyAgICBm Y28gPSBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfc3R4dmQyeChzY3JhdGNoMTI4LCByMCwgZGVzdC5i YXNlKS5nZXRPZmZzZXQoKSk7CisrICB9IGVsc2UgeworKyAgICBtb3ZlUHRyKEltbVdvcmQoZGVz dC5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgZmNvID0gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAg ICAgICAgYXNfc3R4dmQyeChzY3JhdGNoMTI4LCBkZXN0LmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNl dCgpKTsKKysgIH0KKysgIHJldHVybiBmY287CisrfQorKworK0ZhdWx0aW5nQ29kZU9mZnNldCBN YWNyb0Fzc2VtYmxlcjo6c3RvcmVVbmFsaWduZWRTaW1kMTI4KAorKyAgICBGbG9hdFJlZ2lzdGVy IHNyYywgY29uc3QgQmFzZUluZGV4JiBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoZGVzdCwgc2NyYXRjaCk7CisrICBpZiAoZGVzdC5v ZmZzZXQgIT0gMCkgeworKyAgICBhZGRQdHIoSW1tV29yZChkZXN0Lm9mZnNldCksIHNjcmF0Y2gp OworKyAgfQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVP ZmZzZXQoYXNfc3R4dngoc3JjLCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAg U2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoMTI4KCp0aGlzKTsKKysgIGFzX3h4cGVybWRpKHNj cmF0Y2gxMjgsIHNyYywgc3JjLCAyKTsKKysgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf c3R4dmQyeChzY3JhdGNoMTI4LCByMCwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworK30KKysKKysv LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysvLyBTSU1EIG9wZXJhdGlvbnMKKysvLworKy8vIFNjcmF0Y2ggcmVnaXN0ZXIg Y29udmVudGlvbnMgZm9yIFNJTUQgaGVscGVycyAocmVhZCB0aGlzIGJlZm9yZSB3cml0aW5nCisr Ly8gYSBuZXcgb25lKToKKysvLworKy8vIDEuIGBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpYCDigJQgYWNxdWlyZXMgdjAgKD0gVlIwID0gVlNSMzIsCisrLy8gICAgbm9uLWFsbG9j YXRhYmxlKS4gQ29uc3RydWN0ZWQgYXMge0Zsb2F0UmVnaXN0ZXJzOjpmMCwgU2ltZDEyOH0gc28K KysvLyAgICBlbmNvZGluZygpID0gMCArIDMyID0gMzIgKHBlciBBcmNoaXRlY3R1cmUtcHBjNjQu aCkuIERlZmF1bHQgdGVtcC4KKysvLyAgICBPbmUgc2NvcGUgYXQgYSB0aW1lIHBlciBoZWxwZXIu IFNhZmUgdG8gcGFzcyB0byBhbnkgVk1YL1ZTWAorKy8vICAgIGluc3RydWN0aW9uOyB0aGUgYWxs b2NhdG9yIG5ldmVyIHBsYWNlcyBhIGxpdmUgdjEyOCBpbiB2MC4KKysvLworKy8vIDIuICoqRG8g Tk9UKiogd3JpdGUgdG8gVlIxLi5WUjMxICg9IFZTUjMzLi5WU1I2Mykgd2l0aG91dCBhIExvd2Vy aW5nCisrLy8gICAgdGVtcC4gVlIxLi5WUjMxIGFyZSBhbGxvY2F0YWJsZTsgYSBsaXZlIHdhc20g djEyOCBtYXkgYmUgc2l0dGluZyBpbgorKy8vICAgIGFueSBvZiB0aGVtLiBVc2UgYFNjcmF0Y2hT aW1kMTI4U2NvcGVgIChydWxlIDEpIG9yIGEgTG93ZXJpbmcgdGVtcC4KKysvLworKy8vIDMuICoq UmVkLXpvbmUgc3Rhc2gqKiDigJQgdXNlIGBSZWRab25lU3Rhc2hTaW1kMTI4YCAvIGBSZWRab25l UmVzdG9yZVNpbWQxMjhgCisrLy8gICAgKGRlY2xhcmVkIGp1c3QgYmVsb3cpIHdoZW4gYSBoZWxw ZXIgZ2VudWluZWx5IG5lZWRzID4xIFNJTUQgc2NyYXRjaAorKy8vICAgIEFORCBhZGRpbmcgYSBM b3dlcmluZyB0ZW1wIHdvdWxkIHJlcXVpcmUgTElSICsgTUlSICsgQ29kZUdlbiBjaGFuZ2VzLgor Ky8vICAgIEVMRnYyIHJlc2VydmVzIDI4OCBieXRlcyBiZWxvdyBTUDsgd2UgdXNlIGF0IG1vc3Qg MzIgKHR3byAxNi1ieXRlCisrLy8gICAgc2xvdHMpLiBMaXZlIHVzZXJzOiBgZXh0QWRkUGFpcndp c2VJbnQqYCAoMiBzbG90cyksIGBzd2l6emxlSW50OHgxNmAKKysvLyAgICAoMSBzbG90KSwgYGRv dEludDh4MTZJbnQ3eDE2VGhlbkFkZGAgNC1hcmcgKDEgc2xvdCkuIElmIHlvdSBmaW5kCisrLy8g ICAgeW91cnNlbGYgd2FudGluZyBhIDNyZCBzbG90IG9yIG5lc3RlZCBzYXZlL3Jlc3RvcmUsIHBy ZWZlciBhIExvd2VyaW5nCisrLy8gICAgdGVtcCBpbnN0ZWFkIOKAlCB0aGUgcmVkLXpvbmUgYXBw cm9hY2ggaXMgdG9sZXJhYmxlIGJlY2F1c2UgaXQncworKy8vICAgIHNlbGYtY29udGFpbmVkIHRv IGEgc2luZ2xlIGhlbHBlci4gVGhlIGBNT1pfQVNTRVJUKHNsb3QgPCAyKWAgaW5zaWRlCisrLy8g ICAgdGhlIGhlbHBlcnMgZW5mb3JjZXMgdGhpcyBhdCB0ZXN0IHRpbWUuCisrLy8KKysvLyBTaW1k MTI4IGxpdmVzIGluIFZSLW5hbWVzcGFjZSAoVlNSMzItNjMpLCBzbyBWTVggb3BzIGFkZHJlc3Mg U2ltZDEyOAorKy8vIEZsb2F0UmVnaXN0ZXJzIGRpcmVjdGx5IHdpdGggbm8gc3RhZ2luZy4gRW5j b2RpbmcgaXMgMzItNjM7IHRoZSBWTVgKKysvLyBWUiBmaWVsZCBpcyA1LWJpdCAoMC0zMSksIHNv IHdlIG1hc2sgd2l0aCBgJiAzMWAuCisrCisrLy8gVHdvIDE2LWJ5dGUgU2ltZDEyOCBzbG90cyBh dmFpbGFibGUgaW4gdGhlIEVMRnYyIHJlZCB6b25lIGZvciBzaG9ydC1saXZlZAorKy8vIFNJTUQg c3BpbGxzIChzZWUgcG9pbnQgMyBvZiB0aGUgU0lNRCBjb252ZW50aW9ucyBwcmVhbWJsZSBhYm92 ZSkuCisrc3RhdGljIGNvbnN0ZXhwciBpbnQga1JlZFpvbmVTaW1kMTI4TWF4U2xvdHMgPSAyOwor KworK3N0YXRpYyBpbmxpbmUgdm9pZCBSZWRab25lU3Rhc2hTaW1kMTI4KE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgc2xvdCkgeworKyAgTU9aX0FTU0VSVChzbG90ID49IDAgJiYgc2xvdCA8 IGtSZWRab25lU2ltZDEyOE1heFNsb3RzKTsKKysgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4 KHNyYywgQWRkcmVzcyhTdGFja1BvaW50ZXIsIC0xNiAqIChzbG90ICsgMSkpKTsKKyt9CisrCisr c3RhdGljIGlubGluZSB2b2lkIFJlZFpvbmVSZXN0b3JlU2ltZDEyOChNYWNyb0Fzc2VtYmxlciYg bWFzbSwgaW50IHNsb3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQoc2xvdCA+PSAwICYmIHNsb3Qg PCBrUmVkWm9uZVNpbWQxMjhNYXhTbG90cyk7CisrICBtYXNtLmxvYWRVbmFsaWduZWRTaW1kMTI4 KEFkZHJlc3MoU3RhY2tQb2ludGVyLCAtMTYgKiAoc2xvdCArIDEpKSwgZGVzdCk7CisrfQorKwor K3R5cGVkZWYgdm9pZCAoKlZteEJpbmFyeUZuKShBc3NlbWJsZXImLCB1aW50OF90LCB1aW50OF90 LCB1aW50OF90KTsKKysKKytzdGF0aWMgdm9pZCBFbWl0Vm14QmluYXJ5KE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBWbXhCaW5hcnlGbiB2bXhPcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgdm14T3Aoc3RhdGljX2Nhc3Q8QXNzZW1i bGVyJj4obWFzbSksIGRlc3QuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAgbGhzLmVuY29kaW5n KCkgJiAzMSwgcmhzLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworKy8vIE1hY3JvIGZvciBkZWZp bmluZyBWTVggYmluYXJ5IHdyYXBwZXJzLgorKyNkZWZpbmUgVk1YX0JJTkFSWV9XUkFQUEVSKHZt eEluc3QpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIFtdKEFzc2VtYmxlciYgYSwgdWlu dDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYikgeyBcCisrICAgIGEuYXNfIyN2bXhJ bnN0KHZydCwgdnJhLCB2cmIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgfQorKwor Ky8vIEVtaXQgb3AgZGlyZWN0bHkgb24gU2ltZDEyOCBkZXN0LCB0aGVuIHh4bG5vciBpbiBwbGFj ZS4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVm14QmluYXJ5Rm5UPgorK3N0YXRpYyB2b2lkIEVtaXRW bXhCaW5hcnlOb3QoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFZteEJpbmFyeUZuVCB2bXhPcCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgdm14T3Aoc3RhdGljX2Nhc3Q8QXNzZW1ibGVyJj4obWFzbSksIGRlc3QuZW5jb2Rp bmcoKSAmIDMxLAorKyAgICAgICAgbGhzLmVuY29kaW5nKCkgJiAzMSwgcmhzLmVuY29kaW5nKCkg JiAzMSk7CisrICBtYXNtLmFzX3h4bG5vcihkZXN0LCBkZXN0LCBkZXN0KTsKKyt9CisrCisrLy8g SW50ZWdlciBTSU1EIGNvbXBhcmUgaGVscGVyLiBWTVggY29tcGFyZSBpbnN0cnVjdGlvbnMgcHJv ZHVjZSBhbGwtb25lcworKy8vIGZvciB0cnVlLCBhbGwtemVyb3MgZm9yIGZhbHNlIHBlciBlbGVt ZW50LgorKy8vIEF2YWlsYWJsZSBWTVggY29tcGFyZXM6IHZjbXBlcXUqIChlcSksIHZjbXBndHMq IChzaWduZWQgZ3QpLCB2Y21wZ3R1KgorKy8vICh1bnNpZ25lZCBndCkuIE90aGVyIGNvbmRpdGlv bnMgZGVyaXZlZCBieSBzd2FwcGluZyBvcGVyYW5kcyBvcgorKy8vIGNvbXBsZW1lbnRpbmcuCisr dGVtcGxhdGUgPHR5cGVuYW1lIEVxRm4sIHR5cGVuYW1lIEd0c0ZuLCB0eXBlbmFtZSBHdHVGbj4K KytzdGF0aWMgdm9pZCBFbWl0Vm14Q29tcGFyZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgQXNzZW1i bGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0LCBFcUZuIGVxRm4sIEd0c0ZuIGd0c0ZuLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIEd0dUZuIGd0dUZuKSB7CisrICBzd2l0Y2ggKGNvbmQpIHsKKysg ICAgY2FzZSBBc3NlbWJsZXI6OkVxdWFsOgorKyAgICAgIEVtaXRWbXhCaW5hcnkobWFzbSwgZXFG biwgbGhzLCByaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6 Tm90RXF1YWw6CisrICAgICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBlcUZuLCBsaHMsIHJocywg ZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoK KysgICAgICBFbWl0Vm14QmluYXJ5KG1hc20sIGd0c0ZuLCBsaHMsIHJocywgZGVzdCk7CisrICAg ICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6CisrICAg ICAgLy8gIShyaHMgPiBsaHMpCisrICAgICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBndHNGbiwg cmhzLCBsaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6TGVz c1RoYW46CisrICAgICAgLy8gcmhzID4gbGhzIChzd2FwKQorKyAgICAgIEVtaXRWbXhCaW5hcnko bWFzbSwgZ3RzRm4sIHJocywgbGhzLCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBB c3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKysgICAgICAvLyAhKGxocyA+IHJocykKKysgICAg ICBFbWl0Vm14QmluYXJ5Tm90KG1hc20sIGd0c0ZuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAg YnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpBYm92ZToKKysgICAgICBFbWl0Vm14QmluYXJ5 KG1hc20sIGd0dUZuLCBsaHMsIHJocywgZGVzdCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisrICAgICAgRW1pdFZteEJpbmFyeU5vdChtYXNtLCBn dHVGbiwgcmhzLCBsaHMsIGRlc3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxl cjo6QmVsb3c6CisrICAgICAgRW1pdFZteEJpbmFyeShtYXNtLCBndHVGbiwgcmhzLCBsaHMsIGRl c3QpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgor KyAgICAgIEVtaXRWbXhCaW5hcnlOb3QobWFzbSwgZ3R1Rm4sIGxocywgcmhzLCBkZXN0KTsKKysg ICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQg U0lNRCBpbnRlZ2VyIGNvbmRpdGlvbiIpOworKyAgfQorK30KKysKKysvLyBFbWl0IHRlcm5hcnkg Vk1YIG9wIGRpcmVjdGx5IG9uIFNpbWQxMjggcmVncywgbm8gc3RhZ2luZy4KKyt0eXBlZGVmIHZv aWQgKCpWbXhUZXJuYXJ5Rm4pKEFzc2VtYmxlciYsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3Qs IHVpbnQ4X3QpOworKworK3N0YXRpYyB2b2lkIEVtaXRWbXhUZXJuYXJ5KE1hY3JvQXNzZW1ibGVy JiBtYXNtLCBWbXhUZXJuYXJ5Rm4gdm14T3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBhLCBGbG9hdFJlZ2lzdGVyIGIsIEZsb2F0UmVnaXN0ZXIgYywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIHZteE9wKHN0 YXRpY19jYXN0PEFzc2VtYmxlciY+KG1hc20pLCBkZXN0LmVuY29kaW5nKCkgJiAzMSwgYS5lbmNv ZGluZygpICYgMzEsCisrICAgICAgICBiLmVuY29kaW5nKCkgJiAzMSwgYy5lbmNvZGluZygpICYg MzEpOworK30KKysKKysvLyBFbWl0IHVuYXJ5IFZNWCBvcCBkaXJlY3RseSBvbiBTaW1kMTI4IHJl Z3MsIG5vIHN0YWdpbmcuCisrdHlwZWRlZiB2b2lkICgqVm14VW5hcnlGbikoQXNzZW1ibGVyJiwg dWludDhfdCwgdWludDhfdCk7CisrCisrc3RhdGljIHZvaWQgRW1pdFZteFVuYXJ5KE1hY3JvQXNz ZW1ibGVyJiBtYXNtLCBWbXhVbmFyeUZuIHZteE9wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB2bXhPcChzdGF0 aWNfY2FzdDxBc3NlbWJsZXImPihtYXNtKSwgZGVzdC5lbmNvZGluZygpICYgMzEsCisrICAgICAg ICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrLy8gSGVscGVyOiBjcmVhdGUgYSB6ZXJv IFNJTUQgcmVnaXN0ZXIgdXNpbmcgeHhseG9yLgorK3N0YXRpYyB2b2lkIFplcm9TaW1kMTI4KE1h Y3JvQXNzZW1ibGVyJiBtYXNtLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIG1hc20uYXNfeHhs eG9yKGRlc3QsIGRlc3QsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptb3Zl U2ltZDEyOChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBpZiAo c3JjICE9IGRlc3QpIHsKKysgICAgYXNfeHhsb3IoZGVzdCwgc3JjLCBzcmMpOworKyAgfQorK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsb2FkQ29uc3RhbnRTaW1kMTI4KGNvbnN0IFNpbWRD b25zdGFudCYgdiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gTG9hZCAxMjgtYml0IGNvbnN0YW50IGZyb20gaW5s aW5lIGNvbnN0YW50IHBvb2wuCisrICAvLyBDbG9iYmVycyBTZWNvbmRTY3JhdGNoUmVnIChyMTIp LgorKyAgbG9hZEZyb21Qb29sU2ltZDEyOChkZXN0LCB2KTsKKyt9CisrCisrLy8gUFBDNjQgTEUg bGFuZSBtYXBwaW5nOgorKy8vIFdhc20gbGFuZSBLID0gbWVtb3J5IGJ5dGUgSyA9IHJlZ2lzdGVy IGJ5dGUgKDE1LUspLgorKy8vIG1mdnNyZCBleHRyYWN0cyByZWdpc3RlciBiaXRzWzA6NjNdID0g QkUgZHdvcmQgMCA9IFdhc20gbGFuZXMgOC0xNSAoYnl0ZXMpLgorKy8vIEZvciBWTVggYnl0ZSBv cHMsIEJFIGJ5dGUgaW5kZXggPSAxNSAtIHdhc21fbGFuZS4KKysvLyBGb3IgVk1YIGhhbGZ3b3Jk IG9wcywgQkUgaGFsZndvcmQgaW5kZXggPSA3IC0gd2FzbV9oYWxmd29yZC4KKysvLyBGb3IgVlNY IHdvcmQgb3BzICh4eHNwbHR3KSwgQkUgd29yZCBpbmRleCA9IDMgLSB3YXNtX3dvcmQuCisrLy8g Rm9yIGRvdWJsZXdvcmQgb3BzLCBCRSBkd29yZCBpbmRleCA9IDEgLSB3YXNtX2R3b3JkLgorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwbGF0WDE2KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICAvLyBtdHZzcmQgd3JpdGVzIHNyYyBpbnRvIEJFIDAuLjYzIG9mIGRlc3Qg KGxvdyBieXRlIGF0IEJFIGJ5dGUgNyk7CisrICAvLyB2c3BsdGIgdGhlbiBzcGxhdHMgdGhhdCBi eXRlIG92ZXIgYWxsIDE2IGxhbmVzLiBkZXN0IGFsaWFzZXMgYXMKKysgIC8vIGJvdGggc291cmNl IGFuZCBkZXN0aW5hdGlvbiDigJQgdnNwbHRiIHRvbGVyYXRlcyB0aGlzLiBObyBleHRyYQorKyAg Ly8gc2NyYXRjaCByZWdpc3RlciByZXF1aXJlZCwgc28gY2FsbGVycyB0aGF0IGFscmVhZHkgaG9s ZCBhCisrICAvLyBTY3JhdGNoU2ltZDEyOFNjb3BlIChleHRBZGRQYWlyd2lzZSosIHZhci1zaGlm dCBuYXJyb3cgZm9ybXMpIGRvCisrICAvLyBub3Qgc2VlIGEgbmVzdGVkLWFjcXVpcmUgY29sbGlz aW9uLgorKyAgYXNfbXR2c3JkKGRlc3QsIHNyYyk7CisrICBhc192c3BsdGIoZGVzdCwgZGVzdCwg Nyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwbGF0WDgoUmVnaXN0ZXIgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFNhbWUgc2hhcGUgYXMgc3BsYXRYMTYgd2l0aCBo YWxmd29yZCBncmFudWxhcml0eS4gbXR2c3JkIHBsYWNlcworKyAgLy8gdGhlIGxvdyAxNiBiaXRz IGF0IEJFIGhhbGZ3b3JkIDMgKD0gQkUgYnl0ZXMgNi4uNyk7IHZzcGx0aCBwaWNrcworKyAgLy8g aXQgdXAgYW5kIHNwbGF0cyBhY3Jvc3MgOCBsYW5lcy4gdnNwbHRoIHJlYWRzIG9ubHkgdGhlIGNo b3NlbgorKyAgLy8gaGFsZndvcmQsIHNvIG5lZ2F0aXZlIGkzMiBpbnB1dHMgZG8gbm90IG5lZWQg YSAxNi1iaXQgcHJlLW1hc2sKKysgIC8vICh3aGljaCB0aGUgcHJldmlvdXMgR1BSLXJlcGxpY2F0 ZSBwYXRoIHJlcXVpcmVkKS4KKysgIGFzX210dnNyZChkZXN0LCBzcmMpOworKyAgYXNfdnNwbHRo KGRlc3QsIGRlc3QsIDMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGxhdFg0KFJl Z2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBpZiAoSGFzUE9XRVI5KCkpIHsK KysgICAgYXNfbXR2c3J3cyhkZXN0LCBzcmMpOworKyAgfSBlbHNlIHsKKysgICAgYXNfbXR2c3Jk KGRlc3QsIHNyYyk7CisrICAgIGFzX3h4c3BsdHcoZGVzdCwgZGVzdCwgMSk7CisrICB9CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNwbGF0WDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gc3JjIGlzIGEgZG91YmxlLXByZWNpc2lvbiBGUFIgaG9s ZGluZyBhIGZsb2F0IHZhbHVlICh0aGUgSklUIGtlZXBzCisrICAvLyBGUDMyIGluIERQLWVxdWl2 YWxlbnQgZm9ybSBvbiBQUEM2NCkuIENvbnZlcnQgRFDihpJTUCBpbnRvIEJFIHdvcmQgMAorKyAg Ly8gKHhzY3ZkcHNwbiBsYXlzIHRoZSBzaW5nbGUgYXQgYml0c1swOjMxXSAvIEJFIHdvcmQgMCks IHRoZW4gc3BsYXQKKysgIC8vIHdvcmQgMCB0byBhbGwgZm91ciBsYW5lcy4KKysgIGFzX3hzY3Zk cHNwbihkZXN0LCBzcmMpOworKyAgYXNfeHhzcGx0dyhkZXN0LCBkZXN0LCAwKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3BsYXRYMihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICAvLyBTcGxhdCBzY2FsYXIgZG91YmxlIHRvIGJvdGggZG91Ymxld29y ZCBsYW5lcy4KKysgIC8vIFNjYWxhciB2YWx1ZSBpcyBpbiByZWdpc3RlciBiaXRzWzA6NjNdIChC RSBkd29yZCAwKS4KKysgIC8vIHh4cGVybWRpIGRtPTA6IGRlc3QgPSBbc3JjLmR3MCwgc3JjLmR3 MF0KKysgIGFzX3h4cGVybWRpKGRlc3QsIHNyYywgc3JjLCAwKTsKKyt9CisrCisrLy8gSGVscGVy czogc3BsYXQgSW1tMzIgaW50byBTSU1EIHJlZ2lzdGVyIGF0IHZhcmlvdXMgZWxlbWVudCB3aWR0 aHMuCisrLy8gVk1YIHNoaWZ0IGluc3RydWN0aW9ucyByZWFkIHRoZSBzaGlmdCBjb3VudCBmcm9t IEVBQ0ggZWxlbWVudCBpbmRlcGVuZGVudGx5LAorKy8vIHNvIHRoZSBjb3VudCBtdXN0IGJlIHJl cGxpY2F0ZWQgdG8gZXZlcnkgYnl0ZS9oYWxmd29yZC93b3JkIGFzIGFwcHJvcHJpYXRlLgorKy8v CisrLy8gRmFzdCBwYXRoIGZvciBzbWFsbCBjb25zdGFudHM6IHZzcGx0aXN7YixoLHd9IChQT1dF UjcrKSBzcGxhdHMgYSA1LWJpdAorKy8vIHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIGxhbmVzIGlu IDEgaW5zbiB3aXRoIG5vIHBvb2wgZW50cnkuIEZvciB2YWx1ZXMKKysvLyBvdXRzaWRlIFstMTYs IDE1XSB3ZSBmYWxsIGJhY2sgdG8gdGhlIGlubGluZS1wb29sIHBhdGguCisrc3RhdGljIHZvaWQg U3BsYXRJbW04KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBJbW0zMiBpbW0sIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgaW50OF90IHZhbCA9IChpbnQ4X3QpaW1tLnZhbHVlOworKyAgaWYgKHZhbCA+ PSAtMTYgJiYgdmFsIDw9IDE1KSB7CisrICAgIG1hc20uYXNfdnNwbHRpc2IoZGVzdC5lbmNvZGlu ZygpICYgMzEsIHZhbCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIGlmIChIYXNQT1dFUjkoKSkg eworKyAgICAvLyBQOSB4eHNwbHRpYiBoYW5kbGVzIHRoZSBmdWxsIDgtYml0IHJhbmdlIGluIDEg aW5zbi4KKysgICAgbWFzbS5hc194eHNwbHRpYihkZXN0LCAodWludDhfdCl2YWwpOworKyAgICBy ZXR1cm47CisrICB9CisrICBpbnQ4X3QgYnl0ZXNbMTZdOworKyAgZm9yIChpbnQgaSA9IDA7IGkg PCAxNjsgaSsrKSBieXRlc1tpXSA9IHZhbDsKKysgIG1hc20ubG9hZENvbnN0YW50U2ltZDEyOChT aW1kQ29uc3RhbnQ6OkNyZWF0ZVgxNihieXRlcyksIGRlc3QpOworK30KKysKKytzdGF0aWMgdm9p ZCBTcGxhdEltbTE2KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBJbW0zMiBpbW0sIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgaW50MTZfdCB2YWwgPSAoaW50MTZfdClpbW0udmFsdWU7CisrICBpZiAo dmFsID49IC0xNiAmJiB2YWwgPD0gMTUpIHsKKysgICAgbWFzbS5hc192c3BsdGlzaChkZXN0LmVu Y29kaW5nKCkgJiAzMSwgKGludDhfdCl2YWwpOworKyAgICByZXR1cm47CisrICB9CisrICBpbnQx Nl90IGhhbGZzWzhdOworKyAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIGhhbGZzW2ldID0g dmFsOworKyAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDgo aGFsZnMpLCBkZXN0KTsKKyt9CisrCisrc3RhdGljIHZvaWQgU3BsYXRJbW0zMihNYWNyb0Fzc2Vt YmxlciYgbWFzbSwgSW1tMzIgaW1tLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGludDMyX3Qg dmFsID0gaW1tLnZhbHVlOworKyAgaWYgKHZhbCA+PSAtMTYgJiYgdmFsIDw9IDE1KSB7CisrICAg IG1hc20uYXNfdnNwbHRpc3coZGVzdC5lbmNvZGluZygpICYgMzEsIChpbnQ4X3QpdmFsKTsKKysg ICAgcmV0dXJuOworKyAgfQorKyAgaW50MzJfdCB3b3Jkc1s0XSA9IHt2YWwsIHZhbCwgdmFsLCB2 YWx9OworKyAgbWFzbS5sb2FkQ29uc3RhbnRTaW1kMTI4KFNpbWRDb25zdGFudDo6Q3JlYXRlWDQo d29yZHMpLCBkZXN0KTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gRXh0cmFjdCBsYW5lCisrCisr c3RhdGljIHZvaWQgRXh0cmFjdExhbmVUb0dQUihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgdWludDMy X3QgbGFuZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3Jj LCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bGFuZVdpZHRoQnl0ZXMsIHVuc2lnbmVkIGxhbmVXaWR0aEJpdHMpIHsKKysgIC8vIEV4dHJhY3Qg V2FzbSBsYW5lIGZyb20gdmVjdG9yIHJlZ2lzdGVyIHRvIEdQUi4KKysgIC8vIFdhc20gbGFuZSBL IOKGkiByZWdpc3RlciBieXRlIG9mZnNldCAoMTUgLSBLKmxhbmVXaWR0aEJ5dGVzKS4KKysgIC8v CisrICAvLyBTdHJhdGVneTogdXNlIG1mdnNyZCB0byBnZXQgb25lIDY0LWJpdCBoYWxmIG9mIHRo ZSByZWdpc3RlciwgdGhlbiBzaGlmdAorKyAgLy8gYW5kIG1hc2sgdG8gaXNvbGF0ZSB0aGUgbGFu ZS4KKysgIC8vCisrICAvLyBtZnZzcmQgZ2V0cyByZWdpc3RlciBiaXRzWzA6NjNdIChCRSBkd29y ZCAwKSA9IFdhc20gbGFuZXMgaW4gdGhlIGhpZ2gKKysgIC8vIGhhbGYgb2YgdGhlIHJlZ2lzdGVy IChoaWdoLW51bWJlcmVkIGxhbmVzIGluIExFIG1lbW9yeSBvcmRlcikuCisrICAvLyBGb3IgYW4g Ti1iaXQgbGFuZSBhdCBXYXNtIGluZGV4IEw6CisrICAvLyAgIElmIEwgaXMgaW4gdGhlIGhpZ2gg ZHdvcmQgKEwgPj0gOC9sYW5lV2lkdGhCeXRlcyk6CisrICAvLyAgICAgdXNlIG1mdnNyZDsgbGFu ZSBpcyBhdCBHUFIgYml0IG9mZnNldCBsYW5lV2lkdGhCaXRzKihMIC0KKysgIC8vICAgICA4L2xh bmVXaWR0aEJ5dGVzKSBmcm9tIExTQgorKyAgLy8gICBFbHNlIChMIGluIGxvdyBkd29yZCk6Cisr ICAvLyAgICAgc3dhcCBkd29yZHMsIHRoZW4gbWZ2c3JkOyBsYW5lIGlzIGF0IEdQUiBiaXQgb2Zm c2V0IGxhbmVXaWR0aEJpdHMqTAorKyAgLy8gICAgIGZyb20gTFNCCisrCisrICB1bnNpZ25lZCBs YW5lc1BlckR3b3JkID0gOCAvIGxhbmVXaWR0aEJ5dGVzOworKworKyAgaWYgKGxhbmUgPj0gbGFu ZXNQZXJEd29yZCkgeworKyAgICBtYXNtLmFzX21mdnNyZChkZXN0LCBzcmMpOworKyAgICB1bnNp Z25lZCBzaGlmdCA9IGxhbmVXaWR0aEJpdHMgKiAobGFuZSAtIGxhbmVzUGVyRHdvcmQpOworKyAg ICBpZiAoc2hpZnQpIHsKKysgICAgICBtYXNtLnhfc3JkaShkZXN0LCBkZXN0LCBzaGlmdCk7Cisr ICAgIH0KKysgIH0gZWxzZSB7CisrICAgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgIG1hc20u YXNfbWZ2c3JsZChkZXN0LCBzcmMpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIFBPV0VSODog c3dhcCBkd29yZHMgdG8gZ2V0IGR3MSBpbnRvIHNjYWxhciBwb3NpdGlvbi4KKysgICAgICAvLyBB dm9pZCBTY3JhdGNoU2ltZDEyOFNjb3BlIOKAlCBjYWxsZXJzIG1heSBhbHJlYWR5IGhvbGQgaXQu CisrICAgICAgLy8gVXNlIHh4cGVybWRpIGRpcmVjdGx5IG9uIFNjcmF0Y2hTaW1kMTI4UmVnICh2 MC9WU1IzMiwgbm9uLWFsbG9jYXRhYmxlKS4KKysgICAgICBtYXNtLmFzX3h4cGVybWRpKFNjcmF0 Y2hTaW1kMTI4UmVnLCBzcmMsIHNyYywgMik7CisrICAgICAgbWFzbS5hc19tZnZzcmQoZGVzdCwg U2NyYXRjaFNpbWQxMjhSZWcpOworKyAgICB9CisrICAgIHVuc2lnbmVkIHNoaWZ0ID0gbGFuZVdp ZHRoQml0cyAqIGxhbmU7CisrICAgIGlmIChzaGlmdCkgeworKyAgICAgIG1hc20ueF9zcmRpKGRl c3QsIGRlc3QsIHNoaWZ0KTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp1bnNpZ25lZEV4dHJhY3RMYW5lSW50OHgxNih1aW50MzJfdCBsYW5lLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDE2KTsKKysgIGlmIChIYXNQT1dFUjko KSkgeworKyAgICAvLyB2ZXh0cmFjdHViIHB1dHMgVlJCLkJFX2J5dGVbVUlNXSBhdCBWUlQuQkVf Ynl0ZVs3XSB3aXRoIHRoZSByZXN0CisrICAgIC8vIHplcm9lZDsgbWZ2c3JkIHRoZW4gcmVhZHMg QkUgYnl0ZXMgMC4uNyDihpIgbG93IGJ5dGUgb2YgZGVzdCwgaGlnaAorKyAgICAvLyBieXRlcyBh bHJlYWR5IDAuIE5vIG1hc2sgbmVlZGVkLgorKyAgICBhc192ZXh0cmFjdHViKFNjcmF0Y2hTaW1k MTI4UmVnLCBzcmMsIDE1IC0gbGFuZSk7CisrICAgIGFzX21mdnNyZChkZXN0LCBTY3JhdGNoU2lt ZDEyOFJlZyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIEV4dHJhY3RMYW5lVG9HUFIoKnRoaXMs IGxhbmUsIHNyYywgZGVzdCwgMSwgOCk7CisrICBhc19ybGRpY2woZGVzdCwgZGVzdCwgMCwgNTYp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dHJhY3RMYW5lSW50MTZ4 OCh1aW50MzJfdCBsYW5lLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFu ZSA8IDgpOworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX3ZleHRyYWN0dWgoU2NyYXRj aFNpbWQxMjhSZWcsIHNyYywgMTQgLSAyICogbGFuZSk7CisrICAgIGFzX21mdnNyZChkZXN0LCBT Y3JhdGNoU2ltZDEyOFJlZyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIEV4dHJhY3RMYW5lVG9H UFIoKnRoaXMsIGxhbmUsIHNyYywgZGVzdCwgMiwgMTYpOworKyAgYXNfcmxkaWNsKGRlc3QsIGRl c3QsIDAsIDQ4KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExhbmVGbG9h dDMyeDQodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBNT1pf QVNTRVJUKGxhbmUgPCA0KTsKKysgIC8vIEJFIHdvcmQgaW5kZXggPSAzIC0gbGFuZS4geHhleHRy YWN0dXcgZXh0cmFjdHMgYSB3b3JkIGJ5IEJFIGJ5dGUgb2Zmc2V0LgorKyAgLy8gQkUgYnl0ZSBv ZmZzZXQgb2YgQkUgd29yZCBXID0gVyo0LiBTbyBvZmZzZXQgPSAoMy1sYW5lKSo0LgorKyAgLy8g eHhleHRyYWN0dXcgcHV0cyB0aGUgZXh0cmFjdGVkIHdvcmQgaW50byBiaXRzWzMyOjYzXSBvZiBk ZXN0ICh0aGUgbG93CisrICAvLyB3b3JkIG9mIHRoZSBzY2FsYXIgZG91Ymxld29yZCksIHRoZW4g eHNjdnNwZHBuIGNvbnZlcnRzIFNQ4oaSRFAuCisrICAvLyB4eHNwbHR3IHJlcGxpY2F0ZXMgYSB3 b3JkIGludG8gYWxsIDQgcG9zaXRpb25zLiBUaGUgc2NhbGFyIFNQIHZhbHVlCisrICAvLyBpcyB0 aGVuIGF0IGJpdHNbMDozMV0gd2hlcmUgeHNjdnNwZHBuIGV4cGVjdHMgaXQuCisrICBhc194eHNw bHR3KGRlc3QsIHNyYywgMyAtIGxhbmUpOworKyAgYXNfeHNjdnNwZHBuKGRlc3QsIGRlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRyYWN0TGFuZUZsb2F0NjR4Mih1aW50MzJf dCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8 IDIpOworKyAgaWYgKGxhbmUgPT0gMCkgeworKyAgICAvLyBMYW5lIDAgPSBMRSBsb3cgZHdvcmQg PSBCRSBkd29yZCAxLiBOZWVkIHRvIHN3YXAgdG8gc2NhbGFyIHBvc2l0aW9uLgorKyAgICBhc194 eHBlcm1kaShkZXN0LCBzcmMsIHNyYywgMik7CisrICB9IGVsc2UgeworKyAgICAvLyBMYW5lIDEg PSBMRSBoaWdoIGR3b3JkID0gQkUgZHdvcmQgMCA9IHNjYWxhciBwb3NpdGlvbi4KKysgICAgaWYg KHNyYyAhPSBkZXN0KSB7CisrICAgICAgYXNfeHhsb3IoZGVzdCwgc3JjLCBzcmMpOworKyAgICB9 CisrICB9CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFJlcGxhY2UgbGFuZQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnJlcGxhY2VMYW5lSW50OHgxNih1bnNpZ25lZCBsYW5lLCBSZWdpc3RlciBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgbGhzRGVzdCkgeworKyAgTU9aX0FTU0VSVChsYW5lIDwgMTYpOworKyAgaWYgKEhhc1BPV0VS MTAoKSkgeworKyAgICAvLyAyIGluc25zICsgMSBHUFIgc2NyYXRjaDogbG9hZCBsYW5lIGluZGV4 LCB2aW5zYnJ4IChyaWdodC1pbmRleGVkCisrICAgIC8vID0gTEUtbmF0dXJhbCkuIHZpbnNicngg bWFza3MgUkEgJiAweEYsIHNvIHRoZSBpbW1lZGlhdGUgZml0cy4KKysgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBpZHggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIHhzX2xpKGlkeCwgaW50MTZfdChsYW5lKSk7CisrICAgIGFzX3ZpbnNi cngobGhzRGVzdCwgaWR4LCByaHMpOworKyAgICByZXR1cm47CisrICB9CisrICBpZiAoSGFzUE9X RVI5KCkpIHsKKysgICAgLy8gMiBpbnNucyArIDEgVlNSIHNjcmF0Y2g6IHN0YWdlIHJocyBpbiBC RSAwLi42MyBvZiBhIHNjcmF0Y2ggVlNSCisrICAgIC8vIChsb3cgYnl0ZSBvZiByaHMgbGFuZHMg YXQgQkUgYnl0ZSA3KSwgdGhlbiB2aW5zZXJ0YiBjb3BpZXMgdGhhdAorKyAgICAvLyBCRSBieXRl IDcgaW50byBsaHNEZXN0J3MgQkUgYnl0ZSAoMTUgLSBsYW5lKSA9IHdhc20gbGFuZSBMLgorKyAg ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgICBhc19tdHZzcmQoc2Ny YXRjaCwgcmhzKTsKKysgICAgYXNfdmluc2VydGIobGhzRGVzdCwgc2NyYXRjaCwgMTUgLSBsYW5l KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgeworKyAgICAvLyBQT1dFUjg6IGV4dHJhY3QgZHdv cmQsIHVzZSBybGRpbWkgdG8gaW5zZXJ0IGJ5dGUsIHdyaXRlIGJhY2suCisrICAgIC8vIE9ubHkg bmVlZHMgMSBHUFIgc2NyYXRjaC4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwor KyAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIHVuc2lnbmVkIGR3b3Jk ID0gbGFuZSAvIDg7CisrICAgIHVuc2lnbmVkIGJ5dGVJbkR3b3JkID0gbGFuZSAlIDg7CisrICAg IGlmIChkd29yZCA9PSAxKSB7CisrICAgICAgYXNfbWZ2c3JkKHRtcCwgbGhzRGVzdCk7CisrICAg IH0gZWxzZSB7CisrICAgICAgYXNfeHhwZXJtZGkoc2NyYXRjaDEyOCwgbGhzRGVzdCwgbGhzRGVz dCwgMik7CisrICAgICAgYXNfbWZ2c3JkKHRtcCwgc2NyYXRjaDEyOCk7CisrICAgIH0KKysgICAg Ly8gcmxkaW1pIFJULFJTLFNILE1COiBpbnNlcnQgcm90YXRlZCBSUyBiaXRzIGludG8gUlQgYXQg cG9zaXRpb25zCisrICAgIC8vIE1CLi42My1TSC4gSW5zZXJ0IHJocyBieXRlIGF0IGJpdCBvZmZz ZXQgOCpieXRlSW5Ed29yZCBmcm9tIExTQjoKKysgICAgLy8gICBTSCA9IDgqYnl0ZUluRHdvcmQs IE1CID0gNTYgLSA4KmJ5dGVJbkR3b3JkCisrICAgIGFzX3JsZGltaSh0bXAsIHJocywgOCAqIGJ5 dGVJbkR3b3JkLCA1NiAtIDggKiBieXRlSW5Ed29yZCk7CisrICAgIGFzX210dnNyZChzY3JhdGNo MTI4LCB0bXApOworKyAgICAvLyBtdHZzcmQgd3JpdGVzIHNjcmF0Y2gxMjguZHcwIGZyb20gYHRt cGAgYW5kIGxlYXZlcyBzY3JhdGNoMTI4LmR3MQorKyAgICAvLyB1bmRlZmluZWQuIEJvdGggeHhw ZXJtZGkgZm9ybXMgYmVsb3cgc2VsZWN0IHNjcmF0Y2gxMjguZHcwIG9ubHk6CisrICAgIC8vICAg RE09MGIwMSDihpIgW3NjcmF0Y2guZHcwLCBsaHNEZXN0LmR3MV0KKysgICAgLy8gICBETT0wYjAw IOKGkiBbbGhzRGVzdC5kdzAsIHNjcmF0Y2guZHcwXQorKyAgICAvLyBTbyB0aGUgdW5kZWZpbmVk IGR3MSBpcyBuZXZlciByZWFkLiBJTlZBUklBTlQ6IGFueSBmdXR1cmUgY2hhbmdlCisrICAgIC8v IHRvIGVpdGhlciBETSBsaXRlcmFsIE1VU1QgZmlyc3QgemVybyBzY3JhdGNoMTI4LmR3MSB2aWEg eHhseG9yIG9yCisrICAgIC8vIGFkb3B0IGEgZGlmZmVyZW50IHN0YWdpbmcgc2NoZW1lOyBvdGhl cndpc2UgcmVhZHMgb2YgZHcxIHByb2R1Y2UKKysgICAgLy8gUE9XRVI5LXplcm8gLyBQT1dFUjgt dW5kZWZpbmVkIGdhcmJhZ2UgaW4gdGhlIG91dHB1dC4KKysgICAgaWYgKGR3b3JkID09IDEpIHsK KysgICAgICBhc194eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNo MTI4LCAwKTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBs YWNlTGFuZUludDE2eDgodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysg IE1PWl9BU1NFUlQobGFuZSA8IDgpOworKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAvLyAy IGluc25zICsgMSBHUFIgc2NyYXRjaDogbGFuZSoyIOKGkiBieXRlIHBvc2l0aW9uLCB0aGVuIHZp bnNocnguCisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg ICAgUmVnaXN0ZXIgaWR4ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICB4c19saShpZHgsIGludDE2 X3QobGFuZSAqIDIpKTsKKysgICAgYXNfdmluc2hyeChsaHNEZXN0LCBpZHgsIHJocyk7CisrICAg IHJldHVybjsKKysgIH0KKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAvLyAyIGluc25zICsg MSBWU1Igc2NyYXRjaDogc3RhZ2UgcmhzIGluIEJFIDAuLjYzIChsb3cgMTYgb2YgcmhzCisrICAg IC8vIGxhbmRzIGF0IEJFIGJ5dGVzIDYuLjcpLCB0aGVuIHZpbnNlcnRoIGNvcGllcyB0aG9zZSB0 d28gYnl0ZXMKKysgICAgLy8gaW50byBsaHNEZXN0J3MgQkUgYnl0ZXMgKDE0IC0gMkwpLi4oMTUg LSAyTCkgPSB3YXNtIGxhbmUgTC4KKysgICAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKKysgICAgYXNfbXR2c3JkKHNjcmF0Y2gsIHJocyk7CisrICAgIGFzX3ZpbnNlcnRoKGxo c0Rlc3QsIHNjcmF0Y2gsIDE0IC0gMiAqIGxhbmUpOworKyAgICByZXR1cm47CisrICB9CisrICB7 CisrICAgIC8vIFBPV0VSODogZXh0cmFjdCBkd29yZCwgcmxkaW1pIHRvIGluc2VydCBoYWxmd29y ZCwgd3JpdGUgYmFjay4KKysgICAgLy8gU2FtZSBkdzEtdW5kZWYgaW52YXJpYW50IGFzIHJlcGxh Y2VMYW5lSW50OHgxNiBhYm92ZS4KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2gxMjgoKnRoaXMpOwor KyAgICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIHVuc2lnbmVkIGR3b3Jk ID0gbGFuZSAvIDQ7CisrICAgIHVuc2lnbmVkIGh3SW5Ed29yZCA9IGxhbmUgJSA0OworKyAgICBp ZiAoZHdvcmQgPT0gMSkgeworKyAgICAgIGFzX21mdnNyZCh0bXAsIGxoc0Rlc3QpOworKyAgICB9 IGVsc2UgeworKyAgICAgIGFzX3h4cGVybWRpKHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIGxoc0Rlc3Qs IDIpOworKyAgICAgIGFzX21mdnNyZCh0bXAsIHNjcmF0Y2gxMjgpOworKyAgICB9CisrICAgIGFz X3JsZGltaSh0bXAsIHJocywgMTYgKiBod0luRHdvcmQsIDQ4IC0gMTYgKiBod0luRHdvcmQpOwor KyAgICBhc19tdHZzcmQoc2NyYXRjaDEyOCwgdG1wKTsKKysgICAgaWYgKGR3b3JkID09IDEpIHsK KysgICAgICBhc194eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKKysg ICAgfSBlbHNlIHsKKysgICAgICBhc194eHBlcm1kaShsaHNEZXN0LCBsaHNEZXN0LCBzY3JhdGNo MTI4LCAwKTsKKysgICAgfQorKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBs YWNlTGFuZUludDMyeDQodW5zaWduZWQgbGFuZSwgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysg IE1PWl9BU1NFUlQobGFuZSA8IDQpOworKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAvLyAx IGluc24sIG5vIHNjcmF0Y2ggVlNSLiBVSU0gaXMgdGhlIEJFIGJ5dGUgb2Zmc2V0LgorKyAgICBh c192aW5zdyhsaHNEZXN0LCByaHMsICgzIC0gbGFuZSkgKiA0KTsKKysgICAgcmV0dXJuOworKyAg fQorKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIC8vIFBPV0VSOTogeHhpbnNlcnR3IGluc2Vy dHMgd29yZCBmcm9tIGJpdHNbMzI6NjNdIG9mIFhCIGF0IEJFIGJ5dGUKKysgICAgLy8gb2Zmc2V0 IFVJTSBpbiBYVC4gbXR2c3JkIHB1dHMgR1BSIGludG8gYml0c1swOjYzXTsgbG93IDMyIGJpdHMK KysgICAgLy8gbGFuZCBhdCBiaXRzWzMyOjYzXS4gQkUgYnl0ZSBvZmZzZXQgb2YgV2FzbSB3b3Jk IGxhbmUgPSAoMy1sYW5lKSo0LgorKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRo aXMpOworKyAgICBhc19tdHZzcmQoc2NyYXRjaCwgcmhzKTsKKysgICAgYXNfeHhpbnNlcnR3KGxo c0Rlc3QsIHNjcmF0Y2gsICgzIC0gbGFuZSkgKiA0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAg Ly8gUE9XRVI4OiBleHRyYWN0IGR3b3JkLCBybGRpbWkgdG8gaW5zZXJ0IHdvcmQsIHdyaXRlIGJh Y2suCisrICAvLyBNb2RlbGVkIG9uIHJlcGxhY2VMYW5lSW50MTZ4OCBiZWxvdy4KKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaDEyOCgqdGhpcyk7CisrICBSZWdpc3RlciB0bXAgPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICB1bnNpZ25lZCBkd29yZCA9IGxhbmUgLyAyOyAgICAgICAgLy8gMCA9IGxhbmVzIDAsMTsg MSA9IGxhbmVzIDIsMy4KKysgIHVuc2lnbmVkIHdvcmRJbkR3b3JkID0gbGFuZSAlIDI7ICAvLyAw ID0gbG93IExFIHdvcmQ7IDEgPSBoaWdoIExFIHdvcmQuCisrICBpZiAoZHdvcmQgPT0gMSkgewor KyAgICBhc19tZnZzcmQodG1wLCBsaHNEZXN0KTsKKysgIH0gZWxzZSB7CisrICAgIGFzX3h4cGVy bWRpKHNjcmF0Y2gxMjgsIGxoc0Rlc3QsIGxoc0Rlc3QsIDIpOworKyAgICBhc19tZnZzcmQodG1w LCBzY3JhdGNoMTI4KTsKKysgIH0KKysgIGFzX3JsZGltaSh0bXAsIHJocywgMzIgKiB3b3JkSW5E d29yZCwgMzIgLSAzMiAqIHdvcmRJbkR3b3JkKTsKKysgIGFzX210dnNyZChzY3JhdGNoMTI4LCB0 bXApOworKyAgaWYgKGR3b3JkID09IDEpIHsKKysgICAgYXNfeHhwZXJtZGkobGhzRGVzdCwgc2Ny YXRjaDEyOCwgbGhzRGVzdCwgMSk7CisrICB9IGVsc2UgeworKyAgICBhc194eHBlcm1kaShsaHNE ZXN0LCBsaHNEZXN0LCBzY3JhdGNoMTI4LCAwKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6cmVwbGFjZUxhbmVGbG9hdDMyeDQodW5zaWduZWQgbGFuZSwgRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBsaHNEZXN0KSB7CisrICBNT1pfQVNTRVJUKGxhbmUgPCA0KTsKKysgIGlmIChIYXNQ T1dFUjkoKSkgeworKyAgICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAg ICBhc194c2N2ZHBzcG4oc2NyYXRjaCwgcmhzKTsKKysgICAgYXNfeHhpbnNlcnR3KGxoc0Rlc3Qs IHNjcmF0Y2gsICgzIC0gbGFuZSkgKiA0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgLy8gUE9X RVI4OiBjb252ZXJ0IGRvdWJsZSByaHMgdG8gc2luZ2xlIChsYW5kcyBpbiBCRSBiaXRzIDAuLjMx IG9mIEZQUiksCisrICAvLyBleHRyYWN0IGJpdHMgdG8gYSBHUFIsIHRoZW4gcm91dGUgdGhyb3Vn aCB0aGUgaW50ZWdlciBpbnNlcnQgcGF0aC4KKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRl bXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHJoc0JpdHMgPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICB7CisrICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICAgIGFzX3hz Y3ZkcHNwbihzY3JhdGNoLCByaHMpOworKyAgICBhc19tZnZzcmQocmhzQml0cywgc2NyYXRjaCk7 ICAgLy8gc2luZ2xlIGlzIGluIGhpZ2ggMzIgYml0cyBvZiBHUFIKKysgICAgeF9zcmRpKHJoc0Jp dHMsIHJoc0JpdHMsIDMyKTsgIC8vIHNpbmdsZSDihpIgbG93IDMyIGJpdHMKKysgIH0KKysgIC8v IElubGluZSB0aGUgaW50LWluc2VydCBzZXF1ZW5jZSAoY2FuJ3QgY2FsbCByZXBsYWNlTGFuZUlu dDMyeDQgZnJvbQorKyAgLy8gaGVyZSBiZWNhdXNlIHdlJ3JlIGFscmVhZHkgaW5zaWRlIGEgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgYW5kCisrICAvLyBuZWVkIHRvIGFjcXVpcmUgYSBzZXBhcmF0 ZSB0bXApLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoMTI4KCp0aGlzKTsKKysgIFJl Z2lzdGVyIHRtcCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIHVuc2lnbmVkIGR3b3JkID0gbGFuZSAv IDI7CisrICB1bnNpZ25lZCB3b3JkSW5Ed29yZCA9IGxhbmUgJSAyOworKyAgaWYgKGR3b3JkID09 IDEpIHsKKysgICAgYXNfbWZ2c3JkKHRtcCwgbGhzRGVzdCk7CisrICB9IGVsc2UgeworKyAgICBh c194eHBlcm1kaShzY3JhdGNoMTI4LCBsaHNEZXN0LCBsaHNEZXN0LCAyKTsKKysgICAgYXNfbWZ2 c3JkKHRtcCwgc2NyYXRjaDEyOCk7CisrICB9CisrICBhc19ybGRpbWkodG1wLCByaHNCaXRzLCAz MiAqIHdvcmRJbkR3b3JkLCAzMiAtIDMyICogd29yZEluRHdvcmQpOworKyAgYXNfbXR2c3JkKHNj cmF0Y2gxMjgsIHRtcCk7CisrICBpZiAoZHdvcmQgPT0gMSkgeworKyAgICBhc194eHBlcm1kaShs aHNEZXN0LCBzY3JhdGNoMTI4LCBsaHNEZXN0LCAxKTsKKysgIH0gZWxzZSB7CisrICAgIGFzX3h4 cGVybWRpKGxoc0Rlc3QsIGxoc0Rlc3QsIHNjcmF0Y2gxMjgsIDApOworKyAgfQorK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlTGFuZUZsb2F0NjR4Mih1bnNpZ25lZCBsYW5lLCBG bG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDIpOwor KyAgLy8geHhwZXJtZGkgdG8gcGxhY2UgdGhlIHNjYWxhciBkb3VibGUgaW50byB0aGUgY29ycmVj dCBsYW5lLgorKyAgaWYgKGxhbmUgPT0gMCkgeworKyAgICAvLyBSZXBsYWNlIExFIGxvdyBkd29y ZCAoPSBkdzEpLiBLZWVwIGxoc0Rlc3QgZHcwIChsYW5lIDEpLgorKyAgICAvLyByaHMgc2NhbGFy IGlzIGluIGR3MC4gZG09MGIwMDogW2xoc0Rlc3QuZHcwLCByaHMuZHcwXQorKyAgICBhc194eHBl cm1kaShsaHNEZXN0LCBsaHNEZXN0LCByaHMsIDApOworKyAgfSBlbHNlIHsKKysgICAgLy8gUmVw bGFjZSBMRSBoaWdoIGR3b3JkICg9IGR3MCkuIEtlZXAgbGhzRGVzdCBkdzEgKGxhbmUgMCkuCisr ICAgIC8vIHJocyBzY2FsYXIgaXMgaW4gZHcwLiBkbT0wYjAxOiBbcmhzLmR3MCwgbGhzRGVzdC5k dzFdCisrICAgIGFzX3h4cGVybWRpKGxoc0Rlc3QsIHJocywgbGhzRGVzdCwgMSk7CisrICB9Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNodWZmbGVJbnQ4eDE2KGNvbnN0IHVpbnQ4X3Qg bGFuZXNbMTZdLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIHNodWZmbGVJbnQ4eDE2KGxh bmVzLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpzaHVmZmxlSW50OHgxNihjb25zdCB1aW50OF90IGxhbmVzWzE2XSwgRmxvYXRSZWdpc3RlciBs aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBy aHMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNo KCp0aGlzKTsKKysgIC8vIFBQQzY0IHZwZXJtIHVzZXMgQkUgYnl0ZSBpbmRpY2VzOiBWUkFbMF09 TVNCLCBWUkFbMTVdPUxTQiwgVlJCWzE2Li4zMV0uCisrICAvLyBDb252ZXJ0IFdhc20gTEUgbGFu ZSBpbmRpY2VzIHRvIHZwZXJtIGNvbnRyb2w6IGxocyBsYW5lIE4gPSBCRSBpbmRleAorKyAgLy8g KDE1LU4pLCByaHMgbGFuZSBOID0gQkUgaW5kZXggKDMxLU4pID0gKDQ3IC0gKE4rMTYpKS4KKysg IGludDhfdCBjdHJsWzE2XTsKKysgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7 CisrICAgIHVpbnQ4X3Qgc3JjID0gbGFuZXNbaV07CisrICAgIGlmIChzcmMgPCAxNikgeworKyAg ICAgIGN0cmxbaV0gPSAxNSAtIHNyYzsKKysgICAgfSBlbHNlIHsKKysgICAgICBjdHJsW2ldID0g NDcgLSBzcmM7CisrICAgIH0KKysgIH0KKysgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0 YW50OjpDcmVhdGVYMTYoY3RybCksIHNjcmF0Y2gpOworKyAgLy8gdnBlcm0gZGlyZWN0bHkgb24g U2ltZDEyOCByZWdzLgorKyAgYXNfdnBlcm0oZGVzdC5lbmNvZGluZygpICYgMzEsIGxocy5lbmNv ZGluZygpICYgMzEsIHJocy5lbmNvZGluZygpICYgMzEsCisrICAgICAgICAgICBzY3JhdGNoLmVu Y29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxhbmVTZWxlY3RT aW1kMTI4KEZsb2F0UmVnaXN0ZXIgbWFzaywgRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVn aXN0ZXIgZGVzdCkgeworKyAgLy8geHhzZWw6IFhDPTDihpJYQSwgWEM9MeKGklhCIOKGkiBYVCA9 IChYQSAmIH5YQykgfCAoWEIgJiBYQykKKysgIC8vIGxhbmVTZWxlY3Q6IGRlc3QgPSAobGhzICYg bWFzaykgfCAocmhzICYgfm1hc2spCisrICAvLyBOZWVkIFhBPXJocywgWEI9bGhzLCBYQz1tYXNr LgorKyAgYXNfeHhzZWwoZGVzdCwgcmhzLCBsaHMsIG1hc2spOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjppbnRlcmxlYXZlSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIE9uIExFLCB2bXJnaGIocmhzLCBsaHMpIGdp dmVzIFdhc20gaW50ZXJsZWF2ZV9oaWdoLgorKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZtcmdoYiksIHJocywgbGhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6aW50ZXJsZWF2ZUhpZ2hJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9h dFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklO QVJZX1dSQVBQRVIodm1yZ2hoKSwgcmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjppbnRlcmxlYXZlSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5B UllfV1JBUFBFUih2bXJnaHcpLCByaHMsIGxocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OmludGVybGVhdmVIaWdoSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8geHhwZXJtZGkgRE09MDogW1hBLmR3MCwgWEIu ZHcwXSA9IG1lcmdlIGhpZ2ggZHdvcmRzLgorKyAgLy8gT24gTEU6IGR3MCA9IGhpZ2ggV2FzbSBs YW5lIChsYW5lIDEpLgorKyAgYXNfeHhwZXJtZGkoZGVzdCwgcmhzLCBsaHMsIDApOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlTG93SW50OHgxNihGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodm1yZ2xiKSwgcmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlTG93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodm1yZ2xoKSwgcmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhf QklOQVJZX1dSQVBQRVIodm1yZ2x3KSwgcmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjppbnRlcmxlYXZlTG93SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyB4eHBlcm1kaSBETT0zOiBbWEEuZHcxLCBY Qi5kdzFdID0gbWVyZ2UgbG93IGR3b3Jkcy4KKysgIGFzX3h4cGVybWRpKGRlc3QsIHJocywgbGhz LCAzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29uY2F0QW5kUmlnaHRTaGlmdFNp bWQxMjgoRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0 KSB7CisrICAvLyB2c2xkb2koVlJBLCBWUkIsIFNIKSBleHRyYWN0cyAxNiBieXRlcyBzdGFydGlu ZyBhdCBieXRlIFNIIG9mIHRoZQorKyAgLy8gYmlnLWVuZGlhbiBjb25jYXRlbmF0aW9uIFZSQXx8 VlJCLiBFbmRpYW5uZXNzIG1hcHBpbmcgZm9yIHRoZSBXYXNtCisrICAvLyBgdjEyOC5zaHVmZmxl YCByaWdodC1zaGlmdC1jb25jYXQgc2VtYW50aWM6CisrICAvLyAgIFdhc206ICByZXN1bHRbaV0g PSAoaSArIHNoaWZ0IDwgMTYpID8gcmhzW2kgKyBzaGlmdF0KKysgIC8vICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBsaHNbaSArIHNoaWZ0IC0gMTZdCisrICAvLyAgIFBQ QyBMRTogdnNsZG9pKHJocywgbGhzLCBzaGlmdCkgcHJvZHVjZXMgZXhhY3RseSB0aGF0IOKAlCB0 aGUgTEUgYnl0ZQorKyAgLy8gICBsYXlvdXQgcmV2ZXJzZXMgZnJvbSBCRSwgc28gcGFzc2luZyAo cmhzLCBsaHMsIHNoaWZ0KSBoZXJlIGlzIHRoZSBMRQorKyAgLy8gICBlcXVpdmFsZW50IG9mIChs aHMsIHJocywgMTYgLSBzaGlmdCkgb24gQkUuCisrICBNT1pfQVNTRVJUKHNoaWZ0IDwgMTYpOwor KyAgaWYgKHNoaWZ0ID09IDApIHsKKysgICAgbW92ZVNpbWQxMjgocmhzLCBkZXN0KTsKKysgICAg cmV0dXJuOworKyAgfQorKyAgLy8gdnNsZG9pIFZSVCxWUkEsVlJCLFNIOiByZXN1bHRbaV0gPSAo VlJBfHxWUkIpW1NIK2ldCisrICAvLyBFbWl0IHZzbGRvaSBkaXJlY3RseSBvbiBTaW1kMTI4IHJl Z3MgKFZSQSA9IGxocyA9IGhpZ2ggcGFydCwgVlJCID0KKysgIC8vIHJocyA9IGxvdyBwYXJ0KS4g VGhlIFZNWCBlbWl0dGVyIG1hc2tzIGAmIDMxYCBpbnRlcm5hbGx5IHRvIGV4dHJhY3QKKysgIC8v IHRoZSA1LWJpdCBWUiBmaWVsZCBmcm9tIHRoZSBTaW1kMTI4IGVuY29kaW5nLgorKyAgYXNfdnNs ZG9pKGRlc3QsIGxocywgcmhzLCBzaGlmdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmxlZnRTaGlmdFNpbWQxMjgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBNT1pfQVNTRVJUKGNvdW50LnZhbHVlIDwgMTYpOworKyAgaWYgKGNvdW50LnZhbHVlID09IDAp IHsKKysgICAgbW92ZVNpbWQxMjgoc3JjLCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAg Ly8gdnNsbyBzaGlmdHMgbGVmdCBieSBieXRlcyAoY291bnQgaW4gYml0cyAxMjEtMTI0IG9mIFZS QiwgaS5lLiBieXRlIDE1IGJpdHMKKysgIC8vIDEtNCkuIHZzbCBzaGlmdHMgbGVmdCBieSBiaXRz IChjb3VudCBpbiBiaXRzIDEyNS0xMjcgb2YgVlJCLCBpLmUuIGJ5dGUgMTUKKysgIC8vIGJpdHMg NS03KS4gRm9yIGJ5dGUgc2hpZnQ6IHNwbGF0WDQoY291bnQqOCwgc2NyYXRjaCksIHRoZW4gdnNs by4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTMy KCp0aGlzLCBJbW0zMihjb3VudC52YWx1ZSAqIDgpLCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xvKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdFNpbWQxMjgoSW1tMzIgY291 bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChjb3VudC52YWx1ZSA8 IDE2KTsKKysgIGlmIChjb3VudC52YWx1ZSA9PSAwKSB7CisrICAgIG1vdmVTaW1kMTI4KHNyYywg ZGVzdCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7CisrICBTcGxhdEltbTMyKCp0aGlzLCBJbW0zMihjb3VudC52YWx1ZSAqIDgpLCBz Y3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3Jv KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVy b0V4dGVuZDh4MTZUbzE2eDgoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBVbnNp Z25lZCB3aWRlbiBsb3c6IGludGVybGVhdmUgbG93IGJ5dGVzIHdpdGggemVybyBieXRlcy4KKysg IC8vIE9uIExFLCB2bXJnbGIoemVybywgc3JjKSBpbnRlcmxlYXZlcyB0aGUgbG93IDggYnl0ZXMg b2Ygc3JjIHdpdGggemVyb3MuCisrICAvLyBVc2UgU2NyYXRjaFNpbWQxMjhSZWcgYXMgdGhlIHpl cm8uIE9yZGVyIG1hdHRlcnM6IHJlYWQgc3JjIGludG8gdGhlCisrICAvLyBtZXJnZSBCRUZPUkUg d3JpdGluZyBkZXN0ICh3aGljaCBtaWdodCBhbGlhcyBzcmMpLiB2bXJnbGIgcmVhZHMKKysgIC8v IHZyYSt2cmIsIHdyaXRlcyB2cnQg4oCUIHNpbmdsZS1jeWNsZSBpc3N1ZS4KKysgIFNjcmF0Y2hT aW1kMTI4U2NvcGUgemVybygqdGhpcyk7CisrICBhc194eGx4b3IoemVybywgemVybywgemVybyk7 CisrICBhc192bXJnbGIoZGVzdC5lbmNvZGluZygpICYgMzEsIHplcm8uZW5jb2RpbmcoKSAmIDMx LCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6emVy b0V4dGVuZDh4MTZUbzMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB6ZXJvRXh0 ZW5kOHgxNlRvMTZ4OChzcmMsIGRlc3QpOworKyAgemVyb0V4dGVuZDE2eDhUbzMyeDQoZGVzdCwg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQ4eDE2VG82NHgy KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgemVyb0V4dGVuZDh4MTZUbzMyeDQoc3Jj LCBkZXN0KTsKKysgIHplcm9FeHRlbmQzMng0VG82NHgyKGRlc3QsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIC8vIFVuc2lnbmVkIHdpZGVuIGxvdzogaW50ZXJsZWF2ZSBsb3cgaGFs ZndvcmRzIHdpdGggemVybyBoYWxmd29yZHMuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHplcm8o KnRoaXMpOworKyAgYXNfeHhseG9yKHplcm8sIHplcm8sIHplcm8pOworKyAgYXNfdm1yZ2xoKGRl c3QuZW5jb2RpbmcoKSAmIDMxLCB6ZXJvLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkg JiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Onplcm9FeHRlbmQxNng4VG82NHgy KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgemVyb0V4dGVuZDE2eDhUbzMyeDQoc3Jj LCBkZXN0KTsKKysgIHplcm9FeHRlbmQzMng0VG82NHgyKGRlc3QsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjp6ZXJvRXh0ZW5kMzJ4NFRvNjR4MihGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIC8vIFVuc2lnbmVkIHdpZGVuIGxvdzogaW50ZXJsZWF2ZSBsb3cgd29y ZHMgd2l0aCB6ZXJvIHdvcmRzLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB6ZXJvKCp0aGlzKTsK KysgIGFzX3h4bHhvcih6ZXJvLCB6ZXJvLCB6ZXJvKTsKKysgIGFzX3ZtcmdsdyhkZXN0LmVuY29k aW5nKCkgJiAzMSwgemVyby5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyZXZlcnNlSW50MTZ4OChGbG9hdFJlZ2lzdGVy IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBjb25zdCB1aW50OF90IGxhbmVzW10gPSB7 MTQsIDE1LCAxMiwgMTMsIDEwLCAxMSwgOCwgOSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICA2LCAgNywgIDQsICA1LCAgMiwgIDMsICAwLCAxfTsKKysgIHNodWZmbGVJbnQ4eDE2KGxhbmVz LCBzcmMsIHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJldmVyc2VJ bnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGNvbnN0 IHVpbnQ4X3QgbGFuZXNbXSA9IHsxMiwgMTMsIDE0LCAxNSwgOCwgOSwgMTAsIDExLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIDQsICA1LCAgNiwgIDcsICAwLCAxLCAyLCAgM307CisrICBz aHVmZmxlSW50OHgxNihsYW5lcywgc3JjLCBzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpyZXZlcnNlSW50NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBhc194eHBlcm1kaShkZXN0LCBzcmMsIHNyYywgMik7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnN3aXp6bGVJbnQ4eDE2UmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxo cywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgc3dpenpsZUludDh4MTYobGhzLCBy aHMsIGRlc3QpOworK30KKysKKysvLyBleHRNdWx7TG93LEhpZ2h9SW50ezh4MTYsMTZ4OH0gdXNl IFBPV0VSOCsgd2lkZW5pbmcgbXVsdGlwbGllcworKy8vICh2bXVse2Usb317cyx1fXtiLGh9KSBw bHVzIGEgaGFsZndvcmQvd29yZCBtZXJnZSB0byBtYXAgQkUtaW5kZXhlZAorKy8vIGV2ZW4vb2Rk IHByb2R1Y3RzIGludG8gV2FzbSBsYW5lIG9yZGVyIG9uIFBQQzY0IExFLgorKy8vCisrLy8gTGFu ZSBtYXBwaW5nOgorKy8vICAgRm9yIExvdyAoV2FzbSBsYW5lcyBmcm9tIExFIGJ5dGVzL0hXIDAu Lk4vMi0xID0gQkUgMTUuLk4vMik6CisrLy8gICAgIHZtcmdse2gsd30oZXZlbl9wcm9kdWN0cywg b2RkX3Byb2R1Y3RzKSBwbGFjZXMgdGhlIHJpZ2h0IHByb2R1Y3RzCisrLy8gICAgIGF0IEJFIHJl c3VsdCBpbmRpY2VzLCB3aGljaCBvbiBMRSBtYXAgdG8gV2FzbSBsYW5lcyAwLi5OLzItMS4KKysv LyAgIEZvciBIaWdoIChXYXNtIGxhbmVzIGZyb20gTEUgaW5kaWNlcyBOLzIuLk4tMSA9IEJFIE4v Mi0xLi4wKToKKysvLyAgICAgdm1yZ2h7aCx3fSB0YWtlcyB0aGUgdXBwZXItaGFsZiBCRSBpbmRp Y2VzIGluc3RlYWQuCisrLy8KKysvLyBBbGlhc2luZyBzYWZldHk6IHZtdWwqIHJlYWRzIGJvdGgg b3BlcmFuZHMgYmVmb3JlIHdyaXRpbmcsIHNvCisrLy8gYGRlc3QgPSB2bXVsbyogbGhzLCByaHNg IGlzIHNhZmUgZXZlbiB3aGVuIGRlc3QgYWxpYXNlcyBsaHMvcmhzLgorKy8vIFdlIHVzZSBvbmUg c2NyYXRjaCBmb3IgdGhlIGV2ZW4tcHJvZHVjdCBoYWxmIGJlY2F1c2Ugdm1yZ2x7aCx3fQorKy8v IHJlYWRzIGRlc3QgYWZ0ZXIgdGhlIG9kZCBtdWx0aXBseS4KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpleHRNdWxMb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4 X3QgbCA9IGxocy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAg dWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkg JiAzMTsKKysgIGFzX3ZtdWxlc2IocywgbCwgcik7CisrICBhc192bXVsb3NiKGQsIGwsIHIpOwor KyAgYXNfdm1yZ2xoKGQsIHMsIGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRN dWxIaWdoSW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhfdCBsID0g bGhzLmVuY29kaW5nKCkgJiAzMSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90 IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOwor KyAgYXNfdm11bGVzYihzLCBsLCByKTsKKysgIGFzX3ZtdWxvc2IoZCwgbCwgcik7CisrICBhc192 bXJnaGgoZCwgcywgZCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0 TXVsTG93SW50OHgxNihGbG9hdFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4X3QgbCA9IGxo cy5lbmNvZGluZygpICYgMzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBk ID0gZGVzdC5lbmNvZGluZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysg IGFzX3ZtdWxldWIocywgbCwgcik7CisrICBhc192bXVsb3ViKGQsIGwsIHIpOworKyAgYXNfdm1y Z2xoKGQsIHMsIGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11 bEhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBs aHMuZW5jb2RpbmcoKSAmIDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3Qg ZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7Cisr ICBhc192bXVsZXViKHMsIGwsIHIpOworKyAgYXNfdm11bG91YihkLCBsLCByKTsKKysgIGFzX3Zt cmdoaChkLCBzLCBkKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0TXVsTG93SW50 MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBsaHMuZW5jb2Rp bmcoKSAmIDMxLCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZCA9IGRlc3Qu ZW5jb2RpbmcoKSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICBhc192bXVs ZXNoKHMsIGwsIHIpOworKyAgYXNfdm11bG9zaChkLCBsLCByKTsKKysgIGFzX3ZtcmdsdyhkLCBz LCBkKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0TXVsSGlnaEludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHVpbnQ4X3QgbCA9IGxocy5lbmNvZGluZygpICYg MzEsIHIgPSByaHMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGlu ZygpICYgMzEsIHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIGFzX3ZtdWxlc2gocywg bCwgcik7CisrICBhc192bXVsb3NoKGQsIGwsIHIpOworKyAgYXNfdm1yZ2h3KGQsIHMsIGQpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEV4dE11bExvd0ludDE2eDgoRmxv YXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4 U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICB1aW50OF90IGwgPSBsaHMuZW5jb2RpbmcoKSAmIDMx LCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZCA9IGRlc3QuZW5jb2Rpbmco KSAmIDMxLCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICBhc192bXVsZXVoKHMsIGws IHIpOworKyAgYXNfdm11bG91aChkLCBsLCByKTsKKysgIGFzX3ZtcmdsdyhkLCBzLCBkKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRFeHRNdWxIaWdoSW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEy OFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAz MSwgciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5n KCkgJiAzMSwgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgYXNfdm11bGV1aChzLCBs LCByKTsKKysgIGFzX3ZtdWxvdWgoZCwgbCwgcik7CisrICBhc192bXJnaHcoZCwgcywgZCk7Cisr fQorKworKy8vIEV4dE11bHtMb3csSGlnaH1JbnQzMng0IHVzZSB2bXVse2Usb317cyx1fXcgKFBP V0VSOCspIHBsdXMgeHhwZXJtZGkKKysvLyB0byBjb21iaW5lIHRoZSB0d28gaTY0IHBhcnRpYWwg cHJvZHVjdHMgaW50byBXYXNtIGxhbmUgb3JkZXIgb24gUFBDNjQKKysvLyBMRS4geHhwZXJtZGkg YWNjZXB0cyB0aGUgZnVsbCA2LWJpdCBWU1IgZW5jb2Rpbmcgc28gaXQgd29ya3MgZGlyZWN0bHkK KysvLyBvbiBTaW1kMTI4IHJlZ3MgKGVuY29kaW5nIDMyLTYzKSB3aXRob3V0IGFueSBWUiBzdGFn aW5nLgorKy8vCisrLy8gQWxpYXNpbmcgc2FmZTogYm90aCB2bXVsKiByZWFkcyBjb21wbGV0ZSBi ZWZvcmUgdGhlIHNlY29uZCBvbmUgd3JpdGVzCisrLy8gZGVzdCwgYW5kIHh4cGVybWRpIHJlYWRz IGJvdGggaW5wdXRzIGJlZm9yZSB3cml0aW5nLgorKworK3N0YXRpYyB2b2lkIEVtaXRFeHRNdWxJ bnQzMng0KAorKyAgICBNYWNyb0Fzc2VtYmxlciYgbWFzbSwgRmxvYXRSZWdpc3RlciBsaHMsIEZs b2F0UmVnaXN0ZXIgcmhzLAorKyAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIHZvaWQgKCptdWxFdmVu KShBc3NlbWJsZXImLCB1aW50OF90LCB1aW50OF90LCB1aW50OF90KSwKKysgICAgdm9pZCAoKm11 bE9kZCkoQXNzZW1ibGVyJiwgdWludDhfdCwgdWludDhfdCwgdWludDhfdCksIHVpbnQ4X3QgZG0p IHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKKysgIHVpbnQ4X3QgbCA9 IGxocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IHIgPSByaHMuZW5jb2RpbmcoKSAmIDMx OworKyAgdWludDhfdCBkID0gZGVzdC5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IHMgPSBz Y3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIG11bEV2ZW4oc3RhdGljX2Nhc3Q8QXNzZW1ibGVy Jj4obWFzbSksIHMsIGwsIHIpOworKyAgbXVsT2RkKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+KG1h c20pLCBkLCBsLCByKTsKKysgIG1hc20uYXNfeHhwZXJtZGkoZGVzdCwgc2NyYXRjaCwgZGVzdCwg ZG0pOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRNdWxMb3dJbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdEV4dE11bEludDMy eDQoCisrICAgICAgKnRoaXMsIGxocywgcmhzLCBkZXN0LAorKyAgICAgIFtdKEFzc2VtYmxlciYg YSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgeworKyAgICAgICAgYS5hc192bXVs ZXN3KHQsIHgsIHkpOworKyAgICAgIH0sCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90 IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7CisrICAgICAgICBhLmFzX3ZtdWxvc3codCwgeCwg eSk7CisrICAgICAgfSwKKysgICAgICAzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 ZXh0TXVsSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgRW1pdEV4dE11bEludDMyeDQoCisrICAgICAgKnRoaXMsIGxocywgcmhzLCBkZXN0 LAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3Qg eSkgeworKyAgICAgICAgYS5hc192bXVsZXN3KHQsIHgsIHkpOworKyAgICAgIH0sCisrICAgICAg W10oQXNzZW1ibGVyJiBhLCB1aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7CisrICAg ICAgICBhLmFzX3ZtdWxvc3codCwgeCwgeSk7CisrICAgICAgfSwKKysgICAgICAwKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRFeHRNdWxMb3dJbnQzMng0KEZsb2F0UmVn aXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0RXh0TXVsSW50MzJ4NCgK KysgICAgICAqdGhpcywgbGhzLCByaHMsIGRlc3QsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1 aW50OF90IHQsIHVpbnQ4X3QgeCwgdWludDhfdCB5KSB7CisrICAgICAgICBhLmFzX3ZtdWxldXco dCwgeCwgeSk7CisrICAgICAgfSwKKysgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwg dWludDhfdCB4LCB1aW50OF90IHkpIHsKKysgICAgICAgIGEuYXNfdm11bG91dyh0LCB4LCB5KTsK KysgICAgICB9LAorKyAgICAgIDMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNp Z25lZEV4dE11bEhpZ2hJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIEVtaXRFeHRNdWxJbnQzMng0KAorKyAgICAgICp0aGlzLCBsaHMsIHJocywg ZGVzdCwKKysgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCB4LCB1aW50 OF90IHkpIHsKKysgICAgICAgIGEuYXNfdm11bGV1dyh0LCB4LCB5KTsKKysgICAgICB9LAorKyAg ICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHgsIHVpbnQ4X3QgeSkgewor KyAgICAgICAgYS5hc192bXVsb3V3KHQsIHgsIHkpOworKyAgICAgIH0sCisrICAgICAgMCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnExNU11bHJTYXRJbnQxNng4KEZsb2F0UmVnaXN0 ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFExNSBtdWx0aXBseS1yb3Vu ZC1zYXR1cmF0ZTogdm1ocmFkZHNocyhhLCBiLCB6ZXJvKSBjb21wdXRlcworKyAgLy8gc2F0dXJh dGUoKGFbaV0qYltpXSArIDB4NDAwMCkgPj4gMTUpIGZvciBlYWNoIGhhbGZ3b3JkLgorKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFplcm9TaW1kMTI4KCp0aGlzLCBz Y3JhdGNoKTsKKysgIEVtaXRWbXhUZXJuYXJ5KAorKyAgICAgICp0aGlzLAorKyAgICAgIFtdKEFz c2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1aW50OF90IHZyYiwgdWludDhf dCB2cmMpIHsKKysgICAgICAgIGEuYXNfdm1ocmFkZHNocyh2cnQsIHZyYSwgdnJiLCB2cmMpOwor KyAgICAgIH0sCisrICAgICAgbGhzLCByaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKysvLyBu ZWcgPSAwIC0gc3JjLiBVc2UgU2NyYXRjaFNpbWQxMjhSZWcgKD0gVlIwLCBub24tYWxsb2NhdGFi bGUpIGFzIHRoZQorKy8vIHplcm8gc291cmNlIHNvIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igc2Vl cyBubyBjbG9iYmVyZWQgVlJzLgorKy8vIDIgaW5zbnM6IHh4bHhvciBzY3JhdGNoICsgdnN1YnVY bSBkZXN0LCBzY3JhdGNoLCBzcmMuIHZuZWd7YixofQorKy8vIGRvZXNuJ3QgZXhpc3QgaW4gYW55 IFBPV0VSIElTQSwgaGVuY2UgdGhlIHN1YnRyYWN0LgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5l Z0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFplcm9TaW1kMTI4KCp0aGlzLCBz Y3JhdGNoKTsKKysgIGFzX3ZzdWJ1Ym0oZGVzdC5lbmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5j b2RpbmcoKSAmIDMxLAorKyAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMp OworKyAgWmVyb1NpbWQxMjgoKnRoaXMsIHNjcmF0Y2gpOworKyAgYXNfdnN1YnVobShkZXN0LmVu Y29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYgMzEsCisrICAgICAgICAgICAgIHNy Yy5lbmNvZGluZygpICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpuZWdJbnQz Mng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChIYXNQ T1dFUjkoKSkgeworKyAgICBFbWl0Vm14VW5hcnkoCisrICAgICAgICAqdGhpcywKKysgICAgICAg IFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdm5lZ3co dnJ0LCB2cmIpOyB9LAorKyAgICAgICAgc3JjLCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQor KyAgLy8gUE9XRVI4IGZhbGxiYWNrOiAwIC0gc3JjIHZpYSBTY3JhdGNoU2ltZDEyOFJlZyAoVlIw KS4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBaZXJvU2ltZDEy OCgqdGhpcywgc2NyYXRjaCk7CisrICBhc192c3VidXdtKGRlc3QuZW5jb2RpbmcoKSAmIDMxLCBz Y3JhdGNoLmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAgICAgICAgc3JjLmVuY29kaW5nKCkgJiAz MSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5lZ0ludDY0eDIoRmxvYXRSZWdpc3Rl ciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAg IEVtaXRWbXhVbmFyeSgKKysgICAgICAgICp0aGlzLAorKyAgICAgICAgW10oQXNzZW1ibGVyJiBh LCB1aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192bmVnZCh2cnQsIHZyYik7IH0sCisr ICAgICAgICBzcmMsIGRlc3QpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyBQT1dFUjggZmFs bGJhY2s6IDAgLSBzcmMgdmlhIFNjcmF0Y2hTaW1kMTI4UmVnIChWUjApLgorKyAgU2NyYXRjaFNp bWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNo KTsKKysgIGFzX3ZzdWJ1ZG0oZGVzdC5lbmNvZGluZygpICYgMzEsIHNjcmF0Y2guZW5jb2Rpbmco KSAmIDMxLAorKyAgICAgICAgICAgICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrI3VuZGVm IERFRl9ORUdfSU5UTnhNX1ZTVUIKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEFk ZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWJzKSwg bGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZEFk ZFNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWhzKSwg bGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFN1 YlNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWJzKSwg bGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFN1 YlNhdEludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidWhzKSwg bGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1p bkludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWludWIpLCBsaHMsIHJo cywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTWluSW50MTZ4 OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtaW51aCksIGxocywgcmhzLCBkZXN0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRNaW5JbnQzMng0KEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5 KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodm1pbnV3KSwgbGhzLCByaHMsIGRlc3QpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZE1heEludDh4MTYoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMs IFZNWF9CSU5BUllfV1JBUFBFUih2bWF4dWIpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywg RmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZtYXh1aCksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dW5zaWduZWRNYXhJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dS QVBQRVIodm1heHV3KSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp1bnNpZ25lZEF2ZXJhZ2VJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YXZn dWIpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkQXZlcmFnZUludDE2eDgoRmxvYXRSZWdpc3RlciBsaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhdmd1aCksIGxocywg cmhzLCBkZXN0KTsKKyt9CisrCisrLy8gYWJzKHgpID0gbWF4KHgsIC14KSBwZXIgc2lnbmVkIGxh bmUuIE5vIHZhYnN7YixoLHcsZH0gZXhpc3RzIGluIGFueSBJU0EuCisrLy8gdm5lZ3t3LGR9IGV4 aXN0cyBvbmx5IG9uIFBPV0VSOS4KKysvLyBXZSB1c2UgU2NyYXRjaFNpbWQxMjhSZWcgYXMgYSB0 ZW1wIGZvciAtc3JjLiBPcmRlciBtYXR0ZXJzOiBjb21wdXRlCisrLy8gLXNyYyBpbnRvIHRlbXAg Zmlyc3QgKHJlYWRzIHNyYyksIHRoZW4gbWF4KHNyYywgdGVtcCkgaW50byBkZXN0IChyZWFkcwor Ky8vIHNyYyArIHRlbXAsIHdyaXRlcyBkZXN0KS4gU2FmZSBldmVuIHdoZW4gZGVzdCA9PSBzcmMg YmVjYXVzZSBzcmMgaXMKKysvLyByZWFkIGJlZm9yZSBkZXN0IGlzIHdyaXR0ZW4gYnkgdm1heHNY LgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFic0ludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMp OworKyAgYXNfeHhseG9yKHRtcCwgdG1wLCB0bXApOyAgLy8gdG1wID0gMAorKyAgYXNfdnN1YnVi bSh0bXAuZW5jb2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAgICAg ICBzcmMuZW5jb2RpbmcoKSAmIDMxKTsgIC8vIHRtcCA9IC1zcmMKKysgIGFzX3ZtYXhzYihkZXN0 LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSwKKysgICAgICAgICAgICB0bXAu ZW5jb2RpbmcoKSAmIDMxKTsgIC8vIGRlc3QgPSBtYXgoc3JjLCAtc3JjKQorK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjphYnNJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgdG1wKCp0aGlzKTsKKysgIGFzX3h4 bHhvcih0bXAsIHRtcCwgdG1wKTsKKysgIGFzX3ZzdWJ1aG0odG1wLmVuY29kaW5nKCkgJiAzMSwg dG1wLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc192bWF4c2go ZGVzdC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGluZygp ICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphYnNJbnQzMng0KEZsb2F0UmVn aXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUg dG1wKCp0aGlzKTsKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBhc192bmVndyh0bXAuZW5j b2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsgIC8vIHRtcCA9IC1zcmMKKysgIH0g ZWxzZSB7CisrICAgIGFzX3h4bHhvcih0bXAsIHRtcCwgdG1wKTsKKysgICAgYXNfdnN1YnV3bSh0 bXAuZW5jb2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAm IDMxKTsKKysgIH0KKysgIGFzX3ZtYXhzdyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29k aW5nKCkgJiAzMSwgdG1wLmVuY29kaW5nKCkgJiAzMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OmFic0ludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSB0bXAoKnRoaXMpOworKyAgaWYgKEhhc1BPV0VSOSgp KSB7CisrICAgIGFzX3ZuZWdkKHRtcC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYg MzEpOyAgLy8gdG1wID0gLXNyYworKyAgfSBlbHNlIHsKKysgICAgYXNfeHhseG9yKHRtcCwgdG1w LCB0bXApOworKyAgICBhc192c3VidWRtKHRtcC5lbmNvZGluZygpICYgMzEsIHRtcC5lbmNvZGlu ZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworKyAgfQorKyAgYXNfdm1heHNkKGRlc3Qu ZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0bXAuZW5jb2RpbmcoKSAmIDMx KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0SW50OHgxNihJbW0zMiBj b3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2Ny YXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTgoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKKysgIEVt aXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xiKSwgc3JjLCBzY3JhdGNo LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bGVmdFNoaWZ0SW50MTZ4OChJ bW0zMiBjb3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTE2KCp0aGlzLCBjb3VudCwgc2NyYXRjaCk7 CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNsaCksIHNyYywg c2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmxlZnRTaGlmdElu dDMyeDQoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2lt ZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgU3BsYXRJbW0zMigqdGhpcywgY291bnQsIHNj cmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbHcp LCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0 U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMzIoKnRoaXMsIGNv dW50LCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBF Uih2c2xkKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6cmlnaHRTaGlmdEludDh4MTYoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tOCgq dGhpcywgY291bnQsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFS WV9XUkFQUEVSKHZzcmFiKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50OHgxNihJbW0zMiBjb3VudCwgRmxvYXRS ZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRj aCgqdGhpcyk7CisrICBTcGxhdEltbTgoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKKysgIEVtaXRW bXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JiKSwgc3JjLCBzY3JhdGNoLCBk ZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRTaGlmdEludDE2eDgoSW1t MzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKKysgIFNwbGF0SW1tMTYoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsK KysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhaCksIHNyYywg c2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkUmln aHRTaGlmdEludDE2eDgoSW1tMzIgY291bnQsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgU3BsYXRJbW0x NigqdGhpcywgY291bnQsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJ TkFSWV9XUkFQUEVSKHZzcmgpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50MzJ4NChJbW0zMiBjb3VudCwgRmxvYXRSZWdpc3Rl ciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAg U3BsYXRJbW0zMigqdGhpcywgY291bnQsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhp cywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmF3KSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChJbW0zMiBj b3VudCwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4 U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTMyKCp0aGlzLCBjb3VudCwgc2NyYXRj aCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNydyksIHNy Yywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hp ZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBTcGxhdEltbTMyKCp0aGlzLCBjb3Vu dCwgc2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIo dnNyYWQpLCBzcmMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy Ojp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ2NHgyKEltbTMyIGNvdW50LCBGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK KysgIFNwbGF0SW1tMzIoKnRoaXMsIGNvdW50LCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnko KnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JkKSwgc3JjLCBzY3JhdGNoLCBkZXN0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBsaHNEZXN0KSB7CisrICBhc194eGxhbmQobGhzRGVzdCwgbGhzRGVzdCwgcmhzKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZUFuZFNpbWQxMjgoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHhsYW5kKGRlc3QsIGxocywg cmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZU9yU2ltZDEyOChGbG9h dFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgYXNfeHhsb3IobGhzRGVzdCwgbGhzRGVzdCwgcmhz KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZU9yU2ltZDEyOChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h4bG9yKGRlc3QsIGxo cywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZVhvclNpbWQxMjgo RmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICBhc194eGx4b3IobGhzRGVzdCwgbGhzRGVz dCwgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZVhvclNpbWQxMjgo RmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfeHhseG9y KGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZU5v dFNpbWQxMjgoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNf eHhsbm9yKGRlc3QsIHNyYywgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0 d2lzZU5vdEFuZFNpbWQxMjgoRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7CisrICAvLyBu b3RhbmQobGhzLCByaHMpID0gfmxocyAmIHJocyA9IHh4bGFuZGMocmhzLCBsaHMpCisrICBhc194 eGxhbmRjKGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmFueVRydWVTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7Cisr ICAvLyB2Y21wZXF1ZC4gKFBPV0VSOCspIGFnYWluc3QgemVybyBzZXRzIENSNjoKKysgIC8vICAg LSBDUjYuTFQgKEJFIGJpdCAyNCkgPSAxIGlmZiB0aGUgcGVyLWxhbmUgcmVzdWx0IGlzIGFsbC0x cywgaS5lLgorKyAgLy8gICAgIGV2ZXJ5IGRvdWJsZXdvcmQgb2Ygc3JjIGVxdWFscyB6ZXJvICg9 IHNyYyBpcyBhbGwtemVybykuCisrICAvLyAgIC0gQ1I2LkVRIChCRSBiaXQgMjYpID0gMSBpZmYg bm8gbGFuZSB3YXMgZXF1YWwgKD0gYW55IG5vbnplcm8pLgorKyAgLy8gYW55LXRydWUgPSAhYWxs LXplcm8gPSAhQ1I2LkxULgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK KysgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgYXNfeHhseG9yKHNj cmF0Y2gsIHNjcmF0Y2gsIHNjcmF0Y2gpOworKyAgYXNfdmNtcGVxdWRfcmMocywgc3JjLmVuY29k aW5nKCkgJiAzMSwgcyk7CisrICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgIC8vIHNldGJjciBt YXRlcmlhbGlzZXMgKENSW0JJXSA9PSAwKSA/IDEgOiAwIGRpcmVjdGx5IGludG8gZGVzdC4KKysg ICAgLy8gZGVzdCA9IChDUjYuTFQgPT0gMCkgPSAibm90IGFsbC16ZXJvIiA9IGFueS10cnVlLgor KyAgICBhc19zZXRiY3IoZGVzdCwgQXNzZW1ibGVyOjpMZXNzVGhhbiwgY3I2KTsKKysgICAgcmV0 dXJuOworKyAgfQorKyAgYXNfbWZvY3JmKGRlc3QsIGNyNik7CisrICAvLyBDUjYuTFQgaXMgYXQg QkUgYml0IDI0IG9mIHRoZSBHUFIuIHJsd2lubSBzaD0yNSByb3RhdGVzIGxlZnQgMjU6CisrICAv LyBiaXQgKDI0IC0gMjUpIG1vZCAzMiA9IDMxIChMU0IpLiBNYXNrIDMxLi4zMSBrZWVwcyBqdXN0 IGJpdCAzMS4KKysgIGFzX3Jsd2lubShkZXN0LCBkZXN0LCAyNSwgMzEsIDMxKTsKKysgIGFzX3hv cmkoZGVzdCwgZGVzdCwgMSk7CisrfQorKworKy8vIHZjbXBlcXVYLiBhZ2FpbnN0IHplcm8gc2V0 cyBDUjY6IExUID0gYWxsIGlucHV0IGxhbmVzIHdlcmUgemVybywKKysvLyBFUSA9IG5vIGlucHV0 IGxhbmUgd2FzIHplcm8uIFRoZSBsYXR0ZXIgaXMgZXhhY3RseSAiYWxsLXRydWUiLgorKy8vIG1m b2NyZiBwbGFjZXMgQ1I2IGF0IGJpdHMgMjQtMjcgb2YgdGhlIGxvdyAzMi1iaXQgaGFsZiAoTFQ9 MjQsIEVRPTI2KS4KKysvLyBybHdpbm0gcmQscmQsMjcsMzEsMzEgZXh0cmFjdHMgYml0IDI2IChD UjYuRVEpIHJpZ2h0LWp1c3RpZmllZC4KKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVm14Q21wUmNGbj4K KytzdGF0aWMgdm9pZCBFbWl0QWxsVHJ1ZUludChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgRmxvYXRS ZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwg Vm14Q21wUmNGbiB2bXhDbXBSYykgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKG1h c20pOworKyAgWmVyb1NpbWQxMjgobWFzbSwgc2NyYXRjaCk7CisrICB1aW50OF90IHMgPSBzY3Jh dGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIHZteENtcFJjKHN0YXRpY19jYXN0PEFzc2VtYmxlciY+ KG1hc20pLCBzLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCBzKTsKKysgIGlmIChIYXNQT1dFUjEwKCkp IHsKKysgICAgLy8gc2V0YmMgbWF0ZXJpYWxpc2VzIENSNi5FUSBkaXJlY3RseSBpbnRvIGRlc3Qg KDEgaW5zbiB2cyB0aGUgMi1pbnNuCisrICAgIC8vIG1mb2NyZiArIHJsd2lubSBleHRyYWN0KS4g QWxyZWFkeSB3aXJlZCBpbiBtYV9jbXBfc2V0LgorKyAgICBtYXNtLmFzX3NldGJjKGRlc3QsIEFz c2VtYmxlcjo6RXF1YWwsIGNyNik7CisrICAgIHJldHVybjsKKysgIH0KKysgIG1hc20uYXNfbWZv Y3JmKGRlc3QsIGNyNik7CisrICBtYXNtLmFzX3Jsd2lubShkZXN0LCBkZXN0LCAyNywgMzEsIDMx KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWxsVHJ1ZUludDh4MTYoRmxvYXRSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRBbGxUcnVlSW50KCp0aGlzLCBzcmMs IGRlc3QsCisrICAgICAgICAgICAgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWlu dDhfdCByLCB1aW50OF90IGIpIHsKKysgICAgICAgICAgICAgICAgICAgYS5hc192Y21wZXF1Yl9y Yyh0LCByLCBiKTsKKysgICAgICAgICAgICAgICAgIH0pOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjphbGxUcnVlSW50MTZ4OChGbG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCkg eworKyAgRW1pdEFsbFRydWVJbnQoKnRoaXMsIHNyYywgZGVzdCwKKysgICAgICAgICAgICAgICAg IFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB0LCB1aW50OF90IHIsIHVpbnQ4X3QgYikgeworKyAg ICAgICAgICAgICAgICAgICBhLmFzX3ZjbXBlcXVoX3JjKHQsIHIsIGIpOworKyAgICAgICAgICAg ICAgICAgfSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFsbFRydWVJbnQzMng0KEZs b2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0QWxsVHJ1ZUludCgqdGhp cywgc3JjLCBkZXN0LAorKyAgICAgICAgICAgICAgICAgW10oQXNzZW1ibGVyJiBhLCB1aW50OF90 IHQsIHVpbnQ4X3QgciwgdWludDhfdCBiKSB7CisrICAgICAgICAgICAgICAgICAgIGEuYXNfdmNt cGVxdXdfcmModCwgciwgYik7CisrICAgICAgICAgICAgICAgICB9KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YWxsVHJ1ZUludDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVy IGRlc3QpIHsKKysgIEVtaXRBbGxUcnVlSW50KCp0aGlzLCBzcmMsIGRlc3QsCisrICAgICAgICAg ICAgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdCwgdWludDhfdCByLCB1aW50OF90IGIp IHsKKysgICAgICAgICAgICAgICAgICAgYS5hc192Y21wZXF1ZF9yYyh0LCByLCBiKTsKKysgICAg ICAgICAgICAgICAgIH0pOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50 OHgxNihBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsK KysgIGNvbXBhcmVJbnQ4eDE2KGNvbmQsIGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQ4eDE2KEFzc2VtYmxlcjo6Q29uZGl0aW9u IGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgaWYgKGNvbmQgPT0gQXNzZW1ibGVyOjpO b3RFcXVhbCAmJiBIYXNQT1dFUjkoKSkgeworKyAgICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhf QklOQVJZX1dSQVBQRVIodmNtcG5lYiksIGxocywgcmhzLCBkZXN0KTsKKysgICAgcmV0dXJuOwor KyAgfQorKyAgRW1pdFZteENvbXBhcmUoKnRoaXMsIGNvbmQsIGxocywgcmhzLCBkZXN0LCBWTVhf QklOQVJZX1dSQVBQRVIodmNtcGVxdWIpLAorKyAgICAgICAgICAgICAgICAgVk1YX0JJTkFSWV9X UkFQUEVSKHZjbXBndHNiKSwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBndHViKSk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQxNng4KEFzc2VtYmxlcjo6Q29uZGl0aW9u IGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgY29tcGFyZUludDE2eDgoY29uZCwg bGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29t cGFyZUludDE2eDgoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBpZiAoY29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsICYmIEhhc1BPV0VSOSgpKSB7 CisrICAgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wbmVoKSwg bGhzLCByaHMsIGRlc3QpOworKyAgICByZXR1cm47CisrICB9CisrICBFbWl0Vm14Q29tcGFyZSgq dGhpcywgY29uZCwgbGhzLCByaHMsIGRlc3QsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZXF1aCks CisrICAgICAgICAgICAgICAgICBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0c2gpLCBWTVhfQklO QVJZX1dSQVBQRVIodmNtcGd0dWgpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29t cGFyZUludDMyeDQoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNE ZXN0KSB7CisrICBjb21wYXJlSW50MzJ4NChjb25kLCBsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlSW50MzJ4NChBc3NlbWJsZXI6OkNv bmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChjb25kID09IEFzc2Vt Ymxlcjo6Tm90RXF1YWwgJiYgSGFzUE9XRVI5KCkpIHsKKysgICAgRW1pdFZteEJpbmFyeSgqdGhp cywgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBuZXcpLCBsaHMsIHJocywgZGVzdCk7CisrICAgIHJl dHVybjsKKysgIH0KKysgIEVtaXRWbXhDb21wYXJlKCp0aGlzLCBjb25kLCBsaHMsIHJocywgZGVz dCwgVk1YX0JJTkFSWV9XUkFQUEVSKHZjbXBlcXV3KSwKKysgICAgICAgICAgICAgICAgIFZNWF9C SU5BUllfV1JBUFBFUih2Y21wZ3RzdyksIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZ3R1dykpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJlRmxvYXQzMng0KEFzc2VtYmxlcjo6 Q29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgY29tcGFyZUZsb2F0MzJ4NChjb25kLCBsaHNE ZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21wYXJl RmxvYXQzMng0KEFzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIHN3aXRjaCAoY29uZCkgeworKyAgICBjYXNlIEFzc2VtYmxlcjo6RXF1YWw6Cisr ICAgICAgYXNfeHZjbXBlcXNwKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSBBc3NlbWJsZXI6Ok5vdEVxdWFsOgorKyAgICAgIGFzX3h2Y21wZXFzcChkZXN0LCBsaHMs IHJocyk7CisrICAgICAgYml0d2lzZU5vdFNpbWQxMjgoZGVzdCwgZGVzdCk7CisrICAgICAgYnJl YWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKysgICAgICBhc194dmNtcGd0 c3AoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6 R3JlYXRlclRoYW5PckVxdWFsOgorKyAgICAgIGFzX3h2Y21wZ2VzcChkZXN0LCBsaHMsIHJocyk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhhbjoKKysgICAgICBh c194dmNtcGd0c3AoZGVzdCwgcmhzLCBsaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFz c2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgorKyAgICAgIGFzX3h2Y21wZ2VzcChkZXN0LCByaHMs IGxocyk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJV bmV4cGVjdGVkIFNJTUQgZmxvYXQgY29uZGl0aW9uIik7CisrICB9CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9hdDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgcmhz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBs aHNEZXN0KSB7CisrICBjb21wYXJlRmxvYXQ2NHgyKGNvbmQsIGxoc0Rlc3QsIHJocywgbGhzRGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVGbG9hdDY0eDIoQXNzZW1i bGVyOjpDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgc3dpdGNo IChjb25kKSB7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpFcXVhbDoKKysgICAgICBhc194dmNtcGVx ZHAoZGVzdCwgbGhzLCByaHMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEFzc2VtYmxlcjo6 Tm90RXF1YWw6CisrICAgICAgYXNfeHZjbXBlcWRwKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBi aXR3aXNlTm90U2ltZDEyOChkZXN0LCBkZXN0KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBB c3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgorKyAgICAgIGFzX3h2Y21wZ3RkcChkZXN0LCBsaHMsIHJo cyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1 YWw6CisrICAgICAgYXNfeHZjbXBnZWRwKGRlc3QsIGxocywgcmhzKTsKKysgICAgICBicmVhazsK KysgICAgY2FzZSBBc3NlbWJsZXI6Okxlc3NUaGFuOgorKyAgICAgIGFzX3h2Y21wZ3RkcChkZXN0 LCByaHMsIGxocyk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXNzZW1ibGVyOjpMZXNzVGhh bk9yRXF1YWw6CisrICAgICAgYXNfeHZjbXBnZWRwKGRlc3QsIHJocywgbGhzKTsKKysgICAgICBi cmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgU0lNRCBm bG9hdCBjb25kaXRpb24iKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVn RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFz X3h2bmVnc3AoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVnRmxv YXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2 bmVnZHAoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxvYXQz Mng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2YWJz c3AoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YWJzRmxvYXQ2NHgy KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2YWJzZHAo ZGVzdCwgc3JjKTsKKyt9CisrCisrLy8gUGVyIHNwZWM6CisrLy8gICByZXN1bHRba10gPSAoc3x1 KWV4dF93aWRlbihzcmNbMmtdKSArIChzfHUpZXh0X3dpZGVuKHNyY1syaysxXSkKKysvLyBQT1dF UiBsYWNrcyBwYWlyd2lzZSBtdWx0aXBseS1hZGQuIEVtdWxhdGUgdmlhIHZtdWxYe2Usb31YKHNy Yywgc3BsYXQoMSkpCisrLy8gKyB2YWRkLiBCb3RoIHZtdWxzIG5lZWQgYHNyY2AgQU5EIGBzcGxh dCgxKWAgYXZhaWxhYmxlIHNpbXVsdGFuZW91c2x5LgorKy8vCisrLy8gQXZhaWxhYmxlIFNJTUQg c2xvdHMgd2l0aG91dCBpbnZvbHZpbmcgTG93ZXJpbmc6CisrLy8gICAtIFNjcmF0Y2hTaW1kMTI4 UmVnIChWUjAsIG5vbi1hbGxvY2F0YWJsZSkKKysvLyAgIC0gZGVzdCwgc3JjCisrLy8gVGhhdCdz IDMgcmVncyB3aGVuIGRlc3QgIT0gc3JjIOKAlCBlbm91Z2ggZm9yIHtzcmMsIHNwbGF0LCBpbnRl cm1lZGlhdGV9LgorKy8vIFdoZW4gZGVzdCA9PSBzcmMgd2Ugc3Rhc2ggc3JjIGFuZCB0aGUgZXZl biBwcm9kdWN0IHRvIHRoZSAyODgtYnl0ZSBFTEZ2MgorKy8vIHJlZCB6b25lIGFuZCByZWJ1aWxk IHNwbGF0KDEpLgorKy8vCisrLy8gKEVhcmxpZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGhl bHBlcnMgcm91dGVkIHRocm91Z2ggaGFyZGNvZGVkCisrLy8gVlIxL1ZSMi9WUjMgdmlhIHh4bG9y X3ZzciDigJQgZmFzdGVyIGJ1dCBzdG9tcGVkIGFsbG9jYXRvci1tYW5hZ2VkIFZScworKy8vIGFu ZCBzaWxlbnRseSBjb3JydXB0ZWQgYW55IGxpdmUgd2FzbSB2MTI4IHRoZSBhbGxvY2F0b3IgaGFk IHBsYWNlZAorKy8vIHRoZXJlLiBTY3JhdGNoU2ltZDEyOFJlZyArIHJlZC16b25lIHN0YXNoIGlz IHRoZSBzYWZlIGNvbnRyYWN0LikKKysvLyBBbHdheXMtc2FmZSBwYXR0ZXJuOiBzdGFzaCBzcmMg dG8gcmVkIHpvbmUgc28gZGVzdCBjYW4gYmUgZnJlZWx5IG92ZXJ3cml0dGVuLAorKy8vIHN0YXNo IGV2ZW4gdG8gcmVkIHpvbmUgYWZ0ZXIgZmlyc3Qgdm11bCBzbyB3ZSBjYW4gcmVidWlsZCBzcGxh dCgxKSBmb3IgdGhlCisrLy8gc2Vjb25kIHZtdWwuIFRoZSBzcGxhdC1vZi0xIGlzIG5vdyBgdnNw bHRpc3tiLGh9YCAoNS1iaXQgc2lnbmVkIGltbWVkaWF0ZQorKy8vIHNwbGF0KSDigJQgMSBpbnNu IHZzIHRoZSAzLWluc24gbW92ZVB0cittdHZzcmQrdnNwbHQgc2VxdWVuY2UgdGhlIHByZXZpb3Vz CisrLy8gcGF0aCB1c2VkLgorKy8vIFBhdHRlcm46IHN0YXNoIHNyYyB0byByZWQgem9uZSBzbG90 IDAgc28gZGVzdCBjYW4gYmUgZnJlZWx5IG92ZXJ3cml0dGVuOworKy8vIHZtdWwtZXZlbiAoc2ln bmVkL3Vuc2lnbmVkKSBvZiBzcmMgd2l0aCBzcGxhdCgxKSBwcm9kdWNlcyBzaWduL3plcm8tZXh0 ZW5kZWQKKysvLyBldmVuLWxhbmUgcHJvZHVjdHMgaW50byBkZXN0OyBzdGFzaCB0aGF0IHRvIHNs b3QgMSBhbmQgcmVidWlsZCBzY3JhdGNoPXNyYworKy8vIChzbG90IDApIGFuZCBkZXN0PXNwbGF0 KDEpOyB2bXVsLW9kZCBwcm9kdWNlcyB0aGUgb2RkIHByb2R1Y3RzOyByZXN0b3JlCisrLy8gZXZl biBmcm9tIHNsb3QgMSBhbmQgcGFpcndpc2UtYWRkLgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4 dEFkZFBhaXJ3aXNlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhfdCBzID0gc2NyYXRjaC5l bmNvZGluZygpICYgMzE7CisrICB1aW50OF90IHNyY0VuYyA9IHNyYy5lbmNvZGluZygpICYgMzE7 CisrICB1aW50OF90IGRlc3RFbmMgPSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKKysgIFJlZFpvbmVT dGFzaFNpbWQxMjgoKnRoaXMsIHNyYywgMCk7CisrICBhc192c3BsdGlzYihzLCAxKTsKKysgIGFz X3ZtdWxlc2IoZGVzdEVuYywgc3JjRW5jLCBzKTsKKysgIFJlZFpvbmVTdGFzaFNpbWQxMjgoKnRo aXMsIGRlc3QsIDEpOworKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4KCp0aGlzLCAwLCBzY3JhdGNo KTsKKysgIGFzX3ZzcGx0aXNiKGRlc3RFbmMsIDEpOworKyAgYXNfdm11bG9zYihkZXN0RW5jLCBz LCBkZXN0RW5jKTsKKysgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMSwgc2NyYXRjaCk7 CisrICBhc192YWRkdWhtKGRlc3RFbmMsIGRlc3RFbmMsIHMpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjp1bnNpZ25lZEV4dEFkZFBhaXJ3aXNlSW50OHgxNihGbG9hdFJlZ2lzdGVyIHNy YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG bG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhp cyk7CisrICB1aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3Qg c3JjRW5jID0gc3JjLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZGVzdEVuYyA9IGRlc3Qu ZW5jb2RpbmcoKSAmIDMxOworKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgc3JjLCAwKTsK KysgIGFzX3ZzcGx0aXNiKHMsIDEpOworKyAgYXNfdm11bGV1YihkZXN0RW5jLCBzcmNFbmMsIHMp OworKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgZGVzdCwgMSk7CisrICBSZWRab25lUmVz dG9yZVNpbWQxMjgoKnRoaXMsIDAsIHNjcmF0Y2gpOworKyAgYXNfdnNwbHRpc2IoZGVzdEVuYywg MSk7CisrICBhc192bXVsb3ViKGRlc3RFbmMsIHMsIGRlc3RFbmMpOworKyAgUmVkWm9uZVJlc3Rv cmVTaW1kMTI4KCp0aGlzLCAxLCBzY3JhdGNoKTsKKysgIGFzX3ZhZGR1aG0oZGVzdEVuYywgZGVz dEVuYywgcyk7CisrfQorKworKy8vIHZtc3Vtc2htL3Ztc3VtdWhtIGNvbGxhcHNlIHRoZSBpMTZ4 OCDihpIgaTMyeDQgcGFpcndpc2UtYWRkIGludG8gYSBzaW5nbGUKKysvLyBtdWx0aXBseS1zdW06 IFZULmkzMltrXSA9IFZSQS5pMTZbMmtdKlZSQi5pMTZbMmtdICsKKysvLyBWUkEuaTE2WzJrKzFd KlZSQi5pMTZbMmsrMV0KKysvLyArIFZSQy5pMzJba10uIFdpdGggVlJCID0gc3BsYXQoMSkgYW5k IFZSQyA9IDAgdGhpcyBpcyBleGFjdGx5IHRoZSB3YXNtCisrLy8gaTMyeDQuZXh0YWRkX3BhaXJ3 aXNlX2kxNng4X3tzLHV9IGNvbnRyYWN0LiAzIGluc25zIHdoZW4gZGVzdCAhPSBzcmM7CisrLy8g TFdhc21VbmFyeVNpbWQxMjggdXNlcyB1c2VSZWdpc3RlckF0U3RhcnQgc28gZGVzdCBtYXkgYWxp YXMgc3JjIOKAlCBpbiB0aGF0CisrLy8gY2FzZSB3ZSBwdXQgc3BsYXQoMSkgaW50byBzY3JhdGNo IChwcmVzZXJ2aW5nIHNyYyBpbiBkZXN0KSBhbmQgdXNlIGEKKysvLyByZWQtem9uZSBzbG90IGZv ciB0aGUgemVybyBWUkMgb3BlcmFuZC4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpleHRBZGRQYWly d2lzZUludDE2eDgoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGlmIChkZXN0ICE9IHNyYykgeworKyAgICBhc194 eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwgc2NyYXRjaCk7ICAvLyBzY3JhdGNoID0gMCAoVlJDIGFk ZGVuZCkKKysgICAgYXNfdnNwbHRpc2goZGVzdC5lbmNvZGluZygpICYgMzEsIDEpOyAgLy8gZGVz dCA9IHNwbGF0KDEpIChWUkIgbXVsdGlwbGllcikKKysgICAgYXNfdm1zdW1zaG0oZGVzdC5lbmNv ZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEsIGRlc3QuZW5jb2RpbmcoKSAmIDMxLAor KyAgICAgICAgICAgICAgICBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSk7CisrICAgIHJldHVybjsK KysgIH0KKysgIC8vIGRlc3QgPT0gc3JjOiBsb2FkIHNwbGF0KDEpIGludG8gc2NyYXRjaCBpbnN0 ZWFkLCBzdGFzaCB6ZXJvIHRvIHRoZSByZWQKKysgIC8vIHpvbmUsIHJlc3RvcmUgemVybyBpbnRv IHNjcmF0Y2ggYWZ0ZXIgdGhlIHNwbGF0IGlzIGNvbnN1bWVkLi4uIGFjdHVhbGx5CisrICAvLyBz aW1wbGVyOiB1c2Ugdm11bGUvdm11bG8gKyB2YWRkIHRyaW8gd2l0aCByZWQgem9uZS4gU2FtZSBz aGFwZSBhcyB0aGUKKysgIC8vIHByZS12bXN1bXNobSBmYWxsYmFjayBmb3IgaTh4MTYuCisrICB1 aW50OF90IHMgPSBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3Qgc3JjRW5jID0g c3JjLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgZGVzdEVuYyA9IGRlc3QuZW5jb2Rpbmco KSAmIDMxOworKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgc3JjLCAwKTsKKysgIGFzX3Zz cGx0aXNoKHMsIDEpOworKyAgYXNfdm11bGVzaChkZXN0RW5jLCBzcmNFbmMsIHMpOworKyAgUmVk Wm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgZGVzdCwgMSk7CisrICBSZWRab25lUmVzdG9yZVNpbWQx MjgoKnRoaXMsIDAsIHNjcmF0Y2gpOworKyAgYXNfdnNwbHRpc2goZGVzdEVuYywgMSk7CisrICBh c192bXVsb3NoKGRlc3RFbmMsIHMsIGRlc3RFbmMpOworKyAgUmVkWm9uZVJlc3RvcmVTaW1kMTI4 KCp0aGlzLCAxLCBzY3JhdGNoKTsKKysgIGFzX3ZhZGR1d20oZGVzdEVuYywgZGVzdEVuYywgcyk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkRXh0QWRkUGFpcndpc2VJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGlmIChkZXN0ICE9IHNyYykgeworKyAgICBhc194 eGx4b3Ioc2NyYXRjaCwgc2NyYXRjaCwgc2NyYXRjaCk7CisrICAgIGFzX3ZzcGx0aXNoKGRlc3Qu ZW5jb2RpbmcoKSAmIDMxLCAxKTsKKysgICAgYXNfdm1zdW11aG0oZGVzdC5lbmNvZGluZygpICYg MzEsIHNyYy5lbmNvZGluZygpICYgMzEsIGRlc3QuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAgICAg ICAgICAgICBzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSk7CisrICAgIHJldHVybjsKKysgIH0KKysg IHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBzcmNFbmMg PSBzcmMuZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhfdCBkZXN0RW5jID0gZGVzdC5lbmNvZGlu ZygpICYgMzE7CisrICBSZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBzcmMsIDApOworKyAgYXNf dnNwbHRpc2gocywgMSk7CisrICBhc192bXVsZXVoKGRlc3RFbmMsIHNyY0VuYywgcyk7CisrICBS ZWRab25lU3Rhc2hTaW1kMTI4KCp0aGlzLCBkZXN0LCAxKTsKKysgIFJlZFpvbmVSZXN0b3JlU2lt ZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7CisrICBhc192c3BsdGlzaChkZXN0RW5jLCAxKTsKKysg IGFzX3ZtdWxvdWgoZGVzdEVuYywgcywgZGVzdEVuYyk7CisrICBSZWRab25lUmVzdG9yZVNpbWQx MjgoKnRoaXMsIDEsIHNjcmF0Y2gpOworKyAgYXNfdmFkZHV3bShkZXN0RW5jLCBkZXN0RW5jLCBz KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3FydEZsb2F0MzJ4NChGbG9hdFJlZ2lz dGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc194dnNxcnRzcChkZXN0LCBzcmMp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcXJ0RmxvYXQ2NHgyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2c3FydGRwKGRlc3QsIHNyYyk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbnZlcnRJbnQzMng0VG9GbG9hdDMyeDQo RmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2Y3ZzeHdzcChkZXN0LCBz cmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZENvbnZlcnRJbnQzMng0 VG9GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg YXNfeHZjdnV4d3NwKGRlc3QsIHNyYyk7CisrfQorKworKy8vIGkzMng0IChsb3cgMiBsYW5lcykg 4oaSIGY2NHgyLiBXYXNtIGBmNjR4Mi5jb252ZXJ0X2xvd19pMzJ4NF97cyx1fWAuCisrLy8geHZj dntzLHV9eHdkcCBjb252ZXJ0cyBCRSB3b3JkIDAgYW5kIEJFIHdvcmQgMiBvZiBzb3VyY2UgdG8g ZG91YmxlcyBpbgorKy8vIEJFIGR3b3JkcyAwIGFuZCAxLiB2bXJnbHcgcGxhY2VzIHNyYy53b3Jk X0JFWzIsM10gYXQgdGhlIHJlYWQgcG9zaXRpb25zLAorKy8vIG1hdGNoaW5nIHRoZSBmMzLihpJm NjQgcHJvbW90ZSBzaGFwZToKKysvLyAgIHZtcmdsdyAgICBzY3JhdGNoLCBzcmMsIHNyYyAgICA7 IEJFIHdvcmRzIDIsMyBvZiBzcmMg4oaSIEJFIHdvcmRzIDAsMiBvZgorKy8vICAgc2NyYXRjaCB4 dmN2Knh3ZHAgZGVzdCwgc2NyYXRjaCAgICAgICAgOyBjb252ZXJ0IGJvdGgsIHBsYWNlIGluIEJF IGR3b3JkcworKy8vICAgMCwxCisrLy8gT3V0cHV0IEJFIGR3b3JkcyBsYW5kIGFzIFtjb252ZXJ0 KGlucHV0IGxhbmUgMSksIGNvbnZlcnQoaW5wdXQgbGFuZSAwKV0sCisrLy8gd2hpY2ggb24gUFBD NjRMRSBzdG9yYWdlIElTIHRoZSB3YXNtIG91dHB1dCBsYXlvdXQuCisrLy8KKysvLyAyIGluc25z IGVhY2gsIHNpbmdsZSBTY3JhdGNoU2ltZDEyOCBzY29wZSwgbm8gR1BSIG9yIEZQUiBzY3JhdGNo LgorKy8vIEFsbCBvcHMgUE9XRVI3Ky4gZGVzdD09c3JjIGFsaWFzaW5nIHNhZmUgKHZtcmdsdyBj b25zdW1lcyBzcmMgaW50bworKy8vIHNjcmF0Y2ggYmVmb3JlIGRlc3QgaXMgd3JpdHRlbikuCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEludDMyeDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lz dGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKKysgIGFzX3ZtcmdsdyhzY3JhdGNoLmVuY29kaW5nKCkgJiAzMSwgc3JjLmVuY29kaW5n KCkgJiAzMSwgc3JjLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc194dmN2c3h3ZHAoZGVzdCwgc2Ny YXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkQ29udmVydEludDMy eDRUb0Zsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgYXNfdm1yZ2x3KHNjcmF0 Y2guZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAm IDMxKTsKKysgIGFzX3h2Y3Z1eHdkcChkZXN0LCBzY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICAvLyB4dmN2c3BzeHdzIGdpdmVzIElOVDMyX01JTiBmb3IgTmFO LCBidXQgV2FzbSByZXF1aXJlcyAwLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKKysgIGFzX3h2Y21wZXFzcChzY3JhdGNoLCBzcmMsIHNyYyk7ICAvLyB+MCBmb3Igbm9u LU5hTiwgMCBmb3IgTmFOCisrICBhc194dmN2c3BzeHdzKGRlc3QsIHNyYyk7CisrICBhc194eGxh bmQoZGVzdCwgZGVzdCwgc2NyYXRjaCk7ICAvLyB6ZXJvIE5hTiBsYW5lcworK30KKysKKysvLyBQ YWNrIHRoZSB0d28gImludGVyZXN0aW5nIiAzMi1iaXQgcmVzdWx0cyB0aGF0IHh2Y3YqeHdzIC8g eHZjdmRwc3AgbGVhdmVzCisrLy8gYXQgc2NyYXRjaC53b3JkX0JFWzBdICg9IEEpIGFuZCBzY3Jh dGNoLndvcmRfQkVbMl0gKD0gQikgaW50byBhIHplcm9lZCBkZXN0CisrLy8gYXMgZGVzdC53b3Jk X0JFID0gWzAsIDAsIEEsIEJdLiBUaGlzIGlzIHRoZSBsYXlvdXQgd2FzbSByZXF1aXJlcyBmb3IK KysvLyBmNjR4MiDihpIge2kzMng0IHRydW5jX3NhdCwgZjMyeDQgZGVtb3RlfS4gV3JpdGVzIGRl c3QsIGNvbnN1bWVzIHNjcmF0Y2guCisrLy8KKysvLyBQT1dFUjkgcGF0aCAoNCBpbnNucykgdXNl cyB4eGluc2VydHcveHhleHRyYWN0dXcuIFBPV0VSOCBwYXRoICg3IGluc25zKQorKy8vIGdvZXMg dmlhIHR3byBHUFIgcm91bmQtdHJpcHM6IGV4dHJhY3QgQSBhbmQgQiB3aXRoIG1mdnNyZCwgc3Bs aWNlIHRoZW0KKysvLyBpbnRvIGEgc2luZ2xlIGR3b3JkIHdpdGggcmxkaW1pLCBtdHZzcmQgYmFj ayBpbnRvIGEgU0lNRCByZWcsIGFuZAorKy8vIHh4cGVybWRpIHRoZSByZXN1bHQgaW50byBkZXN0 LmR3MSB3aGlsZSBrZWVwaW5nIGRlc3QuZHcwIHplcm8uCisrc3RhdGljIGlubGluZSB2b2lkIFBh Y2tUd29Xb3Jkc1RvTG93SGFsZihNYWNyb0Fzc2VtYmxlciYgbWFzbSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc2NyYXRjaCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIG1hc20uYXNfeHhpbnNlcnR3KGRlc3QsIHNj cmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgIDgpOyAgLy8gZGVzdC53b3JkX0JFWzJdIOKG kCBzY3JhdGNoLndvcmRfQkVbMV0gKD0gQSkKKysgICAgbWFzbS5hc194eGV4dHJhY3R1dyhzY3Jh dGNoLCBzY3JhdGNoLAorKyAgICAgICAgICAgICAgICAgICAgICAgIDgpOyAgLy8gc2NyYXRjaC53 b3JkX0JFWzFdIOKGkCBzY3JhdGNoLndvcmRfQkVbMl0gKD0gQikKKysgICAgbWFzbS5hc194eGlu c2VydHcoZGVzdCwgc2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAgICAgMTIpOyAgLy8gZGVz dC53b3JkX0JFWzNdIOKGkCBzY3JhdGNoLndvcmRfQkVbMV0gKD0gQikKKysgICAgcmV0dXJuOwor KyAgfQorKyAgLy8gUE9XRVI4OiB4eGluc2VydHcveHhleHRyYWN0dXcgYXJlIElTQSAzLjAuIFRh a2UgYSBHUFIgZGV0b3VyIGluc3RlYWQuCisrICAvLyBzY3JhdGNoLmR3X0JFWzBdID0gKEEgPDwg MzIpIHwgQSwgc2NyYXRjaC5kd19CRVsxXSA9IChCIDw8IDMyKSB8IEIuCisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHRtcEEgPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICBSZWdpc3RlciB0bXBCID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbWFzbS5hc19t ZnZzcmQodG1wQSwgc2NyYXRjaCk7ICAvLyB0bXBBID0gKEEgPDwgMzIpIHwgQQorKyAgbWFzbS5h c194eHBlcm1kaShzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoLAorKyAgICAgICAgICAgICAgICAg ICAyKTsgICAgICAgICAgICAvLyBzd2FwIGR3b3Jkczogbm93IGR3MCA9IChCPDwzMil8QgorKyAg bWFzbS5hc19tZnZzcmQodG1wQiwgc2NyYXRjaCk7ICAvLyB0bXBCID0gKEIgPDwgMzIpIHwgQgor KyAgbWFzbS54X3NyZGkodG1wQSwgdG1wQSwgMzIpOyAgICAvLyB0bXBBID0gMHgwMDAwMDAwMF9B QUFBQUFBQQorKyAgbWFzbS5hc19ybGRpbWkodG1wQiwgdG1wQSwgMzIsCisrICAgICAgICAgICAg ICAgICAwKTsgICAgICAgICAgICAgIC8vIHRtcEJbMC4uMzFdID0gQTsgdG1wQlszMi4uNjNdID0g QiAoa2VwdCkKKysgIG1hc20uYXNfbXR2c3JkKHNjcmF0Y2gsIHRtcEIpOyAgLy8gc2NyYXRjaC5k d19CRVswXSA9IChBIDw8IDMyKSB8IEI7IGR3MSA9IDAKKysgIG1hc20uYXNfeHhwZXJtZGkoZGVz dCwgZGVzdCwgc2NyYXRjaCwKKysgICAgICAgICAgICAgICAgICAgMCk7ICAvLyBkZXN0ID0ge2Rl c3QuZHcwPTAsIHNjcmF0Y2guZHcwfSA9IFswLCAwLCBBLCBCXQorK30KKysKKysvLyBmY3Rpd3og LyBmY21wdSAvIGZjdGlkdXogYXJlIFgtZm9ybSBzY2FsYXIgRlAgaW5zdHJ1Y3Rpb25zIHRoYXQg b25seQorKy8vIGVuY29kZSA1LWJpdCBGUlQvRlJCIGZpZWxkcywgc28gZW1pdHRpbmcgdGhlbSBv biBhIFNpbWQxMjggcmVnCisrLy8gKGVuY29kaW5nIDMyKykgd291bGQgY29ycnVwdCB0aGUgb3Bj b2RlLiBCcmlkZ2UgdGhyb3VnaAorKy8vIFNjcmF0Y2hEb3VibGVSZWcgKEZQUiBmMCkgZm9yIHRo ZSBjb252ZXJzaW9uLiBFeHRyYWN0IGJvdGggbGFuZXMnIEdQUgorKy8vIHJlc3VsdHMgYmVmb3Jl IHdyaXRpbmcgZGVzdCBzbyB0aGF0IGRlc3QgPT0gc3JjIGlzIHNhZmUuCisrLy8KKysvLyBBdm9p ZCByZXBsYWNlTGFuZUludDMyeDQgb24gdGhlIHRhaWw6IG9uIFBPV0VSOCBpdCBuZWVkcyBhbiBl eHRyYQorKy8vIEdQUiBzY3JhdGNoLCBidXQgcjExIGFuZCByMTIgYXJlIGFscmVhZHkgaGVsZCBh cyBhL2IgaGVyZS4gUGFjayBib3RoCisrLy8gaW50MzJzIGludG8gYGFgIHdpdGggcmxkaW1pLCB0 cmFuc2ZlciB2aWEgbXR2c3JkLCB0aGVuIHh4cGVybWRpIHRoZQorKy8vIERXcyBpbnRvIHRoZSBs b3cgaGFsZiBzbyB3YXNtIGxhbmUgMCAoQkUgVzMpIGhvbGRzIGEsIGxhbmUgMSAoVzIpIGIuCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6dHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgLy8gV2FzbSBgaTMyeDQu dHJ1bmNfc2F0X2Y2NHgyX3NfemVyb2AuIHh2Y3ZkcHN4d3Mgc2F0dXJhdGVzIHRvIElOVDMyX01J TgorKyAgLy8gb24gb3ZlcmZsb3cvTmFOIChwZXIgSVNBKTsgd2FzbSByZXF1aXJlcyBOYU4g4oaS IDAsIHNvIGEgcGVyLWR3b3JkIE5hTgorKyAgLy8gbWFzayB2aWEgeHZjbXBlcWRwIGNsYW1wcyBO YU4gbGFuZXMgdG8gMCBiZWZvcmUgbGF5aW5nIG91dCB0aGUgcmVzdWx0LgorKyAgLy8gT3V0cHV0 IEJFIHdvcmQgcG9zaXRpb25zIG5lZWQgd2FzbSBsYW5lIG9yZGVyOiBsYW5lIDEg4oaSIEJFIHdv cmQgMiwKKysgIC8vIGxhbmUgMCDihpIgQkUgd29yZCAzLiB4dmN2ZHBzeHdzIGxhbmRzIGl0cyBy ZXN1bHRzIGF0IEJFIHdvcmRzIDAgYW5kIDIKKysgIC8vICh3aXRoIHJlcGxpY2F0aW9uIGludG8g MS8zKTsgUGFja1R3b1dvcmRzVG9Mb3dIYWxmIG1vdmVzIHRoZW0gaW50bworKyAgLy8gdGhlIHJp Z2h0IHBvc2l0aW9ucyB3aGlsZSB6ZXJvaW5nIHRoZSByZXN0LgorKyAgLy8gZGVzdD09c3JjIHNh ZmU6IHNyYyBpcyBjb25zdW1lZCBieSB4dmN2ZHBzeHdzIGFuZCB4dmNtcGVxZHAgYmVmb3JlCisr ICAvLyBkZXN0IGlzIHplcm9lZC4KKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhp cyk7CisrICBhc194dmN2ZHBzeHdzKHNjcmF0Y2gsIHNyYyk7CisrICBhc194dmNtcGVxZHAoZGVz dCwgc3JjLAorKyAgICAgICAgICAgICAgIHNyYyk7ICAvLyBOYU4tbWFzazogMHhGRi4uLkYgcGVy IGR3b3JkIGZvciBub24tTmFOLCAwIGZvciBOYU4KKysgIGFzX3h4bGFuZChzY3JhdGNoLCBzY3Jh dGNoLCBkZXN0KTsKKysgIGFzX3h4bHhvcihkZXN0LCBkZXN0LCBkZXN0KTsKKysgIFBhY2tUd29X b3Jkc1RvTG93SGFsZigqdGhpcywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnVuc2lnbmVkVHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoRmxvYXRSZWdpc3Rl ciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsKKysgIC8v IFdhc20gYGkzMng0LnRydW5jX3NhdF9mNjR4Ml91X3plcm9gLiB4dmN2ZHB1eHdzIHNlbWFudGlj cyBhbHJlYWR5CisrICAvLyBtYXRjaCB0aGUgd2FzbSBzcGVjIHdpdGhvdXQgYW55IG1hc2tpbmc6 IE5hTiDihpIgMCwgbmVnYXRpdmUg4oaSIDAsCisrICAvLyBwb3NpdGl2ZSBvdmVyZmxvdyDihpIg VUlOVDMyX01BWC4gU28gbm8gTmFOIG1hc2sgbmVlZGVkOyBqdXN0IHBvc2l0aW9uCisrICAvLyB0 aGUgc2F0dXJhdGVkIHJlc3VsdHMgaW50byBCRSB3b3JkcyAyLDMgd2l0aCB6ZXJvcyBhdCB3b3Jk cyAwLDEuCisrICAvLyBkZXN0PT1zcmMgc2FmZTogc3JjIGNvbnN1bWVkIGJ5IHh2Y3ZkcHV4d3Mg YmVmb3JlIGRlc3QgaXMgemVyb2VkLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0 aGlzKTsKKysgIGFzX3h2Y3ZkcHV4d3Moc2NyYXRjaCwgc3JjKTsKKysgIGFzX3h4bHhvcihkZXN0 LCBkZXN0LCBkZXN0KTsKKysgIFBhY2tUd29Xb3Jkc1RvTG93SGFsZigqdGhpcywgc2NyYXRjaCwg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRmxvYXQzMng0VG9JbnQz Mng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB0cnVu Y1NhdEZsb2F0MzJ4NFRvSW50MzJ4NChzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjp1bnNpZ25lZFRydW5jRmxvYXQzMng0VG9JbnQzMng0UmVsYXhlZCgKKysgICAgRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgdW5zaWduZWRUcnVuY1Nh dEZsb2F0MzJ4NFRvSW50MzJ4NChzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjp0cnVuY0Zsb2F0NjR4MlRvSW50MzJ4NFJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgdHJ1bmNTYXRGbG9hdDY0eDJUb0ludDMyeDQoc3JjLCBkZXN0 LCBTY3JhdGNoU2ltZDEyOFJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkVHJ1bmNGbG9hdDY0eDJUb0ludDMyeDRSZWxheGVkKAorKyAgICBGbG9hdFJlZ2lzdGVyIHNy YywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB1bnNpZ25lZFRydW5jU2F0RmxvYXQ2NHgyVG9J bnQzMng0KHNyYywgZGVzdCwgU2NyYXRjaFNpbWQxMjhSZWcpOworK30KKysKKysvLyBmNjR4MiDi hpIgZjMyeDQgKGxvdyAyIGxhbmVzOyBoaWdoIGxhbmVzIHplcm8pLiBXYXNtIGBmMzJ4NC5kZW1v dGVfZjY0eDJfemVyb2AuCisrLy8geHZjdmRwc3AgY29udmVydHMgYm90aCBkb3VibGVzIGluIG9u ZSBzaG90LCByZXBsaWNhdGluZyBlYWNoIHJlc3VsdCBhY3Jvc3MKKysvLyBpdHMgZHdvcmQ6IEJF IHdvcmQgbGFuZXMgPSBbcyhpbi5kdzApLCBzKGluLmR3MCksIHMoaW4uZHcxKSwgcyhpbi5kdzEp XS4KKysvLyBPbiBQUEM2NExFIHdhc20gc3RvcmFnZSAobHh2eC1sb2FkZWQpLCBpbnB1dC5kd19C RVswXSA9IHdhc20gbGFuZSAxIGFuZAorKy8vIGlucHV0LmR3X0JFWzFdID0gd2FzbSBsYW5lIDAs IHNvIHdlIGdldCBbcyhsMSksIHMobDEpLCBzKGwwKSwgcyhsMCldIGluCisrLy8gQkUgd29yZCBv cmRlci4gV2UgdGhlbiB6ZXJvIGRlc3QgYW5kIHBhY2sgcyhsMSkgaW50byBCRSB3b3JkIDIgKHdh c20KKysvLyBvdXRwdXQgbGFuZSAxKSBhbmQgcyhsMCkgaW50byBCRSB3b3JkIDMgKHdhc20gb3V0 cHV0IGxhbmUgMCkgdmlhIHRoZQorKy8vIHNoYXJlZCBQYWNrVHdvV29yZHNUb0xvd0hhbGYgaGVs cGVyLCB3aGljaCBoYXMgUE9XRVI5IGFuZCBQT1dFUjggcGF0aHMuCisrLy8KKysvLyBkZXN0PT1z cmMgYWxpYXNpbmcgc2FmZTogc3JjIGlzIGNvbnN1bWVkIGJ5IHh2Y3ZkcHNwIGJlZm9yZSBkZXN0 IGlzIHplcm9lZC4KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0RmxvYXQ2NHgyVG9GbG9h dDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQx MjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2Y3ZkcHNwKHNjcmF0Y2gsIHNyYyk7Cisr ICBaZXJvU2ltZDEyOCgqdGhpcywgZGVzdCk7CisrICBQYWNrVHdvV29yZHNUb0xvd0hhbGYoKnRo aXMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKysvLyBmMzJ4NCAobG93IDIgbGFuZXMpIOKGkiBm NjR4Mi4gV2FzbSBgZjY0eDIucHJvbW90ZV9sb3dfZjMyeDRgLiB4dmN2c3BkcAorKy8vIGNvbnZl cnRzIGJvdGggQkUgd29yZCAwIGFuZCBCRSB3b3JkIDIgb2YgaXRzIHNvdXJjZSB0byBkb3VibGVz IGluIEJFCisrLy8gZHdvcmRzIDAgYW5kIDEgcmVzcGVjdGl2ZWx5LiBUbyBnZXQgd2FzbSBsYW5l cyAwIGFuZCAxICg9IGlucHV0IEJFCisrLy8gd29yZHMgMyBhbmQgMikgaW50byB0aG9zZSBzb3Vy Y2UgcG9zaXRpb25zLCB2bXJnbHcgbWVyZ2VzIGxvdyB3b3JkczoKKysvLyBWUlQud29yZFswXSA9 IFZSQS53b3JkWzJdID0gd2FzbSBsYW5lIDEsIFZSVC53b3JkWzJdID0gVlJBLndvcmRbM10gPQor Ky8vIHdhc20gbGFuZSAwICh3aXRoIHJlcGxpY2F0ZWQgY29waWVzIGluIG9kZCB3b3JkIHNsb3Rz IHRoYXQgeHZjdnNwZHAKKysvLyBpZ25vcmVzKS4gT3V0cHV0IEJFIGR3b3JkcyBsYW5kIGFzIFtk b3VibGUobGFuZTEpLCBkb3VibGUobGFuZTApXSwKKysvLyB3aGljaCBvbiBQUEM2NExFIHN0b3Jh Z2UgaXMgZXhhY3RseSB0aGUgd2FzbSBmNjR4MiBvdXRwdXQgbGF5b3V0LgorKy8vCisrLy8gZGVz dD09c3JjIGFsaWFzaW5nIHNhZmU6IHZtcmdsdyBjb25zdW1lcyBzcmMgaW50byBhIHNlcGFyYXRl IHNjcmF0Y2gKKysvLyBiZWZvcmUgZGVzdCBpcyB3cml0dGVuLgorKy8vCisrLy8gMiBpbnNucywg c2luZ2xlIFNjcmF0Y2hTaW1kMTI4IHNjb3BlLiBBbGwgb3BzIFBPV0VSNysuCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Y29udmVydEZsb2F0MzJ4NFRvRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7 CisrICBhc192bXJnbHcoc2NyYXRjaC5lbmNvZGluZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYg MzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworKyAgYXNfeHZjdnNwZHAoZGVzdCwgc2NyYXRjaCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTmFycm93SW50MTZ4OChGbG9h dFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gT24gTEUs IFZNWCBwYWNrIHN3YXBzIG9wZXJhbmQgb3JkZXIgdnMgV2FzbSBjb252ZW50aW9uLgorKyAgRW1p dFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZwa3NodXMpLCByaHMsIGxocywg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVkTmFycm93SW50MzJ4 NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8g T24gTEUsIFZNWCBwYWNrIHN3YXBzIG9wZXJhbmQgb3JkZXIgdnMgV2FzbSBjb252ZW50aW9uLgor KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZwa3N3dXMpLCByaHMs IGxocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuTG93SW50OHgx NihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBPbiBQUEM2 NCBMRSwgcmF3IHZ1cGtsc2IgdW5wYWNrcyB0aGUgTE9XIFdhc20gbGFuZXMgKG5vdCB2dXBraHNi KS4KKysgIC8vIEdDQyB2ZWNfdW5wYWNraCBtYXBzIHRvIHZ1cGtsc2Igb24gTEUgKHN3YXBwZWQg ZnJvbSBCRSBuYW1pbmcpLgorKyAgLy8gUmF3IHZ1cGtsc2IoWzEuLjgsLTEuLi04XSkgPSBbMSwy LDMsNCw1LDYsNyw4XS4KKysgIEVtaXRWbXhVbmFyeSgKKysgICAgICAqdGhpcywKKysgICAgICBb XShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtsc2Io dnJ0LCB2cmIpOyB9LAorKyAgICAgIHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OndpZGVuSGlnaEludDh4MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgLy8gT24gUFBDNjQgTEUsIHJhdyB2dXBraHNiIHVucGFja3MgdGhlIEhJR0gg V2FzbSBsYW5lcy4KKysgIEVtaXRWbXhVbmFyeSgKKysgICAgICAqdGhpcywKKysgICAgICBbXShB c3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50OF90IHZyYikgeyBhLmFzX3Z1cGtoc2IodnJ0 LCB2cmIpOyB9LAorKyAgICAgIHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnVuc2lnbmVkV2lkZW5Mb3dJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgemVyb0V4dGVuZDh4MTZUbzE2eDgoc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRlbkhpZ2hJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgc3JjLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgIC8vIHZtcmdoYih6ZXJvLCBzcmMpIGludGVybGVhdmVzIHplcm8gYnl0 ZXMgd2l0aCB0aGUgQkUtaGlnaCBoYWxmIG9mIHNyYywKKysgIC8vIHByb2R1Y2luZyB6ZXJvLWV4 dGVuZGVkIGhhbGZ3b3JkcyBvZiB0aGUgTEUtaGlnaCAoV2FzbS1oaWdoKSBsYW5lcy4KKysgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc194eGx4b3Ioc2NyYXRjaCwg c2NyYXRjaCwgc2NyYXRjaCk7CisrICBhc192bXJnaGIoZGVzdC5lbmNvZGluZygpICYgMzEsIHNj cmF0Y2guZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6d2lkZW5Mb3dJbnQxNng4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIE9uIFBQQzY0IExFLCByYXcgdnVwa2xzaCB1bnBhY2tz IExPVyBXYXNtIGxhbmVzIChHQ0Mgc3dhcHMgaC9sIG9uIExFKS4KKysgIEVtaXRWbXhVbmFyeSgK KysgICAgICAqdGhpcywKKysgICAgICBbXShBc3NlbWJsZXImIGEsIHVpbnQ4X3QgdnJ0LCB1aW50 OF90IHZyYikgeyBhLmFzX3Z1cGtsc2godnJ0LCB2cmIpOyB9LAorKyAgICAgIHNyYywgZGVzdCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuSGlnaEludDE2eDgoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteFVuYXJ5KAorKyAgICAg ICp0aGlzLAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJi KSB7IGEuYXNfdnVwa2hzaCh2cnQsIHZyYik7IH0sCisrICAgICAgc3JjLCBkZXN0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRXaWRlbkxvd0ludDE2eDgoRmxvYXRSZWdp c3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICB6ZXJvRXh0ZW5kMTZ4OFRvMzJ4NChzcmMsIGRlc3Qp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdpZGVuSGlnaEludDE2eDgo RmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBz Y3JhdGNoKCp0aGlzKTsKKysgIGFzX3h4bHhvcihzY3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsK KysgIGFzX3ZtcmdoaChkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGluZygpICYg MzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3 aWRlbkxvd0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgLy8gT24gUFBDNjQgTEUsIHJhdyB2dXBrbHN3IHVucGFja3MgTE9XIFdhc20gbGFuZXMuCisr ICBFbWl0Vm14VW5hcnkoCisrICAgICAgKnRoaXMsCisrICAgICAgW10oQXNzZW1ibGVyJiBhLCB1 aW50OF90IHZydCwgdWludDhfdCB2cmIpIHsgYS5hc192dXBrbHN3KHZydCwgdnJiKTsgfSwKKysg ICAgICBzcmMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFdp ZGVuTG93SW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIHplcm9FeHRl bmQzMng0VG82NHgyKHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondp ZGVuSGlnaEludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgRW1pdFZteFVuYXJ5KAorKyAgICAgICp0aGlzLAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwg dWludDhfdCB2cnQsIHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnVwa2hzdyh2cnQsIHZyYik7IH0sCisr ICAgICAgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRX aWRlbkhpZ2hJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIGk2 NHgyLmV4dGVuZF9oaWdoX2kzMng0X3U6IHRha2UgaGlnaCAyIGkzMiBsYW5lcyBvZiBzcmMsIHpl cm8tZXh0ZW5kCisrICAvLyB0byBpNjQgZWFjaC4gVXNlIHZtcmdodyB0byBpbnRlcmxlYXZlIGEg emVybyBWUiB3aXRoIHNyYyDigJQgc2FtZSBzaGFwZQorKyAgLy8gYXMgdGhlIChhbHJlYWR5LWNv cnJlY3QpIHVuc2lnbmVkV2lkZW5IaWdoSW50MTZ4OCBzaWJsaW5nIGFib3ZlLgorKyAgU2NyYXRj aFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFplcm9TaW1kMTI4KCp0aGlzLCBzY3Jh dGNoKTsKKysgIGFzX3ZtcmdodyhkZXN0LmVuY29kaW5nKCkgJiAzMSwgc2NyYXRjaC5lbmNvZGlu ZygpICYgMzEsIHNyYy5lbmNvZGluZygpICYgMzEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpwc2V1ZG9NaW5GbG9hdDMyeDQoRmxvYXRSZWdpc3RlciByaHNPclJoc0Rlc3QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgbGhzT3JM aHNEZXN0KSB7CisrICAvLyBwbWluOiByZXN1bHRbaV0gPSByaHNbaV0gPCBsaHNbaV0gPyByaHNb aV0gOiBsaHNbaV0KKysgIC8vIHh2Y21wZ3RzcChtYXNrLCBsaHMsIHJocykg4oaSIDEgd2hlcmUg bGhzID4gcmhzIChpLmUuLCByaHMgPCBsaHMpCisrICAvLyB4eHNlbDogbWFzaz0xIOKGkiBYQj1y aHMuIG1hc2s9MCDihpIgWEE9bGhzLgorKyAgLy8gUmVzdWx0IGdvZXMgdG8gbGhzT3JMaHNEZXN0 IChzZWNvbmQgcGFyYW0pLgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsK KysgIGFzX3h2Y21wZ3RzcChzY3JhdGNoLCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCk7Cisr ICBhc194eHNlbChsaHNPckxoc0Rlc3QsIGxoc09yTGhzRGVzdCwgcmhzT3JSaHNEZXN0LCBzY3Jh dGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cHNldWRvTWluRmxvYXQzMng0KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBwbWluKGxo cywgcmhzKSA9IHJocyA8IGxocyA/IHJocyA6IGxocworKyAgLy8gSW5saW5lIHRvIGhhbmRsZSBk ZXN0IGFsaWFzaW5nIHdpdGggZWl0aGVyIG9wZXJhbmQuCisrICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2goKnRoaXMpOworKyAgYXNfeHZjbXBndHNwKHNjcmF0Y2gsIGxocywgcmhzKTsKKysg IC8vIG1hc2s9MSB3aGVyZSBsaHMgPiByaHMuIFhDPTEg4oaSIHNlbGVjdCBYQj1yaHMuIFhDPTAg 4oaSIHNlbGVjdCBYQT1saHMuCisrICBhc194eHNlbChkZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01pbkZsb2F0NjR4MihGbG9hdFJl Z2lzdGVyIHJoc09yUmhzRGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc194dmNtcGd0ZHAoc2NyYXRjaCwgbGhzT3JMaHNEZXN0 LCByaHNPclJoc0Rlc3QpOworKyAgYXNfeHhzZWwobGhzT3JMaHNEZXN0LCBsaHNPckxoc0Rlc3Qs IHJoc09yUmhzRGVzdCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBz ZXVkb01pbkZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2Y21w Z3RkcChzY3JhdGNoLCBsaHMsIHJocyk7CisrICBhc194eHNlbChkZXN0LCBsaHMsIHJocywgc2Ny YXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0MzJ4NChG bG9hdFJlZ2lzdGVyIHJoc09yUmhzRGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBsaHNPckxoc0Rlc3QpIHsKKysgIFNjcmF0Y2hTaW1k MTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc194dmNtcGd0c3Aoc2NyYXRjaCwgcmhzT3JS aHNEZXN0LCBsaHNPckxoc0Rlc3QpOworKyAgYXNfeHhzZWwobGhzT3JMaHNEZXN0LCBsaHNPckxo c0Rlc3QsIHJoc09yUmhzRGVzdCwgc2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnBzZXVkb01heEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgLy8gcG1heChsaHMsIHJocykgPSBsaHMgPCByaHMgPyByaHMgOiBsaHMK KysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc194dmNtcGd0c3Ao c2NyYXRjaCwgcmhzLCBsaHMpOworKyAgLy8gbWFzaz0xIHdoZXJlIHJocyA+IGxocyAobGhzIDwg cmhzKS4gWEM9MSDihpIgc2VsZWN0IFhCPXJocy4gWEM9MCDihpIgc2VsZWN0CisrICAvLyBYQT1s aHMuCisrICBhc194eHNlbChkZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHJoc09yUmhz RGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBsaHNPckxoc0Rlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhp cyk7CisrICBhc194dmNtcGd0ZHAoc2NyYXRjaCwgcmhzT3JSaHNEZXN0LCBsaHNPckxoc0Rlc3Qp OworKyAgYXNfeHhzZWwobGhzT3JMaHNEZXN0LCBsaHNPckxoc0Rlc3QsIHJoc09yUmhzRGVzdCwg c2NyYXRjaCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBzZXVkb01heEZsb2F0NjR4 MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRj aFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h2Y21wZ3RkcChzY3JhdGNoLCBy aHMsIGxocyk7CisrICBhc194eHNlbChkZXN0LCBsaHMsIHJocywgc2NyYXRjaCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmRvdEludDh4MTZJbnQ3eDE2KEZsb2F0UmVnaXN0ZXIgbGhz LCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIHJlc3VsdFtrXSA9IGxoc1sya10qcmhz WzJrXSArIGxoc1syaysxXSpyaHNbMmsrMV0gZm9yIGs9MC4uNy4KKysgIC8vIHZtdWxlc2Ivdm11 bG9zYiBwcm9kdWNlIGV2ZW4vb2RkIGJ5dGUgcHJvZHVjdHMgYXMgaTE2IGluIG1hdGNoaW5nCisr ICAvLyBoYWxmd29yZCBsYW5lczsgdmFkZHVobSBzdW1zIHRoZW0gcGFpcndpc2UuCisrICBTY3Jh dGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWludDhfdCBsID0gbGhzLmVuY29k aW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50 OF90IGQgPSBkZXN0LmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5j b2RpbmcoKSAmIDMxOworKyAgYXNfdm11bGVzYihzLCBsLCByKTsKKysgIGFzX3ZtdWxvc2IoZCwg bCwgcik7CisrICBhc192YWRkdWhtKGQsIHMsIGQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpjZWlsRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgIGFzX3h2cnNwaXAoZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6Y2VpbEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBhc194dnJkcGlwKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 OmZsb29yRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIGFzX3h2cnNwaW0oZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 Zmxvb3JGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgYXNfeHZyZHBpbShkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0 cnVuY0Zsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBhc194dnJzcGl6KGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRy dW5jRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IGFzX3h2cmRwaXooZGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVh cmVzdEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBhc194dnJzcGljKGRlc3QsIHNyYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5l YXJlc3RGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgYXNfeHZyZHBpYyhkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpm bm1hRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjMSwgRmxvYXRSZWdpc3RlciBzcmMyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBzcmNEZXN0KSB7 CisrICBhc194dm5tc3ViYXNwKHNyY0Rlc3QsIHNyYzEsIHNyYzIpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpmbm1hRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjMSwgRmxvYXRSZWdp c3RlciBzcmMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBzcmNEZXN0KSB7CisrICBhc194dm5tc3ViYWRwKHNyY0Rlc3QsIHNyYzEsIHNyYzIpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMyeDRSZWxheGVkKEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBzcmNEZXN0KSB7CisrICBhc194dm1pbnNwKHNyY0Rlc3QsIHNyY0Rlc3QsIHNy Yyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkZsb2F0MzJ4NFJlbGF4ZWQoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc194dm1pbnNw KGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQz Mng0UmVsYXhlZChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgYXNfeHZtYXhzcChz cmNEZXN0LCBzcmNEZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhG bG9hdDMyeDRSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgYXNfeHZtYXhzcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Om1pbkZsb2F0NjR4MlJlbGF4ZWQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHNyY0Rlc3Qp IHsKKysgIGFzX3h2bWluZHAoc3JjRGVzdCwgc3JjRGVzdCwgc3JjKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQ2NHgyUmVsYXhlZChGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2bWluZHAoZGVzdCwgbGhzLCByaHMpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDY0eDJSZWxheGVkKEZsb2F0UmVn aXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBzcmNEZXN0KSB7CisrICBhc194dm1heGRwKHNyY0Rlc3QsIHNyY0Rlc3QsIHNy Yyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEZsb2F0NjR4MlJlbGF4ZWQoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBhc194dm1heGRw KGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cTE1TXVscklu dDE2eDhSZWxheGVkKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBxMTVNdWxyU2F0SW50MTZ4OChsaHMsIHJocywgZGVzdCk7CisrfQorKworKy8vIFNJ TUQgb3ZlcmxvYWRzIGFjY2VwdGluZyBhbiBleHRyYSBGbG9hdFJlZ2lzdGVyIHRlbXAgKHNoYXJl ZC1oZWFkZXIgc2lnbmF0dXJlCisrLy8gdXNlZCBieSB4ODY7IG9uIFBQQzY0IHRoZSB0ZW1wIGlz IHVudXNlZCBmb3IgbW9zdCBvZiB0aGVzZSkuCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cG9wY250 SW50OHgxNihGbG9hdFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciB0ZW1wKSB7CisrICBwb3Bj bnRJbnQ4eDE2KHNyYywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2ln bmVkVHJ1bmNTYXRGbG9hdDMyeDRUb0ludDMyeDQoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsKKysgIHVuc2lnbmVkVHJ1bmNTYXRG bG9hdDMyeDRUb0ludDMyeDQoc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl cjo6ZG90SW50OHgxNkludDd4MTZUaGVuQWRkKEZsb2F0UmVnaXN0ZXIgbGhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIHJocywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGbG9hdFJlZ2lzdGVyIHRlbXApIHsKKysgIC8vIGRlc3QgKz0gcGFpcndpc2Vfd2lkZW5faTE2 X3RvX2kzMihkb3RfaTh4MTYobGhzLCByaHMpKS4KKysgIC8vCisrICAvLyBTdGVwIDE6IGkxNng4 IGRvdCBvZiBpOCBieXRlIHBhaXJzICh2bXVsZXNiL3ZtdWxvc2IvdmFkZHVobSkuIEtlZXBzCisr ICAvLyB0aGUgZXhpc3Rpbmcgc2lnbmVkLWJ5dGUgbXVsdGlwbHkgc2VtYW50aWNzIHRoYXQgbWF0 Y2ggQVJNNjQgc2RvdAorKyAgLy8gYW5kIHg4NiB2cGRwYnNzZCAodm1zdW1tYm0gd291bGQgYmUg c2lnbmVkw5d1bnNpZ25lZCBhbmQgZGl2ZXJnZSBmb3IKKysgIC8vIGk3IGxhbmVzIHRoYXQgYml0 LXBhdHRlcm4gYXMgbmVnYXRpdmUpLgorKyAgLy8KKysgIC8vIFN0ZXAgMjogdm1zdW1zaG0gZGVz dCwgZG90LCBzcGxhdF9odygxKSwgZGVzdCBjb21wdXRlcworKyAgLy8gICBkZXN0LmkzMltrXSA9 IGRlc3QuaTMyW2tdICsgZG90LmkxNlsya10qMSArIGRvdC5pMTZbMmsrMV0qMQorKyAgLy8gd2hp Y2ggaXMgZXhhY3RseSBwYWlyd2lzZSB3aWRlbiArIGFjY3VtdWxhdGUgaW4gYSBzaW5nbGUgaW5z bi4KKysgIC8vIHNwbGF0X2h3KDEpIGlzIGEgc2luZ2xlIHZzcGx0aXNoICg1LWJpdCBTSU1NIHNw bGF0IHRvIGFsbCA4IGhhbGZ3b3JkcykuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOworKyAgdWludDhfdCBsID0gbGhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVpbnQ4X3Qg ciA9IHJocy5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IGQgPSBkZXN0LmVuY29kaW5nKCkg JiAzMTsKKysgIHVpbnQ4X3QgcyA9IHNjcmF0Y2guZW5jb2RpbmcoKSAmIDMxOworKyAgdWludDhf dCB0ID0gdGVtcC5lbmNvZGluZygpICYgMzE7CisrCisrICBhc192bXVsZXNiKHMsIGwsIHIpOwor KyAgYXNfdm11bG9zYih0LCBsLCByKTsKKysgIGFzX3ZhZGR1aG0odCwgcywgdCk7CisrICBhc192 c3BsdGlzaChzLCAxKTsKKysgIGFzX3Ztc3Vtc2htKGQsIHQsIHMsIGQpOworK30KKysKKysvLyBT SU1EIG9wcyBwb3J0ZWQgZnJvbSBhcm02NC0gYW5kIHg4Ni94NjQtc2hhcGVkIHNpZ25hdHVyZXMu CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGVybXV0ZUludDE2eDgoY29uc3QgdWludDE2X3Qg bGFuZXNbOF0sIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgdWludDhfdCBzaHVmZmxlTGFuZXNb MTZdOworKyAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICBzaHVmZmxl TGFuZXNbaSAqIDJdID0gbGFuZXNbaV0gKiAyOworKyAgICBzaHVmZmxlTGFuZXNbaSAqIDIgKyAx XSA9IGxhbmVzW2ldICogMiArIDE7CisrICB9CisrICBzaHVmZmxlSW50OHgxNihzaHVmZmxlTGFu ZXMsIHNyYywgc3JjLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm90YXRl UmlnaHRTaW1kMTI4KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNoaWZ0KSB7Cisr ICBNT1pfQVNTRVJUKHNoaWZ0IDwgMTYpOworKyAgaWYgKHNoaWZ0ID09IDApIHsKKysgICAgbW92 ZVNpbWQxMjgoc3JjLCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgLy8gdnNsZG9pIFZS VCxWUkEsVlJCLFNIOiBjb25jYXRlbmF0ZSBWUkF8fFZSQiwgdGFrZSBieXRlcyBbU0guLlNIKzE1 XS4KKysgIC8vIFJvdGF0ZSByaWdodCBieSBOID0gdnNsZG9pKHNyYywgc3JjLCAxNi1OKS4KKysg IGFzX3ZzbGRvaShkZXN0LCBzcmMsIHNyYywgMTYgLSBzaGlmdCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6Om11bEludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIg cmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciB0ZW1wMikgeworKyAgLy8gUE9XRVIxMCBjb2xsYXBzZXMgdGhlIGVudGly ZSBpNjR4MiBtdWx0aXBseSB0byBhIHNpbmdsZSB2bXVsbGQuCisrICAvLyBQT1dFUjkvUE9XRVI4 IGZhbGwgYmFjayB0byB0aGUgR1BSIHJvdW5kLXRyaXAgcGF0aDogZXh0cmFjdCBlYWNoCisrICAv LyBsYW5lIHBhaXIgaW50byBHUFJzIChtZnZzcmxkIGZvciBMRS1kdzAvV2FzbS1sYW5lLTAsIG1m dnNyZCBmb3IKKysgIC8vIExFLWR3MS9sYW5lLTEpLCBtdWx0aXBseSwgYW5kIHJlYXNzZW1ibGUg dmlhIG10dnNyZCArIHh4cGVybWRpLgorKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICBhc192 bXVsbGQoZGVzdC5lbmNvZGluZygpICYgMzEsIGxocy5lbmNvZGluZygpICYgMzEsIHJocy5lbmNv ZGluZygpICYgMzEpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyBBbGlhc2luZyBzYWZldHk6 IHN0YXNoIHRoZSBsYW5lLTAgcHJvZHVjdCBpbiBTY3JhdGNoU2ltZDEyOCAod2hpY2gKKysgIC8v IGlzIG5vbi1hbGxvY2F0YWJsZSwgc28gY2Fubm90IGFsaWFzIGxocy9yaHMpIGFuZCBvbmx5IHdy aXRlIGRlc3QgYXQKKysgIC8vIHRoZSB2ZXJ5IGVuZCwgYWZ0ZXIgYm90aCBsaHMgYW5kIHJocyBo YXZlIGJlZW4gZnVsbHkgY29uc3VtZWQuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2go KnRoaXMpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAg UmVnaXN0ZXIgYSA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIFJlZ2lzdGVyIGIgPSB0ZW1wcy5BY3F1 aXJlKCk7CisrCisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgYXNfbWZ2c3JsZChhLCBsaHMp OworKyAgICBhc19tZnZzcmxkKGIsIHJocyk7CisrICB9IGVsc2UgeworKyAgICBhc194eHBlcm1k aShzY3JhdGNoLCBsaHMsIGxocywgMik7CisrICAgIGFzX21mdnNyZChhLCBzY3JhdGNoKTsKKysg ICAgYXNfeHhwZXJtZGkoc2NyYXRjaCwgcmhzLCByaHMsIDIpOworKyAgICBhc19tZnZzcmQoYiwg c2NyYXRjaCk7CisrICB9CisrICBhc19tdWxsZChhLCBhLCBiKTsKKysgIGFzX210dnNyZChzY3Jh dGNoLCBhKTsKKysKKysgIGFzX21mdnNyZChhLCBsaHMpOworKyAgYXNfbWZ2c3JkKGIsIHJocyk7 CisrICBhc19tdWxsZChhLCBhLCBiKTsKKysgIGFzX210dnNyZChkZXN0LCBhKTsKKysgIGFzX3h4 cGVybWRpKGRlc3QsIGRlc3QsIHNjcmF0Y2gsIDApOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpiaXR3aXNlQW5kTm90U2ltZDEyOChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3Rl ciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICAvLyBhbmRub3QobGhzLCByaHMpID0gbGhzICYgfnJocyA9IHh4 bGFuZGMobGhzLCByaHMpCisrICBhc194eGxhbmRjKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6Yml0d2lzZVNlbGVjdFNpbWQxMjgoRmxvYXRSZWdpc3RlciBv blRydWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBvbkZhbHNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgbWFza0Rlc3QpIHsKKysgIC8vIHJlc3VsdCA9IChvblRydWUgJiBt YXNrKSB8IChvbkZhbHNlICYgfm1hc2spCisrICAvLyB4eHNlbDogWEM9MOKGklhBLCBYQz0x4oaS WEIg4oaSIFhUID0gKFhBICYgflhDKSB8IChYQiAmIFhDKQorKyAgLy8gTmVlZCBYQT1vbkZhbHNl LCBYQj1vblRydWUsIFhDPW1hc2suCisrICBhc194eHNlbChtYXNrRGVzdCwgb25GYWxzZSwgb25U cnVlLCBtYXNrRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBvcGNudEludDh4 MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteFVu YXJ5KAorKyAgICAgICp0aGlzLAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQs IHVpbnQ4X3QgdnJiKSB7IGEuYXNfdnBvcGNudGIodnJ0LCB2cmIpOyB9LAorKyAgICAgIHNyYywg ZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQ4eDE2KEZsb2F0 UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgaWYgKEhhc1BPV0VSMTAoKSkgewor KyAgICAvLyBTaW5nbGUtaW5zdHJ1Y3Rpb24gY29sbGFwc2Ugb24gUE9XRVIxMC4KKysgICAgYXNf dmV4dHJhY3RibShkZXN0LCBzcmMpOworKyAgICByZXR1cm47CisrICB9CisrICAvLyBQT1dFUjgr IHZicGVybXEtYmFzZWQgYml0bWFzazogY3RsW2ldID0gKDE1LWkpKjggcHJvZHVjZXMgdGhlIHdh c20tc3BlYworKyAgLy8gYml0bWFwIChiaXQgaSA9IE1TQiBvZiBMRSBsYW5lIGkpIGluIGR3MCBs b3cgMTYgYml0cy4KKysgIGludDhfdCBjdGxbMTZdID0gezEyMCwgMTEyLCAxMDQsIDk2LCA4OCwg ODAsIDcyLCA2NCwKKysgICAgICAgICAgICAgICAgICAgIDU2LCAgNDgsICA0MCwgIDMyLCAyNCwg MTYsIDgsICAwfTsKKysgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVY MTYoY3RsKSwgdGVtcCk7CisrICBhc192YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMu ZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc19tZnZzcmQoZGVz dCwgdGVtcCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQxNng4KEZs b2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgaWYgKEhhc1BPV0VSMTAoKSkg eworKyAgICBhc192ZXh0cmFjdGhtKGRlc3QsIHNyYyk7CisrICAgIHJldHVybjsKKysgIH0KKysg IC8vIFNhbWUgcmVjaXBlIGFzIGJpdG1hc2tJbnQ4eDE2IGJ1dCBjdGwgcGlja3MgaGFsZndvcmQg TVNCczoKKysgIC8vIEJFIGJpdCAoMTQtMmkpKjggZm9yIGxhbmUgaSwgcGx1cyA4IGlnbm9yZS1i eXRlcyAoaGlnaCBiaXQgc2V0KS4KKysgIGludDhfdCBjdGxbMTZdID0gezExMiwgIDk2LCAgIDgw LCAgIDY0LCAgIDQ4LCAgIDMyLCAgIDE2LCAgIDAsCisrICAgICAgICAgICAgICAgICAgICAtMTI4 LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4fTsKKysgIGxvYWRDb25z dGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7CisrICBhc192 YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVu Y29kaW5nKCkgJiAzMSk7CisrICBhc19tZnZzcmQoZGVzdCwgdGVtcCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJbnQzMng0KEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3Rl ciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgdGVtcCkgeworKyAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICBhc192ZXh0cmFjdHdtKGRl c3QsIHNyYyk7CisrICAgIHJldHVybjsKKysgIH0KKysgIC8vIFNhbWUgcmVjaXBlIGFzIGJpdG1h c2tJbnQ4eDE2IGJ1dCBjdGwgcGlja3Mgd29yZCBNU0JzOgorKyAgLy8gQkUgYml0ICgxMi00aSkq OCBmb3IgbGFuZSBpLCBwbHVzIDEyIGlnbm9yZS1ieXRlcyAoaGlnaCBiaXQgc2V0KS4KKysgIGlu dDhfdCBjdGxbMTZdID0gezk2LCAgIDY0LCAgIDMyLCAgIDAsICAgIC0xMjgsIC0xMjgsIC0xMjgs IC0xMjgsCisrICAgICAgICAgICAgICAgICAgICAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4 LCAtMTI4LCAtMTI4LCAtMTI4fTsKKysgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50 OjpDcmVhdGVYMTYoY3RsKSwgdGVtcCk7CisrICBhc192YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAm IDMxLCBzcmMuZW5jb2RpbmcoKSAmIDMxLCB0ZW1wLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc19t ZnZzcmQoZGVzdCwgdGVtcCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmJpdG1hc2tJ bnQ2NHgyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCkgeworKyAgaWYgKEhhc1BP V0VSMTAoKSkgeworKyAgICBhc192ZXh0cmFjdGRtKGRlc3QsIHNyYyk7CisrICAgIHJldHVybjsK KysgIH0KKysgIC8vIFNhbWUgcmVjaXBlIGFzIHRoZSBvdGhlciBiaXRtYXNrIHZhcmlhbnRzLiBj dGwgcGlja3MgZHdvcmQgTVNCczoKKysgIC8vIEJFIGJpdCA2NCBmb3IgbGFuZSAwLCBCRSBiaXQg MCBmb3IgbGFuZSAxLCBwbHVzIDE0IGlnbm9yZS1ieXRlcy4KKysgIGludDhfdCBjdGxbMTZdID0g ezY0LCAgIDAsICAgIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsIC0xMjgsCisrICAgICAg ICAgICAgICAgICAgICAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAtMTI4LCAt MTI4fTsKKysgIGxvYWRDb25zdGFudFNpbWQxMjgoU2ltZENvbnN0YW50OjpDcmVhdGVYMTYoY3Rs KSwgdGVtcCk7CisrICBhc192YnBlcm1xKHRlbXAuZW5jb2RpbmcoKSAmIDMxLCBzcmMuZW5jb2Rp bmcoKSAmIDMxLCB0ZW1wLmVuY29kaW5nKCkgJiAzMSk7CisrICBhc19tZnZzcmQoZGVzdCwgdGVt cCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbnQ2NHgyKEFzc2VtYmxl cjo6Q29uZGl0aW9uIGNvbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgY29tcGFyZUlu dDY0eDIoY29uZCwgbGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y29tcGFyZUludDY0eDIoQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRS ZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14Q29tcGFyZSgqdGhpcywgY29uZCwgbGhzLCByaHMs IGRlc3QsIFZNWF9CSU5BUllfV1JBUFBFUih2Y21wZXF1ZCksCisrICAgICAgICAgICAgICAgICBW TVhfQklOQVJZX1dSQVBQRVIodmNtcGd0c2QpLCBWTVhfQklOQVJZX1dSQVBQRVIodmNtcGd0dWQp KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQzMng0KEZsb2F0UmVnaXN0 ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIG1pbkZsb2F0MzJ4NChsaHNEZXN0 LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2bWluc3Ao ZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptaW5GbG9hdDMy eDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZsb2F0UmVnaXN0ZXIgdGVt cDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgdGVt cDIpIHsKKysgIC8vIFdhc20gbWluIHdpdGggTmFOIHByb3BhZ2F0aW9uLgorKyAgLy8gRGV0ZWN0 IE5hTiBpbiBlaXRoZXIgb3BlcmFuZCAobm90IHZpYSBhZGQgd2hpY2ggZmFsc2VseSBmbGFncyBp bmYrKC1pbmYpKS4KKysgIC8vIENvbXB1dGUgbWFzayBhbmQgYWRkIEJFRk9SRSBtaW4gKG1pbiBt YXkgY2xvYmJlciBsaHMgdmlhIGRlc3QgYWxpYXNpbmcpLgorKyAgYXNfeHZjbXBlcXNwKHRlbXAx LCBsaHMsIGxocyk7CisrICBhc194dmNtcGVxc3AodGVtcDIsIHJocywgcmhzKTsKKysgIGFzX3h4 bGFuZCh0ZW1wMSwgdGVtcDEsIHRlbXAyKTsKKysgIGFzX3h2YWRkc3AodGVtcDIsIGxocywgcmhz KTsKKysgIGFzX3h2bWluc3AoZGVzdCwgbGhzLCByaHMpOworKyAgYXNfeHhzZWwoZGVzdCwgdGVt cDIsIGRlc3QsIHRlbXAxKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluRmxvYXQ2 NHgyKEZsb2F0UmVnaXN0ZXIgcmhzLCBGbG9hdFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIG1pbkZs b2F0NjR4MihsaHNEZXN0LCByaHMsIGxoc0Rlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjptaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIGFzX3h2bWluZHAoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjptaW5GbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QsIEZs b2F0UmVnaXN0ZXIgdGVtcDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXIgdGVtcDIpIHsKKysgIC8vIE5hTiBtYXNrIGFuZCBhZGQgbXVzdCBiZSBjb21w dXRlZCBCRUZPUkUgbWluICh3aGljaCBtYXkgY2xvYmJlciBsaHMgdmlhCisrICAvLyBkZXN0KS4K KysgIGFzX3h2Y21wZXFkcCh0ZW1wMSwgbGhzLCBsaHMpOworKyAgYXNfeHZjbXBlcWRwKHRlbXAy LCByaHMsIHJocyk7CisrICBhc194eGxhbmQodGVtcDEsIHRlbXAxLCB0ZW1wMik7ICAvLyB0ZW1w MSA9IH4wIHdoZW4gYm90aCBub24tTmFOCisrICBhc194dmFkZGRwKHRlbXAyLCBsaHMsIHJocyk7 ICAgICAvLyB0ZW1wMiA9IGFkZCAoTmFOIHNvdXJjZSkKKysgIGFzX3h2bWluZHAoZGVzdCwgbGhz LCByaHMpOyAgICAgIC8vIGRlc3QgPSBtaW4gKG1heSBjbG9iYmVyIGxocykKKysgIGFzX3h4c2Vs KGRlc3QsIHRlbXAyLCBkZXN0LCB0ZW1wMSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6 Om1heEZsb2F0MzJ4NChGbG9hdFJlZ2lzdGVyIHJocywgRmxvYXRSZWdpc3RlciBsaHNEZXN0KSB7 CisrICBtYXhGbG9hdDMyeDQobGhzRGVzdCwgcmhzLCBsaHNEZXN0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBhc194dm1heHNwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6bWF4RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lz dGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0LCBGbG9hdFJlZ2lzdGVyIHRlbXAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGbG9hdFJlZ2lzdGVyIHRlbXAyKSB7CisrICAvLyBXYXNtIG1heCB3aXRoIE5hTiBw cm9wYWdhdGlvbiwgdXNpbmcgdGVtcCByZWdpc3RlcnMuCisrICBhc194dmNtcGVxc3AodGVtcDEs IGxocywgbGhzKTsKKysgIGFzX3h2Y21wZXFzcCh0ZW1wMiwgcmhzLCByaHMpOworKyAgYXNfeHhs YW5kKHRlbXAxLCB0ZW1wMSwgdGVtcDIpOworKyAgYXNfeHZhZGRzcCh0ZW1wMiwgbGhzLCByaHMp OworKyAgYXNfeHZtYXhzcChkZXN0LCBsaHMsIHJocyk7CisrICBhc194eHNlbChkZXN0LCB0ZW1w MiwgZGVzdCwgdGVtcDEpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjptYXhGbG9hdDY0 eDIoRmxvYXRSZWdpc3RlciByaHMsIEZsb2F0UmVnaXN0ZXIgbGhzRGVzdCkgeworKyAgbWF4Rmxv YXQ2NHgyKGxoc0Rlc3QsIHJocywgbGhzRGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om1heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgewor KyAgYXNfeHZtYXhkcChkZXN0LCBsaHMsIHJocyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om1heEZsb2F0NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCwgRmxv YXRSZWdpc3RlciB0ZW1wMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciB0ZW1wMikgeworKyAgYXNfeHZjbXBlcWRwKHRlbXAxLCBsaHMsIGxocyk7Cisr ICBhc194dmNtcGVxZHAodGVtcDIsIHJocywgcmhzKTsKKysgIGFzX3h4bGFuZCh0ZW1wMSwgdGVt cDEsIHRlbXAyKTsKKysgIGFzX3h2YWRkZHAodGVtcDIsIGxocywgcmhzKTsKKysgIGFzX3h2bWF4 ZHAoZGVzdCwgbGhzLCByaHMpOworKyAgYXNfeHhzZWwoZGVzdCwgdGVtcDIsIGRlc3QsIHRlbXAx KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRUcnVuY1NhdEZsb2F0MzJ4 NFRvSW50MzJ4NChGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg YXNfeHZjdnNwdXh3cyhkZXN0LCBzcmMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpl eHRyYWN0TGFuZUludDY0eDIodWludDMyX3QgbGFuZSwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZGVzdCkgewor KyAgTU9aX0FTU0VSVChsYW5lIDwgMik7CisrICBpZiAobGFuZSA9PSAxKSB7CisrICAgIC8vIExh bmUgMSA9IEJFIGR3b3JkIDAgPSByZWdpc3RlciBiaXRzWzA6NjNdLgorKyAgICBhc19tZnZzcmQo ZGVzdC5yZWcsIHNyYyk7CisrICB9IGVsc2UgeworKyAgICAvLyBMYW5lIDAgPSBCRSBkd29yZCAx LgorKyAgICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgICBhc19tZnZzcmxkKGRlc3QucmVnLCBz cmMpOworKyAgICB9IGVsc2UgeworKyAgICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgq dGhpcyk7CisrICAgICAgYXNfeHhwZXJtZGkoc2NyYXRjaCwgc3JjLCBzcmMsIDIpOworKyAgICAg IGFzX21mdnNyZChkZXN0LnJlZywgc2NyYXRjaCk7CisrICAgIH0KKysgIH0KKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZUxhbmVJbnQ2NHgyKHVuc2lnbmVkIGxhbmUsIFJlZ2lz dGVyNjQgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h dFJlZ2lzdGVyIGxoc0Rlc3QpIHsKKysgIE1PWl9BU1NFUlQobGFuZSA8IDIpOworKyAgaWYgKEhh c1BPV0VSMTAoKSkgeworKyAgICAvLyAxIGluc24sIG5vIHNjcmF0Y2ggVlNSLiBVSU0gYnl0ZSBv ZmZzZXQ6IGxhbmUgMCDihpIgOCwgbGFuZSAxIOKGkiAwLgorKyAgICBhc192aW5zZChsaHNEZXN0 LCByaHMucmVnLCAoMSAtIGxhbmUpICogOCk7CisrICAgIHJldHVybjsKKysgIH0KKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBhc19tdHZzcmQoc2NyYXRjaCwgcmhz LnJlZyk7CisrICBpZiAobGFuZSA9PSAwKSB7CisrICAgIC8vIFJlcGxhY2UgZHcxIChMRSBsb3cg PSBsYW5lIDApLiBLZWVwIGR3MCAobGFuZSAxKS4KKysgICAgLy8gZG09MGIwMDogW2xoc0Rlc3Qu ZHcwLCBzY3JhdGNoLmR3MF0KKysgICAgYXNfeHhwZXJtZGkobGhzRGVzdCwgbGhzRGVzdCwgc2Ny YXRjaCwgMCk7CisrICB9IGVsc2UgeworKyAgICAvLyBSZXBsYWNlIGR3MCAoTEUgaGlnaCA9IGxh bmUgMSkuIEtlZXAgZHcxIChsYW5lIDApLgorKyAgICAvLyBkbT0wYjAxOiBbc2NyYXRjaC5kdzAs IGxoc0Rlc3QuZHcxXQorKyAgICBhc194eHBlcm1kaShsaHNEZXN0LCBzY3JhdGNoLCBsaHNEZXN0 LCAxKTsKKysgIH0KKyt9CisrCisrLy8gU0lNRCAzLW9wZXJhbmQgYXJpdGhtZXRpYyAoeDg2X3No YXJlZC1zdHlsZSBzaWduYXR1cmVzKS4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRGbG9h dDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2YWRk c3AoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRGbG9h dDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2YWRk ZHAoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRJbnQx Nng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFy eSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGR1aG0pLCBsaHMsIHJocywgZGVzdCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dS QVBQRVIodmFkZHVibSksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6ZGl2RmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7 CisrICBhc194dmRpdnNwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6ZXh0cmFjdExhbmVJbnQxNng4KHVpbnQzMl90IGxhbmUsIEZsb2F0UmVnaXN0ZXIgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0 KSB7CisrICBNT1pfQVNTRVJUKGxhbmUgPCA4KTsKKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAg ICBhc192ZXh0cmFjdHVoKFNjcmF0Y2hTaW1kMTI4UmVnLCBzcmMsIDE0IC0gMiAqIGxhbmUpOwor KyAgICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaFNpbWQxMjhSZWcpOworKyAgICBhc19leHRzaChk ZXN0LCBkZXN0KTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgRXh0cmFjdExhbmVUb0dQUigqdGhp cywgbGFuZSwgc3JjLCBkZXN0LCAyLCAxNik7CisrICBhc19leHRzaChkZXN0LCBkZXN0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6ZXh0cmFjdExhbmVJbnQzMng0KHVpbnQzMl90IGxh bmUsIEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBkZXN0KSB7CisrICBNT1pfQVNTRVJUKGxhbmUgPCA0KTsKKysgIEV4 dHJhY3RMYW5lVG9HUFIoKnRoaXMsIGxhbmUsIHNyYywgZGVzdCwgNCwgMzIpOworKyAgLy8gRXh0 cmFjdExhbmVUb0dQUiBsZWF2ZXMgdGhlIGFkamFjZW50IGxhbmUgaW4gdGhlIGhpZ2ggMzIgYml0 cyBmb3IgdGhlCisrICAvLyB1bnNoaWZ0ZWQgbGFuZXMgKDAgYW5kIDIpOyBjYW5vbmljYWxpemUg dG8gYSBzaWduLWV4dGVuZGVkIGkzMiwgYXMgdGhlCisrICAvLyBpOHgxNi9pMTZ4OCBleHRyYWN0 cyBkbyB3aXRoIGV4dHNiL2V4dHNoLiBBIGNvbnN1bWVyIHRoYXQgcmVhZHMgdGhlIGZ1bGwKKysg IC8vIDY0LWJpdCByZWdpc3RlciAtLSBlLmcuIHRoZSBQT1dFUjggaTMyLmN0eiBlbXVsYXRpb24s IHdob3NlIDY0LWJpdCBuZWcvYW5kLgorKyAgLy8gd2l0aCBhIDMyLWJpdCBjbnRsencgb3RoZXJ3 aXNlIG1pcy1oYW5kbGVzIGEgemVybyBsb3cgd29yZCBvdmVyIG5vbnplcm8KKysgIC8vIGhpZ2gg Z2FyYmFnZSBhbmQgcmV0dXJucyAtMSAtLSByZXF1aXJlcyB0aGlzLgorKyAgYXNfZXh0c3coZGVz dCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmV4dHJhY3RMYW5lSW50OHgx Nih1aW50MzJfdCBsYW5lLCBGbG9hdFJlZ2lzdGVyIHNyYywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCkgeworKyAgTU9aX0FTU0VSVChsYW5l IDwgMTYpOworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGFzX3ZleHRyYWN0dWIoU2NyYXRj aFNpbWQxMjhSZWcsIHNyYywgMTUgLSBsYW5lKTsKKysgICAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0 Y2hTaW1kMTI4UmVnKTsKKysgICAgYXNfZXh0c2IoZGVzdCwgZGVzdCk7CisrICAgIHJldHVybjsK KysgIH0KKysgIEV4dHJhY3RMYW5lVG9HUFIoKnRoaXMsIGxhbmUsIHNyYywgZGVzdCwgMSwgOCk7 CisrICBhc19leHRzYihkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bWF4SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRW bXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWF4c2gpLCBsaHMsIHJocywgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1heEludDMyeDQoRmxvYXRSZWdpc3Rl ciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklO QVJZX1dSQVBQRVIodm1heHN3KSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjptYXhJbnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZtYXhzYiksIGxo cywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bWluSW50OHgxNihG bG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRo aXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWluc2IpLCBsaHMsIHJocywgZGVzdCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om11bEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIo dm11bHV3bSksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 bmFycm93SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IC8vIE9uIExFLCBWTVggcGFjayBzd2FwcyBvcGVyYW5kIG9yZGVyIHZzIFdhc20gY29udmVudGlv bi4KKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2cGtzaHNzKSwg cmhzLCBsaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzcGxhdFgyKFJl Z2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIGlmIChIYXNQT1dFUjkoKSkg eworKyAgICBhc19tdHZzcmRkKGRlc3QsIHNyYy5yZWcsIHNyYy5yZWcpOworKyAgfSBlbHNlIHsK KysgICAgYXNfbXR2c3JkKGRlc3QsIHNyYy5yZWcpOworKyAgICBhc194eHBlcm1kaShkZXN0LCBk ZXN0LCBkZXN0LCAwKTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6c3ViSW50 MzJ4NChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIEVtaXRWbXhCaW5h cnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3VidXdtKSwgbGhzLCByaHMsIGRlc3QpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzd2l6emxlSW50OHgxNihGbG9hdFJlZ2lzdGVy IGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAvLyBXYXNtIGk4eDE2LnN3aXp6bGU6IHJl c3VsdFtpXSA9IChyaHNbaV0gPCAxNikgPyBsaHNbcmhzW2ldXSA6IDAuCisrICAvLworKyAgLy8g U3RyYXRlZ3k6IGJ1aWxkIGN0cmwgaW4gU2NyYXRjaFNpbWQxMjggKHdoaWNoIGNhbid0IGFsaWFz IGlucHV0cworKyAgLy8gYmVjYXVzZSB2MCBpcyBub24tYWxsb2NhdGFibGUpLiBVc2UgdnN1YnVi cyhzcGxhdCgxNSksIHJocykgdG8KKysgIC8vIHByb2R1Y2UgY3RybCA9IG1heCgwLCAxNSAtIHJo cyk7IHRoZSBzYXR1cmF0aW9uIGNsYW1wcyBvdXQtb2YtcmFuZ2UKKysgIC8vIGluZGljZXMgdG8g MCwgYW5kIHRob3NlIHBvc2l0aW9ucyBnZXQgbWFza2VkIG9mZiBiZWxvdy4KKysgIC8vCisrICAv LyBUaGUgbWFzayBpcyBjb21wdXRlZCB2aWEgdmNtcGd0dWIocmhzLCBzcGxhdCgxNSkpICsgeHhs bm9yIOKAlCAweEZGCisrICAvLyB3aGVyZSByaHMgPD0gMTUuIFJlZm9ybXVsYXRpbmcgInJocyA8 IDE2IiBhcyAiIShyaHMgPiAxNSkiIGxldHMgdXMKKysgIC8vIHVzZSB2c3BsdGlzYiB3aXRoIGEg NS1iaXQgc2lnbmVkIGltbWVkaWF0ZSAoUDcrLCAxIGluc24sIG5vIEdQUgorKyAgLy8gc2NyYXRj aCkgZm9yIGJvdGggc3BsYXQtb2YtMTUgc2l0ZXMsIHJlcGxhY2luZyB0aGUgcHJldmlvdXMKKysg IC8vIG1vdmVQdHIoMHgwRjBGMEYwRikvbW92ZVB0cigweDEwMTAxMDEwKSArIHNwbGF0WDQgZGFu Y2UuCisrICAvLworKyAgLy8gQWxpYXNpbmc6IGRlc3QgbWF5IGVxdWFsIGxocyAod2FzbSBiYXNl bGluZSBjYWxscyBzd2l6emxlSW50OHgxNigKKysgIC8vIHJzZCwgcnMsIHJzZCk7IElvbidzIHVz ZVJlZ2lzdGVyQXRTdGFydCBwZXJtaXRzIHRoZSBzYW1lKS4gV2hlbgorKyAgLy8gZGVzdCAhPSBy aHMsIGN0cmwgY2FuIGJlIGJ1aWx0IGluIHNjcmF0Y2ggYW5kIHRoZSBtYXNrIGNvbXB1dGVkCisr ICAvLyBhZnRlciB0aGUgcGVybXV0ZSAocmhzIGlzIHN0aWxsIGFsaXZlKS4gV2hlbiBkZXN0ID09 IHJocywgdGhlCisrICAvLyBwZXJtdXRlIHdvdWxkIGNsb2JiZXIgcmhzIGJlZm9yZSB3ZSBjb3Vs ZCBjb21wdXRlIHRoZSBtYXNrLCBzbyB0aGUKKysgIC8vIG1hc2sgZ29lcyB0byB0aGUgcmVkIHpv bmUgZmlyc3QuCisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgdWlu dDhfdCBzID0gc2NyYXRjaC5lbmNvZGluZygpICYgMzE7CisrICB1aW50OF90IGwgPSBsaHMuZW5j b2RpbmcoKSAmIDMxOworKyAgdWludDhfdCByID0gcmhzLmVuY29kaW5nKCkgJiAzMTsKKysgIHVp bnQ4X3QgZCA9IGRlc3QuZW5jb2RpbmcoKSAmIDMxOworKworKyAgaWYgKGRlc3QgIT0gcmhzKSB7 CisrICAgIGFzX3ZzcGx0aXNiKHMsIDE1KTsKKysgICAgYXNfdnN1YnVicyhzLCBzLCByKTsgICAv LyBzY3JhdGNoID0gY3RybAorKyAgICBhc192cGVybShkLCBsLCBsLCBzKTsgIC8vIGRlc3QgPSB2 cGVybShsaHMsIGxocywgY3RybCkKKysgICAgYXNfdnNwbHRpc2IocywgMTUpOworKyAgICBhc192 Y21wZ3R1YihzLCByLCBzKTsgICAgICAgICAgICAgLy8gc2NyYXRjaCA9IDB4RkYgd2hlcmUgcmhz ID4gMTUKKysgICAgYXNfeHhsYW5kYyhkZXN0LCBkZXN0LCBzY3JhdGNoKTsgIC8vIGRlc3QgJj0g fnNjcmF0Y2ggKD0gYnl0ZXMtdG8ta2VlcCkKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgLy8g ZGVzdCA9PSByaHM6IHZwZXJtIGNsb2JiZXJzIHJocywgc28gYnVpbGQgdGhlIGJ5dGVzLXRvLXpl cm8gbWFzayBmaXJzdAorKyAgLy8gYW5kIHN0YXNoIGl0LiBUaGUgeHhsYW5kYyBhdCB0aGUgZW5k IGNvbnN1bWVzIHRoZSB1bi1pbnZlcnRlZCBmb3JtLgorKyAgYXNfdnNwbHRpc2IocywgMTUpOwor KyAgYXNfdmNtcGd0dWIocywgciwgcyk7ICAvLyBzY3JhdGNoID0gMHhGRiB3aGVyZSByaHMgPiAx NQorKyAgUmVkWm9uZVN0YXNoU2ltZDEyOCgqdGhpcywgc2NyYXRjaCwgMCk7CisrICBhc192c3Bs dGlzYihzLCAxNSk7CisrICBhc192c3VidWJzKHMsIHMsIHIpOyAgIC8vIHNjcmF0Y2ggPSBjdHJs CisrICBhc192cGVybShkLCBsLCBsLCBzKTsgIC8vIGRlc3QgPSB2cGVybShsaHMsIGxocywgY3Ry bCkKKysgIFJlZFpvbmVSZXN0b3JlU2ltZDEyOCgqdGhpcywgMCwgc2NyYXRjaCk7CisrICBhc194 eGxhbmRjKGRlc3QsIGRlc3QsIHNjcmF0Y2gpOyAgLy8gZGVzdCAmPSB+c2NyYXRjaCAoPSBieXRl cy10by1rZWVwKQorK30KKysvLyBTSU1EIDMtb3BlcmFuZCBhcml0aG1ldGljIChjb250aW51ZWQp LgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dS QVBQRVIodmFkZHV3bSksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YWRkSW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysg IEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2YWRkdWRtKSwgbGhzLCBy aHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphZGRTYXRJbnQxNng4KEZs b2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJpbmFyeSgq dGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZhZGRzaHMpLCBsaHMsIHJocywgZGVzdCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmFkZFNhdEludDh4MTYoRmxvYXRSZWdpc3RlciBsaHMs IEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZ X1dSQVBQRVIodmFkZHNicyksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6ZGl2RmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJo cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBhc194dmRpdmRwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6bWluSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2bWluc2gpLCBsaHMs IHJocywgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1pbkludDMyeDQoRmxv YXRSZWdpc3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlz LCBWTVhfQklOQVJZX1dSQVBQRVIodm1pbnN3KSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2bXVsc3AoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxGbG9hdDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIEZsb2F0 UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKKysgIGFzX3h2bXVsZHAoZGVzdCwgbGhzLCByaHMpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjptdWxJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIFpl cm9TaW1kMTI4KCp0aGlzLCBzY3JhdGNoKTsKKysgIEVtaXRWbXhUZXJuYXJ5KAorKyAgICAgICp0 aGlzLAorKyAgICAgIFtdKEFzc2VtYmxlciYgYSwgdWludDhfdCB2cnQsIHVpbnQ4X3QgdnJhLCB1 aW50OF90IHZyYiwgdWludDhfdCB2cmMpIHsKKysgICAgICAgIGEuYXNfdm1sYWRkdWhtKHZydCwg dnJhLCB2cmIsIHZyYyk7CisrICAgICAgfSwKKysgICAgICBsaHMsIHJocywgc2NyYXRjaCwgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om5hcnJvd0ludDMyeDQoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBW TVhfQklOQVJZX1dSQVBQRVIodnBrc3dzcyksIHJocywgbGhzLCBkZXN0KTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxvYXQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBhc194dnN1YnNwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3ViRmxvYXQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJl Z2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlciBkZXN0KSB7CisrICBhc194dnN1YmRwKGRlc3QsIGxocywgcmhzKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6c3ViSW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdp c3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVy IGRlc3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3Vi dWhtKSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJJ bnQ2NHgyKEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZteEJp bmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJ1ZG0pLCBsaHMsIHJocywgZGVzdCk7 CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnN1YkludDh4MTYoRmxvYXRSZWdpc3RlciBs aHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZ X1dSQVBQRVIodnN1YnVibSksIGxocywgcmhzLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6c3ViU2F0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciBy aHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRl c3QpIHsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3Vic2hz KSwgbGhzLCByaHMsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzdWJTYXRJ bnQ4eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBGbG9hdFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzdWJzYnMpLCBsaHMsIHJocywgZGVz dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OndpZGVuRG90SW50MTZ4OChGbG9hdFJl Z2lzdGVyIGxocywgRmxvYXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgLy8gaTMyeDQuZG90X2kxNng4 X3M6IHJlc3VsdFtrXSA9IGxoc1sya10qcmhzWzJrXSArIGxoc1syaysxXSpyaHNbMmsrMV0uCisr ICAvLyB2bXN1bXNobSBjb21wdXRlcyBleGFjdGx5IHRoYXQgZm9yIGVhY2ggaTMyIGxhbmUgcGx1 cyBhbiBhZGRlbmQgKFZSQykuCisrICAvLyBXaXRoIFZSQyA9IDAsIHRoZSBhZGRlbmQgZGlzYXBw ZWFycyBhbmQgd2UgZ2V0IHRoZSB3YXNtIHNwZWMgcmVzdWx0IGluCisrICAvLyBhIHNpbmdsZSBp bnN0cnVjdGlvbi4geHhseG9yIHplcm9zIHRoZSBzY3JhdGNoIGluIDEgaW5zbiwgc28gdG90YWwg aXMKKysgIC8vIDIgaW5zbnMgdnMgdGhlIG9sZCB2bXVsZXNoL3ZtdWxvc2gvdmFkZHV3bSB0cmlv LgorKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIGFzX3h4bHhvcihz Y3JhdGNoLCBzY3JhdGNoLCBzY3JhdGNoKTsKKysgIGFzX3Ztc3Vtc2htKGRlc3QuZW5jb2Rpbmco KSAmIDMxLCBsaHMuZW5jb2RpbmcoKSAmIDMxLCByaHMuZW5jb2RpbmcoKSAmIDMxLAorKyAgICAg ICAgICAgICAgc2NyYXRjaC5lbmNvZGluZygpICYgMzEpOworK30KKysKKysvLyBTSU1EIHZhcmlh YmxlLXNoaWZ0IGFuZCBGTUEgaGVscGVycy4KKysvLyBQYXR0ZXJuOiBzcGxhdCB0aGUgR1BSIHNo aWZ0IGNvdW50IGFjcm9zcyBhbGwgbGFuZXMgb2YgYSBzY3JhdGNoIFZTUiwKKysvLyB0aGVuIGlz c3VlIGEgdmVjdG9yLXNoaWZ0IG9uIGxocyBhbmQgdGhlIHNwbGF0LiB2c2x7YixofSAvIHZzcnti LGh9IC8KKysvLyB2c3Jhe2IsaH0gdXNlIHRoZSBsb3cgMy1vci00IGJpdHMgb2YgZWFjaCBsYW5l J3Mgc2hpZnQgY291bnQsIGV4YWN0bHkKKysvLyBtYXRjaGluZyB3YXNtIG1vZHVsby1OIHNoaWZ0 IHNlbWFudGljcy4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hpZnRJbnQ4eDE2KEZs b2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFgxNihyaHMsIHNjcmF0Y2gpOworKyAgRW1pdFZt eEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzbGIpLCBsaHMsIHNjcmF0Y2gsIGRl c3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNoaWZ0SW50OHgxNihGbG9h dFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29w ZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDE2KHJocywgc2NyYXRjaCk7CisrICBFbWl0Vm14 QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYWIpLCBsaHMsIHNjcmF0Y2gsIGRl c3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp1bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4 eDE2KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFgxNihyaHMsIHNjcmF0 Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmIpLCBs aHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsZWZ0U2hp ZnRJbnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFg4KHJocywgc2NyYXRjaCk7 CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNsaCksIGxocywg c2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnJpZ2h0U2hpZnRJ bnQxNng4KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNo U2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgc3BsYXRYOChyaHMsIHNjcmF0Y2gpOwor KyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVSKHZzcmFoKSwgbGhzLCBz Y3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6dW5zaWduZWRSaWdo dFNoaWZ0SW50MTZ4OChGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3RlciBkZXN0 KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRoaXMpOworKyAgc3BsYXRYOChy aHMsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywgVk1YX0JJTkFSWV9XUkFQUEVS KHZzcmgpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVy OjpsZWZ0U2hpZnRJbnQzMng0KEZsb2F0UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFg0KHJocywg c2NyYXRjaCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNs dyksIGxocywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Omxl ZnRTaGlmdEludDY0eDIoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg U2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDQocmhzLCBzY3Jh dGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c2xkKSwg bGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cmlnaHRT aGlmdEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIFNj cmF0Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaCgqdGhpcyk7CisrICBzcGxhdFg0KHJocywgc2NyYXRj aCk7CisrICBFbWl0Vm14QmluYXJ5KCp0aGlzLCBWTVhfQklOQVJZX1dSQVBQRVIodnNyYXcpLCBs aHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpyaWdodFNo aWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgU2Ny YXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0WDQocmhzLCBzY3JhdGNo KTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JBUFBFUih2c3JhZCksIGxo cywgc2NyYXRjaCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnVuc2lnbmVk UmlnaHRTaGlmdEludDMyeDQoRmxvYXRSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgU2NyYXRjaFNpbWQxMjhTY29wZSBzY3JhdGNoKCp0aGlzKTsKKysgIHNwbGF0 WDQocmhzLCBzY3JhdGNoKTsKKysgIEVtaXRWbXhCaW5hcnkoKnRoaXMsIFZNWF9CSU5BUllfV1JB UFBFUih2c3J3KSwgbGhzLCBzY3JhdGNoLCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6dW5zaWduZWRSaWdodFNoaWZ0SW50NjR4MihGbG9hdFJlZ2lzdGVyIGxocywgUmVnaXN0 ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICBTY3JhdGNoU2ltZDEyOFNjb3BlIHNjcmF0Y2goKnRo aXMpOworKyAgc3BsYXRYNChyaHMsIHNjcmF0Y2gpOworKyAgRW1pdFZteEJpbmFyeSgqdGhpcywg Vk1YX0JJTkFSWV9XUkFQUEVSKHZzcmQpLCBsaHMsIHNjcmF0Y2gsIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpmbWFGbG9hdDMyeDQoRmxvYXRSZWdpc3RlciBzcmMxLCBGbG9h dFJlZ2lzdGVyIHNyYzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0 UmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgYXNfeHZtYWRkYXNwKHNyY0Rlc3QsIHNyYzEsIHNyYzIp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbWFGbG9hdDY0eDIoRmxvYXRSZWdpc3Rl ciBzcmMxLCBGbG9hdFJlZ2lzdGVyIHNyYzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXIgc3JjRGVzdCkgeworKyAgYXNfeHZtYWRkYWRwKHNyY0Rlc3Qs IHNyYzEsIHNyYzIpOworK30KKysKKysvL319fSBjaGVja19tYWNyb2Fzc2VtYmxlcl9zdHlsZQor KworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysjZW5kaWYg Lyogaml0X3BwYzY0X01hY3JvQXNzZW1ibGVyX3BwYzY0X2lubF9oICovCitkaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3Bw YzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4 IDAwMDAwMDAwMDAwMC4uNzAyZmIzY2Q0Y2JhCistLS0gL2Rldi9udWxsCisrKysgYi9qcy9zcmMv aml0L3BwYzY0L01hY3JvQXNzZW1ibGVyLXBwYzY0LmNwcAorQEAgLTAsMCArMSwzNDY3IEBACisr LyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMt YmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04 MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2Yg dGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhl IE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0 YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2luY2x1ZGUg ImppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oIgorKworKyNpbmNsdWRlICJqaXQvQmFp bG91dHMuaCIKKysjaW5jbHVkZSAiaml0L0Jhc2VsaW5lRnJhbWUuaCIKKysjaW5jbHVkZSAiaml0 L0ZsdXNoSUNhY2hlLmgiCisrI2luY2x1ZGUgImppdC9KaXRGcmFtZXMuaCIKKysjaW5jbHVkZSAi aml0L0ppdFJ1bnRpbWUuaCIKKysjaW5jbHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLmgiCisrI2lu Y2x1ZGUgImppdC9Nb3ZlRW1pdHRlci5oIgorKyNpbmNsdWRlICJqaXQvcHBjNjQvU2hhcmVkSUNS ZWdpc3RlcnMtcHBjNjQuaCIKKysjaW5jbHVkZSAidm0vSml0QWN0aXZhdGlvbi5oIgorKyNpbmNs dWRlICJ2bS9KU0NvbnRleHQuaCIKKysjaW5jbHVkZSAid2FzbS9XYXNtU3R1YnMuaCIKKysKKysj aW5jbHVkZSAiaml0L01hY3JvQXNzZW1ibGVyLWlubC5oIgorKworK25hbWVzcGFjZSBqcyB7Cisr bmFtZXNwYWNlIGppdCB7CisrCisrTWFjcm9Bc3NlbWJsZXImIE1hY3JvQXNzZW1ibGVyUFBDNjQ6 OmFzTWFzbSgpIHsKKysgIHJldHVybiAqc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXIqPih0aGlz KTsKKyt9CisrCisrY29uc3QgTWFjcm9Bc3NlbWJsZXImIE1hY3JvQXNzZW1ibGVyUFBDNjQ6OmFz TWFzbSgpIGNvbnN0IHsKKysgIHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgTWFjcm9Bc3NlbWJs ZXIqPih0aGlzKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gT3V0LW9mLWxpbmUgZmFrZSBleGl0 IGZyYW1lCisrCisrYm9vbCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjpidWlsZE9PTEZha2VF eGl0RnJhbWUodm9pZCogZmFrZVJldHVybkFkZHIpIHsKKysgIGFzTWFzbSgpLlB1c2goRnJhbWVE ZXNjcmlwdG9yKEZyYW1lVHlwZTo6SW9uSlMpKTsKKysgIGFzTWFzbSgpLlB1c2goSW1tUHRyKGZh a2VSZXR1cm5BZGRyKSk7CisrICBhc01hc20oKS5QdXNoKEZyYW1lUG9pbnRlcik7CisrICByZXR1 cm4gdHJ1ZTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTG9hZCBpbnQzMiBvciBkb3VibGUgZnJv bSBtZW1vcnkKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6OmxvYWRJbnQzMk9y RG91YmxlKGNvbnN0IEFkZHJlc3MmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBz LkFjcXVpcmUoKTsKKysgIExhYmVsIGVuZDsKKysKKysgIC8vIExvYWQgdGhlIGJveGVkIHZhbHVl IGFuZCBzdGFzaCBpbiB0aGUgRlBSIGltbWVkaWF0ZWx5LCB0aGVuIHJldXNlIHRoZQorKyAgLy8g R1BSIGZvciB0aGUgdGFnIHRlc3QuICBPbmx5IG9uZSBzY3JhdGNoIEdQUiBpcyBoZWxkIGhlcmUg c28gdGhhdAorKyAgLy8gYnJhbmNoVGVzdEludDMyIGNhbiBhY3F1aXJlIHRoZSBzZWNvbmQgb25l IGZvciB0aGUgSW1tVGFnIGNvbnN0YW50LgorKyAgbG9hZFB0cihBZGRyZXNzKHNyYy5iYXNlLCBz cmMub2Zmc2V0KSwgc2NyYXRjaCk7CisrICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7CisrICB4 X3NyZGkoc2NyYXRjaCwgc2NyYXRjaCwgSlNWQUxfVEFHX1NISUZUKTsKKysgIGFzTWFzbSgpLmJy YW5jaFRlc3RJbnQzMihBc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoLCAmZW5kKTsKKysgIC8v IEl0IHdhcyBhbiBpbnQzMi4gIFJlY292ZXIgdGhlIGJveGVkIHZhbHVlIGZyb20gdGhlIEZQUiwg c2lnbi1leHRlbmQKKysgIC8vIHRoZSBsb3cgMzIgYml0cywgYW5kIGNvbnZlcnQgdG8gZG91Ymxl LgorKyAgYXNfbWZ2c3JkKHNjcmF0Y2gsIGRlc3QpOworKyAgYXNfZXh0c3coc2NyYXRjaCwgc2Ny YXRjaCk7CisrICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7CisrICBhc19mY2ZpZChkZXN0LCBk ZXN0KTsKKysKKysgIGJpbmQoJmVuZCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2 NENvbXBhdDo6bG9hZEludDMyT3JEb3VibGUoY29uc3QgQmFzZUluZGV4JiBhZGRyLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgTGFiZWwgZW5kOworKworKyAg Y29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkciwgc2NyYXRjaCk7CisrICBsb2FkUHRyKEFkZHJlc3Mo c2NyYXRjaCwgYWRkci5vZmZzZXQpLCBzY3JhdGNoKTsKKysgIGFzX210dnNyZChkZXN0LCBzY3Jh dGNoKTsKKysgIHhfc3JkaShzY3JhdGNoLCBzY3JhdGNoLCBKU1ZBTF9UQUdfU0hJRlQpOworKyAg YXNNYXNtKCkuYnJhbmNoVGVzdEludDMyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2gsICZl bmQpOworKyAgYXNfbWZ2c3JkKHNjcmF0Y2gsIGRlc3QpOworKyAgYXNfZXh0c3coc2NyYXRjaCwg c2NyYXRjaCk7CisrICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7CisrICBhc19mY2ZpZChkZXN0 LCBkZXN0KTsKKysKKysgIGJpbmQoJmVuZCk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIENvbnZl cnNpb24gZnVuY3Rpb25zCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpjb252 ZXJ0VUludDMyVG9Eb3VibGUoUmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg Ly8gbXR2c3J3ejogVlNSW2Rlc3RdLmR3MCA9IHplcm9fZXh0XzY0KHNyY1szMjo2M10pOyBQOCsg KElTQSAyLjA3KS4KKysgIC8vIFJlcGxhY2VzIHJsZGljbCArIG10dnNyZCAoMiBpbnNucyArIHNj cmF0Y2gpIHdpdGggMSBpbnNuLgorKyAgYXNfbXR2c3J3eihkZXN0LCBzcmMpOworKyAgYXNfZmNm aWQoZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6 Y29udmVydFVJbnQzMlRvRmxvYXQzMihSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVzdCkg eworKyAgLy8gbXR2c3J3eiArIGZjZmlkczsgc2FtZSByZWNpcGUgYXMgY29udmVydFVJbnQzMlRv RG91YmxlLgorKyAgYXNfbXR2c3J3eihkZXN0LCBzcmMpOworKyAgYXNfZmNmaWRzKGRlc3QsIGRl c3QpOworK30KKysKKysvLyBIZWxwZXIgZm9yIHRoZSBuZWdhdGl2ZS16ZXJvIGNoZWNrIGFmdGVy IGEgc3VjY2Vzc2Z1bCByb3VuZC10cmlwLgorKy8vIFByZWNvbmRpdGlvbjogYGRlc3RgIGhvbGRz IHRoZSBpbnRlZ2VyIHJvdW5kLXRyaXAgcmVzdWx0OyBpZiBpdCBlcXVhbHMKKysvLyB6ZXJvLCB0 aGVuIGBzcmNgIHdhcyBlaXRoZXIgKzAuMCBvciAtMC4wICh0aG9zZSBhcmUgdGhlIG9ubHkgZG91 YmxlcworKy8vIHRoYXQgcm91bmQtdHJpcCB0byBpbnQgMCkuIERpc3Rpbmd1aXNoIHRoZW0gYnkg aW5zcGVjdGluZyBzcmMncyBzaWduCisrLy8gYml0OiAtMC4wIGhhcyBpdHMgTVNCIHNldCwgc28g YW4gbWZ2c3JkLXRoZW4tc2lnbmVkLWNtcC1hZ2FpbnN0LXplcm8KKysvLyBicmFuY2hlcyB0byBg ZmFpbGAgb25seSBmb3IgLTAuMC4gTm9uLXplcm8gYGRlc3RgIHZhbHVlcyAoaW5jbHVkaW5nCisr Ly8gZXZlcnkgbmVnYXRpdmUgaW50ZWdlcikgc2tpcCB0aGUgY2hlY2sgZW50aXJlbHkuCisrc3Rh dGljIHZvaWQgRW1pdE5lZ2F0aXZlWmVyb0NoZWNrKE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQm IG1hc20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIg c3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogZmFpbCkgeworKyAgTGFiZWwgbm90WmVybzsKKysgIG1hc20uYXNfY21wZGkoZGVzdCwg MCk7CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJm5vdFplcm8pOworKyAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgbWFzbS5hc19tZnZzcmQoc2NyYXRjaCwgc3JjKTsKKysgIG1h c20uYXNfY21wZGkoc2NyYXRjaCwgMCk7CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpMZXNzVGhh biwgZmFpbCk7CisrICBtYXNtLmJpbmQoJm5vdFplcm8pOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyUFBDNjRDb21wYXQ6OmNvbnZlcnREb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3Jj LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgZGVzdCwgTGFiZWwqIGZhaWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlWmVyb0NoZWNrKSB7CisrICAv LyBUcnVuY2F0ZSB0byBpbnQzMiAocm91bmQgdG93YXJkIHplcm8pLCBzaWduLWV4dGVuZCwgYW5k IHZlcmlmeQorKyAgLy8gZXhhY3RuZXNzIHZpYSByb3VuZC10cmlwIGNvbXBhcmUuIGZjdGl3eiB3 cml0ZXMgdGhlIGludDMyIHRvIEJFCisrICAvLyBiaXRzIDMyLi42MyBvZiB0aGUgRlBSOyBtZnZz cmQgZXh0cmFjdHMgYW5kIGV4dHN3IHNpZ24tZXh0ZW5kcy4KKysgIC8vIFRoZSBjb21wYXJlIGFs c28gY2F0Y2hlcyBOYU4gKHVub3JkZXJlZCkgYW5kIEluZiAoc2F0dXJhdGVkIHRvCisrICAvLyBJ TlQzMl97TUlOLE1BWH0sIHdvbid0IHJvdW5kLXRyaXAgZXF1YWwpLgorKyAgYXNfZmN0aXd6KFNj cmF0Y2hEb3VibGVSZWcsIHNyYyk7CisrICBhc19tZnZzcmQoZGVzdCwgU2NyYXRjaERvdWJsZVJl Zyk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgIGFzX210dnNyZChTY3JhdGNoRG91Ymxl UmVnLCBkZXN0KTsKKysgIGFzX2ZjZmlkKFNjcmF0Y2hEb3VibGVSZWcsIFNjcmF0Y2hEb3VibGVS ZWcpOworKyAgYXNfZmNtcHUoU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKKysgIG1hX2IoQXNzZW1i bGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmYWlsKTsKKysKKysgIGlmIChuZWdhdGl2 ZVplcm9DaGVjaykgeworKyAgICBFbWl0TmVnYXRpdmVaZXJvQ2hlY2soKnRoaXMsIHNyYywgZGVz dCwgZmFpbCk7CisrICB9CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6 Y29udmVydERvdWJsZVRvUHRyKEZsb2F0UmVnaXN0ZXIgc3JjLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBm YWlsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJvb2wgbmVnYXRpdmVaZXJvQ2hlY2spIHsKKysgIC8vIFNhbWUgcGF0dGVybiBhcyBjb252ZXJ0 RG91YmxlVG9JbnQzMiBidXQgdG8gaW50NjQgKG5vIHNpZ24tZXh0ZW5kCisrICAvLyBuZWVkZWQg c2luY2UgZmN0aWR6IGFscmVhZHkgcHJvZHVjZXMgYSA2NC1iaXQgcmVzdWx0KS4KKysgIGFzX2Zj dGlkeihTY3JhdGNoRG91YmxlUmVnLCBzcmMpOworKyAgYXNfbWZ2c3JkKGRlc3QsIFNjcmF0Y2hE b3VibGVSZWcpOworKyAgYXNfbXR2c3JkKFNjcmF0Y2hEb3VibGVSZWcsIGRlc3QpOworKyAgYXNf ZmNmaWQoU2NyYXRjaERvdWJsZVJlZywgU2NyYXRjaERvdWJsZVJlZyk7CisrICBhc19mY21wdShT Y3JhdGNoRG91YmxlUmVnLCBzcmMpOworKyAgbWFfYihBc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFs T3JVbm9yZGVyZWQsIGZhaWwpOworKworKyAgaWYgKG5lZ2F0aXZlWmVyb0NoZWNrKSB7CisrICAg IEVtaXROZWdhdGl2ZVplcm9DaGVjaygqdGhpcywgc3JjLCBkZXN0LCBmYWlsKTsKKysgIH0KKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0Ojpjb252ZXJ0RmxvYXQzMlRvSW50 MzIoRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogZmFpbCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5lZ2F0 aXZlWmVyb0NoZWNrKSB7CisrICAvLyBTYW1lIGFzIGNvbnZlcnREb3VibGVUb0ludDMyIGJ1dCB0 aGUgcm91bmQtdHJpcCB1c2VzIGZjZmlkcyBzbyB0aGUKKysgIC8vIGNvbXBhcmlzb24gaGFwcGVu cyBhdCBzaW5nbGUgcHJlY2lzaW9uIChtYXRjaGVzIHNyYydzIGFjdHVhbCB3aWR0aCkuCisrICBh c19mY3Rpd3ooU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKKysgIGFzX21mdnNyZChkZXN0LCBTY3Jh dGNoRG91YmxlUmVnKTsKKysgIGFzX2V4dHN3KGRlc3QsIGRlc3QpOworKyAgYXNfbXR2c3JkKFNj cmF0Y2hEb3VibGVSZWcsIGRlc3QpOworKyAgYXNfZmNmaWRzKFNjcmF0Y2hEb3VibGVSZWcsIFNj cmF0Y2hEb3VibGVSZWcpOworKyAgYXNfZmNtcHUoU2NyYXRjaERvdWJsZVJlZywgc3JjKTsKKysg IG1hX2IoQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmYWlsKTsKKysKKysg IGlmIChuZWdhdGl2ZVplcm9DaGVjaykgeworKyAgICBFbWl0TmVnYXRpdmVaZXJvQ2hlY2soKnRo aXMsIHNyYywgZGVzdCwgZmFpbCk7CisrICB9CisrfQorKworK0NvZGVPZmZzZXQgTWFjcm9Bc3Nl bWJsZXJQUEM2NENvbXBhdDo6dG9nZ2xlZENhbGwoSml0Q29kZSogdGFyZ2V0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBlbmFibGVkKSB7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgLy8gc3RhbnphKDgpICsgbXRjdHIvYmN0 cmwoMikgPSAxMCBpbnN0cnVjdGlvbnMuCisrICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29s UGF0Y2hhYmxlQnJhbmNoSW5zbnMpOworKyAgQnVmZmVyT2Zmc2V0IGJvTG9hZCA9CisrICAgICAg ZW1pdExvYWQ2NFN0YW56YShzY3JhdGNoLCAodWludDY0X3QpdWludHB0cl90KHRhcmdldC0+cmF3 KCkpKTsKKysgIENvZGVPZmZzZXQgb2Zmc2V0KGJvTG9hZC5nZXRPZmZzZXQoKSk7CisrICBhZGRQ ZW5kaW5nSnVtcChib0xvYWQsIEltbVB0cih0YXJnZXQtPnJhdygpKSwgUmVsb2NhdGlvbktpbmQ6 OkpJVENPREUpOworKyAgaWYgKGVuYWJsZWQpIHsKKysgICAgeHNfbXRjdHIoc2NyYXRjaCk7Cisr ICAgIGFzX2JjdHIoTGlua0JpdDo6TGlua0IpOworKyAgfSBlbHNlIHsKKysgICAgd3JpdGVJbnN0 KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB9CisrICBtX2J1ZmZlci5s ZWF2ZU5vUG9vbCgpOworKyAgTU9aX0FTU0VSVF9JRighb29tKCksIG5leHRPZmZzZXQoKS5nZXRP ZmZzZXQoKSAtIG9mZnNldC5vZmZzZXQoKSA9PQorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUb2dnbGVkQ2FsbFNpemUobnVsbHB0cikpOworKyAgcmV0dXJuIG9mZnNldDsKKyt9CisrCisr Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrLy8gRXhjZXB0aW9uIGhhbmRsaW5nCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxl clBQQzY0Q29tcGF0OjpoYW5kbGVGYWlsdXJlV2l0aEhhbmRsZXJUYWlsKAorKyAgICBMYWJlbCog cHJvZmlsZXJFeGl0VGFpbCwgTGFiZWwqIGJhaWxvdXRUYWlsLAorKyAgICB1aW50MzJfdCogcmV0 dXJuVmFsdWVDaGVja09mZnNldCkgeworKyAgLy8gUm91bmQgc2l6ZW9mKFJlc3VtZUZyb21FeGNl cHRpb24pIHVwIHRvIEFCSVN0YWNrQWxpZ25tZW50LiBUaGUKKysgIC8vIGNhbm9uaWNhbCAoc3og KyBhbGlnbiAtIDEpICYgfihhbGlnbiAtIDEpIGZvcm0gaXMgZXhhY3Q6IHdoZW4gc3oKKysgIC8v IGlzIGFscmVhZHkgYSBtdWx0aXBsZSBvZiBgYWxpZ25gIHRoZSByb3VuZGluZyBpcyBhIG5vLW9w LiBUaGUKKysgIC8vIHByZXZpb3VzIChzeiArIGFsaWduKSAmIH4oYWxpZ24gLSAxKSBvdmVyLWFs bG9jYXRlZCBieSBgYWxpZ25gCisrICAvLyBieXRlcyB3aGVuZXZlciBzeiB3YXMgYWxyZWFkeSBh bGlnbmVkLgorKyAgaW50IHNpemUgPSAoc2l6ZW9mKFJlc3VtZUZyb21FeGNlcHRpb24pICsgQUJJ U3RhY2tBbGlnbm1lbnQgLSAxKSAmCisrICAgICAgICAgICAgIH4oQUJJU3RhY2tBbGlnbm1lbnQg LSAxKTsKKysgIGFzTWFzbSgpLnN1YlB0cihJbW0zMihzaXplKSwgU3RhY2tQb2ludGVyKTsKKysg IC8vIFVzZSByMyAoZmlyc3QgYXJndW1lbnQgcmVnaXN0ZXIpLgorKyAgbW92KFN0YWNrUG9pbnRl ciwgcjMpOworKworKyAgdXNpbmcgRm4gPSB2b2lkICgqKShSZXN1bWVGcm9tRXhjZXB0aW9uKiBy ZmUpOworKyAgYXNNYXNtKCkuc2V0dXBVbmFsaWduZWRBQklDYWxsKHI0KTsKKysgIGFzTWFzbSgp LnBhc3NBQklBcmcocjMpOworKyAgYXNNYXNtKCkuY2FsbFdpdGhBQkk8Rm4sIEhhbmRsZUV4Y2Vw dGlvbj4oCisrICAgICAgQUJJVHlwZTo6R2VuZXJhbCwgQ2hlY2tVbnNhZmVDYWxsV2l0aEFCSTo6 RG9udENoZWNrSGFzRXhpdEZyYW1lKTsKKysKKysgICpyZXR1cm5WYWx1ZUNoZWNrT2Zmc2V0ID0g YXNNYXNtKCkuY3VycmVudE9mZnNldCgpOworKworKyAgTGFiZWwgZW50cnlGcmFtZTsKKysgIExh YmVsIGNhdGNoXzsKKysgIExhYmVsIGZpbmFsbHk7CisrICBMYWJlbCByZXR1cm5CYXNlbGluZTsK KysgIExhYmVsIHJldHVybklvbjsKKysgIExhYmVsIGJhaWxvdXQ7CisrICBMYWJlbCB3YXNtSW50 ZXJwRW50cnk7CisrICBMYWJlbCB3YXNtQ2F0Y2g7CisrCisrICBsb2FkMzIoQWRkcmVzcyhTdGFj a1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mS2luZCgpKSwgcjMpOworKyAg YXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsCisrICAgICAgICAgICAgICAg ICAgICBJbW0zMihFeGNlcHRpb25SZXN1bWVLaW5kOjpFbnRyeUZyYW1lKSwgJmVudHJ5RnJhbWUp OworKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2Vw dGlvblJlc3VtZUtpbmQ6OkNhdGNoKSwKKysgICAgICAgICAgICAgICAgICAgICZjYXRjaF8pOwor KyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2VwdGlv blJlc3VtZUtpbmQ6OkZpbmFsbHkpLAorKyAgICAgICAgICAgICAgICAgICAgJmZpbmFsbHkpOwor KyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsCisrICAgICAgICAgICAg ICAgICAgICBJbW0zMihFeGNlcHRpb25SZXN1bWVLaW5kOjpGb3JjZWRSZXR1cm5CYXNlbGluZSks CisrICAgICAgICAgICAgICAgICAgICAmcmV0dXJuQmFzZWxpbmUpOworKyAgYXNNYXNtKCkuYnJh bmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgcjMsCisrICAgICAgICAgICAgICAgICAgICBJbW0zMihF eGNlcHRpb25SZXN1bWVLaW5kOjpGb3JjZWRSZXR1cm5Jb24pLCAmcmV0dXJuSW9uKTsKKysgIGFz TWFzbSgpLmJyYW5jaDMyKEFzc2VtYmxlcjo6RXF1YWwsIHIzLCBJbW0zMihFeGNlcHRpb25SZXN1 bWVLaW5kOjpCYWlsb3V0KSwKKysgICAgICAgICAgICAgICAgICAgICZiYWlsb3V0KTsKKysgIGFz TWFzbSgpLmJyYW5jaDMyKEFzc2VtYmxlcjo6RXF1YWwsIHIzLAorKyAgICAgICAgICAgICAgICAg ICAgSW1tMzIoRXhjZXB0aW9uUmVzdW1lS2luZDo6V2FzbUludGVycEVudHJ5KSwKKysgICAgICAg ICAgICAgICAgICAgICZ3YXNtSW50ZXJwRW50cnkpOworKyAgYXNNYXNtKCkuYnJhbmNoMzIoQXNz ZW1ibGVyOjpFcXVhbCwgcjMsIEltbTMyKEV4Y2VwdGlvblJlc3VtZUtpbmQ6Oldhc21DYXRjaCks CisrICAgICAgICAgICAgICAgICAgICAmd2FzbUNhdGNoKTsKKysKKysgIGJyZWFrcG9pbnQoKTsg IC8vIEludmFsaWQga2luZC4KKysKKysgIC8vIE5vIGV4Y2VwdGlvbiBoYW5kbGVyLiBSZXR1cm4g ZXJyb3IgZnJvbSBlbnRyeSBmcmFtZS4KKysgIGJpbmQoJmVudHJ5RnJhbWUpOworKyAgYXNNYXNt KCkubW92ZVZhbHVlKE1hZ2ljVmFsdWUoSlNfSU9OX0VSUk9SKSwgSlNSZXR1cm5PcGVyYW5kKTsK KysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRpb246Om9m ZnNldE9mRnJhbWVQb2ludGVyKCkpLAorKyAgICAgICAgICBGcmFtZVBvaW50ZXIpOworKyAgbG9h ZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZT dGFja1BvaW50ZXIoKSksCisrICAgICAgICAgIFN0YWNrUG9pbnRlcik7CisrICByZXQoKTsKKysK KysgIC8vIENhdGNoIGhhbmRsZXIuCisrICBiaW5kKCZjYXRjaF8pOworKyAgbG9hZFB0cihBZGRy ZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZUYXJnZXQoKSks IHIzKTsKKysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJlc3VtZUZyb21FeGNlcHRp b246Om9mZnNldE9mRnJhbWVQb2ludGVyKCkpLAorKyAgICAgICAgICBGcmFtZVBvaW50ZXIpOwor KyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zm c2V0T2ZTdGFja1BvaW50ZXIoKSksCisrICAgICAgICAgIFN0YWNrUG9pbnRlcik7CisrICBqdW1w KHIzKTsKKysKKysgIC8vIEZpbmFsbHkgYmxvY2suCisrICBiaW5kKCZmaW5hbGx5KTsKKysgIFZh bHVlT3BlcmFuZCBleGNlcHRpb24gPSBWYWx1ZU9wZXJhbmQocjQpOworKyAgbG9hZFZhbHVlKEFk ZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkV4Y2VwdGlv bigpKSwKKysgICAgICAgICAgICBleGNlcHRpb24pOworKworKyAgVmFsdWVPcGVyYW5kIGV4Y2Vw dGlvblN0YWNrID0gVmFsdWVPcGVyYW5kKHI1KTsKKysgIGxvYWRWYWx1ZSgKKysgICAgICBBZGRy ZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZFeGNlcHRpb25T dGFjaygpKSwKKysgICAgICBleGNlcHRpb25TdGFjayk7CisrCisrICBsb2FkUHRyKEFkZHJlc3Mo U3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlRhcmdldCgpKSwgcjMp OworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6 b2Zmc2V0T2ZGcmFtZVBvaW50ZXIoKSksCisrICAgICAgICAgIEZyYW1lUG9pbnRlcik7CisrICBs b2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRP ZlN0YWNrUG9pbnRlcigpKSwKKysgICAgICAgICAgU3RhY2tQb2ludGVyKTsKKysKKysgIHB1c2hW YWx1ZShleGNlcHRpb24pOworKyAgcHVzaFZhbHVlKGV4Y2VwdGlvblN0YWNrKTsKKysgIHB1c2hW YWx1ZShCb29sZWFuVmFsdWUodHJ1ZSkpOworKyAganVtcChyMyk7CisrCisrICAvLyBGb3JjZWQg cmV0dXJuIGZyb20gYmFzZWxpbmUuCisrICBMYWJlbCBwcm9maWxpbmdJbnN0cnVtZW50YXRpb247 CisrICBiaW5kKCZyZXR1cm5CYXNlbGluZSk7CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKKysgICAg ICAgICAgRnJhbWVQb2ludGVyKTsKKysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJl c3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mU3RhY2tQb2ludGVyKCkpLAorKyAgICAgICAgICBT dGFja1BvaW50ZXIpOworKyAgbG9hZFZhbHVlKEFkZHJlc3MoRnJhbWVQb2ludGVyLCBCYXNlbGlu ZUZyYW1lOjpyZXZlcnNlT2Zmc2V0T2ZSZXR1cm5WYWx1ZSgpKSwKKysgICAgICAgICAgICBKU1Jl dHVybk9wZXJhbmQpOworKyAganVtcCgmcHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKKysKKysg IC8vIEZvcmNlZCByZXR1cm4gZnJvbSBJb24uCisrICBiaW5kKCZyZXR1cm5Jb24pOworKyAgbG9h ZFZhbHVlKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRP ZkV4Y2VwdGlvbigpKSwKKysgICAgICAgICAgICBKU1JldHVybk9wZXJhbmQpOworKyAgbG9hZFB0 cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZGcmFt ZVBvaW50ZXIoKSksCisrICAgICAgICAgIEZyYW1lUG9pbnRlcik7CisrICBsb2FkUHRyKEFkZHJl c3MoU3RhY2tQb2ludGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZlN0YWNrUG9pbnRl cigpKSwKKysgICAgICAgICAgU3RhY2tQb2ludGVyKTsKKysKKysgIGJpbmQoJnByb2ZpbGluZ0lu c3RydW1lbnRhdGlvbik7CisrICB7CisrICAgIExhYmVsIHNraXBQcm9maWxpbmdJbnN0cnVtZW50 YXRpb247CisrICAgIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzT2ZFbmFibGVkKAorKyAgICAgICAg YXNNYXNtKCkucnVudGltZSgpLT5nZWNrb1Byb2ZpbGVyKCkuYWRkcmVzc09mRW5hYmxlZCgpKTsK KysgICAgYXNNYXNtKCkuYnJhbmNoMzIoQXNzZW1ibGVyOjpFcXVhbCwgYWRkcmVzc09mRW5hYmxl ZCwgSW1tMzIoMCksCisrICAgICAgICAgICAgICAgICAgICAgICZza2lwUHJvZmlsaW5nSW5zdHJ1 bWVudGF0aW9uKTsKKysgICAganVtcChwcm9maWxlckV4aXRUYWlsKTsKKysgICAgYmluZCgmc2tp cFByb2ZpbGluZ0luc3RydW1lbnRhdGlvbik7CisrICB9CisrCisrICB4c19tcihTdGFja1BvaW50 ZXIsIEZyYW1lUG9pbnRlcik7CisrICAvLyBQb3AgRlAgZnJvbSBzdGFjaywgdGhlbiByZXR1cm4g KHBvcCBMUiArIGJscikuCisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCAwKSwgRnJh bWVQb2ludGVyKTsKKysgIGFzTWFzbSgpLmFkZFB0cihJbW0zMihzaXplb2Yodm9pZCopKSwgU3Rh Y2tQb2ludGVyKTsKKysgIHJldCgpOworKworKyAgLy8gQmFpbG91dC4KKysgIGJpbmQoJmJhaWxv dXQpOworKyAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlv bjo6b2Zmc2V0T2ZCYWlsb3V0SW5mbygpKSwKKysgICAgICAgICAgcjUpOworKyAgbG9hZFB0cihB ZGRyZXNzKFN0YWNrUG9pbnRlciwgUmVzdW1lRnJvbUV4Y2VwdGlvbjo6b2Zmc2V0T2ZTdGFja1Bv aW50ZXIoKSksCisrICAgICAgICAgIFN0YWNrUG9pbnRlcik7CisrICB4c19saShSZXR1cm5SZWcs IDEpOworKyAganVtcChiYWlsb3V0VGFpbCk7CisrCisrICAvLyBXYXNtIGludGVycCBlbnRyeS4K KysgIGJpbmQoJndhc21JbnRlcnBFbnRyeSk7CisrICBsb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2lu dGVyLCBSZXN1bWVGcm9tRXhjZXB0aW9uOjpvZmZzZXRPZkZyYW1lUG9pbnRlcigpKSwKKysgICAg ICAgICAgRnJhbWVQb2ludGVyKTsKKysgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIFJl c3VtZUZyb21FeGNlcHRpb246Om9mZnNldE9mU3RhY2tQb2ludGVyKCkpLAorKyAgICAgICAgICBT dGFja1BvaW50ZXIpOworKyAgbW92ZVB0cihJbW1Xb3JkKHdhc206OkludGVycEZhaWxJbnN0YW5j ZVJlZyksIEluc3RhbmNlUmVnKTsKKysgIHJldCgpOworKworKyAgLy8gV2FzbSBjYXRjaC4KKysg IGJpbmQoJndhc21DYXRjaCk7CisrICB3YXNtOjpHZW5lcmF0ZUp1bXBUb0NhdGNoSGFuZGxlcihh c01hc20oKSwgU3RhY2tQb2ludGVyLCByNCwgcjUsIHI2KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6Y2xhbXBEb3VibGVUb1VpbnQ4KEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVy IG91dHB1dCkgeworKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Cisr CisrICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgLy8gUDkgeHNtYXhqZHAgdXNlcyBKYXZhL0pT IHNlbWFudGljcyAoSVNBIHYzLjBCKTogYW55IE5hTgorKyAgICAvLyBpcyB0cmVhdGVkIGFzICJs ZXNzIHRoYW4gYW55IG51bWJlciB0aGF0IGlzIG5vdCBhIE5hTiIsIHNvCisrICAgIC8vIHhzbWF4 amRwKGlucHV0LCAwKSBjb2xsYXBzZXMge05hTiwgLUluZiwg4omkIDB9IHRvIDAgaW4gb25lIGlu c24g4oCUCisrICAgIC8vIHRoZSAi4omkIDAgb3IgTmFOIOKGkiAwIiBicmFuY2ggZGFuY2UgZGlz YXBwZWFycy4KKysgICAgLy8KKysgICAgLy8gQWZ0ZXIgdGhlIG1heCwgZmN0aWQgKHJvdW5kLXRv LW5lYXJlc3QtZXZlbiBwZXIgRlBTQ1IgZGVmYXVsdCwKKysgICAgLy8gbWF0Y2hlcyBFQ01BIFVp bnQ4Q2xhbXBlZEFycmF5J3Mgcm91bmQtaGFsZi10by1ldmVuKSBzYXR1cmF0ZXMKKysgICAgLy8g b3V0LW9mLWludDY0IHZhbHVlcyB0byBJTlQ2NF9NQVguIFJlbWFpbmluZyB1cHBlciBjbGFtcAor KyAgICAvLyAob3V0cHV0ID4gMjU1IOKGkiAyNTUpIGlzIG9uZSBjbXBkaSArIGlzZWwuCisrICAg IHplcm9Eb3VibGUoZnBzY3JhdGNoKTsKKysgICAgYXNfeHNtYXhqZHAoZnBzY3JhdGNoLCBpbnB1 dCwgZnBzY3JhdGNoKTsKKysgICAgYXNfZmN0aWQoZnBzY3JhdGNoLCBmcHNjcmF0Y2gpOworKyAg ICBhc19tZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gpOworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIG1heDI1NSA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgeHNfbGkobWF4MjU1LCAyNTUpOworKyAgICBhc19jbXBkaShvdXRwdXQsIDI1 NSk7CisrICAgIGFzX2lzZWwob3V0cHV0LCBtYXgyNTUsIG91dHB1dCwgR3JlYXRlclRoYW4pOwor KyAgICByZXR1cm47CisrICB9CisrCisrICAvLyBQT1dFUjggZmFsbGJhY2s6IHhzbWF4amRwIGlz IHVuYXZhaWxhYmxlLCBzbyBmaWx0ZXIgTmFOIGV4cGxpY2l0bHkKKysgIC8vIGJlZm9yZSBmY3Rp ZC4gUGVyIFBvd2VyIElTQSwgZmN0aWQgbWFwcyBOYU4gdG8gSU5UNjRfTUFYLCB3aGljaAorKyAg Ly8gd291bGQgY2xhbXAgdG8gMjU1IGluc3RlYWQgb2YgdGhlIHNwZWMtcmVxdWlyZWQgMC4KKysg IExhYmVsIHBvc2l0aXZlLCBiZWxvdzI1NSwgZG9uZTsKKysgIHplcm9Eb3VibGUoZnBzY3JhdGNo KTsKKysgIGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgaW5wdXQsIGZwc2NyYXRjaCwg JnBvc2l0aXZlKTsKKysgIHsKKysgICAgbW92ZTMyKEltbTMyKDApLCBvdXRwdXQpOworKyAgICBq dW1wKCZkb25lKTsKKysgIH0KKysKKysgIGJpbmQoJnBvc2l0aXZlKTsKKysKKysgIGxvYWRDb25z dGFudERvdWJsZSgyNTUuMCwgZnBzY3JhdGNoKTsKKysgIGJyYW5jaERvdWJsZShEb3VibGVMZXNz VGhhbiwgaW5wdXQsIGZwc2NyYXRjaCwgJmJlbG93MjU1KTsKKysgIHsKKysgICAgbW92ZTMyKElt bTMyKDI1NSksIG91dHB1dCk7CisrICAgIGp1bXAoJmRvbmUpOworKyAgfQorKworKyAgYmluZCgm YmVsb3cyNTUpOworKworKyAgYXNfZmN0aWQoZnBzY3JhdGNoLCBpbnB1dCk7CisrICBhc19tZnZz cmQob3V0cHV0LCBmcHNjcmF0Y2gpOworKyAgYmluZCgmZG9uZSk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OnN1YkZyb21TdGFja1B0cihJbW0zMiBpbW0zMikgeworKyAgaWYgKGltbTMy LnZhbHVlKSB7CisrICAgIGFzTWFzbSgpLnN1YlB0cihpbW0zMiwgU3RhY2tQb2ludGVyKTsKKysg IH0KKyt9CisrCisrLy97e3sgY2hlY2tfbWFjcm9hc3NlbWJsZXJfc3R5bGUKKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjp3aWRlbkludDMyKFJlZ2lzdGVyIHIpIHsKKysgIG1vdmUzMlRvNjRTaWdu RXh0ZW5kKHIsIFJlZ2lzdGVyNjQocikpOworK30KKysKKysvLyBTdGFjayBvcGVyYXRpb25zLgor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OlB1c2goUmVnaXN0ZXIgcmVnKSB7CisrICBwdXNoKHJlZyk7 CisrICBhZGp1c3RGcmFtZShpbnQzMl90KHNpemVvZihpbnRwdHJfdCkpKTsKKyt9Cisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6UHVzaChjb25zdCBJbW0zMiBpbW0pIHsKKysgIHB1c2goaW1tKTsKKysg IGFkanVzdEZyYW1lKGludDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpQdXNoKGNvbnN0IEltbVdvcmQgaW1tKSB7CisrICBwdXNoKGltbSk7Cisr ICBhZGp1c3RGcmFtZShpbnQzMl90KHNpemVvZihpbnRwdHJfdCkpKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6UHVzaChjb25zdCBJbW1QdHIgaW1tKSB7CisrICBQdXNoKEltbVdvcmQo dWludHB0cl90KGltbS52YWx1ZSkpKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UHVz aChjb25zdCBJbW1HQ1B0ciBwdHIpIHsKKysgIHB1c2gocHRyKTsKKysgIGFkanVzdEZyYW1lKGlu dDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQ dXNoQm94ZWQoRmxvYXRSZWdpc3RlciByZWcpIHsKKysgIHN1YkZyb21TdGFja1B0cihJbW0zMihz aXplb2YoZG91YmxlKSkpOworKyAgYm94RG91YmxlKHJlZywgQWRkcmVzcyhnZXRTdGFja1BvaW50 ZXIoKSwgMCkpOworKyAgYWRqdXN0RnJhbWUoc2l6ZW9mKGRvdWJsZSkpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpQb3AoUmVnaXN0ZXIgcmVnKSB7CisrICBwb3AocmVnKTsKKysgIGFk anVzdEZyYW1lKC1pbnQzMl90KHNpemVvZihpbnRwdHJfdCkpKTsKKyt9Cisrdm9pZCBNYWNyb0Fz c2VtYmxlcjo6UHVzaFJlZ3NJbk1hc2soTGl2ZVJlZ2lzdGVyU2V0IHNldCkgeworKyAgaW50MzJf dCBkaWZmID0KKysgICAgICBzZXQuZ3BycygpLnNpemUoKSAqIHNpemVvZihpbnRwdHJfdCkgKyBz ZXQuZnB1cygpLmdldFB1c2hTaXplSW5CeXRlcygpOworKyAgY29uc3QgaW50MzJfdCByZXNlcnZl ZCA9IGRpZmY7CisrCisrICByZXNlcnZlU3RhY2socmVzZXJ2ZWQpOworKyAgZm9yIChHZW5lcmFs UmVnaXN0ZXJCYWNrd2FyZEl0ZXJhdG9yIGl0ZXIoc2V0LmdwcnMoKSk7IGl0ZXIubW9yZSgpOyAr K2l0ZXIpIHsKKysgICAgZGlmZiAtPSBzaXplb2YoaW50cHRyX3QpOworKyAgICBzdG9yZVB0cigq aXRlciwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIGRpZmYpKTsKKysgIH0KKysKKysgIC8vIE5hdHVy YWwgcGVyLWtpbmQgc2xvdCDigJQgOCBieXRlcyBmb3IgU2luZ2xlL0RvdWJsZSB2aWEgc3RmZCwg MTYgYnl0ZXMKKysgIC8vIGZvciBTaW1kMTI4IHZpYSBzdHh2eC4gUmVnaXN0ZXJEdW1wOjpGUFVB cnJheSBpcyBzaXplZCAzMiDDlyA4ID0gMjU2CisrICAvLyBieXRlcyAoc2l6ZW9mKFJlZ2lzdGVy Q29udGVudCkgaXMgOCDigJQgbm8gdjEyOCBpbiB0aGUgdW5pb24pLCBzbworKyAgLy8gZl9LJ3Mg c3RmZCBzbG90IGxhbmRzIGF0IHRoZSByaWdodCBvZmZzZXQuIEJhaWxvdXQgQWxsUmVncyBleGNs dWRlcworKyAgLy8gU2ltZDEyOCAoSW9uIGhhcyBubyBTSU1EIGxpdmUpLCBzbyB0aGUgRlAgcmVn aW9uIGluIGJhaWxvdXQgZnJhbWVzCisrICAvLyBpcyBzdHJpY3RseSBGbG9hdC1vbmx5LgorKyAg Zm9yIChGbG9hdFJlZ2lzdGVyQmFja3dhcmRJdGVyYXRvciBpdGVyKHNldC5mcHVzKCkucmVkdWNl U2V0Rm9yUHVzaCgpKTsKKysgICAgICAgaXRlci5tb3JlKCk7ICsraXRlcikgeworKyAgICBGbG9h dFJlZ2lzdGVyIHJlZyA9ICppdGVyOworKyAgICBkaWZmIC09IHJlZy5zaXplKCk7CisrICAgIGlm IChyZWcuaXNTaW1kMTI4KCkpIHsKKysgICAgICBzdG9yZVVuYWxpZ25lZFNpbWQxMjgocmVnLCBB ZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZikpOworKyAgICB9IGVsc2UgeworKyAgICAgIHN0b3Jl RG91YmxlKHJlZy5hc0RvdWJsZSgpLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZikpOworKyAg ICB9CisrICB9CisrICBNT1pfQVNTRVJUKGRpZmYgPT0gMCk7CisrfQorK3ZvaWQgTWFjcm9Bc3Nl bWJsZXI6OlBvcFJlZ3NJbk1hc2tJZ25vcmUoTGl2ZVJlZ2lzdGVyU2V0IHNldCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpdmVSZWdpc3RlclNldCBpZ25vcmUp IHsKKysgIGludDMyX3QgZGlmZiA9CisrICAgICAgc2V0LmdwcnMoKS5zaXplKCkgKiBzaXplb2Yo aW50cHRyX3QpICsgc2V0LmZwdXMoKS5nZXRQdXNoU2l6ZUluQnl0ZXMoKTsKKysgIGNvbnN0IGlu dDMyX3QgcmVzZXJ2ZWQgPSBkaWZmOworKworKyAgZm9yIChHZW5lcmFsUmVnaXN0ZXJCYWNrd2Fy ZEl0ZXJhdG9yIGl0ZXIoc2V0LmdwcnMoKSk7IGl0ZXIubW9yZSgpOyArK2l0ZXIpIHsKKysgICAg ZGlmZiAtPSBzaXplb2YoaW50cHRyX3QpOworKyAgICBpZiAoIWlnbm9yZS5oYXMoKml0ZXIpKSB7 CisrICAgICAgbG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZiksICppdGVyKTsKKysg ICAgfQorKyAgfQorKworKyAgLy8gTmF0dXJhbCBwZXIta2luZCBzbG90LiBTZWUgUHVzaFJlZ3NJ bk1hc2sgY29tbWVudC4KKysgIGZvciAoRmxvYXRSZWdpc3RlckJhY2t3YXJkSXRlcmF0b3IgaXRl cihzZXQuZnB1cygpLnJlZHVjZVNldEZvclB1c2goKSk7CisrICAgICAgIGl0ZXIubW9yZSgpOyAr K2l0ZXIpIHsKKysgICAgRmxvYXRSZWdpc3RlciByZWcgPSAqaXRlcjsKKysgICAgZGlmZiAtPSBy ZWcuc2l6ZSgpOworKyAgICBpZiAoIWlnbm9yZS5oYXMocmVnKSkgeworKyAgICAgIGlmIChyZWcu aXNTaW1kMTI4KCkpIHsKKysgICAgICAgIGxvYWRVbmFsaWduZWRTaW1kMTI4KEFkZHJlc3MoU3Rh Y2tQb2ludGVyLCBkaWZmKSwgcmVnKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbG9hZERv dWJsZShBZGRyZXNzKFN0YWNrUG9pbnRlciwgZGlmZiksIHJlZy5hc0RvdWJsZSgpKTsKKysgICAg ICB9CisrICAgIH0KKysgIH0KKysgIE1PWl9BU1NFUlQoZGlmZiA9PSAwKTsKKysgIGZyZWVTdGFj ayhyZXNlcnZlZCk7CisrfQorKworKy8vIENhbGwgb3BlcmF0aW9ucy4KKytDb2RlT2Zmc2V0IE1h Y3JvQXNzZW1ibGVyOjpjYWxsKFJlZ2lzdGVyIHJlZykgeworKyAgLy8gRUxGdjIgQUJJOiByMTIg bXVzdCBob2xkIHRoZSB0YXJnZXQgYWRkcmVzcyBhdCBmdW5jdGlvbiBlbnRyeQorKyAgLy8gc28g dGhlIGNhbGxlZSBjYW4gY29tcHV0ZSBpdHMgVE9DIHBvaW50ZXIgZnJvbSByMTIuCisrICBpZiAo cmVnICE9IENhbGxSZWcpIHsKKysgICAgbW92ZVB0cihyZWcsIENhbGxSZWcpOworKyAgfQorKyAg eHNfbXRjdHIoQ2FsbFJlZyk7CisrICBhc19iY3RyKExpbmtCKTsKKysgIHJldHVybiBDb2RlT2Zm c2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrfQorK0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6OmNh bGwoTGFiZWwqIGxhYmVsKSB7CisrICBpZiAobGFiZWwtPmJvdW5kKCkpIHsKKysgICAgLy8gT3Bl biB0aGUgbm8tcG9vbCB3aW5kb3cgQkVGT1JFIGNvbXB1dGluZyB0aGUgZGlzcGxhY2VtZW50Lgor KyAgICAvLyBlbnRlck5vUG9vbCgpIGNhbiBpdHNlbGYgdHJpZ2dlciBhIHBlbmRpbmcgcG9vbCBm bHVzaCwgYWR2YW5jaW5nCisrICAgIC8vIGN1cnJlbnRPZmZzZXQoKS4gQSBwcmUtZmx1c2ggZGlz cGxhY2VtZW50IGVtaXR0ZWQgYXQgdGhlIHBvc3QtZmx1c2gKKysgICAgLy8gcG9zaXRpb24gd291 bGQgb3ZlcnNob290IHRoZSB0YXJnZXQgYnkgcG9vbFNpemUgYnl0ZXMuCisrICAgIG1fYnVmZmVy LmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyk7CisrICAgIGludDMyX3Qg b2Zmc2V0ID0gbGFiZWwtPm9mZnNldCgpIC0gY3VycmVudE9mZnNldCgpOworKyAgICAvLyBDYWxs IGluc3RydWN0aW9uIGdvZXMgYXQgaW5zdFs5XSBpbiB0aGUgMTAtd29yZCBzdGFuemEuCisrICAg IGludDMyX3QgY2FsbE9mZnNldCA9IG9mZnNldCAtIDkgKiAoaW50MzJfdClzaXplb2YodWludDMy X3QpOworKyAgICBpZiAoSk9mZkltbTI2OjpJc0luUmFuZ2UoY2FsbE9mZnNldCkpIHsKKysgICAg ICAvLyBTaG9ydDogOSBub3BzICsgYmwgPSAxMCBpbnN0cnVjdGlvbnMuCisrICAgICAgd3JpdGVJ bnN0KE5vcEluc3QpOworKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgICB3cml0ZUlu c3QoTm9wSW5zdCk7CisrICAgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICAgIHdyaXRlSW5z dChOb3BJbnN0KTsKKysgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgICAgd3JpdGVJbnN0 KE5vcEluc3QpOworKyAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgICB3cml0ZUluc3Qo Tm9wSW5zdCk7CisrICAgICAgYXNfYihKT2ZmSW1tMjYoY2FsbE9mZnNldCksIFJlbGF0aXZlQnJh bmNoLCBMaW5rQik7CisrICAgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgICAgICByZXR1 cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOworKyAgICB9CisrICAgIC8vIExvbmcgY2Fs bCB0byBib3VuZCBsYWJlbDogc3RhbnphKDgpICsgbXRjdHIgKyBiY3RybCA9IDEwIGluc3RydWN0 aW9ucy4KKysgICAgQnVmZmVyT2Zmc2V0IGJvID0KKysgICAgICAgIGVtaXRMb2FkNjRTdGFuemEo U2Vjb25kU2NyYXRjaFJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgIHhzX210 Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICBhc19iY3RyKExpbmtCKTsKKysgICAgbV9idWZm ZXIubGVhdmVOb1Bvb2woKTsKKysgICAgYWRkTG9uZ0p1bXAoYm8sIEJ1ZmZlck9mZnNldChsYWJl bC0+b2Zmc2V0KCkpKTsKKysgICAgcmV0dXJuIENvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsK KysgIH0KKysgIC8vIEVtaXQgYSBDYWxsVGFnIHN0YW56YTogdHJhcCArIGNoYWluICsgOCBub3Bz ICgxMCBpbnN0cnVjdGlvbnMgdG90YWwpLgorKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9v bFBhdGNoYWJsZUJyYW5jaEluc25zKTsKKysgIEJ1ZmZlck9mZnNldCBibyA9IHhzX3RyYXBfdGFn Z2VkKENhbGxUYWcpOworKyAgd3JpdGVJbnN0KGxhYmVsLT51c2VkKCkgPyBsYWJlbC0+b2Zmc2V0 KCkgOiBMYWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsK KysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRl SW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJ bnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysg IG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICBpZiAoIW9vbSgpKSB7CisrICAgIGxhYmVsLT51 c2UoYm8uZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgcmV0dXJuIENvZGVPZmZzZXQoY3VycmVudE9m ZnNldCgpKTsKKyt9CisrQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChjb25zdCBBZGRy ZXNzJiBhZGRyKSB7CisrICBsb2FkUHRyKGFkZHIsIENhbGxSZWcpOworKyAgcmV0dXJuIGNhbGwo Q2FsbFJlZyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGwoSW1tUHRyIHRhcmdl dCkgeworKyAgdWludDY0X3QgYWRkciA9IHVpbnRwdHJfdCh0YXJnZXQudmFsdWUpOworKyAgLy8g c3RhbnphKDgpICsgbXRjdHIgKyBiY3RybCA9IDEwIGluc3RydWN0aW9ucy4KKysgIG1fYnVmZmVy LmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyk7CisrICBCdWZmZXJPZmZz ZXQgYm8gPSBlbWl0TG9hZDY0U3RhbnphKENhbGxSZWcsIGFkZHIpOworKyAgYWRkUGVuZGluZ0p1 bXAoYm8sIHRhcmdldCwgUmVsb2NhdGlvbktpbmQ6OkhBUkRDT0RFRCk7CisrICB4c19tdGN0cihD YWxsUmVnKTsKKysgIGFzX2JjdHIoTGlua0IpOworKyAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsK Kyt9CisrCisrQ29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbCh3YXNtOjpTeW1ib2xpY0Fk ZHJlc3MgdGFyZ2V0KSB7CisrICBtb3ZlUHRyKHRhcmdldCwgQ2FsbFJlZyk7CisrICByZXR1cm4g Y2FsbChDYWxsUmVnKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFdpdGhBQklO b1Byb2ZpbGVyKGNvbnN0IEFkZHJlc3MmIGZ1biwgQUJJVHlwZSByZXN1bHQpIHsKKysgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkUHRyKGZ1biwgc2NyYXRjaCk7CisrCisrICB1aW50 MzJfdCBzdGFja0FkanVzdDsKKysgIGNhbGxXaXRoQUJJUHJlKCZzdGFja0FkanVzdCk7CisrICBj YWxsKHNjcmF0Y2gpOworKyAgY2FsbFdpdGhBQklQb3N0KHN0YWNrQWRqdXN0LCByZXN1bHQpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFCSVByZSh1aW50MzJfdCogc3Rh Y2tBZGp1c3QsIGJvb2wgY2FsbEZyb21XYXNtKSB7CisrICBNT1pfQVNTRVJUKGluQ2FsbF8pOwor KyAgdWludDMyX3Qgc3RhY2tGb3JDYWxsID0gYWJpQXJnc18uc3RhY2tCeXRlc0NvbnN1bWVkU29G YXIoKTsKKysKKysgIC8vIFJlc2VydmUgcGxhY2UgZm9yIExSIHNhdmUuCisrICBzdGFja0ZvckNh bGwgKz0gc2l6ZW9mKGludHB0cl90KTsKKysKKysgIGlmIChkeW5hbWljQWxpZ25tZW50Xykgewor KyAgICBzdGFja0ZvckNhbGwgKz0gQ29tcHV0ZUJ5dGVBbGlnbm1lbnQoc3RhY2tGb3JDYWxsLCBB QklTdGFja0FsaWdubWVudCk7CisrICB9IGVsc2UgeworKyAgICB1aW50MzJfdCBhbGlnbm1lbnRB dFByb2xvZ3VlID0gY2FsbEZyb21XYXNtID8gc2l6ZW9mKHdhc206OkZyYW1lKSA6IDA7CisrICAg IHN0YWNrRm9yQ2FsbCArPSBDb21wdXRlQnl0ZUFsaWdubWVudCgKKysgICAgICAgIHN0YWNrRm9y Q2FsbCArIGZyYW1lUHVzaGVkKCkgKyBhbGlnbm1lbnRBdFByb2xvZ3VlLCBBQklTdGFja0FsaWdu bWVudCk7CisrICB9CisrCisrICAqc3RhY2tBZGp1c3QgPSBzdGFja0ZvckNhbGw7CisrICByZXNl cnZlU3RhY2soc3RhY2tGb3JDYWxsKTsKKysKKysgIC8vIFNhdmUgTFIuIFJlc3RvcmUgaXQgaW4g Y2FsbFdpdGhBQklQb3N0LgorKyAgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1w cyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgIHhzX21mbHIoc2NyYXRjaCk7CisrICAgIHN0b3JlUHRyKHNjcmF0Y2gsIEFkZHJlc3MoU3Rh Y2tQb2ludGVyLCBzdGFja0ZvckNhbGwgLSBzaXplb2YoaW50cHRyX3QpKSk7CisrICB9CisrCisr ICAvLyBQb3NpdGlvbiBhbGwgYXJndW1lbnRzLgorKyAgeworKyAgICBlbm91Z2hNZW1vcnlfICY9 IG1vdmVSZXNvbHZlcl8ucmVzb2x2ZSgpOworKyAgICBpZiAoIWVub3VnaE1lbW9yeV8pIHsKKysg ICAgICByZXR1cm47CisrICAgIH0KKysKKysgICAgTW92ZUVtaXR0ZXIgZW1pdHRlcigqdGhpcyk7 CisrICAgIGVtaXR0ZXIuZW1pdChtb3ZlUmVzb2x2ZXJfKTsKKysgICAgZW1pdHRlci5maW5pc2go KTsKKysgIH0KKysKKysgIGFzc2VydFN0YWNrQWxpZ25tZW50KEFCSVN0YWNrQWxpZ25tZW50KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFdpdGhBQklQb3N0KHVpbnQzMl90IHN0 YWNrQWRqdXN0LCBBQklUeXBlIHJlc3VsdCkgeworKyAgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIGxvYWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIHN0YWNrQWRqdXN0 IC0gc2l6ZW9mKGludHB0cl90KSksIHNjcmF0Y2gpOworKyAgICB4c19tdGxyKHNjcmF0Y2gpOwor KyAgfQorKworKyAgaWYgKGR5bmFtaWNBbGlnbm1lbnRfKSB7CisrICAgIC8vIFJlc3RvcmUgU1Ag ZnJvbSBzdGFjayAoYXMgc3RvcmVkIGluIHNldHVwVW5hbGlnbmVkQUJJQ2FsbCkuCisrICAgIGxv YWRQdHIoQWRkcmVzcyhTdGFja1BvaW50ZXIsIHN0YWNrQWRqdXN0KSwgU3RhY2tQb2ludGVyKTsK KysgICAgYWRqdXN0RnJhbWUoLXN0YWNrQWRqdXN0KTsKKysgIH0gZWxzZSB7CisrICAgIGZyZWVT dGFjayhzdGFja0FkanVzdCk7CisrICB9CisrCisrI2lmZGVmIERFQlVHCisrICBNT1pfQVNTRVJU KGluQ2FsbF8pOworKyAgaW5DYWxsXyA9IGZhbHNlOworKyNlbmRpZgorK30KKysKKysvLyBWYWx1 ZSBvcGVyYXRpb25zLgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVWYWx1ZShjb25zdCBWYWx1 ZU9wZXJhbmQmIHNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmFs dWVPcGVyYW5kJiBkZXN0KSB7CisrICBpZiAoc3JjLnZhbHVlUmVnKCkgIT0gZGVzdC52YWx1ZVJl ZygpKSB7CisrICAgIG1vdmVQdHIoc3JjLnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSk7Cisr ICB9CisrfQorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om1vdmVWYWx1ZShjb25zdCBWYWx1ZSYgc3Jj LCBjb25zdCBWYWx1ZU9wZXJhbmQmIGRlc3QpIHsKKysgIGlmICghc3JjLmlzR0NUaGluZygpKSB7 CisrICAgIG1vdmVQdHIoSW1tV29yZChzcmMuYXNSYXdCaXRzKCkpLCBkZXN0LnZhbHVlUmVnKCkp OworKyAgICByZXR1cm47CisrICB9CisrICBDb2RlT2Zmc2V0IG9mZiA9IG1vdldpdGhQYXRjaChJ bW1Xb3JkKHNyYy5hc1Jhd0JpdHMoKSksIGRlc3QudmFsdWVSZWcoKSk7CisrICB3cml0ZURhdGFS ZWxvY2F0aW9uKG9mZiwgc3JjKTsKKyt9CisrCisrLy8gQnJhbmNoIG9wZXJhdGlvbnMuCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVGVzdFZhbHVlKENvbmRpdGlvbiBjb25kLCBjb25zdCBW YWx1ZU9wZXJhbmQmIGxocywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgVmFsdWUmIHJocywgTGFiZWwqIGxhYmVsKSB7CisrICBNT1pfQVNTRVJUKGNvbmQgPT0g RXF1YWwgfHwgY29uZCA9PSBOb3RFcXVhbCk7CisrICBNT1pfQVNTRVJUKCFyaHMuaXNOYU4oKSk7 CisrCisrICBpZiAoIXJocy5pc0dDVGhpbmcoKSkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIE1PWl9BU1NFUlQobGhzLnZhbHVlUmVnKCkgIT0gc2NyYXRjaCk7CisrICAg IG1vdmVQdHIoSW1tV29yZChyaHMuYXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKKysgICAgYnJhbmNo UHRyKGNvbmQsIGxocy52YWx1ZVJlZygpLCBzY3JhdGNoLCBsYWJlbCk7CisrICB9IGVsc2Ugewor KyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIE1PWl9BU1NFUlQobGhzLnZhbHVl UmVnKCkgIT0gc2NyYXRjaCk7CisrICAgIG1vdmVWYWx1ZShyaHMsIFZhbHVlT3BlcmFuZChzY3Jh dGNoKSk7CisrICAgIGJyYW5jaFB0cihjb25kLCBsaHMudmFsdWVSZWcoKSwgc2NyYXRjaCwgbGFi ZWwpOworKyAgfQorK30KKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hUZXN0TmFOVmFsdWUo Q29uZGl0aW9uIGNvbmQsIGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0ZW1wLCBMYWJlbCogbGFiZWwpIHsK KysgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBNT1pfQVNTRVJUKHZhbC52YWx1ZVJlZygpICE9IHNj cmF0Y2gpOworKworKyAgLy8gU3RyaXAgdGhlIElFRUUgc2lnbiBiaXQgKExTQi1udW1iZXJpbmcg Yml0IDYzID0gUFBDLW51bWJlcmluZyBiaXQgMCkKKysgIC8vIHdpdGggcmxkaWNsIFNIPTAsIE1C PTE6IHJvdGF0ZSBieSB6ZXJvIChuby1vcCkgdGhlbiBrZWVwIGJpdHMgMS4uNjMgb2YKKysgIC8v IFBQQy1udW1iZXJpbmcsIGNsZWFyaW5nIGJpdCAwLiBSb3RhdGluZyBieSAxIGluc3RlYWQgd291 bGQgYWxzbyBzaGlmdAorKyAgLy8gdGhlIHF1aWV0LU5hTiBiaXQgb3V0IG9mIHBvc2l0aW9uIGFu ZCBjYXVzZSAxLjUgKDB4M0ZGOC4uLikgYW5kIE5hTgorKyAgLy8gKDB4N0ZGOC4uLikgdG8gY29s bGlkZSBhZnRlciBtYXNraW5nIOKAlCBidWcgMTk0MzcwNCBQUEM2NCByZWdyZXNzaW9uLgorKyAg YXNfcmxkaWNsKHRlbXAsIHZhbC52YWx1ZVJlZygpLCAwLCAxKTsKKysKKysgIC8vIExvYWQgY2Fu b25pY2FsIE5hTiAod2l0aCBzaWduIGJpdCAwKSBhbmQgc3RyaXAgaXRzIHNpZ24gYml0IHRvby4K KysgIHN0YXRpY19hc3NlcnQoSlM6OmRldGFpbDo6Q2Fub25pY2FsaXplZE5hTlNpZ25CaXQgPT0g MCk7CisrICBtb3ZlVmFsdWUoRG91YmxlVmFsdWUoSlM6OkdlbmVyaWNOYU4oKSksIFZhbHVlT3Bl cmFuZChzY3JhdGNoKSk7CisrICBhc19ybGRpY2woc2NyYXRjaCwgc2NyYXRjaCwgMCwgMSk7Cisr CisrICBicmFuY2hQdHIoY29uZCwgdGVtcCwgc2NyYXRjaCwgbGFiZWwpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpicmFuY2hQdHJJbk51cnNlcnlDaHVuayhDb25kaXRpb24gY29uZCwg UmVnaXN0ZXIgcHRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIHRlbXAsIExhYmVsKiBsYWJlbCkgeworKyAgTU9aX0FTU0VSVChjb25kID09 IEFzc2VtYmxlcjo6RXF1YWwgfHwgY29uZCA9PSBBc3NlbWJsZXI6Ok5vdEVxdWFsKTsKKysgIE1P Wl9BU1NFUlQocHRyICE9IHRlbXApOworKyAgTU9aX0FTU0VSVCh0ZW1wICE9IEludmFsaWRSZWcp OworKworKyAgYW5kUHRyKEltbTMyKGludDMyX3QofmdjOjpDaHVua01hc2spKSwgcHRyLCB0ZW1w KTsKKysgIGJyYW5jaFB0cihJbnZlcnRDb25kaXRpb24oY29uZCksIEFkZHJlc3ModGVtcCwgZ2M6 OkNodW5rU3RvcmVCdWZmZXJPZmZzZXQpLAorKyAgICAgICAgICAgIEltbVdvcmQoMCksIGxhYmVs KTsKKyt9Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YnJhbmNoVmFsdWVJc051cnNlcnlDZWxsKENv bmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWYWx1ZU9wZXJhbmQgdmFsdWUsIFJlZ2lzdGVyIHRlbXAsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBsYWJlbCkgeworKyAgYnJhbmNo VmFsdWVJc051cnNlcnlDZWxsSW1wbChjb25kLCB2YWx1ZSwgdGVtcCwgbGFiZWwpOworK30KKysK KysvLyBQYXRjaGluZyAvIG5lYXIgYWRkcmVzcyBvcGVyYXRpb25zLgorK0NvZGVPZmZzZXQgTWFj cm9Bc3NlbWJsZXI6Om5vcFBhdGNoYWJsZVRvQ2FsbCgpIHsKKysgIC8vIEVtaXQgMTAgbm9wcyB0 aGF0IGNhbiBiZSBwYXRjaGVkIHRvIGEgY2FsbCBzdGFuemE6CisrICAvLyA4IGxvYWQ2NCBub3Bz ICsgbXRjdHIgbm9wICsgYmN0cmwgbm9wCisrICAvLyBSZXR1cm4gb2Zmc2V0IEFGVEVSIHRoZSBz dGFuemEgKD0gdGhlIHJldHVybiBhZGRyZXNzKS4KKysgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtO b1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB3 cml0ZUluc3QoTm9wSW5zdCk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB3cml0ZUluc3Qo Tm9wSW5zdCk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7 CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICB3cml0 ZUluc3QoTm9wSW5zdCk7CisrICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICBtX2J1ZmZlci5sZWF2 ZU5vUG9vbCgpOworKyAgcmV0dXJuIENvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKTsKKyt9Cisr Q29kZU9mZnNldCBNYWNyb0Fzc2VtYmxlcjo6bW92ZU5lYXJBZGRyZXNzV2l0aFBhdGNoKFJlZ2lz dGVyIGRlc3QpIHsKKysgIENvZGVPZmZzZXQgb2Zmc2V0KGN1cnJlbnRPZmZzZXQoKSk7CisrICBl bWl0TG9hZDY0U3RhbnphKGRlc3QsIDApOworKyAgcmV0dXJuIG9mZnNldDsKKyt9CisrLy8gc3Rh dGljCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hOZWFyQWRkcmVzc01vdmUoQ29kZUxvY2F0 aW9uTGFiZWwgbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCkgeworKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5z dHJ1Y3Rpb24qKWxvYy5yYXcoKTsKKysgIFVwZGF0ZUxvYWQ2NFZhbHVlKGluc3QsICh1aW50NjRf dCl0YXJnZXQucmF3KCkpOworK30KKysKKysvLyBSZXR1cm4gYWRkcmVzcyBvcGVyYXRpb25zIChs aW5rIHJlZ2lzdGVyIGFyY2hpdGVjdHVyZXMpLgorKy8vCisrLy8gTm90ZTogdGhlc2UgTVVTVCBk ZWNyZW1lbnQgU1AgYnkgZXhhY3RseSA4IGJ5dGVzLiB3YXNtOjpGcmFtZSBpcyAxNiBieXRlcwor Ky8vIChjYWxsZXJGUF8gKyByZXR1cm5BZGRyZXNzXykgYW5kIEdlbmVyYXRlQ2FsbGFibGVQcm9s b2d1ZSBwYWlycyB0aGlzIHdpdGgKKysvLyBwdXNoKEZyYW1lUG9pbnRlcikgdG8gbWF0Y2ggdGhh dCBsYXlvdXQgZXhhY3RseSDigJQgYSAxNi1ieXRlIGRlY3JlbWVudCBoZXJlCisrLy8gd291bGQg aW5zZXJ0IDggYnl0ZXMgb2YgcGFkZGluZyBhbmQgYnJlYWsgRlAtY2hhaW4gdW53aW5kaW5nLiBU aGUgOC1ieXRlCisrLy8gaW50ZXJtZWRpYXRlIG1pc2FsaWdubWVudCBiZXR3ZWVuIHRoaXMgc2F2 ZSBhbmQgdGhlIGZvbGxvd2luZyBwdXNoKEZQKSBpcworKy8vIG5ldmVyIG9ic2VydmVkIGJ5IGEg QyBjYWxsIChubyBpbnRlcnZlbmluZyB0cmFuc2l0aW9uKSwgYW5kIGFueSBjYWxsZXIgdGhhdAor Ky8vIGRvZXMgbWFrZSBhIEMgY2FsbCBhZnRlciBwdXNoUmV0dXJuQWRkcmVzcyByb3V0ZXMgdGhy b3VnaAorKy8vIHNldHVwVW5hbGlnbmVkQUJJQ2FsbCB3aGljaCByZS1hbGlnbnMuCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6cHVzaFJldHVybkFkZHJlc3MoKSB7CisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgeHNfbWZscihzY3JhdGNoKTsKKysgIHB1c2goc2NyYXRjaCk7CisrfQorK3Zv aWQgTWFjcm9Bc3NlbWJsZXI6OnBvcFJldHVybkFkZHJlc3MoKSB7CisrICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgcG9wKHNjcmF0Y2gpOworKyAgeHNfbXRscihzY3JhdGNoKTsKKyt9Cisr CisrLy8gQUJJIHNldHVwLgorK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnNldHVwVW5hbGlnbmVkQUJJ Q2FsbChSZWdpc3RlciBzY3JhdGNoKSB7CisrICBNT1pfQVNTRVJUKCFJc0NvbXBpbGluZ1dhc20o KSwgIndhc20gc2hvdWxkIG9ubHkgdXNlIGFsaWduZWQgQUJJIGNhbGxzIik7CisrICBzZXR1cE5h dGl2ZUFCSUNhbGwoKTsKKysgIGR5bmFtaWNBbGlnbm1lbnRfID0gdHJ1ZTsKKysKKysgIG1vdmVQ dHIoU3RhY2tQb2ludGVyLCBzY3JhdGNoKTsKKysKKysgIC8vIEZvcmNlIHNwIHRvIGJlIGFsaWdu ZWQuCisrICBzdWJQdHIoSW1tMzIoc2l6ZW9mKHVpbnRwdHJfdCkpLCBTdGFja1BvaW50ZXIpOwor KyAgYW5kUHRyKEltbTMyKH4oQUJJU3RhY2tBbGlnbm1lbnQgLSAxKSksIFN0YWNrUG9pbnRlcik7 CisrICBzdG9yZVB0cihzY3JhdGNoLCBBZGRyZXNzKFN0YWNrUG9pbnRlciwgMCkpOworK30KKysK KysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysvLyBBcml0aG1ldGljIGhlbHBlcnMuCisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6ZmxleGlibGVEaXZNb2QzMihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIGRpdk91dHB1dCwgUmVn aXN0ZXIgcmVtT3V0cHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBpc1Vuc2lnbmVkLCBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmKSB7CisrICBNT1pfQVNTRVJU KGxocyAhPSBkaXZPdXRwdXQgJiYgbGhzICE9IHJlbU91dHB1dCwgImxocyBpcyBwcmVzZXJ2ZWQi KTsKKysgIE1PWl9BU1NFUlQocmhzICE9IGRpdk91dHB1dCAmJiByaHMgIT0gcmVtT3V0cHV0LCAi cmhzIGlzIHByZXNlcnZlZCIpOworKworKyAgLy8gUFBDNjQgaGFzIG5vIG1vZHVsdXMgaW5zdHJ1 Y3Rpb24uIENvbXB1dGU6IHJlbSA9IGxocyAtIChsaHMvcmhzKSpyaHMKKysgIC8vIFBQQzY0IGRp dncoSU5UMzJfTUlOLCAtMSkgaXMgdW5kZWZpbmVkOyBxdW90aWVudD1JTlQzMl9NSU4sIHJlbWFp bmRlcj0wLgorKyAgTGFiZWwgZG9uZTsKKysgIGlmICghaXNVbnNpZ25lZCkgeworKyAgICBMYWJl bCBub3RNaW5PdmVyZmxvdzsKKysgICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxo cywgSW1tV29yZChJTlQzMl9NSU4pLCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBicmFuY2hQdHIo QXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5vdE1pbk92ZXJmbG93KTsK KysgICAgbW92ZTMyKEltbTMyKElOVDMyX01JTiksIGRpdk91dHB1dCk7CisrICAgIG1vdmUzMihJ bW0zMigwKSwgcmVtT3V0cHV0KTsKKysgICAganVtcCgmZG9uZSk7CisrICAgIGJpbmQoJm5vdE1p bk92ZXJmbG93KTsKKysgIH0KKysgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgIGFzX2Rpdnd1KGRp dk91dHB1dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgYXNfZGl2dyhkaXZPdXRwdXQs IGxocywgcmhzKTsKKysgIH0KKysgIGFzX2V4dHN3KGRpdk91dHB1dCwgZGl2T3V0cHV0KTsKKysg IGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAgIGFzX21v ZHV3KHJlbU91dHB1dCwgbGhzLCByaHMpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX21vZHN3 KHJlbU91dHB1dCwgbGhzLCByaHMpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBhc19tdWxs dyhyZW1PdXRwdXQsIGRpdk91dHB1dCwgcmhzKTsKKysgICAgYXNfc3ViZihyZW1PdXRwdXQsIHJl bU91dHB1dCwgbGhzKTsKKysgIH0KKysgIGFzX2V4dHN3KHJlbU91dHB1dCwgcmVtT3V0cHV0KTsK KysgIGJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpzaGlmdEluZGV4 MzJBbmRBZGQoUmVnaXN0ZXIgaW5kZXhUZW1wMzIsIGludCBzaGlmdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcG9pbnRlcikgeworKyAgaWYgKElz U2hpZnRJblNjYWxlUmFuZ2Uoc2hpZnQpKSB7CisrICAgIGNvbXB1dGVFZmZlY3RpdmVBZGRyZXNz KAorKyAgICAgICAgQmFzZUluZGV4KHBvaW50ZXIsIGluZGV4VGVtcDMyLCBTaGlmdFRvU2NhbGUo c2hpZnQpKSwgcG9pbnRlcik7CisrICAgIHJldHVybjsKKysgIH0KKysgIGxzaGlmdDMyKEltbTMy KHNoaWZ0KSwgaW5kZXhUZW1wMzIpOworKyAgYWRkUHRyKGluZGV4VGVtcDMyLCBwb2ludGVyKTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydEludDY0VG9Eb3VibGUoUmVnaXN0 ZXI2NCBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgYXNfbXR2c3JkKGRlc3QsIHNyYy5y ZWcpOworKyAgYXNfZmNmaWQoZGVzdCwgZGVzdCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Om5lYXJieUludERvdWJsZShSb3VuZGluZ01vZGUgbW9kZSwgRmxvYXRSZWdpc3RlciBzcmMs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXIgZGVz dCkgeworKyAgc3dpdGNoIChtb2RlKSB7CisrICAgIGNhc2UgUm91bmRpbmdNb2RlOjpOZWFyZXN0 VGllc1RvRXZlbjogeworKyAgICAgIC8vIFBQQzY0J3MgZnJpbiByb3VuZHMgdGllcyBhd2F5IGZy b20gemVybywgTk9UIHRvIGV2ZW4gKElTQSB2My4xKS4KKysgICAgICAvLyBVc2UgZmN0aWQrZmNm aWQgd2hpY2ggdXNlcyBGUFNDUiBSTiAoZGVmYXVsdCA9IHJvdW5kLXRvLW5lYXJlc3QtZXZlbiku CisrICAgICAgLy8gR3VhcmQ6IGlmIHxzcmN8ID49IDJeNTIsIHZhbHVlIGlzIGFscmVhZHkgaW50 ZWdyYWwgKG9yIE5hTi9JbmYpIOKAlAorKyAgICAgIC8vIGp1c3QgY29weSBzcmMuIFRoaXMgcHJl c2VydmVzIE5hTiwgSW5mLCBhbmQgLTAuCisrICAgICAgLy8gQ2hlY2sgdmlhIGludGVnZXIgZXhw b25lbnQgZXh0cmFjdGlvbiB0byBhdm9pZCBGUCB0ZW1wIGNvbmZsaWN0cy4KKysgICAgICBMYWJl bCBkb25lOworKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysg ICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1vdmVEb3Vi bGUoc3JjLCBTY3JhdGNoRG91YmxlUmVnKTsKKysgICAgICBpZiAoc3JjICE9IGRlc3QpIHsKKysg ICAgICAgIG1vdmVEb3VibGUoc3JjLCBkZXN0KTsKKysgICAgICB9CisrICAgICAgaWYgKEhhc1BP V0VSOSgpKSB7CisrICAgICAgICAvLyB4c3hleHBkcCBsYXlzIHRoZSAxMS1iaXQgYmlhc2VkIGV4 cG9uZW50IGluIFhULmR3MCB3aXRoIHRoZQorKyAgICAgICAgLy8gcmVzdCB6ZXJvZWQsIHNvIG1m dnNyZCByZWFkcyBpdCBkaXJlY3RseSDigJQgZHJvcHMgdGhlCisrICAgICAgICAvLyBzcmRpK2Fu ZGkuIG1hc2tpbmcgcGFpci4KKysgICAgICAgIFNjcmF0Y2hTaW1kMTI4U2NvcGUgZXhwU2NyYXRj aCgqdGhpcyk7CisrICAgICAgICBhc194c3hleHBkcChleHBTY3JhdGNoLCBTY3JhdGNoRG91Ymxl UmVnKTsKKysgICAgICAgIGFzX21mdnNyZChzY3JhdGNoLCBleHBTY3JhdGNoKTsKKysgICAgICB9 IGVsc2UgeworKyAgICAgICAgYXNfbWZ2c3JkKHNjcmF0Y2gsIFNjcmF0Y2hEb3VibGVSZWcpOwor KyAgICAgICAgeF9zcmRpKHNjcmF0Y2gsIHNjcmF0Y2gsIDUyKTsKKysgICAgICAgIGFzX2FuZGlf cmMoc2NyYXRjaCwgc2NyYXRjaCwgMHg3RkYpOworKyAgICAgIH0KKysgICAgICAvLyBCaWFzZWQg ZXhwb25lbnQgPj0gMTA3NSAoPSAxMDIzKzUyKSBtZWFucyB8dmFsfCA+PSAyXjUyLgorKyAgICAg IC8vIEFsc28gY2F0Y2hlcyBJbmYgKGV4cD0yMDQ3KSBhbmQgTmFOIChleHA9MjA0NykuCisrICAg ICAgbWFfY21wKHNjcmF0Y2gsIEltbTMyKDEwNzUpLCBBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JF cXVhbCk7CisrICAgICAgbWFfYihBc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgJmRvbmUp OworKyAgICAgIGFzX2ZjdGlkKGRlc3QsIFNjcmF0Y2hEb3VibGVSZWcpOworKyAgICAgIGFzX2Zj ZmlkKGRlc3QsIGRlc3QpOworKyAgICAgIGFzX2ZjcHNnbihkZXN0LCBTY3JhdGNoRG91YmxlUmVn LCBkZXN0KTsKKysgICAgICBiaW5kKCZkb25lKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIFJvdW5kaW5nTW9kZTo6VG93YXJkc1plcm86CisrICAgICAgYXNfZnJpeihkZXN0LCBz cmMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFJvdW5kaW5nTW9kZTo6VXA6CisrICAgICAg YXNfZnJpcChkZXN0LCBzcmMpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFJvdW5kaW5nTW9k ZTo6RG93bjoKKysgICAgICBhc19mcmltKGRlc3QsIHNyYyk7CisrICAgICAgYnJlYWs7CisrICAg IGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIHJvdW5kaW5nIG1vZGUiKTsK KysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6bmVhcmJ5SW50RmxvYXQzMihSb3Vu ZGluZ01vZGUgbW9kZSwgRmxvYXRSZWdpc3RlciBzcmMsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgIC8vIFBQQyBGUCByb3Vu ZGluZyBpbnN0cnVjdGlvbnMgb3BlcmF0ZSBvbiBkb3VibGUtcHJlY2lzaW9uLgorKyAgLy8gRm9y IHNpbmdsZS1wcmVjaXNpb24sIHdlIHJvdW5kIGFzIGRvdWJsZSB0aGVuIHJvdW5kIGJhY2sgdG8g c2luZ2xlLgorKyAgLy8gVGhlIGZyc3AgaW5zdHJ1Y3Rpb24gaGFuZGxlcyB0aGUgZG91YmxlLT5z aW5nbGUgY29udmVyc2lvbi4KKysgIG5lYXJieUludERvdWJsZShtb2RlLCBzcmMsIGRlc3QpOwor KyAgYXNfZnJzcChkZXN0LCBkZXN0KTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gRmFyIGp1bXAg c3VwcG9ydC4KKysKKytDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpmYXJKdW1wV2l0aFBhdGNo KCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIC8vIHN0YW56YSg4KSArIG10 Y3RyICsgYmN0ciA9IDEwIGluc3RydWN0aW9ucy4KKysgIENvZGVPZmZzZXQgbG9hZE9mZnNldChj dXJyZW50T2Zmc2V0KCkpOworKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBhdGNoYWJs ZUJyYW5jaEluc25zKTsKKysgIGVtaXRMb2FkNjRTdGFuemEoc2NyYXRjaCwgMCk7CisrICB4c19t dGN0cihzY3JhdGNoKTsKKysgIGFzX2JjdHIoKTsKKysgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7 CisrCisrICByZXR1cm4gbG9hZE9mZnNldDsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisrdm9pZCBNYWNy b0Fzc2VtYmxlcjo6Zmx1c2goKSB7IEFzc2VtYmxlcjo6Zmx1c2goKTsgfQorKworKy8vIFdhc20g c3VwcG9ydC4KKysKKytGYXVsdGluZ0NvZGVPZmZzZXQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcmFw SW5zdHJ1Y3Rpb24oKSB7CisrICBtX2J1ZmZlci5mbHVzaFBvb2woKTsgIC8vIHNlZSBjb21tZW50 IGluIHdhc21Mb2FkSW1wbAorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbyA9IEZhdWx0aW5nQ29k ZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOworKyAgeHNfdHJhcCgpOworKyAgcmV0dXJuIGZjbzsK Kyt9CisrCisrLy8gUFBDNjQgU2xvd0NhbGxNYXJrZXI6IGBvcmkgcjAsIHIwLCAwYCAtLSBhIE5P UC1saWtlIGluc3RydWN0aW9uCisrLy8gdGhhdCB3b24ndCBhcHBlYXIgaW4gbm9ybWFsIGNvZGUg Z2VuZXJhdGlvbi4KKysvLyBvcmkgcjAsIHIwLCAwID0gMHg2MDAwMDAwMCAtLSB0aGF0J3MgYWN0 dWFsbHkgUFBDX25vcC4KKysvLyBVc2UgYSBkaXN0aW5ndWlzaGFibGUgZW5jb2Rpbmc6IGBvcmkg cjEyLCByMTIsIDBgID0gMHg2MThDMDAwMAorK3N0YXRpYyBjb25zdCBpbnQzMl90IFNsb3dDYWxs TWFya2VyID0gMHg2MThDMDAwMDsKKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtTWFya0Nh bGxBc1Nsb3coKSB7CisrICAvLyBFbWl0OiBvcmkgcjEyLCByMTIsIDAKKysgIGFzX29yaShDYWxs UmVnLCBDYWxsUmVnLCAwKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNoZWNr U2xvd0NhbGxzaXRlKFJlZ2lzdGVyIHJhXywgTGFiZWwqIG5vdFNsb3csCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHRlbXAxLCBSZWdpc3RlciB0 ZW1wMikgeworKyAgTU9aX0FTU0VSVChyYV8gIT0gdGVtcDIpOworKyAgbG9hZDMyKEFkZHJlc3Mo cmFfLCAwKSwgdGVtcDIpOworKyAgYnJhbmNoMzIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcDIs IEltbTMyKFNsb3dDYWxsTWFya2VyKSwgbm90U2xvdyk7CisrfQorKworK0NvZGVPZmZzZXQgTWFj cm9Bc3NlbWJsZXI6Ondhc21NYXJrZWRTbG93Q2FsbChjb25zdCB3YXNtOjpDYWxsU2l0ZURlc2Mm IGRlc2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFJlZ2lzdGVyIHJlZykgeworKyAgQ29kZU9mZnNldCBvZmZzZXQgPSBjYWxsKGRlc2MsIHJl Zyk7CisrICB3YXNtTWFya0NhbGxBc1Nsb3coKTsKKysgIHJldHVybiBvZmZzZXQ7CisrfQorKwor Ky8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKy8vIEFkZGl0aW9uYWwgc3RhY2sgb3BlcmF0aW9ucy4KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpQdXNoKEZsb2F0UmVnaXN0ZXIgZikgeworKyAgcHVzaChmKTsKKysgIGFk anVzdEZyYW1lKGludDMyX3Qoc2l6ZW9mKGRvdWJsZSkpKTsKKyt9Cisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6UG9wKEZsb2F0UmVnaXN0ZXIgZikgeworKyAgcG9wKGYpOworKyAgYWRqdXN0RnJhbWUo LWludDMyX3Qoc2l6ZW9mKGRvdWJsZSkpKTsKKyt9Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6UG9w KGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsKSB7CisrICBwb3BWYWx1ZSh2YWwpOworKyAgYWRqdXN0 RnJhbWUoLWludDMyX3Qoc2l6ZW9mKFZhbHVlKSkpOworK30KKysKKysvLyBzdGF0aWMKKytzaXpl X3QgTWFjcm9Bc3NlbWJsZXI6OlB1c2hSZWdzSW5NYXNrU2l6ZUluQnl0ZXMoTGl2ZVJlZ2lzdGVy U2V0IHNldCkgeworKyAgcmV0dXJuIHNldC5ncHJzKCkuc2l6ZSgpICogc2l6ZW9mKGludHB0cl90 KSArIHNldC5mcHVzKCkuZ2V0UHVzaFNpemVJbkJ5dGVzKCk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6OnN0b3JlUmVnc0luTWFzayhMaXZlUmVnaXN0ZXJTZXQgc2V0LCBBZGRyZXNzIGRl c3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0 Y2gpIHsKKysgIEZsb2F0UmVnaXN0ZXJTZXQgZnB1U2V0KHNldC5mcHVzKCkucmVkdWNlU2V0Rm9y UHVzaCgpKTsKKysgIG1vemlsbGE6OkRlYnVnT25seTx1bnNpZ25lZD4gbnVtRnB1ID0gZnB1U2V0 LnNpemUoKTsKKysgIG1vemlsbGE6OkRlYnVnT25seTxpbnQzMl90PiBkaWZmRiA9IGZwdVNldC5n ZXRQdXNoU2l6ZUluQnl0ZXMoKTsKKysgIG1vemlsbGE6OkRlYnVnT25seTxpbnQzMl90PiBkaWZm RyA9IHNldC5ncHJzKCkuc2l6ZSgpICogc2l6ZW9mKGludHB0cl90KTsKKysKKysgIE1PWl9BU1NF UlQoZGVzdC5vZmZzZXQgPj0gZGlmZkcgKyBkaWZmRik7CisrCisrICBmb3IgKEdlbmVyYWxSZWdp c3RlckJhY2t3YXJkSXRlcmF0b3IgaXRlcihzZXQuZ3BycygpKTsgaXRlci5tb3JlKCk7ICsraXRl cikgeworKyAgICBkaWZmRyAtPSBzaXplb2YoaW50cHRyX3QpOworKyAgICBkZXN0Lm9mZnNldCAt PSBzaXplb2YoaW50cHRyX3QpOworKyAgICBzdG9yZVB0cigqaXRlciwgZGVzdCk7CisrICB9Cisr ICBNT1pfQVNTRVJUKGRpZmZHID09IDApOworKworKyAgLy8gTmF0dXJhbCBwZXIta2luZCBzbG90 LiBTZWUgUHVzaFJlZ3NJbk1hc2sgY29tbWVudC4KKysgIGZvciAoRmxvYXRSZWdpc3RlckJhY2t3 YXJkSXRlcmF0b3IgaXRlcihmcHVTZXQpOyBpdGVyLm1vcmUoKTsgKytpdGVyKSB7CisrICAgIEZs b2F0UmVnaXN0ZXIgcmVnID0gKml0ZXI7CisrICAgIGRpZmZGIC09IHJlZy5zaXplKCk7CisrICAg IG51bUZwdSAtPSAxOworKyAgICBkZXN0Lm9mZnNldCAtPSByZWcuc2l6ZSgpOworKyAgICBpZiAo cmVnLmlzU2ltZDEyOCgpKSB7CisrICAgICAgc3RvcmVVbmFsaWduZWRTaW1kMTI4KHJlZywgZGVz dCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgc3RvcmVEb3VibGUocmVnLmFzRG91YmxlKCksIGRl c3QpOworKyAgICB9CisrICB9CisrICBNT1pfQVNTRVJUKGRpZmZGID09IDApOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpmcmVlU3RhY2tUbyh1aW50MzJfdCBmcmFtZVB1c2hlZCkgewor KyAgTU9aX0FTU0VSVChmcmFtZVB1c2hlZCA8PSBmcmFtZVB1c2hlZF8pOworKyAgLy8gU1AgPSBG UCAtIGZyYW1lUHVzaGVkCisrICBtb3ZlUHRyKEZyYW1lUG9pbnRlciwgU3RhY2tQb2ludGVyKTsK KysgIGlmIChmcmFtZVB1c2hlZCkgeworKyAgICBzdWJQdHIoSW1tMzIoZnJhbWVQdXNoZWQpLCBT dGFja1BvaW50ZXIpOworKyAgfQorKyAgZnJhbWVQdXNoZWRfID0gZnJhbWVQdXNoZWQ7CisrfQor KworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKy8vIEFkZGl0aW9uYWwgY2FsbCAvIHBhdGNoIG9wZXJhdGlvbnMuCisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbChKaXRDb2RlKiBjKSB7CisrICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKworKyAgdWludDY0X3QgYWRkciA9IHVpbnRwdHJfdChjLT5yYXcoKSk7 CisrICBCdWZmZXJPZmZzZXQgYm8gPSBlbWl0TG9hZDY0U3RhbnphKHNjcmF0Y2gsIGFkZHIpOwor KyAgYWRkUGVuZGluZ0p1bXAoYm8sIEltbVB0cihjLT5yYXcoKSksIFJlbG9jYXRpb25LaW5kOjpK SVRDT0RFKTsKKysKKysgIGNhbGxKaXROb1Byb2ZpbGVyKHNjcmF0Y2gpOworK30KKysKKytDb2Rl T2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aFBhdGNoKCkgeworKyAgLy8gRW1pdCBhIENh bGxUYWctc2l6ZWQgc3RhbnphIG9mIG5vcHMuIFdpbGwgYmUgcGF0Y2hlZCBieSBwYXRjaENhbGwu CisrICAvLyBSZXR1cm4gb2Zmc2V0IEFGVEVSIHRoZSBzdGFuemEgKD0gdGhlIHJldHVybiBhZGRy ZXNzIHdoZW4gYmwgZXhlY3V0ZXMpLgorKyAgbV9idWZmZXIuZW50ZXJOb1Bvb2woa05vUG9vbFBh dGNoYWJsZUJyYW5jaEluc25zKTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5z dChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0 KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdy aXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIHdyaXRlSW5zdChO b3BJbnN0KTsKKysgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgIG1fYnVmZmVyLmxlYXZlTm9Qb29s KCk7CisrICByZXR1cm4gQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpOworK30KKysKKyt2b2lk IE1hY3JvQXNzZW1ibGVyOjpwYXRjaENhbGwodWludDMyX3QgY2FsbGVyT2Zmc2V0LCB1aW50MzJf dCBjYWxsZWVPZmZzZXQpIHsKKysgIC8vIGNhbGxlck9mZnNldCBwb2ludHMgQUZURVIgdGhlIDEw LWluc3RydWN0aW9uIHN0YW56YSAodGhlIHJldHVybiBhZGRyZXNzKS4KKysgIC8vIFN1YnRyYWN0 IHRvIGZpbmQgdGhlIHN0YW56YSBzdGFydC4gVGhlIGBibGAgZ29lcyBhdCBpbnN0WzldLgorKyAg dWludDMyX3Qgc3RhbnphU3RhcnQgPSBjYWxsZXJPZmZzZXQgLSAxMCAqIHNpemVvZih1aW50MzJf dCk7CisrICBJbnN0cnVjdGlvbiogaTAgPSAoSW5zdHJ1Y3Rpb24qKShtX2J1ZmZlci5nZXRJbnN0 KEJ1ZmZlck9mZnNldChzdGFuemFTdGFydCkpKTsKKysgIC8vIGJsIG9mZnNldCBpcyByZWxhdGl2 ZSB0byBpbnN0WzldLCB3aGljaCBpcyBhdCBzdGFuemFTdGFydCArIDM2LgorKyAgaW50cHRyX3Qg YmxBZGRyID0gKGludHB0cl90KXN0YW56YVN0YXJ0ICsgOSAqIChpbnRwdHJfdClzaXplb2YodWlu dDMyX3QpOworKyAgaW50cHRyX3QgY2FsbE9mZnNldCA9IChpbnRwdHJfdCljYWxsZWVPZmZzZXQg LSBibEFkZHI7CisrICBpZiAoSk9mZkltbTI2OjpJc0luUmFuZ2UoY2FsbE9mZnNldCkpIHsKKysg ICAgaTBbMF0ubWFrZU5vcCgpOworKyAgICBpMFsxXS5tYWtlTm9wKCk7CisrICAgIGkwWzJdLm1h a2VOb3AoKTsKKysgICAgaTBbM10ubWFrZU5vcCgpOworKyAgICBpMFs0XS5tYWtlTm9wKCk7Cisr ICAgIGkwWzVdLm1ha2VOb3AoKTsKKysgICAgaTBbNl0ubWFrZU5vcCgpOworKyAgICBpMFs3XS5t YWtlTm9wKCk7CisrICAgIGkwWzhdLm1ha2VOb3AoKTsKKysgICAgaTBbOV0uc2V0RGF0YShQUENf YiB8IEpPZmZJbW0yNihjYWxsT2Zmc2V0KS5lbmNvZGUoKSB8IExpbmtCKTsKKysgIH0gZWxzZSB7 CisrICAgIGFkZExvbmdKdW1wKEJ1ZmZlck9mZnNldChzdGFuemFTdGFydCksIEJ1ZmZlck9mZnNl dChjYWxsZWVPZmZzZXQpKTsKKysgICAgV3JpdGVMb2FkNjRJbnN0cnVjdGlvbnMoaTAsIFNlY29u ZFNjcmF0Y2hSZWcsIExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICBpMFs4XS5tYWtl T3BfbXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgIGkwWzldLm1ha2VPcF9iY3RyKExpbmtC KTsKKysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hGYXJKdW1wKENvZGVP ZmZzZXQgZmFySnVtcCwgdWludDMyX3QgdGFyZ2V0T2Zmc2V0KSB7CisrICBJbnN0cnVjdGlvbiog aW5zdCA9CisrICAgICAgKEluc3RydWN0aW9uKiltX2J1ZmZlci5nZXRJbnN0KEJ1ZmZlck9mZnNl dChmYXJKdW1wLm9mZnNldCgpKSk7CisrICAvLyBFeHRyYWN0IHRoZSBkZXN0aW5hdGlvbiByZWdp c3RlciBmcm9tIHRoZSBleGlzdGluZyBzdGFuemEuIEJvdGggc2hhcGVzCisrICAvLyBlbmNvZGUg ckQgYXQgTEUgYml0cyBbMjEuLjI1XSBvZiB0aGVpciBmaXJzdCAicmVnaXN0ZXItdG91Y2hpbmci IHNsb3Q6CisrICAvLyBQOCA9IG1mbHIgckQgYXQgWzJdLCBQOSsgPSBhZGRwY2lzIHJEIGF0IFsw XS4gTWFqb3Igb3Bjb2RlIG9mIHNsb3QgWzBdCisrICAvLyBkaXN0aW5ndWlzaGVzICgzMSA9IG1m c3ByLCAxOSA9IGFkZHBjaXMpLgorKyAgdWludDMyX3QgaTAgPSBpbnN0WzBdLmVuY29kZSgpOwor KyAgdWludDMyX3QgcmVnQ29kZSA9ICgoKGkwID4+IDI2KSAmIDB4M2YpID09IDE5KQorKyAgICAg ICAgICAgICAgICAgICAgICAgICA/ICgoaTAgPj4gMjEpICYgMHgxZikKKysgICAgICAgICAgICAg ICAgICAgICAgICAgOiAoKGluc3RbMl0uZW5jb2RlKCkgPj4gMjEpICYgMHgxZik7CisrICBSZWdp c3RlciByZWcgPSBSZWdpc3Rlcjo6RnJvbUNvZGUocmVnQ29kZSk7CisrICBXcml0ZUxvYWQ2NElu c3RydWN0aW9ucyhpbnN0LCByZWcsIExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgYWRk TG9uZ0p1bXAoQnVmZmVyT2Zmc2V0KGZhckp1bXAub2Zmc2V0KCkpLCBCdWZmZXJPZmZzZXQodGFy Z2V0T2Zmc2V0KSk7CisrfQorKworKy8vIHN0YXRpYworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnBh dGNoRmFySnVtcCh1aW50OF90KiBmYXJKdW1wLCB1aW50OF90KiB0YXJnZXQpIHsKKysgIFVwZGF0 ZUxvYWQ2NFZhbHVlKChJbnN0cnVjdGlvbiopZmFySnVtcCwgKHVpbnQ2NF90KSh1aW50cHRyX3Qp dGFyZ2V0KTsKKysgIEZsdXNoSUNhY2hlKGZhckp1bXAsIDggKiBzaXplb2YoSW5zdHJ1Y3Rpb24p KTsKKyt9CisrCisrLy8gc3RhdGljCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hOb3BUb0Nh bGwodWludDhfdCogY2FsbHNpdGUsIHVpbnQ4X3QqIHRhcmdldCkgeworKyAgLy8gY2FsbHNpdGUg cG9pbnRzIEFGVEVSIHRoZSAxMC1pbnN0cnVjdGlvbiBzdGFuemEuIFN1YnRyYWN0IHRvIGZpbmQg c3RhcnQuCisrICBJbnN0cnVjdGlvbiogaW5zdCA9IChJbnN0cnVjdGlvbiopY2FsbHNpdGUgLSAx MDsKKysgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKGluc3QsIFNlY29uZFNjcmF0Y2hSZWcsICh1 aW50NjRfdCkodWludHB0cl90KXRhcmdldCk7CisrICBpbnN0WzhdLm1ha2VPcF9tdGN0cihTZWNv bmRTY3JhdGNoUmVnKTsKKysgIGluc3RbOV0ubWFrZU9wX2JjdHIoTGlua0IpOworKyAgRmx1c2hJ Q2FjaGUoaW5zdCwgMTAgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyt9CisrCisrLy8gc3RhdGlj Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hDYWxsVG9Ob3AodWludDhfdCogY2FsbHNpdGUp IHsKKysgIC8vIGNhbGxzaXRlIHBvaW50cyBBRlRFUiB0aGUgMTAtaW5zdHJ1Y3Rpb24gc3Rhbnph LiBTdWJ0cmFjdCB0byBmaW5kIHN0YXJ0LgorKyAgSW5zdHJ1Y3Rpb24qIGluc3QgPSAoSW5zdHJ1 Y3Rpb24qKWNhbGxzaXRlIC0gMTA7CisrICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsK KysgICAgaW5zdFtpXS5tYWtlTm9wKCk7CisrICB9CisrICBGbHVzaElDYWNoZShpbnN0LCAxMCAq IHNpemVvZihJbnN0cnVjdGlvbikpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpwYXRj aE1vdmUzMihDb2RlT2Zmc2V0IG9mZnNldCwgSW1tMzIgbikgeworKyAgLy8gUGF0Y2ggYW4gOC1p bnN0cnVjdGlvbiBsb2FkNjQgc2VxdWVuY2Ugd2l0aCBhIDMyLWJpdCB2YWx1ZS4KKysgIEluc3Ry dWN0aW9uKiBpbnN0ID0KKysgICAgICAoSW5zdHJ1Y3Rpb24qKW1fYnVmZmVyLmdldEluc3QoQnVm ZmVyT2Zmc2V0KG9mZnNldC5vZmZzZXQoKSkpOworKyAgVXBkYXRlTG9hZDY0VmFsdWUoaW5zdCwg dWludDY0X3QoaW50NjRfdChuLnZhbHVlKSkpOworK30KKysKKyt1aW50MzJfdCBNYWNyb0Fzc2Vt Ymxlcjo6cHVzaEZha2VSZXR1cm5BZGRyZXNzKFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgIENvZGVM YWJlbCBjbDsKKysKKysgIC8vIFVzZSBtb3YoQ29kZUxhYmVsKiwgUmVnaXN0ZXIpIHdoaWNoIGFs d2F5cyBlbWl0cyBhIGZ1bGwgOC1pbnN0cnVjdGlvbgorKyAgLy8gbG9hZDY0IHNlcXVlbmNlICh2 aWEgTk9QcyArIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zKS4gVGhpcyBpcyBjcml0aWNhbAorKyAg Ly8gYmVjYXVzZSBtb3ZlUHRyKEltbVdvcmQoMCkpIHdvdWxkIG9wdGltaXplIHRvIGEgc2luZ2xl IGxpIGluc3RydWN0aW9uLAorKyAgLy8gYnV0IHByb2Nlc3NDb2RlTGFiZWxzLT5CaW5kLT5VcGRh dGVMb2FkNjRWYWx1ZSBleHBlY3RzIHRoZSBmdWxsCisrICAvLyA4LWluc3RydWN0aW9uIGxpdGVy YWwgcG9vbCBzZXF1ZW5jZSBhdCB0aGUgcGF0Y2hBdCBvZmZzZXQuCisrICBtb3YoJmNsLCBzY3Jh dGNoKTsKKysKKysgIFB1c2goc2NyYXRjaCk7CisrCisrICBiaW5kKCZjbCk7CisrICB1aW50MzJf dCByZXRBZGRyID0gY3VycmVudE9mZnNldCgpOworKworKyAgYWRkQ29kZUxhYmVsKGNsKTsKKysg IHJldHVybiByZXRBZGRyOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsV2l0aEFC SU5vUHJvZmlsZXIoUmVnaXN0ZXIgZnVuLCBBQklUeXBlIHJlc3VsdCkgeworKyAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgIC8vIFNhdmUgZnVuIHRvIHNjcmF0Y2ggc2luY2UgZnVuIG1pZ2h0 IGJlIGNsb2JiZXJlZCBieSBjYWxsV2l0aEFCSVByZS4KKysgIG1vdmVQdHIoZnVuLCBzY3JhdGNo KTsKKysKKysgIHVpbnQzMl90IHN0YWNrQWRqdXN0OworKyAgY2FsbFdpdGhBQklQcmUoJnN0YWNr QWRqdXN0KTsKKysgIGNhbGwoc2NyYXRjaCk7CisrICBjYWxsV2l0aEFCSVBvc3Qoc3RhY2tBZGp1 c3QsIHJlc3VsdCk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIEFkZGl0aW9uYWwgYXJpdGhtZXRp YyBoZWxwZXJzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmZsZXhpYmxlUmVtYWluZGVyMzIo UmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBib29sIGlzVW5zaWduZWQsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMaXZlUmVnaXN0ZXJTZXQmKSB7 CisrICAvLyByZW0gPSBsaHMgLSAobGhzL3JocykqcmhzCisrICAvLyBQUEM2NCBkaXZ3KElOVDMy X01JTiwgLTEpIGlzIHVuZGVmaW5lZDsgcmVzdWx0IGlzIDAuCisrICBMYWJlbCBkb25lOworKyAg aWYgKCFpc1Vuc2lnbmVkKSB7CisrICAgIExhYmVsIG5vdE1pbk92ZXJmbG93OworKyAgICBicmFu Y2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDMyX01JTiksICZub3RN aW5PdmVyZmxvdyk7CisrICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIElt bVdvcmQoLTEpLCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBtb3ZlMzIoSW1tMzIoMCksIGRlc3Qp OworKyAgICBqdW1wKCZkb25lKTsKKysgICAgYmluZCgmbm90TWluT3ZlcmZsb3cpOworKyAgfQor KyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgICAgYXNf bW9kdXcoZGVzdCwgbGhzLCByaHMpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX21vZHN3KGRl c3QsIGxocywgcmhzKTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lz dGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAgIGFzX2Rpdnd1KHNjcmF0 Y2gsIGxocywgcmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19kaXZ3KHNjcmF0Y2gsIGxo cywgcmhzKTsKKysgICAgfQorKyAgICBhc19tdWxsdyhzY3JhdGNoLCBzY3JhdGNoLCByaHMpOwor KyAgICBhc19zdWJmKGRlc3QsIHNjcmF0Y2gsIGxocyk7CisrICB9CisrICBhc19leHRzdyhkZXN0 LCBkZXN0KTsKKysgIGJpbmQoJmRvbmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpm bGV4aWJsZVF1b3RpZW50UHRyKFJlZ2lzdGVyIGxocywgUmVnaXN0ZXIgcmhzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgZGVzdCwgYm9vbCBpc1Vu c2lnbmVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TGl2ZVJlZ2lzdGVyU2V0JikgeworKyAgLy8gUFBDNjQgZGl2ZChJTlQ2NF9NSU4sIC0xKSBpcyB1 bmRlZmluZWQ7IHJldHVybiBJTlQ2NF9NSU4gdG8gbWF0Y2gKKysgIC8vIEFSTTY0L0xvb25nQXJj aDY0IGhhcmR3YXJlIHNkaXYgYmVoYXZpb3IuCisrICBMYWJlbCBkb25lOworKyAgaWYgKCFpc1Vu c2lnbmVkKSB7CisrICAgIExhYmVsIG5vdE1pbk92ZXJmbG93OworKyAgICBicmFuY2hQdHIoQXNz ZW1ibGVyOjpOb3RFcXVhbCwgbGhzLCBJbW1Xb3JkKElOVDY0X01JTiksICZub3RNaW5PdmVyZmxv dyk7CisrICAgIGJyYW5jaFB0cihBc3NlbWJsZXI6Ok5vdEVxdWFsLCByaHMsIEltbVdvcmQoLTEp LCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoSU5UNjRfTUlOKSwgZGVz dCk7CisrICAgIGp1bXAoJmRvbmUpOworKyAgICBiaW5kKCZub3RNaW5PdmVyZmxvdyk7CisrICB9 CisrICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICBhc19kaXZkdShkZXN0LCBsaHMsIHJocyk7Cisr ICB9IGVsc2UgeworKyAgICBhc19kaXZkKGRlc3QsIGxocywgcmhzKTsKKysgIH0KKysgIGJpbmQo JmRvbmUpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpmbGV4aWJsZVJlbWFpbmRlclB0 cihSZWdpc3RlciBsaHMsIFJlZ2lzdGVyIHJocywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBkZXN0LCBib29sIGlzVW5zaWduZWQsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGl2ZVJlZ2lzdGVyU2V0 JikgeworKyAgLy8gcmVtID0gbGhzIC0gKGxocy9yaHMpKnJocworKyAgLy8gUFBDNjQgZGl2ZChJ TlQ2NF9NSU4sIC0xKSBpcyB1bmRlZmluZWQ7IHJlc3VsdCBpcyAwLgorKyAgTGFiZWwgZG9uZTsK KysgIGlmICghaXNVbnNpZ25lZCkgeworKyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsKKysgICAg YnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQ2NF9NSU4pLCAm bm90TWluT3ZlcmZsb3cpOworKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmhz LCBJbW1Xb3JkKC0xKSwgJm5vdE1pbk92ZXJmbG93KTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKDAp LCBkZXN0KTsKKysgICAganVtcCgmZG9uZSk7CisrICAgIGJpbmQoJm5vdE1pbk92ZXJmbG93KTsK KysgIH0KKysgIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAg ICAgIGFzX21vZHVkKGRlc3QsIGxocywgcmhzKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19t b2RzZChkZXN0LCBsaHMsIHJocyk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBhc19kaXZk dShzY3JhdGNoLCBsaHMsIHJocyk7CisrICAgIH0gZWxzZSB7CisrICAgICAgYXNfZGl2ZChzY3Jh dGNoLCBsaHMsIHJocyk7CisrICAgIH0KKysgICAgYXNfbXVsbGQoc2NyYXRjaCwgc2NyYXRjaCwg cmhzKTsKKysgICAgYXNfc3ViZihkZXN0LCBzY3JhdGNoLCBsaHMpOworKyAgfQorKyAgYmluZCgm ZG9uZSk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFJvdW5kaW5nIGhlbHBlcnMuCisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JEb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBS ZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM YWJlbCogZmFpbCkgeworKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7 CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAgLy8gUm91bmQgdG93YXJkIG5lZ2F0 aXZlIGluZmluaXR5LCB0aGVuIGNvbnZlcnQgdG8gaW50NjQuCisrICBhc19mcmltKGZwc2NyYXRj aCwgc3JjKTsKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7CisrICBhc19tZnZz cmQoZGVzdCwgZnBzY3JhdGNoKTsKKysKKysgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGlu dDMyLgorKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBhc19jbXBkKGRlc3QsIHNjcmF0 Y2gpOworKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrCisrICAvLyBDaGVjayBmb3IgLTAgYW5k IE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFiZWwgbm90WmVybzsKKysgIGFzX2NtcGRp KGRlc3QsIDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOworKyAgeworKyAgICAvLyBJ ZiB0b3AgMiBiaXRzIG9mIHNyYyBhcmUgc2V0LCBpdCdzIG5lZ2F0aXZlIG9yIE5hTi4KKysgICAg YXNfbWZ2c3JkKGRlc3QsIHNyYyk7CisrICAgIC8vIHJsZGljbC4gPSB4X3NyZGkgKyByZWNvcmQg Zm9ybTogZGVzdCA9IHRvcCAyIGJpdHMsIENSMFtlcV09KGRlc3Q9PTApLgorKyAgICAvLyBGb2xk cyB0aGUgZXhwbGljaXQgY21wZGkgc3JjLDAgdGhhdCB3b3VsZCBvdGhlcndpc2UgZHJpdmUgdGhl IGJyYW5jaC4KKysgICAgYXNfcmxkaWNsX3JjKGRlc3QsIGRlc3QsIDIsIDYyKTsKKysgICAgbWFf YihOb3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBiaW5kKCZub3RaZXJvKTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6Zmxvb3JGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNyYywg UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExhYmVsKiBmYWlsKSB7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgp KTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICAvLyBQUEMgRlAgcm91bmRpbmcg d29ya3Mgb24gZG91Ymxlcy4gU2luZ2xlLXByZWNpc2lvbiBGUFJzIGFyZQorKyAgLy8gYWxyZWFk eSBpbiBkb3VibGUtd2lkdGggcmVnaXN0ZXJzLCBzbyBmcmltIHdvcmtzIGZpbmUuCisrICBhc19m cmltKGZwc2NyYXRjaCwgc3JjKTsKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7 CisrICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKKysKKysgIC8vIENoZWNrIGlmIHJlc3Vs dCBmaXRzIGluIGludDMyLgorKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBhc19jbXBk KGRlc3QsIHNjcmF0Y2gpOworKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrCisrICAvLyBDaGVj ayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFiZWwgbm90WmVybzsK KysgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOworKyAg eworKyAgICAvLyBzcmMgaXMgaGVsZCBpbiB0aGUgRlBSIGFzIGEgNjQtYml0IGRvdWJsZSAobGZz IHdpZGVucyBmbG9hdDMyIHRvCisrICAgIC8vIGRvdWJsZSBvbiBsb2FkKSwgc28gdGhlIHNhbWUg dG9wLTItYml0cyBjaGVjayB1c2VkIGZvciBkb3VibGVzCisrICAgIC8vIGFwcGxpZXM6IGJpdCA2 MyA9IHNpZ24sIGJpdCA2MiA9IGV4cG9uZW50IE1TQi4gTm9uemVybyBtZWFucyAtMCwKKysgICAg Ly8gwrFJbmYsIE5hTiwgb3IgYSBsYXJnZSBtYWduaXR1ZGUg4oCUIG5vbmUgb2Ygd2hpY2ggaXMg KzAuCisrICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOworKyAgICAvLyBybGRpY2wuID0geF9zcmRp ICsgcmVjb3JkIGZvcm06IGRlc3QgPSB0b3AgMiBiaXRzLCBDUjBbZXFdPShkZXN0PT0wKS4KKysg ICAgLy8gRm9sZHMgdGhlIGV4cGxpY2l0IGNtcGRpIHNyYywwIHRoYXQgd291bGQgb3RoZXJ3aXNl IGRyaXZlIHRoZSBicmFuY2guCisrICAgIGFzX3JsZGljbF9yYyhkZXN0LCBkZXN0LCAyLCA2Mik7 CisrICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOworKyAgfQorKyAgYmluZCgmbm90WmVybyk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNlaWxEb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0 ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExhYmVsKiBmYWlsKSB7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFz TWFzbSgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgpKTsKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisrICBhc19mcmlwKGZwc2Ny YXRjaCwgc3JjKTsKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7CisrICBhc19t ZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKKysKKysgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGlu IGludDMyLgorKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBhc19jbXBkKGRlc3QsIHNj cmF0Y2gpOworKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrCisrICAvLyBDaGVjayBmb3IgKC0x LCAtMF0gYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFiZWwgbm90WmVybzsKKysg IGFzX2NtcGRpKGRlc3QsIDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOworKyAgewor KyAgICAvLyBJZiBiaW5hcnkgdmFsdWUgaXMgbm90IHplcm8sIGlucHV0IHdhcyBub3QgMCAoY291 bGQgYmUgLTAgb3IgTmFOKS4KKysgICAgYXNfbWZ2c3JkKGRlc3QsIHNyYyk7CisrICAgIGFzX2Nt cGRpKGRlc3QsIDApOworKyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysgIH0KKysgIGJpbmQo Jm5vdFplcm8pOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjZWlsRmxvYXQzMlRvSW50 MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBmYWlsKSB7CisrICBTY3JhdGNoRG91YmxlU2Nv cGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KGFzTWFzbSgpKTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrCisr ICBhc19mcmlwKGZwc2NyYXRjaCwgc3JjKTsKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGZwc2Ny YXRjaCk7CisrICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKKysKKysgIC8vIENoZWNrIGlm IHJlc3VsdCBmaXRzIGluIGludDMyLgorKyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBh c19jbXBkKGRlc3QsIHNjcmF0Y2gpOworKyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrCisrICAv LyBDaGVjayBmb3IgKC0xLCAtMF0gYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFi ZWwgbm90WmVybzsKKysgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5v dFplcm8pOworKyAgeworKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKKysgICAgYXNfY21wZGko ZGVzdCwgMCk7CisrICAgIG1hX2IoTm90RXF1YWwsIGZhaWwpOworKyAgfQorKyAgYmluZCgmbm90 WmVybyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OnRydW5jRG91YmxlVG9JbnQzMihG bG9hdFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBm cHNjcmF0Y2goYXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNN YXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIGFz X2ZjdGlkeihmcHNjcmF0Y2gsIHNyYyk7CisrICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsK KysKKysgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgorKyAgYXNfZXh0c3coc2Ny YXRjaCwgZGVzdCk7CisrICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOworKyAgbWFfYihOb3RFcXVh bCwgZmFpbCk7CisrCisrICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3aGVuIHJlc3VsdCBpcyB6 ZXJvLgorKyAgTGFiZWwgbm90WmVybzsKKysgIGFzX2NtcGRpKGRlc3QsIDApOworKyAgbWFfYihO b3RFcXVhbCwgJm5vdFplcm8pOworKyAgeworKyAgICBhc19tZnZzcmQoZGVzdCwgc3JjKTsKKysg ICAgLy8gcmxkaWNsLiA9IHhfc3JkaSArIHJlY29yZCBmb3JtOiBkZXN0ID0gdG9wIDIgYml0cywg Q1IwW2VxXT0oZGVzdD09MCkuCisrICAgIC8vIEZvbGRzIHRoZSBleHBsaWNpdCBjbXBkaSBzcmMs MCB0aGF0IHdvdWxkIG90aGVyd2lzZSBkcml2ZSB0aGUgYnJhbmNoLgorKyAgICBhc19ybGRpY2xf cmMoZGVzdCwgZGVzdCwgMiwgNjIpOworKyAgICBtYV9iKE5vdEVxdWFsLCBmYWlsKTsKKysgIH0K KysgIGJpbmQoJm5vdFplcm8pOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp0cnVuY0Zs b2F0MzJUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0 Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysKKysgIGFzX2ZjdGlkeihmcHNjcmF0Y2gsIHNyYyk7CisrICBhc19tZnZzcmQoZGVz dCwgZnBzY3JhdGNoKTsKKysKKysgIC8vIENoZWNrIGlmIHJlc3VsdCBmaXRzIGluIGludDMyLgor KyAgYXNfZXh0c3coc2NyYXRjaCwgZGVzdCk7CisrICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOwor KyAgbWFfYihOb3RFcXVhbCwgZmFpbCk7CisrCisrICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3 aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFiZWwgbm90WmVybzsKKysgIGFzX2NtcGRpKGRlc3Qs IDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOworKyAgeworKyAgICBhc19tZnZzcmQo ZGVzdCwgc3JjKTsKKysgICAgLy8gcmxkaWNsLiA9IHhfc3JkaSArIHJlY29yZCBmb3JtOiBkZXN0 ID0gdG9wIDIgYml0cywgQ1IwW2VxXT0oZGVzdD09MCkuCisrICAgIC8vIEZvbGRzIHRoZSBleHBs aWNpdCBjbXBkaSBzcmMsMCB0aGF0IHdvdWxkIG90aGVyd2lzZSBkcml2ZSB0aGUgYnJhbmNoLgor KyAgICBhc19ybGRpY2xfcmMoZGVzdCwgZGVzdCwgMiwgNjIpOworKyAgICBtYV9iKE5vdEVxdWFs LCBmYWlsKTsKKysgIH0KKysgIGJpbmQoJm5vdFplcm8pOworK30KKysKKyt2b2lkIE1hY3JvQXNz ZW1ibGVyOjpyb3VuZERvdWJsZVRvSW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRl c3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0 ZXIgdGVtcCwgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2go YXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOwor KyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIExhYmVsIG5lZ2F0 aXZlLCBlbmQsIHBlcmZvcm1Sb3VuZDsKKysKKysgIC8vIEJyYW5jaCBmb3IgbmVnYXRpdmUgaW5w dXRzLgorKyAgemVyb0RvdWJsZShmcHNjcmF0Y2gpOworKyAgYnJhbmNoRG91YmxlKERvdWJsZUdy ZWF0ZXJUaGFuT3JFcXVhbCwgc3JjLCBmcHNjcmF0Y2gsICZwZXJmb3JtUm91bmQpOworKworKyAg Ly8gSW5wdXQgaXMgbmVnYXRpdmUuCisrICBsb2FkQ29uc3RhbnREb3VibGUoLTAuNSwgZnBzY3Jh dGNoKTsKKysgIGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIHNyYywgZnBz Y3JhdGNoLCBmYWlsKTsKKysgIGp1bXAoJnBlcmZvcm1Sb3VuZCk7CisrCisrICBiaW5kKCZwZXJm b3JtUm91bmQpOworKyAgeworKyAgICBsb2FkQ29uc3RhbnREb3VibGUoR2V0QmlnZ2VzdE51bWJl ckxlc3NUaGFuKDAuNSksIHRlbXApOworKyAgICBhc19mYWRkKGZwc2NyYXRjaCwgc3JjLCB0ZW1w KTsKKysgICAgYXNfZnJpbShmcHNjcmF0Y2gsIGZwc2NyYXRjaCk7CisrICAgIGFzX2ZjdGlkeihm cHNjcmF0Y2gsIGZwc2NyYXRjaCk7CisrICAgIGFzX21mdnNyZChkZXN0LCBmcHNjcmF0Y2gpOwor KworKyAgICAvLyBDaGVjayBpZiByZXN1bHQgZml0cyBpbiBpbnQzMi4KKysgICAgYXNfZXh0c3co c2NyYXRjaCwgZGVzdCk7CisrICAgIGFzX2NtcGQoZGVzdCwgc2NyYXRjaCk7CisrICAgIG1hX2Io Tm90RXF1YWwsIGZhaWwpOworKyAgfQorKyAgYmluZCgmZW5kKTsKKysKKysgIC8vIENoZWNrIGZv ciAtMCBhbmQgTmFOIHdoZW4gcmVzdWx0IGlzIHplcm8uCisrICBMYWJlbCBub3RaZXJvOworKyAg YXNfY21wZGkoZGVzdCwgMCk7CisrICBtYV9iKE5vdEVxdWFsLCAmbm90WmVybyk7CisrICB7Cisr ICAgIGFzX21mdnNyZChkZXN0LCBzcmMpOworKyAgICBhc19jbXBkaShkZXN0LCAwKTsKKysgICAg bWFfYihOb3RFcXVhbCwgZmFpbCk7CisrICB9CisrICBiaW5kKCZub3RaZXJvKTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6cm91bmRGbG9hdDMyVG9JbnQzMihGbG9hdFJlZ2lzdGVyIHNy YywgUmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZsb2F0UmVnaXN0ZXIgdGVtcCwgTGFiZWwqIGZhaWwpIHsKKysgIFNjcmF0Y2hEb3VibGVT Y29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysK KysgIExhYmVsIG5lZ2F0aXZlLCBlbmQsIHBlcmZvcm1Sb3VuZDsKKysKKysgIC8vIEJyYW5jaCBm b3Igbm9uLW5lZ2F0aXZlIGlucHV0cy4KKysgIGxvYWRDb25zdGFudEZsb2F0MzIoMC4wZiwgZnBz Y3JhdGNoKTsKKysgIGJyYW5jaEZsb2F0KERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgc3JjLCBm cHNjcmF0Y2gsICZwZXJmb3JtUm91bmQpOworKworKyAgLy8gSW5wdXQgaXMgbmVnYXRpdmUuCisr ICBsb2FkQ29uc3RhbnRGbG9hdDMyKC0wLjVmLCBmcHNjcmF0Y2gpOworKyAgYnJhbmNoRmxvYXQo RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBzcmMsIGZwc2NyYXRjaCwgZmFpbCk7CisrICBqdW1w KCZwZXJmb3JtUm91bmQpOworKworKyAgYmluZCgmcGVyZm9ybVJvdW5kKTsKKysgIHsKKysgICAg bG9hZENvbnN0YW50RmxvYXQzMihmbG9hdChHZXRCaWdnZXN0TnVtYmVyTGVzc1RoYW4oMC41KSks IHRlbXApOworKyAgICBhc19mYWRkcyhmcHNjcmF0Y2gsIHNyYywgdGVtcCk7CisrICAgIGFzX2Zy aW0oZnBzY3JhdGNoLCBmcHNjcmF0Y2gpOworKyAgICBhc19mY3RpZHooZnBzY3JhdGNoLCBmcHNj cmF0Y2gpOworKyAgICBhc19tZnZzcmQoZGVzdCwgZnBzY3JhdGNoKTsKKysKKysgICAgLy8gQ2hl Y2sgaWYgcmVzdWx0IGZpdHMgaW4gaW50MzIuCisrICAgIGFzX2V4dHN3KHNjcmF0Y2gsIGRlc3Qp OworKyAgICBhc19jbXBkKGRlc3QsIHNjcmF0Y2gpOworKyAgICBtYV9iKE5vdEVxdWFsLCBmYWls KTsKKysgIH0KKysgIGJpbmQoJmVuZCk7CisrCisrICAvLyBDaGVjayBmb3IgLTAgYW5kIE5hTiB3 aGVuIHJlc3VsdCBpcyB6ZXJvLgorKyAgTGFiZWwgbm90WmVybzsKKysgIGFzX2NtcGRpKGRlc3Qs IDApOworKyAgbWFfYihOb3RFcXVhbCwgJm5vdFplcm8pOworKyAgeworKyAgICBhc19tZnZzcmQo ZGVzdCwgc3JjKTsKKysgICAgYXNfY21wZGkoZGVzdCwgMCk7CisrICAgIG1hX2IoTm90RXF1YWws IGZhaWwpOworKyAgfQorKyAgYmluZCgmbm90WmVybyk7CisrfQorKworKy8vID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8v IEZQIGNvbnZlcnNpb24gLyBjb3B5LXNpZ24uCisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29u dmVydEludFB0clRvRG91YmxlKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICBjb252ZXJ0SW50NjRUb0RvdWJsZShSZWdpc3RlcjY0KHNyYyksIGRlc3QpOworK30KKysKKyt2 b2lkIE1hY3JvQXNzZW1ibGVyOjpjb3B5U2lnbkRvdWJsZShGbG9hdFJlZ2lzdGVyIGxocywgRmxv YXRSZWdpc3RlciByaHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv YXRSZWdpc3RlciBvdXRwdXQpIHsKKysgIC8vIGZjcHNnbiBmcnQsIGZyYSwgZnJiOiBjb3BpZXMg c2lnbiBvZiBmcmEgdG8gbWFnbml0dWRlIG9mIGZyYi4KKysgIC8vIGxocyA9IG1hZ25pdHVkZSBz b3VyY2UsIHJocyA9IHNpZ24gc291cmNlLgorKyAgYXNfZmNwc2duKG91dHB1dCwgcmhzLCBsaHMp OworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb3B5U2lnbkZsb2F0MzIoRmxvYXRSZWdp c3RlciBsaHMsIEZsb2F0UmVnaXN0ZXIgcmhzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGbG9hdFJlZ2lzdGVyIG91dHB1dCkgeworKyAgYXNfZmNwc2duKG91dHB1dCwg cmhzLCBsaHMpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBHQyAvIG51cnNlcnkgaGVscGVycy4K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpsb2FkU3RvcmVCdWZmZXIoUmVnaXN0ZXIgcHRyLCBS ZWdpc3RlciBidWZmZXIpIHsKKysgIGFuZFB0cihJbW0zMihpbnQzMl90KH5nYzo6Q2h1bmtNYXNr KSksIHB0ciwgYnVmZmVyKTsKKysgIGxvYWRQdHIoQWRkcmVzcyhidWZmZXIsIGdjOjpDaHVua1N0 b3JlQnVmZmVyT2Zmc2V0KSwgYnVmZmVyKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6 YnJhbmNoVmFsdWVJc051cnNlcnlDZWxsKENvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBhZGRyZXNzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB0 ZW1wLCBMYWJlbCogbGFiZWwpIHsKKysgIGJyYW5jaFZhbHVlSXNOdXJzZXJ5Q2VsbEltcGwoY29u ZCwgYWRkcmVzcywgdGVtcCwgbGFiZWwpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpicmFuY2hWYWx1ZUlzTnVyc2VyeUNlbGxJbXBsKENvbmRp dGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgVCYgdmFsdWUsIFJlZ2lzdGVyIHRlbXAsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFiZWwpIHsKKysgIE1PWl9B U1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6OkVxdWFsIHx8IGNvbmQgPT0gQXNzZW1ibGVyOjpOb3RF cXVhbCk7CisrICBNT1pfQVNTRVJUKHRlbXAgIT0gSW52YWxpZFJlZyk7CisrICBMYWJlbCBkb25l OworKyAgYnJhbmNoVGVzdEdDVGhpbmcoQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWUsCisrICAg ICAgICAgICAgICAgICAgICBjb25kID09IEFzc2VtYmxlcjo6RXF1YWwgPyAmZG9uZSA6IGxhYmVs KTsKKysKKysgIGdldEdDVGhpbmdWYWx1ZUNodW5rKHZhbHVlLCB0ZW1wKTsKKysgIGxvYWRQdHIo QWRkcmVzcyh0ZW1wLCBnYzo6Q2h1bmtTdG9yZUJ1ZmZlck9mZnNldCksIHRlbXApOworKyAgYnJh bmNoUHRyKEludmVydENvbmRpdGlvbihjb25kKSwgdGVtcCwgSW1tV29yZCgwKSwgbGFiZWwpOwor KworKyAgYmluZCgmZG9uZSk7CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKy8vIFRlbXBsYXRlIGluc3Rh bnRpYXRpb25zLgorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OnN0b3JlVW5ib3hlZFZhbHVlKGNvbnN0IENvbnN0YW50T3JSZWdpc3RlciYgdmFsdWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUlSVHlwZSB2YWx1ZVR5cGUs IGNvbnN0IFQmIGRlc3QpIHsKKysgIE1PWl9BU1NFUlQodmFsdWVUeXBlIDwgTUlSVHlwZTo6VmFs dWUpOworKworKyAgaWYgKHZhbHVlVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUpIHsKKysgICAgYm94 RG91YmxlKHZhbHVlLnJlZygpLnR5cGVkUmVnKCkuZnB1KCksIGRlc3QpOworKyAgICByZXR1cm47 CisrICB9CisrCisrICBpZiAodmFsdWUuY29uc3RhbnQoKSkgeworKyAgICBzdG9yZVZhbHVlKHZh bHVlLnZhbHVlKCksIGRlc3QpOworKyAgfSBlbHNlIHsKKysgICAgc3RvcmVWYWx1ZShWYWx1ZVR5 cGVGcm9tTUlSVHlwZSh2YWx1ZVR5cGUpLCB2YWx1ZS5yZWcoKS50eXBlZFJlZygpLmdwcigpLAor KyAgICAgICAgICAgICAgIGRlc3QpOworKyAgfQorK30KKysKKyt0ZW1wbGF0ZSB2b2lkIE1hY3Jv QXNzZW1ibGVyOjpzdG9yZVVuYm94ZWRWYWx1ZShjb25zdCBDb25zdGFudE9yUmVnaXN0ZXImIHZh bHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1J UlR5cGUgdmFsdWVUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIGRlc3QpOworK3RlbXBsYXRlIHZvaWQgTWFjcm9Bc3Nl bWJsZXI6OnN0b3JlVW5ib3hlZFZhbHVlKAorKyAgICBjb25zdCBDb25zdGFudE9yUmVnaXN0ZXIm IHZhbHVlLCBNSVJUeXBlIHZhbHVlVHlwZSwKKysgICAgY29uc3QgQmFzZU9iamVjdEVsZW1lbnRJ bmRleCYgZGVzdCk7CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gTWlzYyBzdHVicy4KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjpjb21tZW50KGNvbnN0IGNoYXIqIG1zZykge30KKysKKyt2b2lkIE1hY3Jv QXNzZW1ibGVyOjpzcGVjdWxhdGlvbkJhcnJpZXIoKSB7CisrICAvLyBpc3luYyBwcm92aWRlcyBl eGVjdXRpb24gc3luY2hyb25pemF0aW9uOiBkaXNjYXJkcyBwcmVmZXRjaGVkCisrICAvLyBpbnN0 cnVjdGlvbnMgYW5kIGZvcmNlcyBhIHJlZmV0Y2grcmVleGVjdXRlIHBhc3QgdGhlIGJhcnJpZXIu CisrICAvLyBObyBpbnN0cnVjdGlvbiBmb2xsb3dpbmcgaXN5bmMgbWF5IGJlZ2luIChhcmNoaXRl Y3R1cmFsbHkpIHVudGlsCisrICAvLyBpc3luYyBjb21wbGV0ZXMsIGJsb2NraW5nIHNwZWN1bGF0 aXZlIGJ5cGFzcyDigJQgZXhhY3RseSB0aGUKKysgIC8vIFNwZWN0cmUgdjEgZ3VhcmFudGVlIG5l ZWRlZCBhZnRlciBhIEMgY2FsbCByZXR1cm5zIGEgdmFsdWUgdGhhdAorKyAgLy8gbWF5IGluZmx1 ZW5jZSBzdWJzZXF1ZW50IGxvYWRzLiBSZWFjaGFibGUgZnJvbSBzaGFyZWQKKysgIC8vIENvZGVH ZW5lcmF0b3IgdW5kZXIgSml0T3B0aW9ucy5zcGVjdHJlSml0VG9DeHhDYWxscy4KKysgIGFzX2lz eW5jKCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY1BhdXNlKCkgeyBub3Ao KTsgfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmVudGVyRmFrZUV4aXRGcmFtZUZvcldhc20o UmVnaXN0ZXIgY3hyZWcsIFJlZ2lzdGVyIHNjcmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFeGl0RnJhbWVUeXBlIHR5cGUpIHsKKysgIGVudGVy RmFrZUV4aXRGcmFtZShjeHJlZywgc2NyYXRjaCwgdHlwZSk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXI6Ondhc21Cb3VuZHNDaGVjazMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciBpbmRl eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBib3Vu ZHNDaGVja0xpbWl0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExh YmVsKiBsYWJlbCkgeworKyAgbWFfY21wKGluZGV4LCBib3VuZHNDaGVja0xpbWl0LCBjb25kKTsK KysgIG1hX2IoY29uZCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNt Qm91bmRzQ2hlY2szMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXIgaW5kZXgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBib3VuZHNDaGVja0xpbWl0LCBM YWJlbCogbGFiZWwpIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKGFzTWFzbSgp KTsKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBsb2FkMzIoYm91 bmRzQ2hlY2tMaW1pdCwgc2NyYXRjaCk7CisrICBtYV9jbXAoaW5kZXgsIHNjcmF0Y2gsIGNvbmQp OworKyAgbWFfYihjb25kLCBsYWJlbCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondh c21Cb3VuZHNDaGVjazY0KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcjY0IGluZGV4LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgYm91bmRzQ2hlY2tM aW1pdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCogbGFi ZWwpIHsKKysgIG1hX2NtcChpbmRleC5yZWcsIGJvdW5kc0NoZWNrTGltaXQucmVnLCBjb25kKTsK KysgIG1hX2IoY29uZCwgbGFiZWwpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNt Qm91bmRzQ2hlY2s2NChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXI2NCBpbmRleCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIGJvdW5kc0NoZWNrTGltaXQs IExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNt KCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIGxvYWRQdHIo Ym91bmRzQ2hlY2tMaW1pdCwgc2NyYXRjaCk7CisrICBtYV9jbXAoaW5kZXgucmVnLCBzY3JhdGNo LCBjb25kKTsKKysgIG1hX2IoY29uZCwgbGFiZWwpOworK30KKysKKytDb2RlT2Zmc2V0IE1hY3Jv QXNzZW1ibGVyOjptb3ZlMzJXaXRoUGF0Y2goUmVnaXN0ZXIgZGVzdCkgeworKyAgQ29kZU9mZnNl dCBvZmZzZXQoY3VycmVudE9mZnNldCgpKTsKKysgIGVtaXRMb2FkNjRTdGFuemEoZGVzdCwgMCk7 CisrICByZXR1cm4gb2Zmc2V0OworK30KKysKKytDb2RlT2Zmc2V0IE1hY3JvQXNzZW1ibGVyOjpz dWIzMkZyb21NZW1BbmRCcmFuY2hJZk5lZ2F0aXZlV2l0aFBhdGNoKAorKyAgICBBZGRyZXNzIGFk ZHJlc3MsIExhYmVsKiBsYWJlbCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIE1P Wl9BU1NFUlQoc2NyYXRjaCAhPSBhZGRyZXNzLmJhc2UpOworKyAgbG9hZDMyKGFkZHJlc3MsIHNj cmF0Y2gpOworKyAgLy8gU3VidHJhY3QgYSBwbGFjZWhvbGRlciB2YWx1ZSAod2lsbCBiZSBwYXRj aGVkKS4KKysgIC8vIFVzZSBhZGRpIHdpdGggcG9zaXRpdmUgcGxhY2Vob2xkZXIgKDEyOCksIHdo aWNoIHdpbGwgYmUgcGF0Y2hlZCB0bworKyAgLy8gYWRkaSB3aXRoIG5lZ2F0aXZlIHZhbHVlLiBU aGUgaW1tZWRpYXRlIGlzIGluIHRoZSBhZGRpIGluc3RydWN0aW9uLgorKyAgYXNfYWRkaShzY3Jh dGNoLCBzY3JhdGNoLCAxMjgpOworKyAgQ29kZU9mZnNldCBwYXRjaFBvaW50ID0gQ29kZU9mZnNl dChjdXJyZW50T2Zmc2V0KCkpOworKyAgc3RvcmUzMihzY3JhdGNoLCBhZGRyZXNzKTsKKysgIC8v IEJyYW5jaCBpZiByZXN1bHQgaXMgbmVnYXRpdmUgKHNpZ25lZCkuCisrICBhc19jbXB3aShzY3Jh dGNoLCAwKTsKKysgIG1hX2IoTGVzc1RoYW4sIGxhYmVsKTsKKysgIHJldHVybiBwYXRjaFBvaW50 OworK30KKysKKytib29sIE1hY3JvQXNzZW1ibGVyOjpjb252ZXJ0VUludDY0VG9Eb3VibGVOZWVk c1RlbXAoKSB7IHJldHVybiBmYWxzZTsgfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGwo SW1tV29yZCBpbW0pIHsgY2FsbChJbW1QdHIoKHZvaWQqKWltbS52YWx1ZSkpOyB9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydFVJbnQ2NFRvRG91YmxlKFJlZ2lzdGVyNjQgc3JjLCBG bG9hdFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHRlbXApIHsKKysgIE1PWl9BU1NFUlQodGVtcCA9PSBSZWdpc3Rlcjo6 SW52YWxpZCgpKTsKKysgIC8vIFBPV0VSNysgaGFzIGZjZmlkdSAodW5zaWduZWQgaTY0IOKGkiBm NjQpIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uOyBubworKyAgLy8gc2lnbi1zcGxpdCAvIGJyYW5j aCAvIEdQUiBzY3JhdGNoIG5lZWRlZC4KKysgIGFzX210dnNyZChkZXN0LCBzcmMucmVnKTsKKysg IGFzX2ZjZmlkdShkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29u dmVydEludDY0VG9GbG9hdDMyKFJlZ2lzdGVyNjQgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsK KysgIGFzX210dnNyZChkZXN0LCBzcmMucmVnKTsKKysgIGFzX2ZjZmlkcyhkZXN0LCBkZXN0KTsK Kyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29udmVydFVJbnQ2NFRvRmxvYXQzMihSZWdp c3RlcjY0IHNyYywgRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCkgeworKyAgTU9aX0FTU0VSVCh0ZW1w ID09IFJlZ2lzdGVyOjpJbnZhbGlkKCkpOworKyAgLy8gUE9XRVI3KyBoYXMgZmNmaWR1cyAodW5z aWduZWQgaTY0IOKGkiBmMzIpIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uLgorKyAgYXNfbXR2c3Jk KGRlc3QsIHNyYy5yZWcpOworKyAgYXNfZmNmaWR1cyhkZXN0LCBkZXN0KTsKKyt9CisrCisrdm9p ZCBNYWNyb0Fzc2VtYmxlcjo6ZmxleGlibGVRdW90aWVudDMyKAorKyAgICBSZWdpc3RlciBsaHMs IFJlZ2lzdGVyIHJocywgUmVnaXN0ZXIgZGVzdCwgYm9vbCBpc1Vuc2lnbmVkLAorKyAgICBjb25z dCBMaXZlUmVnaXN0ZXJTZXQmIHZvbGF0aWxlTGl2ZVJlZ3MpIHsKKysgIC8vIFBQQzY0IGRpdnco SU5UMzJfTUlOLCAtMSkgaXMgdW5kZWZpbmVkOyByZXR1cm4gSU5UMzJfTUlOIHRvIG1hdGNoCisr ICAvLyBBUk02NC9Mb29uZ0FyY2g2NCBoYXJkd2FyZSBzZGl2IGJlaGF2aW9yLgorKyAgTGFiZWwg ZG9uZTsKKysgIGlmICghaXNVbnNpZ25lZCkgeworKyAgICBMYWJlbCBub3RNaW5PdmVyZmxvdzsK KysgICAgYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIGxocywgSW1tV29yZChJTlQzMl9N SU4pLCAmbm90TWluT3ZlcmZsb3cpOworKyAgICBicmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVh bCwgcmhzLCBJbW1Xb3JkKC0xKSwgJm5vdE1pbk92ZXJmbG93KTsKKysgICAgbW92ZTMyKEltbTMy KElOVDMyX01JTiksIGRlc3QpOworKyAgICBqdW1wKCZkb25lKTsKKysgICAgYmluZCgmbm90TWlu T3ZlcmZsb3cpOworKyAgfQorKyAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgYXNfZGl2d3UoZGVz dCwgbGhzLCByaHMpOworKyAgfSBlbHNlIHsKKysgICAgYXNfZGl2dyhkZXN0LCBsaHMsIHJocyk7 CisrICB9CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysgIGJpbmQoJmRvbmUpOworK30KKysK Kyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpvb2xXYXNtVHJ1bmNhdGVDaGVja0YzMlRvSTMyKAorKyAg ICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBvdXRwdXQsIFRydW5jRmxhZ3MgZmxhZ3Ms CisrICAgIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjLCBMYWJlbCogcmVq b2luKSB7CisrICBvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDMyQ2hlY2soaW5wdXQsIG91dHB1 dCwgTUlSVHlwZTo6RmxvYXQzMiwgZmxhZ3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVqb2luLCB0cmFwU2l0ZURlc2MpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1i bGVyOjpvb2xXYXNtVHJ1bmNhdGVDaGVja0YzMlRvSTY0KAorKyAgICBGbG9hdFJlZ2lzdGVyIGlu cHV0LCBSZWdpc3RlcjY0IG91dHB1dCwgVHJ1bmNGbGFncyBmbGFncywKKysgICAgY29uc3Qgd2Fz bTo6VHJhcFNpdGVEZXNjJiB0cmFwU2l0ZURlc2MsIExhYmVsKiByZWpvaW4pIHsKKysgIG91dE9m TGluZVdhc21UcnVuY2F0ZVRvSW50NjRDaGVjayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBlOjpGbG9h dDMyLCBmbGFncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWpvaW4s IHRyYXBTaXRlRGVzYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Om9vbFdhc21UcnVu Y2F0ZUNoZWNrRjY0VG9JMzIoCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyIG91 dHB1dCwgVHJ1bmNGbGFncyBmbGFncywKKysgICAgY29uc3Qgd2FzbTo6VHJhcFNpdGVEZXNjJiB0 cmFwU2l0ZURlc2MsIExhYmVsKiByZWpvaW4pIHsKKysgIG91dE9mTGluZVdhc21UcnVuY2F0ZVRv SW50MzJDaGVjayhpbnB1dCwgb3V0cHV0LCBNSVJUeXBlOjpEb3VibGUsIGZsYWdzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlam9pbiwgdHJhcFNpdGVEZXNjKTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6b29sV2FzbVRydW5jYXRlQ2hlY2tGNjRUb0k2NCgK KysgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXI2NCBvdXRwdXQsIFRydW5jRmxhZ3Mg ZmxhZ3MsCisrICAgIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjLCBMYWJl bCogcmVqb2luKSB7CisrICBvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDY0Q2hlY2soaW5wdXQs IG91dHB1dCwgTUlSVHlwZTo6RG91YmxlLCBmbGFncywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZWpvaW4sIHRyYXBTaXRlRGVzYyk7CisrfQorKworK3ZvaWQgTWFjcm9B c3NlbWJsZXJQUEM2NENvbXBhdDo6b3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQzMkNoZWNrKAor KyAgICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlciBvdXRwdXQsIE1JUlR5cGUgZnJvbVR5 cGUsIFRydW5jRmxhZ3MgZmxhZ3MsCisrICAgIExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRy YXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjKSB7CisrICBib29sIGlzVW5zaWduZWQgPSBmbGFncyAm IFRSVU5DX1VOU0lHTkVEOworKyAgYm9vbCBpc1NhdHVyYXRpbmcgPSBmbGFncyAmIFRSVU5DX1NB VFVSQVRJTkc7CisrCisrICBpZiAoaXNTYXR1cmF0aW5nKSB7CisrICAgIFNjcmF0Y2hEb3VibGVT Y29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgICBpZiAoZnJvbVR5cGUgPT0gTUlSVHlwZTo6 RG91YmxlKSB7CisrICAgICAgYXNNYXNtKCkubG9hZENvbnN0YW50RG91YmxlKDAuMCwgZnBzY3Jh dGNoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc01hc20oKS5sb2FkQ29uc3RhbnRGbG9hdDMy KDAuMGYsIGZwc2NyYXRjaCk7CisrICAgIH0KKysKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysg ICAgICAvLyBJZiBpbnB1dCA8IDAgb3IgTmFOLCBvdXRwdXQgPSAwOyBlbHNlIG91dHB1dCA9IFVJ TlQzMl9NQVguCisrICAgICAgTGFiZWwgbm90TmVnT3JOYU47CisrICAgICAgaWYgKGZyb21UeXBl ID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICAgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFz c2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsICZub3ROZWdPck5hTik7CisrICAgICAgfSBlbHNl IHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRl clRoYW5PckVxdWFsLCBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwc2Ny YXRjaCwgJm5vdE5lZ09yTmFOKTsKKysgICAgICB9CisrICAgICAgYXNNYXNtKCkubW92ZTMyKElt bTMyKDApLCBvdXRwdXQpOworKyAgICAgIGFzTWFzbSgpLmp1bXAocmVqb2luKTsKKysgICAgICBh c01hc20oKS5iaW5kKCZub3ROZWdPck5hTik7CisrICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMy KFVJTlQzMl9NQVgpLCBvdXRwdXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIFNpZ25lZDog TmFOIC0+IDAsIG5lZ2F0aXZlIG92ZXJmbG93IC0+IElOVDMyX01JTiwKKysgICAgICAvLyBwb3Np dGl2ZSBvdmVyZmxvdyBhbHJlYWR5IHNhdHVyYXRlZCB0byBJTlQzMl9NQVguCisrICAgICAgTGFi ZWwgbm90TmFOLCBkb25lOworKyAgICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUp IHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZU9yZGVy ZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5hTik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFz TWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlT3JkZXJlZCwgaW5wdXQsIGlucHV0 LCAmbm90TmFOKTsKKysgICAgICB9CisrICAgICAgYXNNYXNtKCkubW92ZTMyKEltbTMyKDApLCBv dXRwdXQpOworKyAgICAgIGFzTWFzbSgpLmp1bXAocmVqb2luKTsKKysKKysgICAgICBhc01hc20o KS5iaW5kKCZub3ROYU4pOworKyAgICAgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUp IHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaERvdWJsZShBc3NlbWJsZXI6OkRvdWJsZUdyZWF0 ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBz Y3JhdGNoLCByZWpvaW4pOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc01hc20oKS5icmFu Y2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgaW5wdXQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsIHJlam9pbik7CisrICAgICAgfQor KyAgICAgIGFzTWFzbSgpLm1vdmUzMihJbW0zMihJTlQzMl9NSU4pLCBvdXRwdXQpOworKyAgICB9 CisrCisrICAgIE1PWl9BU1NFUlQocmVqb2luLT5ib3VuZCgpKTsKKysgICAgYXNNYXNtKCkuanVt cChyZWpvaW4pOworKyAgICByZXR1cm47CisrICB9CisrCisrICBMYWJlbCBpbnB1dElzTmFOOwor KyAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICBhc01hc20oKS5icmFu Y2hEb3VibGUoQXNzZW1ibGVyOjpEb3VibGVVbm9yZGVyZWQsIGlucHV0LCBpbnB1dCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICZpbnB1dElzTmFOKTsKKysgIH0gZWxzZSB7CisrICAgIGFz TWFzbSgpLmJyYW5jaEZsb2F0KEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVkLCBpbnB1dCwgaW5w dXQsICZpbnB1dElzTmFOKTsKKysgIH0KKysKKysgIGFzTWFzbSgpLndhc21UcmFwKHdhc206OlRy YXA6OkludGVnZXJPdmVyZmxvdywgdHJhcFNpdGVEZXNjKTsKKysgIGFzTWFzbSgpLmJpbmQoJmlu cHV0SXNOYU4pOworKyAgYXNNYXNtKCkud2FzbVRyYXAod2FzbTo6VHJhcDo6SW52YWxpZENvbnZl cnNpb25Ub0ludGVnZXIsIHRyYXBTaXRlRGVzYyk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXJQUEM2NENvbXBhdDo6b3V0T2ZMaW5lV2FzbVRydW5jYXRlVG9JbnQ2NENoZWNrKAorKyAgICBG bG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dF8sIE1JUlR5cGUgZnJvbVR5cGUs IFRydW5jRmxhZ3MgZmxhZ3MsCisrICAgIExhYmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRyYXBT aXRlRGVzYyYgdHJhcFNpdGVEZXNjKSB7CisrICBib29sIGlzVW5zaWduZWQgPSBmbGFncyAmIFRS VU5DX1VOU0lHTkVEOworKyAgYm9vbCBpc1NhdHVyYXRpbmcgPSBmbGFncyAmIFRSVU5DX1NBVFVS QVRJTkc7CisrCisrICBpZiAoaXNTYXR1cmF0aW5nKSB7CisrICAgIFNjcmF0Y2hEb3VibGVTY29w ZSBmcHNjcmF0Y2goYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBvdXRwdXQgPSBvdXRwdXRfLnJl ZzsKKysKKysgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICAgIGFz TWFzbSgpLmxvYWRDb25zdGFudERvdWJsZSgwLjAsIGZwc2NyYXRjaCk7CisrICAgIH0gZWxzZSB7 CisrICAgICAgYXNNYXNtKCkubG9hZENvbnN0YW50RmxvYXQzMigwLjBmLCBmcHNjcmF0Y2gpOwor KyAgICB9CisrCisrICAgIGlmIChpc1Vuc2lnbmVkKSB7CisrICAgICAgTGFiZWwgbm90TmVnT3JO YU47CisrICAgICAgaWYgKGZyb21UeXBlID09IE1JUlR5cGU6OkRvdWJsZSkgeworKyAgICAgICAg YXNNYXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFs LCBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHNjcmF0Y2gsICZub3RO ZWdPck5hTik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzTWFzbSgpLmJyYW5jaEZsb2F0 KEFzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBpbnB1dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgJm5vdE5lZ09yTmFOKTsKKysgICAgICB9Cisr ICAgICAgYXNNYXNtKCkubW92ZVB0cihJbW1Xb3JkKDApLCBvdXRwdXQpOworKyAgICAgIGFzTWFz bSgpLmp1bXAocmVqb2luKTsKKysgICAgICBhc01hc20oKS5iaW5kKCZub3ROZWdPck5hTik7Cisr ICAgICAgYXNNYXNtKCkubW92ZVB0cihJbW1Xb3JkKFVJTlQ2NF9NQVgpLCBvdXRwdXQpOworKyAg ICB9IGVsc2UgeworKyAgICAgIExhYmVsIG5vdE5hTjsKKysgICAgICBpZiAoZnJvbVR5cGUgPT0g TUlSVHlwZTo6RG91YmxlKSB7CisrICAgICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNzZW1i bGVyOjpEb3VibGVPcmRlcmVkLCBpbnB1dCwgaW5wdXQsICZub3ROYU4pOworKyAgICAgIH0gZWxz ZSB7CisrICAgICAgICBhc01hc20oKS5icmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJsZU9yZGVy ZWQsIGlucHV0LCBpbnB1dCwgJm5vdE5hTik7CisrICAgICAgfQorKyAgICAgIGFzTWFzbSgpLm1v dmVQdHIoSW1tV29yZCgwKSwgb3V0cHV0KTsKKysgICAgICBhc01hc20oKS5qdW1wKHJlam9pbik7 CisrCisrICAgICAgYXNNYXNtKCkuYmluZCgmbm90TmFOKTsKKysgICAgICBpZiAoZnJvbVR5cGUg PT0gTUlSVHlwZTo6RG91YmxlKSB7CisrICAgICAgICBhc01hc20oKS5icmFuY2hEb3VibGUoQXNz ZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGlucHV0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZwc2NyYXRjaCwgcmVqb2luKTsKKysgICAgICB9IGVsc2UgeworKyAg ICAgICAgYXNNYXNtKCkuYnJhbmNoRmxvYXQoQXNzZW1ibGVyOjpEb3VibGVHcmVhdGVyVGhhbk9y RXF1YWwsIGlucHV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBzY3JhdGNoLCBy ZWpvaW4pOworKyAgICAgIH0KKysgICAgICBhc01hc20oKS5tb3ZlUHRyKEltbVdvcmQoSU5UNjRf TUlOKSwgb3V0cHV0KTsKKysgICAgfQorKworKyAgICBNT1pfQVNTRVJUKHJlam9pbi0+Ym91bmQo KSk7CisrICAgIGFzTWFzbSgpLmp1bXAocmVqb2luKTsKKysgICAgcmV0dXJuOworKyAgfQorKwor KyAgTGFiZWwgaW5wdXRJc05hTjsKKysgIGlmIChmcm9tVHlwZSA9PSBNSVJUeXBlOjpEb3VibGUp IHsKKysgICAgYXNNYXNtKCkuYnJhbmNoRG91YmxlKEFzc2VtYmxlcjo6RG91YmxlVW5vcmRlcmVk LCBpbnB1dCwgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXRJc05hTik7 CisrICB9IGVsc2UgeworKyAgICBhc01hc20oKS5icmFuY2hGbG9hdChBc3NlbWJsZXI6OkRvdWJs ZVVub3JkZXJlZCwgaW5wdXQsIGlucHV0LCAmaW5wdXRJc05hTik7CisrICB9CisrCisrICBhc01h c20oKS53YXNtVHJhcCh3YXNtOjpUcmFwOjpJbnRlZ2VyT3ZlcmZsb3csIHRyYXBTaXRlRGVzYyk7 CisrICBhc01hc20oKS5iaW5kKCZpbnB1dElzTmFOKTsKKysgIGFzTWFzbSgpLndhc21UcmFwKHdh c206OlRyYXA6OkludmFsaWRDb252ZXJzaW9uVG9JbnRlZ2VyLCB0cmFwU2l0ZURlc2MpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpQb3BTdGFja1B0cigpIHsKKysgIGxvYWRQdHIoQWRk cmVzcyhTdGFja1BvaW50ZXIsIDApLCBTdGFja1BvaW50ZXIpOworKyAgYWRqdXN0RnJhbWUoLWlu dDMyX3Qoc2l6ZW9mKGludHB0cl90KSkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpw YXRjaFN1YjMyRnJvbU1lbUFuZEJyYW5jaElmTmVnYXRpdmUoQ29kZU9mZnNldCBvZmZzZXQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEltbTMyIGltbSkgeworKyAgaW50MzJfdCB2YWwgPSBpbW0udmFsdWU7CisrICBNT1pfUkVMRUFT RV9BU1NFUlQodmFsID49IDEgJiYgdmFsIDw9IDEyNyk7CisrICAvLyBQYXRjaCB0aGUgYWRkaSBp bnN0cnVjdGlvbiB0aGF0J3MgcmlnaHQgYmVmb3JlIHBhdGNoUG9pbnQuCisrICAvLyBhZGRpIGlz IDEgaW5zdHJ1Y3Rpb24gYmVmb3JlIHRoZSBDb2RlT2Zmc2V0ICh3aGljaCBpcyBhZnRlciB0aGUg YWRkaSkuCisrICBJbnN0cnVjdGlvbiogaW5zdCA9CisrICAgICAgKEluc3RydWN0aW9uKiltX2J1 ZmZlci5nZXRJbnN0KEJ1ZmZlck9mZnNldChvZmZzZXQub2Zmc2V0KCkgLSA0KSk7CisrICAvLyBS ZXdyaXRlIHRoZSBpbW1lZGlhdGUgZmllbGQgdG8gLXZhbC4KKysgIC8vIFBQQyBhZGRpOiBvcGNv ZGUoNikgfCBSVCg1KSB8IFJBKDUpIHwgU0koMTYpCisrICB1aW50MzJfdCBpbnN0V29yZCA9IGlu c3QtPmVuY29kZSgpOworKyAgdWludDMyX3QgYmFzZSA9IGluc3RXb3JkICYgMHhmZmZmMDAwMDsK KysgIGluc3QtPnNldERhdGEoYmFzZSB8ICh1aW50MTZfdCkoLXZhbCAmIDB4ZmZmZikpOworK30K KysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZsb2F0 UmVnaXN0ZXIgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBvdXRwdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xFbnRyeSkgeworKyAgU2NyYXRj aERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICAvLyBDbGVhciBWWENWSSAoYml0 IDIzKSBiZWZvcmUgdGhlIGNvbnZlcnNpb24gc28gd2UgY2FuIGRldGVjdCBvdmVyZmxvdy4KKysg IGFzX210ZnNiMCgyMyk7CisrICBhc19mY3Rpd3ooZnBzY3JhdGNoLCBpbnB1dCk7CisrICBhc19t ZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gpOworKyAgYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwor KyAgLy8gTW92ZSBGUFNDUiBmaWVsZCA1ICh3aGljaCBjb250YWlucyBWWENWSSkgdG8gQ1IwLgor KyAgLy8gSWYgdGhlIGNvbnZlcnNpb24gd2FzIGludmFsaWQgKE5hTiBvciBvdXQtb2YtcmFuZ2Up LCBWWENWST0xIOKGkiBTTyBzZXQuCisrICBhc19tY3JmcyhjcjAsIDUpOworKyAgbWFfYihTT0Jp dCwgb29sRW50cnkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVE b3VibGVUb1VJbnQzMihGbG9hdFJlZ2lzdGVyIGlucHV0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlzU2F0dXJhdGluZywK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCog b29sRW50cnkpIHsKKysgIFNjcmF0Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2goYXNNYXNtKCkpOwor KyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgIC8vIEFsd2F5cyBjaGVjayBmb3IgTmFOIOKA lCB0aGUgb29sIGhhbmRsZXIgY2xhbXBzIGZvciBzYXR1cmF0aW5nIG1vZGUuCisrICBhc19mY21w dShpbnB1dCwgaW5wdXQpOworKyAgbWFfYihEb3VibGVVbm9yZGVyZWQsIG9vbEVudHJ5KTsKKysg IGFzX2ZjdGlkeihmcHNjcmF0Y2gsIGlucHV0KTsKKysgIGFzX21mdnNyZChvdXRwdXQsIGZwc2Ny YXRjaCk7CisrICB4X3NyZGkoc2NyYXRjaCwgb3V0cHV0LCAzMik7CisrICBhc19leHRzdyhvdXRw dXQsIG91dHB1dCk7CisrICBhc19jbXBkaShzY3JhdGNoLCAwKTsKKysgIG1hX2IoTm90RXF1YWws IG9vbEVudHJ5KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRmxv YXQzMlRvSW50MzIoRmxvYXRSZWdpc3RlciBpbnB1dCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG9v bEVudHJ5KSB7CisrICBTY3JhdGNoRG91YmxlU2NvcGUgZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysg IGFzX210ZnNiMCgyMyk7CisrICBhc19mY3Rpd3ooZnBzY3JhdGNoLCBpbnB1dCk7CisrICBhc19t ZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gpOworKyAgYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOwor KyAgYXNfbWNyZnMoY3IwLCA1KTsKKysgIG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKKyt9CisrCisr dm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRmxvYXQzMlRvVUludDMyKEZsb2F0UmVn aXN0ZXIgaW5wdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIG91dHB1dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBpc1NhdHVyYXRpbmcsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsKiBvb2xFbnRyeSkgeworKyAgU2Ny YXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNx dWlyZSgpOworKyAgYXNfZmNtcHUoaW5wdXQsIGlucHV0KTsKKysgIG1hX2IoRG91YmxlVW5vcmRl cmVkLCBvb2xFbnRyeSk7CisrICBhc19mY3RpZHooZnBzY3JhdGNoLCBpbnB1dCk7CisrICBhc19t ZnZzcmQob3V0cHV0LCBmcHNjcmF0Y2gpOworKyAgeF9zcmRpKHNjcmF0Y2gsIG91dHB1dCwgMzIp OworKyAgYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOworKyAgYXNfY21wZGkoc2NyYXRjaCwgMCk7 CisrICBtYV9iKE5vdEVxdWFsLCBvb2xFbnRyeSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRvSW50NjQoCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQs IFJlZ2lzdGVyNjQgb3V0cHV0LCBib29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAor KyAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBEb3VibGUpIHsKKysgIE1P Wl9BU1NFUlQodGVtcERvdWJsZS5pc0ludmFsaWQoKSk7CisrICBTY3JhdGNoRG91YmxlU2NvcGUg ZnBzY3JhdGNoKGFzTWFzbSgpKTsKKysgIGFzX210ZnNiMCgyMyk7CisrICBhc19mY3RpZHooZnBz Y3JhdGNoLCBpbnB1dCk7CisrICBhc19tZnZzcmQob3V0cHV0LnJlZywgZnBzY3JhdGNoKTsKKysg IGFzX21jcmZzKGNyMCwgNSk7CisrICBtYV9iKFNPQml0LCBvb2xFbnRyeSk7CisrICBpZiAoaXNT YXR1cmF0aW5nKSB7CisrICAgIGJpbmQob29sUmVqb2luKTsKKysgIH0KKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6d2FzbVRydW5jYXRlRmxvYXQzMlRvSW50NjQoCisrICAgIEZsb2F0UmVn aXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBib29sIGlzU2F0dXJhdGluZywgTGFiZWwq IG9vbEVudHJ5LAorKyAgICBMYWJlbCogb29sUmVqb2luLCBGbG9hdFJlZ2lzdGVyIHRlbXBGbG9h dCkgeworKyAgTU9aX0FTU0VSVCh0ZW1wRmxvYXQuaXNJbnZhbGlkKCkpOworKyAgU2NyYXRjaERv dWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBhc19tdGZzYjAoMjMpOworKyAgYXNf ZmN0aWR6KGZwc2NyYXRjaCwgaW5wdXQpOworKyAgYXNfbWZ2c3JkKG91dHB1dC5yZWcsIGZwc2Ny YXRjaCk7CisrICBhc19tY3JmcyhjcjAsIDUpOworKyAgbWFfYihTT0JpdCwgb29sRW50cnkpOwor KyAgaWYgKGlzU2F0dXJhdGluZykgeworKyAgICBiaW5kKG9vbFJlam9pbik7CisrICB9CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21UcnVuY2F0ZURvdWJsZVRvVUludDY0KAorKyAg ICBGbG9hdFJlZ2lzdGVyIGlucHV0LCBSZWdpc3RlcjY0IG91dHB1dCwgYm9vbCBpc1NhdHVyYXRp bmcsIExhYmVsKiBvb2xFbnRyeSwKKysgICAgTGFiZWwqIG9vbFJlam9pbiwgRmxvYXRSZWdpc3Rl ciB0ZW1wRG91YmxlKSB7CisrICBNT1pfQVNTRVJUKHRlbXBEb3VibGUuaXNJbnZhbGlkKCkpOwor KyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7CisrICBhc19tdGZzYjAo MjMpOworKyAgYXNfZmN0aWR1eihmcHNjcmF0Y2gsIGlucHV0KTsKKysgIGFzX21mdnNyZChvdXRw dXQucmVnLCBmcHNjcmF0Y2gpOworKyAgYXNfbWNyZnMoY3IwLCA1KTsKKysgIG1hX2IoU09CaXQs IG9vbEVudHJ5KTsKKysgIGlmIChpc1NhdHVyYXRpbmcpIHsKKysgICAgYmluZChvb2xSZWpvaW4p OworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtVHJ1bmNhdGVGbG9hdDMy VG9VSW50NjQoCisrICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVyNjQgb3V0cHV0LCBi b29sIGlzU2F0dXJhdGluZywgTGFiZWwqIG9vbEVudHJ5LAorKyAgICBMYWJlbCogb29sUmVqb2lu LCBGbG9hdFJlZ2lzdGVyIHRlbXBGbG9hdCkgeworKyAgTU9aX0FTU0VSVCh0ZW1wRmxvYXQuaXNJ bnZhbGlkKCkpOworKyAgU2NyYXRjaERvdWJsZVNjb3BlIGZwc2NyYXRjaChhc01hc20oKSk7Cisr ICBhc19tdGZzYjAoMjMpOworKyAgYXNfZmN0aWR1eihmcHNjcmF0Y2gsIGlucHV0KTsKKysgIGFz X21mdnNyZChvdXRwdXQucmVnLCBmcHNjcmF0Y2gpOworKyAgYXNfbWNyZnMoY3IwLCA1KTsKKysg IG1hX2IoU09CaXQsIG9vbEVudHJ5KTsKKysgIGlmIChpc1NhdHVyYXRpbmcpIHsKKysgICAgYmlu ZChvb2xSZWpvaW4pOworKyAgfQorK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21w YXQ6OnByb2ZpbGVyRW50ZXJGcmFtZShSZWdpc3RlciBmcmFtZVB0ciwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7 CisrICBhc01hc20oKS5sb2FkSlNDb250ZXh0KHNjcmF0Y2gpOworKyAgbG9hZFB0cihBZGRyZXNz KHNjcmF0Y2gsIG9mZnNldG9mKEpTQ29udGV4dCwgcHJvZmlsaW5nQWN0aXZhdGlvbl8pKSwgc2Ny YXRjaCk7CisrICBzdG9yZVB0cihmcmFtZVB0ciwKKysgICAgICAgICAgIEFkZHJlc3Moc2NyYXRj aCwgSml0QWN0aXZhdGlvbjo6b2Zmc2V0T2ZMYXN0UHJvZmlsaW5nRnJhbWUoKSkpOworKyAgc3Rv cmVQdHIoSW1tUHRyKG51bGxwdHIpLAorKyAgICAgICAgICAgQWRkcmVzcyhzY3JhdGNoLCBKaXRB Y3RpdmF0aW9uOjpvZmZzZXRPZkxhc3RQcm9maWxpbmdDYWxsU2l0ZSgpKSk7CisrfQorKworK3Zv aWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6cHJvZmlsZXJFeGl0RnJhbWUoKSB7CisrICBq dW1wKGFzTWFzbSgpLnJ1bnRpbWUoKS0+aml0UnVudGltZSgpLT5nZXRQcm9maWxlckV4aXRGcmFt ZVRhaWwoKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6bWFfbW9k X21hc2soUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgaG9sZCwgUmVnaXN0ZXIgcmVtYWluLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzaGlm dCwgTGFiZWwqIG5lZ1plcm8pIHsKKysgIC8vIENvbXB1dGUgeCAlICgoMTw8c2hpZnQpIC0gMSkg YnkgZGlnaXQtc3VtbWluZyBpbiBiYXNlIGIgPSAxPDxzaGlmdC4KKysgIC8vIFNpbmNlIGIgJSAo Yi0xKSA9PSAxLCB4ICUgKGItMSkgPT0gc3VtIG9mIGJhc2UtYiBkaWdpdHMgb2YgeCwgbW9kIChi LTEpLgorKyAgaW50MzJfdCBtYXNrID0gKDEgPDwgc2hpZnQpIC0gMTsKKysgIExhYmVsIGhlYWQs IG5lZ2F0aXZlLCBzdW1TaWduZWQsIGRvbmU7CisrCisrICBhc19vcl8ocmVtYWluLCBzcmMsIHNy Yyk7ICAvLyBtb3ZlIHNyYyAtPiByZW1haW4KKysgIHhzX2xpKGRlc3QsIDApOworKworKyAgLy8g Q2hlY2sgc2lnbiAoMzItYml0IHNpZ25lZCBjb21wYXJpc29uKQorKyAgYXNfY21wd2kocmVtYWlu LCAwKTsKKysgIG1hX2IoQXNzZW1ibGVyOjpMZXNzVGhhbiwgJm5lZ2F0aXZlKTsKKysgIHhzX2xp KGhvbGQsIDEpOworKyAganVtcCgmaGVhZCk7CisrCisrICBiaW5kKCZuZWdhdGl2ZSk7CisrICB4 c19saShob2xkLCAtMSk7CisrICBhc19uZWcocmVtYWluLCByZW1haW4pOworKyAgYXNfcmxkaWNs KHJlbWFpbiwgcmVtYWluLCAwLCAzMik7CisrCisrICBiaW5kKCZoZWFkKTsKKysgIHsKKysgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoYXNNYXNtKCkpOworKyAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKworKyAgICAvLyBFeHRyYWN0IGJvdHRvbSAnc2hp ZnQnIGJpdHM6IHNjcmF0Y2ggPSByZW1haW4gJiBtYXNrCisrICAgIG1vdmUzMihJbW0zMihtYXNr KSwgc2NyYXRjaCk7CisrICAgIGFzX2FuZF8oc2NyYXRjaCwgcmVtYWluLCBzY3JhdGNoKTsKKysK KysgICAgLy8gQWRkIHRvIGFjY3VtdWxhdG9yCisrICAgIGFzX2FkZChkZXN0LCBkZXN0LCBzY3Jh dGNoKTsKKysKKysgICAgLy8gVHJpYWwgc3VidHJhY3Rpb246IHNjcmF0Y2ggPSBkZXN0IC0gbWFz aworKyAgICBtb3ZlMzIoSW1tMzIobWFzayksIHNjcmF0Y2gpOworKyAgICBhc19zdWJmKHNjcmF0 Y2gsIHNjcmF0Y2gsIGRlc3QpOyAgLy8gc2NyYXRjaCA9IGRlc3QgLSBzY3JhdGNoCisrCisrICAg IC8vIElmIChkZXN0IC0gbWFzaykgPiAwLCBrZWVwIHRoZSBzdWJ0cmFjdGVkIHZhbHVlCisrICAg IGFzX2NtcHdpKHNjcmF0Y2gsIDApOworKyAgICBtYV9iKEFzc2VtYmxlcjo6TGVzc1RoYW4sICZz dW1TaWduZWQpOworKyAgICBhc19vcl8oZGVzdCwgc2NyYXRjaCwgc2NyYXRjaCk7ICAvLyBkZXN0 ID0gc2NyYXRjaAorKyAgICBiaW5kKCZzdW1TaWduZWQpOworKworKyAgICAvLyBTaGlmdCBvdXQg dGhlIGJpdHMgd2UganVzdCBwcm9jZXNzZWQKKysgICAgeF9zcndpKHJlbWFpbiwgcmVtYWluLCBz aGlmdCk7CisrCisrICAgIC8vIENvbnRpbnVlIGlmIHJlbWFpbiAhPSAwCisrICAgIGFzX2NtcHdp KHJlbWFpbiwgMCk7CisrICAgIG1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmhlYWQpOworKyAg fQorKworKyAgLy8gSWYgaW5wdXQgd2FzIG5lZ2F0aXZlLCBuZWdhdGUgcmVzdWx0CisrICBhc19j bXB3aShob2xkLCAwKTsKKysgIG1hX2IoQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsICZk b25lKTsKKysKKysgIGlmIChuZWdaZXJvICE9IG51bGxwdHIpIHsKKysgICAgYXNfY21wd2koZGVz dCwgMCk7CisrICAgIG1hX2IoQXNzZW1ibGVyOjpFcXVhbCwgbmVnWmVybyk7CisrICB9CisrCisr ICBhc19uZWcoZGVzdCwgZGVzdCk7CisrICBhc19leHRzdyhkZXN0LCBkZXN0KTsKKysKKysgIGJp bmQoJmRvbmUpOworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBBdG9taWMgb3BlcmF0 aW9ucy4KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdGF0aWMgdm9pZCBDb21wYXJlRXhj aGFuZ2UoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIG9sZHZhbCwg UmVnaXN0ZXIgbmV3dmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2 YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpIHsKKysgIFVzZVNjcmF0Y2hS ZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgYm9vbCBzaWduRXh0ZW5kID0gU2NhbGFyOjpp c1NpZ25lZEludFR5cGUodHlwZSk7CisrICB1bnNpZ25lZCBuYnl0ZXMgPSBTY2FsYXI6OmJ5dGVT aXplKHR5cGUpOworKworKyAgc3dpdGNoIChuYnl0ZXMpIHsKKysgICAgY2FzZSAxOgorKyAgICBj YXNlIDI6CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDoKKysgICAgICBNT1pfQVNTRVJUKHZh bHVlVGVtcCA9PSBJbnZhbGlkUmVnKTsKKysgICAgICBNT1pfQVNTRVJUKG9mZnNldFRlbXAgPT0g SW52YWxpZFJlZyk7CisrICAgICAgTU9aX0FTU0VSVChtYXNrVGVtcCA9PSBJbnZhbGlkUmVnKTsK KysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goKTsKKysgIH0K KysKKysgIExhYmVsIGFnYWluLCBlbmQ7CisrCisrICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhtZW0sIHNjcmF0Y2gp OworKworKyAgaWYgKG5ieXRlcyA9PSA0KSB7CisrICAgIG1hc20ubWVtb3J5QmFycmllckJlZm9y ZShzeW5jKTsKKysgICAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisrICAgIGlmIChhY2Nlc3MpIHsK KysgICAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZElt cGwKKysgICAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0 b21pYywKKysgICAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50 T2Zmc2V0KCkpKTsKKysgICAgfQorKworKyAgICBtYXNtLmFzX2x3YXJ4KG91dHB1dCwgcjAsIHNj cmF0Y2gpOworKyAgICAvLyBtYV9jbXAoLi4uLCBpczMyYml0PXRydWUpIGVtaXRzIGNtcHcsIHdo aWNoIGNvbXBhcmVzIG9ubHkgYml0cworKyAgICAvLyAzMjo2MyAobG93IDMyKSBvZiBib3RoIG9w ZXJhbmRzIHBlciBJU0EgdjMuMEIuIFRoZSB1cHBlcgorKyAgICAvLyAzMiBiaXRzIG9mIG9sZHZh bCBhcmUgaWdub3JlZCwgc28gbm8gY2Fub25pY2FsaXNpbmcgZXh0c3cgbmVlZGVkLgorKyAgICBt YXNtLm1hX2NtcChvdXRwdXQsIG9sZHZhbCwgQXNzZW1ibGVyOjpOb3RFcXVhbCwgLyogaXMzMmJp dCAqLyB0cnVlKTsKKysgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZlbmQpOwor KyAgICBtYXNtLmFzX3N0d2N4KG5ld3ZhbCwgcjAsIHNjcmF0Y2gpOworKyAgICBtYXNtLm1hX2Io QXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKKysKKysgICAgbWFzbS5tZW1vcnlCYXJyaWVy QWZ0ZXIoc3luYyk7CisrICAgIG1hc20uYmluZCgmZW5kKTsKKysgICAgLy8gbHdhcnggemVyby1l eHRlbmRzOyBzaWduLWV4dGVuZCBmb3IgMzItYml0IGNhbm9uaWNhbCBmb3JtLgorKyAgICBtYXNt LmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsKKysKKysgICAgcmV0dXJuOworKyAgfQorKworKyAg Ly8gU3ViLXdvcmQgKDEgb3IgMiBieXRlKSBjb21wYXJlLWV4Y2hhbmdlIHZpYSBuYXRpdmUgbGJh cngvbGhhcnggKworKyAgLy8gc3RiY3guL3N0aGN4LiBQT1dFUjcrICh3ZWxsIGJlbG93IG91ciBQ T1dFUjggYmFzZWxpbmUpLiBSZXBsYWNlcyB0aGUgcHJpb3IKKysgIC8vIHJvdW5kLWRvd24tdG8t d29yZAorKyAgLy8gKyBtYXNrICsgUk1XIGRhbmNlLiBsWGFyeCB6ZXJvLWV4dGVuZHMgdGhlIGxv YWRlZCBieXRlL2hhbGY7IHN0WGN4LiBzdG9yZXMKKysgIC8vIG9ubHkgdGhlIGxvdyA4LzE2IGJp dHMgb2YgUlMsIHNvIG5vIHByZS1tYXNraW5nIGlzIG5lZWRlZCBvbiB0aGUgc3RvcmUKKysgIC8v IHNpZGUuIG9mZnNldFRlbXAgLyBtYXNrVGVtcCBhcmUgc3RpbGwgYWxsb2NhdGVkIGJ5IHRoZSBs b3dlcmluZyBidXQgdW51c2VkCisrICAvLyBoZXJlLgorKyAgKHZvaWQpb2Zmc2V0VGVtcDsKKysg ICh2b2lkKW1hc2tUZW1wOworKworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOwor KworKyAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisrICBpZiAoYWNjZXNzKSB7CisrICAgIG1hc20u Zmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAorKyAgICBtYXNt LmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKKysgICAgICAg ICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7CisrICB9 CisrCisrICBzd2l0Y2ggKG5ieXRlcykgeworKyAgICBjYXNlIDE6CisrICAgICAgbWFzbS5hc19s YmFyeChvdXRwdXQsIHIwLCBzY3JhdGNoKTsKKysgICAgICBpZiAoc2lnbkV4dGVuZCkgeworKyAg ICAgICAgbWFzbS5hc19leHRzYih2YWx1ZVRlbXAsIG9sZHZhbCk7CisrICAgICAgICBtYXNtLmFz X2V4dHNiKG91dHB1dCwgb3V0cHV0KTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5h c19hbmRpX3JjKHZhbHVlVGVtcCwgb2xkdmFsLCAweGZmKTsKKysgICAgICB9CisrICAgICAgYnJl YWs7CisrICAgIGNhc2UgMjoKKysgICAgICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwgcjAsIHNjcmF0 Y2gpOworKyAgICAgIGlmIChzaWduRXh0ZW5kKSB7CisrICAgICAgICBtYXNtLmFzX2V4dHNoKHZh bHVlVGVtcCwgb2xkdmFsKTsKKysgICAgICAgIG1hc20uYXNfZXh0c2gob3V0cHV0LCBvdXRwdXQp OworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLmFzX3Jsd2lubSh2YWx1ZVRlbXAsIG9s ZHZhbCwgMCwgMTYsIDMxKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICB9CisrCisrICBt YXNtLm1hX2NtcChvdXRwdXQsIHZhbHVlVGVtcCwgQXNzZW1ibGVyOjpOb3RFcXVhbCwgLyogaXMz MmJpdCAqLyB0cnVlKTsKKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmZW5kKTsK KysKKysgIGlmIChuYnl0ZXMgPT0gMSkgeworKyAgICBtYXNtLmFzX3N0YmN4KG5ld3ZhbCwgcjAs IHNjcmF0Y2gpOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5hc19zdGhjeChuZXd2YWwsIHIwLCBz Y3JhdGNoKTsKKysgIH0KKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4p OworKworKyAgbWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7CisrCisrICBtYXNtLmJpbmQo JmVuZCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIENvbXBh cmVFeGNoYW5nZTY0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgVCYgbWVt LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgZXhwZWN0LCBSZWdp c3RlcjY0IHJlcGxhY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2 NCBvdXRwdXQpIHsKKysgIE1PWl9BU1NFUlQoZXhwZWN0ICE9IG91dHB1dCAmJiByZXBsYWNlICE9 IG91dHB1dCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3Rp dmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7CisrCisrICBMYWJlbCB0cnlBZ2FpbjsKKysgIExhYmVs IGV4aXQ7CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7CisrCisrICBtYXNt LmJpbmQoJnRyeUFnYWluKTsKKysKKysgIGlmIChhY2Nlc3MpIHsKKysgICAgbWFzbS5mbHVzaEJ1 ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICAgIG1hc20uYXBwZW5k KCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5zbjo6QXRvbWljLAorKyAgICAgICAgICAgICAg ICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsKKysgIH0KKysKKysg IG1hc20uYXNfbGRhcngob3V0cHV0LnJlZywgcjAsIHNjcmF0Y2gpOworKworKyAgbWFzbS5tYV9j bXAob3V0cHV0LnJlZywgZXhwZWN0LnJlZywgQXNzZW1ibGVyOjpOb3RFcXVhbCk7CisrICBtYXNt Lm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmV4aXQpOworKyAgbWFzbS5hc19zdGRjeChyZXBs YWNlLnJlZywgcjAsIHNjcmF0Y2gpOworKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWws ICZ0cnlBZ2Fpbik7CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKKysKKysg IG1hc20uYmluZCgmZXhpdCk7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRp YyB2b2lkIEF0b21pY0V4Y2hhbmdlKE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICBTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0 aW9uIHN5bmMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgbWVtLCBSZWdp c3RlciB2YWx1ZSwgUmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMobWFzbSk7CisrICBib29sIHNpZ25FeHRlbmQgPSBTY2FsYXI6OmlzU2lnbmVk SW50VHlwZSh0eXBlKTsKKysgIHVuc2lnbmVkIG5ieXRlcyA9IFNjYWxhcjo6Ynl0ZVNpemUodHlw ZSk7CisrCisrICBzd2l0Y2ggKG5ieXRlcykgeworKyAgICBjYXNlIDE6CisrICAgIGNhc2UgMjoK KysgICAgICBicmVhazsKKysgICAgY2FzZSA0OgorKyAgICAgIE1PWl9BU1NFUlQodmFsdWVUZW1w ID09IEludmFsaWRSZWcpOworKyAgICAgIE1PWl9BU1NFUlQob2Zmc2V0VGVtcCA9PSBJbnZhbGlk UmVnKTsKKysgICAgICBNT1pfQVNTRVJUKG1hc2tUZW1wID09IEludmFsaWRSZWcpOworKyAgICAg IGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgpOworKyAgfQorKworKyAg TGFiZWwgYWdhaW47CisrCisrICBSZWdpc3RlciBtZW1UZW1wID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhtZW0sIG1lbVRlbXApOworKworKyAgaWYg KG5ieXRlcyA9PSA0KSB7CisrICAgIG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysg ICAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisrICAgIGlmIChhY2Nlc3MpIHsKKysgICAgICBtYXNt LmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKKysgICAgICBt YXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc246OkF0b21pYywKKysgICAg ICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJyZW50T2Zmc2V0KCkpKTsK KysgICAgfQorKworKyAgICBtYXNtLmFzX2x3YXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOworKyAg ICBtYXNtLmFzX3N0d2N4KHZhbHVlLCByMCwgbWVtVGVtcCk7CisrICAgIG1hc20ubWFfYihBc3Nl bWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOworKworKyAgICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRl cihzeW5jKTsKKysgICAgLy8gbHdhcnggemVyby1leHRlbmRzOyBzaWduLWV4dGVuZCBmb3IgMzIt Yml0IGNhbm9uaWNhbCBmb3JtLgorKyAgICBtYXNtLmFzX2V4dHN3KG91dHB1dCwgb3V0cHV0KTsK KysKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgLy8gU3ViLXdvcmQgZXhjaGFuZ2UgdmlhIG5h dGl2ZSBsYmFyeC9saGFyeCArIHN0YmN4Li9zdGhjeC4gKFBPV0VSNyspLgorKyAgLy8gdmFsdWVU ZW1wIC8gb2Zmc2V0VGVtcCAvIG1hc2tUZW1wIGFyZSBzdGlsbCBhbGxvY2F0ZWQgYnkgdGhlIGxv d2VyaW5nIGJ1dAorKyAgLy8gdW51c2VkIGhlcmUuCisrICAodm9pZCl2YWx1ZVRlbXA7CisrICAo dm9pZClvZmZzZXRUZW1wOworKyAgKHZvaWQpbWFza1RlbXA7CisrCisrICBtYXNtLm1lbW9yeUJh cnJpZXJCZWZvcmUoc3luYyk7CisrCisrICBtYXNtLmJpbmQoJmFnYWluKTsKKysKKysgIGlmIChh Y2Nlc3MpIHsKKysgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2Fz bUxvYWRJbXBsCisrICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5z bjo6QXRvbWljLAorKyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJy ZW50T2Zmc2V0KCkpKTsKKysgIH0KKysKKysgIGlmIChuYnl0ZXMgPT0gMSkgeworKyAgICBtYXNt LmFzX2xiYXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOworKyAgICBtYXNtLmFzX3N0YmN4KHZhbHVl LCByMCwgbWVtVGVtcCk7CisrICB9IGVsc2UgeworKyAgICBtYXNtLmFzX2xoYXJ4KG91dHB1dCwg cjAsIG1lbVRlbXApOworKyAgICBtYXNtLmFzX3N0aGN4KHZhbHVlLCByMCwgbWVtVGVtcCk7Cisr ICB9CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKKysKKysgIGlm IChzaWduRXh0ZW5kKSB7CisrICAgIGlmIChuYnl0ZXMgPT0gMSkgeworKyAgICAgIG1hc20uYXNf ZXh0c2Iob3V0cHV0LCBvdXRwdXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIG1hc20uYXNfZXh0 c2gob3V0cHV0LCBvdXRwdXQpOworKyAgICB9CisrICB9CisrICAvLyBVbnNpZ25lZDogbGJhcngv bGhhcnggYWxyZWFkeSB6ZXJvLWV4dGVuZDsgb3V0cHV0IGlzIGNhbm9uaWNhbC4KKysKKysgIG1h c20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKytzdGF0aWMgdm9pZCBBdG9taWNFeGNoYW5nZTY0KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVz YyogYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9u IHN5bmMsIGNvbnN0IFQmIG1lbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyNjQgdmFsdWUsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7CisrICBNT1pfQVNTRVJUKHZhbHVlICE9 IG91dHB1dCk7CisrICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysKKysg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZl Y3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7CisrCisrICBMYWJlbCB0cnlBZ2FpbjsKKysKKysg IG1hc20ubWVtb3J5QmFycmllckJlZm9yZShzeW5jKTsKKysKKysgIG1hc20uYmluZCgmdHJ5QWdh aW4pOworKworKyAgaWYgKGFjY2VzcykgeworKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBz ZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwKKysgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2Fz bTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCisrICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29k ZU9mZnNldChtYXNtLmN1cnJlbnRPZmZzZXQoKSkpOworKyAgfQorKworKyAgbWFzbS5hc19sZGFy eChvdXRwdXQucmVnLCByMCwgc2NyYXRjaCk7CisrCisrICBtYXNtLmFzX3N0ZGN4KHZhbHVlLnJl ZywgcjAsIHNjcmF0Y2gpOworKyAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZ0cnlB Z2Fpbik7CisrCisrICBtYXNtLm1lbW9yeUJhcnJpZXJBZnRlcihzeW5jKTsKKyt9CisrCisrdGVt cGxhdGUgPHR5cGVuYW1lIFQ+Cisrc3RhdGljIHZvaWQgQXRvbWljRmV0Y2hPcChNYWNyb0Fzc2Vt YmxlciYgbWFzbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9y eUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFNjYWxhcjo6 VHlwZSB0eXBlLCBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2 YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1w LCBSZWdpc3RlciBtYXNrVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IG91dHB1dCkgeworKyAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICBi b29sIHNpZ25FeHRlbmQgPSBTY2FsYXI6OmlzU2lnbmVkSW50VHlwZSh0eXBlKTsKKysgIHVuc2ln bmVkIG5ieXRlcyA9IFNjYWxhcjo6Ynl0ZVNpemUodHlwZSk7CisrCisrICBzd2l0Y2ggKG5ieXRl cykgeworKyAgICBjYXNlIDE6CisrICAgIGNhc2UgMjoKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSA0OgorKyAgICAgIE1PWl9BU1NFUlQodmFsdWVUZW1wID09IEludmFsaWRSZWcpOworKyAgICAg IE1PWl9BU1NFUlQob2Zmc2V0VGVtcCA9PSBJbnZhbGlkUmVnKTsKKysgICAgICBNT1pfQVNTRVJU KG1hc2tUZW1wID09IEludmFsaWRSZWcpOworKyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0Ogor KyAgICAgIE1PWl9DUkFTSCgpOworKyAgfQorKworKyAgTGFiZWwgYWdhaW47CisrCisrICBSZWdp c3RlciBtZW1UZW1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAgbWFzbS5jb21wdXRlRWZmZWN0aXZl QWRkcmVzcyhtZW0sIG1lbVRlbXApOworKworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFj cXVpcmUoKTsKKysKKysgIGlmIChuYnl0ZXMgPT0gNCkgeworKyAgICBtYXNtLm1lbW9yeUJhcnJp ZXJCZWZvcmUoc3luYyk7CisrICAgIG1hc20uYmluZCgmYWdhaW4pOworKworKyAgICBpZiAoYWNj ZXNzKSB7CisrICAgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2Fz bUxvYWRJbXBsCisrICAgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJ bnNuOjpBdG9taWMsCisrICAgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20u Y3VycmVudE9mZnNldCgpKSk7CisrICAgIH0KKysKKysgICAgbWFzbS5hc19sd2FyeChvdXRwdXQs IHIwLCBtZW1UZW1wKTsKKysKKysgICAgc3dpdGNoIChvcCkgeworKyAgICAgIGNhc2UgQXRvbWlj T3A6OkFkZDoKKysgICAgICAgIG1hc20uYXNfYWRkKHNjcmF0Y2gsIG91dHB1dCwgdmFsdWUpOwor KyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBBdG9taWNPcDo6U3ViOgorKyAgICAgICAgbWFz bS5hc19zdWJmKHNjcmF0Y2gsIHZhbHVlLCBvdXRwdXQpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgY2FzZSBBdG9taWNPcDo6QW5kOgorKyAgICAgICAgbWFzbS5hc19hbmRfKHNjcmF0Y2gsIG91 dHB1dCwgdmFsdWUpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSBBdG9taWNPcDo6T3I6 CisrICAgICAgICBtYXNtLmFzX29yXyhzY3JhdGNoLCBvdXRwdXQsIHZhbHVlKTsKKysgICAgICAg IGJyZWFrOworKyAgICAgIGNhc2UgQXRvbWljT3A6OlhvcjoKKysgICAgICAgIG1hc20uYXNfeG9y XyhzY3JhdGNoLCBvdXRwdXQsIHZhbHVlKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGRlZmF1 bHQ6CisrICAgICAgICBNT1pfQ1JBU0goKTsKKysgICAgfQorKworKyAgICBtYXNtLmFzX3N0d2N4 KHNjcmF0Y2gsIHIwLCBtZW1UZW1wKTsKKysgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1 YWwsICZhZ2Fpbik7CisrCisrICAgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOworKyAg ICAvLyBsd2FyeCB6ZXJvLWV4dGVuZHM7IHNpZ24tZXh0ZW5kIGZvciAzMi1iaXQgY2Fub25pY2Fs IGZvcm0uCisrICAgIG1hc20uYXNfZXh0c3cob3V0cHV0LCBvdXRwdXQpOworKworKyAgICByZXR1 cm47CisrICB9CisrCisrICAvLyBTdWItd29yZCBmZXRjaC1hbmQtb3AgdmlhIG5hdGl2ZSBsYmFy eC9saGFyeCArIHN0YmN4Li9zdGhjeC4gKFBPV0VSNyspLgorKyAgLy8gYG91dHB1dGAgaG9sZHMg dGhlIHByZS1vcCBsb2FkZWQgdmFsdWUgKHJldHVybmVkIHRvIGNhbGxlcik7IGB2YWx1ZVRlbXBg CisrICAvLyBpcyB0aGUgcG9zdC1vcCB2YWx1ZSB3ZSBjb25kaXRpb24tc3RvcmUuIHN0WGN4LiBv bmx5IHN0b3JlcyBsb3cgOC8xNiBiaXRzCisrICAvLyBvZiBSUywgc28gbm8gcHJlLW1hc2sgb2Yg dmFsdWVUZW1wIGlzIG5lZWRlZC4KKysgIC8vIG9mZnNldFRlbXAgLyBtYXNrVGVtcCBhcmUgc3Rp bGwgYWxsb2NhdGVkIGJ5IHRoZSBsb3dlcmluZyBidXQgdW51c2VkOyB0aGUKKysgIC8vIGxvY2Fs IGBzY3JhdGNoYCBpcyBvbmx5IHVzZWQgaW4gdGhlIDQtYnl0ZSBicmFuY2ggYWJvdmUuCisrICAo dm9pZClvZmZzZXRUZW1wOworKyAgKHZvaWQpbWFza1RlbXA7CisrCisrICBtYXNtLm1lbW9yeUJh cnJpZXJCZWZvcmUoc3luYyk7CisrCisrICBtYXNtLmJpbmQoJmFnYWluKTsKKysKKysgIGlmIChh Y2Nlc3MpIHsKKysgICAgbWFzbS5mbHVzaEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2Fz bUxvYWRJbXBsCisrICAgIG1hc20uYXBwZW5kKCphY2Nlc3MsIHdhc206OlRyYXBNYWNoaW5lSW5z bjo6QXRvbWljLAorKyAgICAgICAgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQobWFzbS5jdXJy ZW50T2Zmc2V0KCkpKTsKKysgIH0KKysKKysgIGlmIChuYnl0ZXMgPT0gMSkgeworKyAgICBtYXNt LmFzX2xiYXJ4KG91dHB1dCwgcjAsIG1lbVRlbXApOworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5h c19saGFyeChvdXRwdXQsIHIwLCBtZW1UZW1wKTsKKysgIH0KKysKKysgIHN3aXRjaCAob3ApIHsK KysgICAgY2FzZSBBdG9taWNPcDo6QWRkOgorKyAgICAgIG1hc20uYXNfYWRkKHZhbHVlVGVtcCwg b3V0cHV0LCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRvbWljT3A6OlN1YjoK KysgICAgICBtYXNtLmFzX3N1YmYodmFsdWVUZW1wLCB2YWx1ZSwgb3V0cHV0KTsKKysgICAgICBi cmVhazsKKysgICAgY2FzZSBBdG9taWNPcDo6QW5kOgorKyAgICAgIG1hc20uYXNfYW5kXyh2YWx1 ZVRlbXAsIG91dHB1dCwgdmFsdWUpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEF0b21pY09w OjpPcjoKKysgICAgICBtYXNtLmFzX29yXyh2YWx1ZVRlbXAsIG91dHB1dCwgdmFsdWUpOworKyAg ICAgIGJyZWFrOworKyAgICBjYXNlIEF0b21pY09wOjpYb3I6CisrICAgICAgbWFzbS5hc194b3Jf KHZhbHVlVGVtcCwgb3V0cHV0LCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6 CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9CisrCisrICBpZiAobmJ5dGVzID09IDEpIHsKKysg ICAgbWFzbS5hc19zdGJjeCh2YWx1ZVRlbXAsIHIwLCBtZW1UZW1wKTsKKysgIH0gZWxzZSB7Cisr ICAgIG1hc20uYXNfc3RoY3godmFsdWVUZW1wLCByMCwgbWVtVGVtcCk7CisrICB9CisrICBtYXNt Lm1hX2IoQXNzZW1ibGVyOjpOb3RFcXVhbCwgJmFnYWluKTsKKysKKysgIGlmIChzaWduRXh0ZW5k KSB7CisrICAgIGlmIChuYnl0ZXMgPT0gMSkgeworKyAgICAgIG1hc20uYXNfZXh0c2Iob3V0cHV0 LCBvdXRwdXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIG1hc20uYXNfZXh0c2gob3V0cHV0LCBv dXRwdXQpOworKyAgICB9CisrICB9CisrICAvLyBVbnNpZ25lZDogbGJhcngvbGhhcnggYWxyZWFk eSB6ZXJvLWV4dGVuZDsgb3V0cHV0IGlzIGNhbm9uaWNhbC4KKysKKysgIG1hc20ubWVtb3J5QmFy cmllckFmdGVyKHN5bmMpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdGF0aWMg dm9pZCBBdG9taWNGZXRjaE9wNjQoTWFjcm9Bc3NlbWJsZXImIG1hc20sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2VzcywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09w IG9wLCBSZWdpc3RlcjY0IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBUJiBtZW0sIFJlZ2lzdGVyNjQgdGVtcCwgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIE1PWl9B U1NFUlQodmFsdWUgIT0gb3V0cHV0KTsKKysgIE1PWl9BU1NFUlQodmFsdWUgIT0gdGVtcCk7Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1l bSwgc2NyYXRjaCk7CisrCisrICBMYWJlbCB0cnlBZ2FpbjsKKysKKysgIG1hc20ubWVtb3J5QmFy cmllckJlZm9yZShzeW5jKTsKKysKKysgIG1hc20uYmluZCgmdHJ5QWdhaW4pOworKworKyAgaWYg KGFjY2VzcykgeworKyAgICBtYXNtLmZsdXNoQnVmZmVyKCk7ICAvLyBzZWUgY29tbWVudCBpbiB3 YXNtTG9hZEltcGwKKysgICAgbWFzbS5hcHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJ bnNuOjpBdG9taWMsCisrICAgICAgICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChtYXNtLmN1 cnJlbnRPZmZzZXQoKSkpOworKyAgfQorKworKyAgbWFzbS5hc19sZGFyeChvdXRwdXQucmVnLCBy MCwgc2NyYXRjaCk7CisrCisrICBzd2l0Y2ggKG9wKSB7CisrICAgIGNhc2UgQXRvbWljT3A6OkFk ZDoKKysgICAgICBtYXNtLmFzX2FkZCh0ZW1wLnJlZywgb3V0cHV0LnJlZywgdmFsdWUucmVnKTsK KysgICAgICBicmVhazsKKysgICAgY2FzZSBBdG9taWNPcDo6U3ViOgorKyAgICAgIG1hc20uYXNf c3ViZih0ZW1wLnJlZywgdmFsdWUucmVnLCBvdXRwdXQucmVnKTsKKysgICAgICBicmVhazsKKysg ICAgY2FzZSBBdG9taWNPcDo6QW5kOgorKyAgICAgIG1hc20uYXNfYW5kXyh0ZW1wLnJlZywgb3V0 cHV0LnJlZywgdmFsdWUucmVnKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBBdG9taWNPcDo6 T3I6CisrICAgICAgbWFzbS5hc19vcl8odGVtcC5yZWcsIG91dHB1dC5yZWcsIHZhbHVlLnJlZyk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRvbWljT3A6OlhvcjoKKysgICAgICBtYXNtLmFz X3hvcl8odGVtcC5yZWcsIG91dHB1dC5yZWcsIHZhbHVlLnJlZyk7CisrICAgICAgYnJlYWs7Cisr ICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9CisrCisrICBtYXNtLmFzX3N0 ZGN4KHRlbXAucmVnLCByMCwgc2NyYXRjaCk7CisrICBtYXNtLm1hX2IoQXNzZW1ibGVyOjpOb3RF cXVhbCwgJnRyeUFnYWluKTsKKysKKysgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOwor K30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdGF0aWMgdm9pZCBBdG9taWNFZmZlY3RP cChNYWNyb0Fzc2VtYmxlciYgbWFzbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjKiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLCBBdG9taWNPcCBv cCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUJiBtZW0sIFJlZ2lzdGVyIHZh bHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXApIHsKKysgIFVzZVNjcmF0Y2hSZWdp c3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgdW5zaWduZWQgbmJ5dGVzID0gU2NhbGFyOjpieXRl U2l6ZSh0eXBlKTsKKysKKysgIHN3aXRjaCAobmJ5dGVzKSB7CisrICAgIGNhc2UgMToKKysgICAg Y2FzZSAyOgorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDQ6CisrICAgICAgTU9aX0FTU0VSVCh2 YWx1ZVRlbXAgPT0gSW52YWxpZFJlZyk7CisrICAgICAgTU9aX0FTU0VSVChvZmZzZXRUZW1wID09 IEludmFsaWRSZWcpOworKyAgICAgIE1PWl9BU1NFUlQobWFza1RlbXAgPT0gSW52YWxpZFJlZyk7 CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgTU9aX0NSQVNIKCk7CisrICB9 CisrCisrICBMYWJlbCBhZ2FpbjsKKysKKysgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICBtYXNtLmNvbXB1dGVFZmZlY3RpdmVBZGRyZXNzKG1lbSwgc2NyYXRjaCk7Cisr CisrICBSZWdpc3RlciBzY3JhdGNoMiA9IHRlbXBzLkFjcXVpcmUoKTsKKysKKysgIGlmIChuYnl0 ZXMgPT0gNCkgeworKyAgICBtYXNtLm1lbW9yeUJhcnJpZXJCZWZvcmUoc3luYyk7CisrICAgIG1h c20uYmluZCgmYWdhaW4pOworKworKyAgICBpZiAoYWNjZXNzKSB7CisrICAgICAgbWFzbS5mbHVz aEJ1ZmZlcigpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICAgICAgbWFzbS5h cHBlbmQoKmFjY2Vzcywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpBdG9taWMsCisrICAgICAgICAg ICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9mZnNldCgpKSk7CisrICAg IH0KKysKKysgICAgbWFzbS5hc19sd2FyeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOworKworKyAg ICBzd2l0Y2ggKG9wKSB7CisrICAgICAgY2FzZSBBdG9taWNPcDo6QWRkOgorKyAgICAgICAgbWFz bS5hc19hZGQoc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgICBicmVhazsKKysg ICAgICBjYXNlIEF0b21pY09wOjpTdWI6CisrICAgICAgICBtYXNtLmFzX3N1YmYoc2NyYXRjaDIs IHZhbHVlLCBzY3JhdGNoMik7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEF0b21pY09w OjpBbmQ6CisrICAgICAgICBtYXNtLmFzX2FuZF8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7 CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIEF0b21pY09wOjpPcjoKKysgICAgICAgIG1h c20uYXNfb3JfKHNjcmF0Y2gyLCBzY3JhdGNoMiwgdmFsdWUpOworKyAgICAgICAgYnJlYWs7Cisr ICAgICAgY2FzZSBBdG9taWNPcDo6WG9yOgorKyAgICAgICAgbWFzbS5hc194b3JfKHNjcmF0Y2gy LCBzY3JhdGNoMiwgdmFsdWUpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysg ICAgICAgIE1PWl9DUkFTSCgpOworKyAgICB9CisrCisrICAgIG1hc20uYXNfc3R3Y3goc2NyYXRj aDIsIHIwLCBzY3JhdGNoKTsKKysgICAgbWFzbS5tYV9iKEFzc2VtYmxlcjo6Tm90RXF1YWwsICZh Z2Fpbik7CisrCisrICAgIG1hc20ubWVtb3J5QmFycmllckFmdGVyKHN5bmMpOworKworKyAgICBy ZXR1cm47CisrICB9CisrCisrICAvLyBTdWItd29yZCBlZmZlY3Qtb25seSBvcCB2aWEgbmF0aXZl IGxiYXJ4L2xoYXJ4ICsgc3RiY3guL3N0aGN4LiAoUE9XRVI3KykuCisrICAvLyBObyBvdXRwdXQg dG8gcmV0dXJuOyBzY3JhdGNoMiBob2xkcyB0aGUgbG9hZCtvcCtzdG9yZSB2YWx1ZS4KKysgIC8v IHZhbHVlVGVtcCAvIG9mZnNldFRlbXAgLyBtYXNrVGVtcCBhcmUgc3RpbGwgYWxsb2NhdGVkIGJ5 IHRoZSBsb3dlcmluZyBidXQKKysgIC8vIHVudXNlZCBoZXJlLgorKyAgKHZvaWQpdmFsdWVUZW1w OworKyAgKHZvaWQpb2Zmc2V0VGVtcDsKKysgICh2b2lkKW1hc2tUZW1wOworKworKyAgbWFzbS5t ZW1vcnlCYXJyaWVyQmVmb3JlKHN5bmMpOworKworKyAgbWFzbS5iaW5kKCZhZ2Fpbik7CisrCisr ICBpZiAoYWNjZXNzKSB7CisrICAgIG1hc20uZmx1c2hCdWZmZXIoKTsgIC8vIHNlZSBjb21tZW50 IGluIHdhc21Mb2FkSW1wbAorKyAgICBtYXNtLmFwcGVuZCgqYWNjZXNzLCB3YXNtOjpUcmFwTWFj aGluZUluc246OkF0b21pYywKKysgICAgICAgICAgICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0KG1h c20uY3VycmVudE9mZnNldCgpKSk7CisrICB9CisrCisrICBpZiAobmJ5dGVzID09IDEpIHsKKysg ICAgbWFzbS5hc19sYmFyeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOworKyAgfSBlbHNlIHsKKysg ICAgbWFzbS5hc19saGFyeChzY3JhdGNoMiwgcjAsIHNjcmF0Y2gpOworKyAgfQorKworKyAgc3dp dGNoIChvcCkgeworKyAgICBjYXNlIEF0b21pY09wOjpBZGQ6CisrICAgICAgbWFzbS5hc19hZGQo c2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRv bWljT3A6OlN1YjoKKysgICAgICBtYXNtLmFzX3N1YmYoc2NyYXRjaDIsIHZhbHVlLCBzY3JhdGNo Mik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQXRvbWljT3A6OkFuZDoKKysgICAgICBtYXNt LmFzX2FuZF8oc2NyYXRjaDIsIHNjcmF0Y2gyLCB2YWx1ZSk7CisrICAgICAgYnJlYWs7CisrICAg IGNhc2UgQXRvbWljT3A6Ok9yOgorKyAgICAgIG1hc20uYXNfb3JfKHNjcmF0Y2gyLCBzY3JhdGNo MiwgdmFsdWUpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEF0b21pY09wOjpYb3I6CisrICAg ICAgbWFzbS5hc194b3JfKHNjcmF0Y2gyLCBzY3JhdGNoMiwgdmFsdWUpOworKyAgICAgIGJyZWFr OworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgpOworKyAgfQorKworKyAgaWYgKG5i eXRlcyA9PSAxKSB7CisrICAgIG1hc20uYXNfc3RiY3goc2NyYXRjaDIsIHIwLCBzY3JhdGNoKTsK KysgIH0gZWxzZSB7CisrICAgIG1hc20uYXNfc3RoY3goc2NyYXRjaDIsIHIwLCBzY3JhdGNoKTsK KysgIH0KKysgIG1hc20ubWFfYihBc3NlbWJsZXI6Ok5vdEVxdWFsLCAmYWdhaW4pOworKworKyAg bWFzbS5tZW1vcnlCYXJyaWVyQWZ0ZXIoc3luYyk7CisrfQorKworKy8vIFB1YmxpYyBNYWNyb0Fz c2VtYmxlciBtZXRob2RzLgorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5n ZShTY2FsYXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgb2xk dmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBuZXd2 YWwsIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgQ29tcGFy ZUV4Y2hhbmdlKCp0aGlzLCBudWxscHRyLCB0eXBlLCBzeW5jLCBtZW0sIG9sZHZhbCwgbmV3dmFs LCB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91 dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVFeGNoYW5nZShTY2Fs YXI6OlR5cGUgdHlwZSwgU3luY2hyb25pemF0aW9uIHN5bmMsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlciBvbGR2YWws CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG5ld3ZhbCwg UmVnaXN0ZXIgdmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBDb21wYXJlRXhj aGFuZ2UoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZh bHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlNjQoU3luY2hy b25pemF0aW9uIHN5bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGV4cGVjdCwgUmVnaXN0ZXI2NCByZXBsYWNl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0 cHV0KSB7CisrICBDb21wYXJlRXhjaGFuZ2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVtLCBl eHBlY3QsIHJlcGxhY2UsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNv bXBhcmVFeGNoYW5nZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IGV4 cGVjdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0 IHJlcGxhY2UsIFJlZ2lzdGVyNjQgb3V0cHV0KSB7CisrICBDb21wYXJlRXhjaGFuZ2U2NCgqdGhp cywgbnVsbHB0ciwgc3luYywgbWVtLCBleHBlY3QsIHJlcGxhY2UsIG91dHB1dCk7CisrfQorKwor K3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Db21wYXJlRXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVt b3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciBvbGR2YWwsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBuZXd2YWwsIFJlZ2lzdGVy IHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBDb21wYXJlRXhj aGFuZ2UoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG1lbSwg b2xkdmFsLAorKyAgICAgICAgICAgICAgICAgIG5ld3ZhbCwgdmFsdWVUZW1wLCBvZmZzZXRUZW1w LCBtYXNrVGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUNv bXBhcmVFeGNoYW5nZShjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1l bSwgUmVnaXN0ZXIgb2xkdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgbmV3dmFsLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3Rl ciBtYXNrVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIG91dHB1dCkgeworKyAgQ29tcGFyZUV4Y2hhbmdlKCp0aGlzLCAmYWNjZXNzLCBhY2Nl c3MudHlwZSgpLCBhY2Nlc3Muc3luYygpLCBtZW0sIG9sZHZhbCwKKysgICAgICAgICAgICAgICAg ICBuZXd2YWwsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Db21wYXJlRXhjaGFuZ2U2NChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBleHBlY3QsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgcmVwbGFjZSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQp IHsKKysgIENvbXBhcmVFeGNoYW5nZTY0KCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3Muc3luYygpLCBt ZW0sIGV4cGVjdCwgcmVwbGFjZSwKKysgICAgICAgICAgICAgICAgICAgIG91dHB1dCk7CisrfQor KworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21Db21wYXJlRXhjaGFuZ2U2NChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IGV4cGVjdCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCByZXBsYWNlLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1 dCkgeworKyAgQ29tcGFyZUV4Y2hhbmdlNjQoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy5zeW5jKCks IG1lbSwgZXhwZWN0LCByZXBsYWNlLAorKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0KTsKKyt9 CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5 cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZz ZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1h c2tUZW1wLCBSZWdpc3RlciBvdXRwdXQpIHsKKysgIEF0b21pY0V4Y2hhbmdlKCp0aGlzLCBudWxs cHRyLCB0eXBlLCBzeW5jLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAg ICAgICAgICAgICAgICBtYXNrVGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2Vt Ymxlcjo6YXRvbWljRXhjaGFuZ2UoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBz eW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRl eCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91 dHB1dCkgeworKyAgQXRvbWljRXhjaGFuZ2UoKnRoaXMsIG51bGxwdHIsIHR5cGUsIHN5bmMsIG1l bSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgIG1hc2tU ZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5n ZTY0KFN5bmNocm9uaXphdGlvbiBzeW5jLCBjb25zdCBBZGRyZXNzJiBtZW0sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBSZWdpc3RlcjY0 IG91dHB1dCkgeworKyAgQXRvbWljRXhjaGFuZ2U2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgbWVt LCB2YWx1ZSwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhj aGFuZ2U2NChTeW5jaHJvbml6YXRpb24gc3luYywKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IHZhbHVlLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsK KysgIEF0b21pY0V4Y2hhbmdlNjQoKnRoaXMsIG51bGxwdHIsIHN5bmMsIG1lbSwgdmFsdWUsIG91 dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNFeGNoYW5nZShj b25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXIgdmFsdWUs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVl VGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgQXRv bWljRXhjaGFuZ2UoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCks IG1lbSwgdmFsdWUsCisrICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1h c2tUZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWlj RXhjaGFuZ2UoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwgUmVn aXN0ZXIgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIG91dHB1 dCkgeworKyAgQXRvbWljRXhjaGFuZ2UoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFj Y2Vzcy5zeW5jKCksIG1lbSwgdmFsdWUsCisrICAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9m ZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KKytzdGF0aWMgdm9pZCBXYXNtQXRvbWljRXhjaGFuZ2U2NChNYWNyb0Fzc2VtYmxlciYgbWFz bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXNtOjpNZW1vcnlB Y2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgVCYgbWVtLCBSZWdpc3RlcjY0IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZTY0KG1hc20sICZh Y2Nlc3MsIGFjY2Vzcy5zeW5jKCksIG1lbSwgdmFsdWUsIG91dHB1dCk7CisrfQorKworK3ZvaWQg TWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNFeGNoYW5nZTY0KGNvbnN0IHdhc206Ok1lbW9yeUFj Y2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lzdGVyNjQgc3JjLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyNjQgb3V0cHV0KSB7CisrICBXYXNt QXRvbWljRXhjaGFuZ2U2NCgqdGhpcywgYWNjZXNzLCBtZW0sIHNyYywgb3V0cHV0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0V4Y2hhbmdlNjQoY29uc3Qgd2FzbTo6 TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3RlcjY0IHNyYywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCkg eworKyAgV2FzbUF0b21pY0V4Y2hhbmdlNjQoKnRoaXMsIGFjY2VzcywgbWVtLCBzcmMsIG91dHB1 dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNoT3AoU2NhbGFyOjpU eXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2YWx1ZVRl bXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRU ZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ2lzdGVyIG91dHB1dCkgeworKyAgQXRvbWljRmV0Y2hPcCgqdGhpcywgbnVsbHB0ciwg dHlwZSwgc3luYywgb3AsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAg b2Zmc2V0VGVtcCwgbWFza1RlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJs ZXI6OmF0b21pY0ZldGNoT3AoU2NhbGFyOjpUeXBlIHR5cGUsIFN5bmNocm9uaXphdGlvbiBzeW5j LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lz dGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFz ZUluZGV4JiBtZW0sIFJlZ2lzdGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIG9mZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBB dG9taWNGZXRjaE9wKCp0aGlzLCBudWxscHRyLCB0eXBlLCBzeW5jLCBvcCwgbWVtLCB2YWx1ZSwg dmFsdWVUZW1wLAorKyAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgb3V0cHV0 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRmV0Y2hPcDY0KFN5bmNocm9u aXphdGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgY29uc3QgQWRkcmVzcyYgbWVtLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXAsIFJlZ2lzdGVyNjQg b3V0cHV0KSB7CisrICBBdG9taWNGZXRjaE9wNjQoKnRoaXMsIG51bGxwdHIsIHN5bmMsIG9wLCB2 YWx1ZSwgbWVtLCB0ZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjph dG9taWNGZXRjaE9wNjQoU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBC YXNlSW5kZXgmIG1lbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXI2NCB0ZW1wLCBSZWdpc3RlcjY0IG91dHB1dCkgeworKyAgQXRvbWljRmV0Y2hPcDY0KCp0 aGlzLCBudWxscHRyLCBzeW5jLCBvcCwgdmFsdWUsIG1lbSwgdGVtcCwgb3V0cHV0KTsKKyt9Cisr Cisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRWZmZWN0T3A2NChTeW5jaHJvbml6YXRpb24g c3luYywgQXRvbWljT3Agb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlcjY0IHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IHRlbXApIHsKKysgIEF0b21pY0ZldGNo T3A2NCgqdGhpcywgbnVsbHB0ciwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIHRlbXApOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjphdG9taWNFZmZlY3RPcDY0KFN5bmNocm9uaXph dGlvbiBzeW5jLCBBdG9taWNPcCBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyNjQgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYgbWVtLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB0ZW1wKSB7CisrICBBdG9t aWNGZXRjaE9wNjQoKnRoaXMsIG51bGxwdHIsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB0ZW1wLCB0 ZW1wKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0ZldGNoT3AoY29u c3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBZGRyZXNzJiBtZW0sIFJlZ2lz dGVyIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBtYXNrVGVtcCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvdXRwdXQpIHsKKysgIEF0b21pY0ZldGNo T3AoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBlKCksIGFjY2Vzcy5zeW5jKCksIG9wLCBtZW0s IHZhbHVlLAorKyAgICAgICAgICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1w LCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtQXRvbWljRmV0Y2hP cChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVt LCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgb3V0cHV0KSB7CisrICBBdG9t aWNGZXRjaE9wKCp0aGlzLCAmYWNjZXNzLCBhY2Nlc3MudHlwZSgpLCBhY2Nlc3Muc3luYygpLCBv cCwgbWVtLCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLCBt YXNrVGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21p Y0ZldGNoT3A2NChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9taWNPcCBvcCwgUmVnaXN0ZXI2 NCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEFkZHJlc3MmIG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIEF0b21pY0ZldGNoT3A2 NCgqdGhpcywgJmFjY2VzcywgYWNjZXNzLnN5bmMoKSwgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIG91 dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNGZXRjaE9wNjQo Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQXRvbWljT3Agb3AsIFJlZ2lzdGVyNjQgdmFsdWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgm IG1lbSwgUmVnaXN0ZXI2NCB0ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVnaXN0ZXI2NCBvdXRwdXQpIHsKKysgIEF0b21pY0ZldGNoT3A2NCgqdGhpcywg JmFjY2VzcywgYWNjZXNzLnN5bmMoKSwgb3AsIHZhbHVlLCBtZW0sIHRlbXAsIG91dHB1dCk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21BdG9taWNFZmZlY3RPcChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEF0b21pY09wIG9wLCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWRkcmVzcyYgbWVtLCBSZWdpc3RlciB2 YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lz dGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFJlZ2lzdGVyIG1hc2tUZW1wKSB7CisrICBBdG9taWNFZmZlY3RPcCgqdGhpcywgJmFjY2Vzcywg YWNjZXNzLnR5cGUoKSwgYWNjZXNzLnN5bmMoKSwgb3AsIG1lbSwgdmFsdWUsCisrICAgICAgICAg ICAgICAgICB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsIG1hc2tUZW1wKTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6d2FzbUF0b21pY0VmZmVjdE9wKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vz c0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXRvbWljT3Agb3AsIFJlZ2lzdGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBCYXNlSW5kZXgmIG1lbSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRU ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBt YXNrVGVtcCkgeworKyAgQXRvbWljRWZmZWN0T3AoKnRoaXMsICZhY2Nlc3MsIGFjY2Vzcy50eXBl KCksIGFjY2Vzcy5zeW5jKCksIG9wLCBtZW0sIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgdmFs dWVUZW1wLCBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7CisrfQorKworKy8vID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKy8vIEpTIGF0b21pYyBvcGVyYXRpb25zLgorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor K3N0YXRpYyB2b2lkIENvbXBhcmVFeGNoYW5nZUpTKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBTY2Fs YXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNo cm9uaXphdGlvbiBzeW5jLCBjb25zdCBUJiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgb2xkdmFsLCBSZWdpc3RlciBuZXd2YWwsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3Rl ciB0ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1 dCkgeworKyAgaWYgKGFycmF5VHlwZSA9PSBTY2FsYXI6OlVpbnQzMikgeworKyAgICBtYXNtLmNv bXBhcmVFeGNoYW5nZShhcnJheVR5cGUsIHN5bmMsIG1lbSwgb2xkdmFsLCBuZXd2YWwsIHZhbHVl VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGVtcCwgbWFza1RlbXAsIHRl bXApOworKyAgICBtYXNtLmNvbnZlcnRVSW50MzJUb0RvdWJsZSh0ZW1wLCBvdXRwdXQuZnB1KCkp OworKyAgfSBlbHNlIHsKKysgICAgbWFzbS5jb21wYXJlRXhjaGFuZ2UoYXJyYXlUeXBlLCBzeW5j LCBtZW0sIG9sZHZhbCwgbmV3dmFsLCB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAg ICAgIG9mZnNldFRlbXAsIG1hc2tUZW1wLCBvdXRwdXQuZ3ByKCkpOworKyAgfQorK30KKysKKyt0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytzdGF0aWMgdm9pZCBBdG9taWNFeGNoYW5nZUpTKE1hY3Jv QXNzZW1ibGVyJiBtYXNtLCBTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIGNvbnN0IFQmIG1lbSwgUmVnaXN0 ZXIgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRl bXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkgeworKyAgaWYgKGFycmF5VHlwZSA9PSBTY2FsYXI6 OlVpbnQzMikgeworKyAgICBtYXNtLmF0b21pY0V4Y2hhbmdlKGFycmF5VHlwZSwgc3luYywgbWVt LCB2YWx1ZSwgdmFsdWVUZW1wLCBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg IG1hc2tUZW1wLCB0ZW1wKTsKKysgICAgbWFzbS5jb252ZXJ0VUludDMyVG9Eb3VibGUodGVtcCwg b3V0cHV0LmZwdSgpKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXRvbWljRXhjaGFuZ2UoYXJy YXlUeXBlLCBzeW5jLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAgICAg ICAgICAgICAgICAgICAgICAgbWFza1RlbXAsIG91dHB1dC5ncHIoKSk7CisrICB9CisrfQorKwor K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK3N0YXRpYyB2b2lkIEF0b21pY0ZldGNoT3BKUyhNYWNy b0Fzc2VtYmxlciYgbWFzbSwgU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLCBSZWdpc3Rl ciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVCYgbWVtLCBSZWdp c3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9m ZnNldFRlbXAsIFJlZ2lzdGVyIG1hc2tUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdpc3RlciB0ZW1wLCBBbnlSZWdpc3RlciBvdXRwdXQpIHsKKysgIGlmIChhcnJheVR5cGUg PT0gU2NhbGFyOjpVaW50MzIpIHsKKysgICAgbWFzbS5hdG9taWNGZXRjaE9wKGFycmF5VHlwZSwg c3luYywgb3AsIHZhbHVlLCBtZW0sIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAg ICAgICAgICAgICAgIG1hc2tUZW1wLCB0ZW1wKTsKKysgICAgbWFzbS5jb252ZXJ0VUludDMyVG9E b3VibGUodGVtcCwgb3V0cHV0LmZwdSgpKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20uYXRvbWlj RmV0Y2hPcChhcnJheVR5cGUsIHN5bmMsIG9wLCB2YWx1ZSwgbWVtLCB2YWx1ZVRlbXAsIG9mZnNl dFRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgb3V0cHV0LmdwcigpKTsK KysgIH0KKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y29tcGFyZUV4Y2hhbmdlSlMoU2Nh bGFyOjpUeXBlIGFycmF5VHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgY29uc3QgQWRkcmVzcyYgbWVtLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG9sZHZhbCwgUmVnaXN0ZXIg bmV3dmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbnlSZWdpc3RlciBvdXRwdXQpIHsK KysgIENvbXBhcmVFeGNoYW5nZUpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMsIG1lbSwgb2xkdmFs LCBuZXd2YWwsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAsIG1h c2tUZW1wLCB0ZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjpjb21w YXJlRXhjaGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5jLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRleCYgbWVtLCBSZWdpc3Rl ciBvbGR2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgbmV3dmFsLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwgUmVnaXN0ZXIgbWFza1RlbXAsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdGVtcCwgQW55 UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBDb21wYXJlRXhjaGFuZ2VKUygqdGhpcywgYXJyYXlUeXBl LCBzeW5jLCBtZW0sIG9sZHZhbCwgbmV3dmFsLCB2YWx1ZVRlbXAsCisrICAgICAgICAgICAgICAg ICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCwgdGVtcCwgb3V0cHV0KTsKKyt9CisrCisrdm9pZCBN YWNyb0Fzc2VtYmxlcjo6YXRvbWljRXhjaGFuZ2VKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3luY2hyb25pemF0aW9uIHN5 bmMsIGNvbnN0IEFkZHJlc3MmIG1lbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciB2YWx1ZVRlbXAsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBvZmZzZXRUZW1wLCBSZWdpc3RlciBt YXNrVGVtcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVy IHRlbXAsIEFueVJlZ2lzdGVyIG91dHB1dCkgeworKyAgQXRvbWljRXhjaGFuZ2VKUygqdGhpcywg YXJyYXlUeXBlLCBzeW5jLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAg ICAgICAgICAgICAgICAgIG1hc2tUZW1wLCB0ZW1wLCBvdXRwdXQpOworK30KKysKKyt2b2lkIE1h Y3JvQXNzZW1ibGVyOjphdG9taWNFeGNoYW5nZUpTKFNjYWxhcjo6VHlwZSBhcnJheVR5cGUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3lu YywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhc2VJbmRl eCYgbWVtLCBSZWdpc3RlciB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1hc2tUZW1wLCBSZWdpc3Rl ciB0ZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0 ZXIgb3V0cHV0KSB7CisrICBBdG9taWNFeGNoYW5nZUpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMs IG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICAg bWFza1RlbXAsIHRlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0 b21pY0ZldGNoT3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25z dCBBZGRyZXNzJiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHZhbHVlVGVtcCwgUmVnaXN0ZXIgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXAsIFJlZ2lzdGVyIHRlbXAsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFueVJlZ2lzdGVyIG91dHB1dCkg eworKyAgQXRvbWljRmV0Y2hPcEpTKCp0aGlzLCBhcnJheVR5cGUsIHN5bmMsIG9wLCB2YWx1ZSwg bWVtLCB2YWx1ZVRlbXAsIG9mZnNldFRlbXAsCisrICAgICAgICAgICAgICAgICAgbWFza1RlbXAs IHRlbXAsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6OmF0b21pY0ZldGNo T3BKUyhTY2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTeW5jaHJvbml6YXRpb24gc3luYywgQXRvbWljT3Agb3AsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHZhbHVlLCBjb25zdCBCYXNlSW5k ZXgmIG1lbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg dmFsdWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVtcCwgUmVnaXN0ZXIgdGVtcCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW55UmVnaXN0ZXIgb3V0cHV0KSB7CisrICBB dG9taWNGZXRjaE9wSlMoKnRoaXMsIGFycmF5VHlwZSwgc3luYywgb3AsIHZhbHVlLCBtZW0sIHZh bHVlVGVtcCwgb2Zmc2V0VGVtcCwKKysgICAgICAgICAgICAgICAgICBtYXNrVGVtcCwgdGVtcCwg b3V0cHV0KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6YXRvbWljRWZmZWN0T3BKUyhT Y2FsYXI6OlR5cGUgYXJyYXlUeXBlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3luY2hyb25pemF0aW9uIHN5bmMsIEF0b21pY09wIG9wLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFsdWUsIGNvbnN0IEJhc2VJbmRleCYg bWVtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgdmFs dWVUZW1wLCBSZWdpc3RlciBvZmZzZXRUZW1wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnaXN0ZXIgbWFza1RlbXApIHsKKysgIEF0b21pY0VmZmVjdE9wKCp0aGlz LCBudWxscHRyLCBhcnJheVR5cGUsIHN5bmMsIG9wLCBtZW0sIHZhbHVlLCB2YWx1ZVRlbXAsCisr ICAgICAgICAgICAgICAgICBvZmZzZXRUZW1wLCBtYXNrVGVtcCk7CisrfQorKworK3ZvaWQgTWFj cm9Bc3NlbWJsZXI6OmF0b21pY0VmZmVjdE9wSlMoU2NhbGFyOjpUeXBlIGFycmF5VHlwZSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNocm9uaXphdGlvbiBzeW5j LCBBdG9taWNPcCBvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyIHZhbHVlLCBjb25zdCBBZGRyZXNzJiBtZW0sCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBSZWdpc3RlciB2YWx1ZVRlbXAsIFJlZ2lzdGVyIG9mZnNldFRlbXAs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBtYXNrVGVt cCkgeworKyAgQXRvbWljRWZmZWN0T3AoKnRoaXMsIG51bGxwdHIsIGFycmF5VHlwZSwgc3luYywg b3AsIG1lbSwgdmFsdWUsIHZhbHVlVGVtcCwKKysgICAgICAgICAgICAgICAgIG9mZnNldFRlbXAs IG1hc2tUZW1wKTsKKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gV2FzbSBhZGRyZXNz IG9mZnNldCBjYXJyeSB0ZXN0cy4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6 Om1hX2FkZDMyVGVzdENhcnJ5KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciByZCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJzLCBJ bW0zMiBpbW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMYWJlbCogb3ZlcmZsb3cpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6 OkNhcnJ5U2V0IHx8IGNvbmQgPT0gQXNzZW1ibGVyOjpDYXJyeUNsZWFyKTsKKysgIGlmIChyZCAh PSBycykgeworKyAgICBhc01hc20oKS5tb3ZlMzIocnMsIHJkKTsKKysgICAgYXNNYXNtKCkuYWRk MzIoaW1tLCByZCk7CisrICAgIGFzX2NtcGx3KHJkLCBycyk7CisrICB9IGVsc2UgeworKyAgICAv LyB2aXNpdFdhc21BZGRPZmZzZXQgdXNlcyB1c2VSZWdpc3RlckF0U3RhcnQsIHNvIHRoZSBMSVIg YWxsb2NhdG9yIG1heQorKyAgICAvLyBjb2xsYXBzZSByZCBvbnRvIHJzLiBtb3ZlMzIgKyBhZGQz MiB3b3VsZCBjbG9iYmVyIHJzIGJlZm9yZSB0aGUKKysgICAgLy8gY29tcGFyZTsgc2F2ZSBycyB0 byBhIHNjcmF0Y2ggZmlyc3QuCisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0 aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgYXNN YXNtKCkubW92ZTMyKHJzLCBzY3JhdGNoKTsKKysgICAgYXNNYXNtKCkuYWRkMzIoaW1tLCByZCk7 CisrICAgIGFzX2NtcGx3KHJkLCBzY3JhdGNoKTsKKysgIH0KKysgIG1hX2IoY29uZCA9PSBBc3Nl bWJsZXI6OkNhcnJ5U2V0ID8gTGVzc1RoYW4gOiBHcmVhdGVyVGhhbk9yRXF1YWwsIG92ZXJmbG93 KTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0OjptYV9hZGRQdHJUZXN0 Q2FycnkoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVyIHJkLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHJzLCBJbW1Xb3JkIGltbSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJl bCogb3ZlcmZsb3cpIHsKKysgIE1PWl9BU1NFUlQoY29uZCA9PSBBc3NlbWJsZXI6OkNhcnJ5U2V0 IHx8IGNvbmQgPT0gQXNzZW1ibGVyOjpDYXJyeUNsZWFyKTsKKysgIGlmIChyZCAhPSBycykgewor KyAgICBhc01hc20oKS5tb3ZlUHRyKHJzLCByZCk7CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1X b3JkKGltbS52YWx1ZSksIHJkKTsKKysgICAgYXNfY21wbGQocmQsIHJzKTsKKysgIH0gZWxzZSB7 CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0 ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgYXNNYXNtKCkubW92ZVB0cihycywg c2NyYXRjaCk7CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1Xb3JkKGltbS52YWx1ZSksIHJkKTsK KysgICAgYXNfY21wbGQocmQsIHNjcmF0Y2gpOworKyAgfQorKyAgbWFfYihjb25kID09IEFzc2Vt Ymxlcjo6Q2FycnlTZXQgPyBMZXNzVGhhbiA6IEdyZWF0ZXJUaGFuT3JFcXVhbCwgb3ZlcmZsb3cp OworK30KKysKKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBXYXNtIGxvYWQvc3RvcmUgaGVscGVy cy4KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Ondhc21Qcm9iZUxhc3RCeXRl KAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1l bW9yeUJhc2UsIFJlZ2lzdGVyIHB0cikgeworKyAgaWYgKEhhc1BPV0VSOSgpKSB7CisrICAgIHJl dHVybjsKKysgIH0KKysgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSBTY2FsYXI6OmJ5dGVTaXplKGFj Y2Vzcy50eXBlKCkpOworKyAgaWYgKHNpemUgPD0gMSkgeworKyAgICByZXR1cm47CisrICB9Cisr ICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhhc01hc20oKSk7CisrICBSZWdpc3RlciBw cm9iZUFkZHIgPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAvLyBzaXplIGlzIGF0IG1vc3QgMTYgKFNp bWQxMjgpLCB3ZWxsIHdpdGhpbiB0aGUgaW50MTZfdCByYW5nZSBvZiBhc19hZGRpLgorKyAgYXNf YWRkaShwcm9iZUFkZHIsIHB0ciwgaW50MTZfdChzaXplIC0gMSkpOworKyAgLy8gUmVjb3JkIHRo ZSBwcm9iZSBhcyBhIHdhc20gdHJhcCBzaXRlIHNvIGl0cyBTSUdTRUdWIGRpc3BhdGNoZXMKKysg IC8vIHRocm91Z2ggdGhlIHdhc20gc2lnbmFsIGhhbmRsZXIgdGhlIHNhbWUgd2F5IHRoZSByZWFs IGFjY2VzcyB3b3VsZC4KKysgIG1fYnVmZmVyLmZsdXNoUG9vbCgpOworKyAgYXBwZW5kKGFjY2Vz cywgd2FzbTo6VHJhcE1hY2hpbmVJbnNuOjpMb2FkOCwKKysgICAgICAgICBGYXVsdGluZ0NvZGVP ZmZzZXQoY3VycmVudE9mZnNldCgpKSk7CisrICAvLyBQcm9iaW5nIDEtYnl0ZSBsb2FkOyByZXN1 bHQgZGlzY2FyZGVkLgorKyAgYXNfbGJ6eChwcm9iZUFkZHIsIG1lbW9yeUJhc2UsIHByb2JlQWRk cik7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbUxvYWRJbXBs KAorKyAgICBjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIFJlZ2lzdGVyIG1l bW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwKKysgICAgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVn aXN0ZXIgb3V0cHV0KSB7CisrICBhY2Nlc3MuYXNzZXJ0T2Zmc2V0SW5HdWFyZFBhZ2VzKCk7Cisr ICB1aW50MzJfdCBvZmZzZXQgPSBhY2Nlc3Mub2Zmc2V0MzIoKTsKKysgIE1PWl9BU1NFUlRfSUYo b2Zmc2V0LCBwdHJTY3JhdGNoICE9IEludmFsaWRSZWcpOworKworKyAgaWYgKG9mZnNldCkgewor KyAgICBhc01hc20oKS5hZGRQdHIoSW1tV29yZChvZmZzZXQpLCBwdHJTY3JhdGNoKTsKKysgICAg cHRyID0gcHRyU2NyYXRjaDsKKysgIH0KKysKKysgIHdhc21Qcm9iZUxhc3RCeXRlKGFjY2Vzcywg bWVtb3J5QmFzZSwgcHRyKTsKKysKKysgIGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJCZWZvcmUoYWNj ZXNzLnN5bmMoKSk7CisrICAvLyBGbHVzaCBhbnkgcGVuZGluZyBjb25zdGFudCBwb29sIGVudHJp ZXMgYmVmb3JlIHJlY29yZGluZyB0aGUgdHJhcCBzaXRlLAorKyAgLy8gb3RoZXJ3aXNlIGEgcG9v bCBib2R5IGluc2VydGVkIGJldHdlZW4gdGhlIHJlY29yZGVkIG9mZnNldCBhbmQgdGhlCisrICAv LyBlbWl0dGVkIGxvYWQgc2hpZnRzIHRoZSBsb2FkIGFuZCBsZWF2ZXMgdGhlIHBvb2wgZ3VhcmQg YnJhbmNoIGF0IHRoZQorKyAgLy8gcmVjb3JkZWQgb2Zmc2V0IChTdW1tYXJpemVUcmFwSW5zdHJ1 Y3Rpb24gdGhlbiByZWplY3RzIHRoZSB0cmFwIHNpdGUpLgorKyAgbV9idWZmZXIuZmx1c2hQb29s KCk7CisrICBhcHBlbmQoYWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc25Gb3JMb2FkKFNjYWxh cjo6Ynl0ZVNpemUoYWNjZXNzLnR5cGUoKSkpLAorKyAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNl dChjdXJyZW50T2Zmc2V0KCkpKTsKKysKKysgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworKyAg ICBjYXNlIFNjYWxhcjo6SW50ODoKKysgICAgICBhc19sYnp4KG91dHB1dC5ncHIoKSwgbWVtb3J5 QmFzZSwgcHRyKTsKKysgICAgICBhc19leHRzYihvdXRwdXQuZ3ByKCksIG91dHB1dC5ncHIoKSk7 CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpVaW50ODoKKysgICAgICBhc19sYnp4 KG91dHB1dC5ncHIoKSwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgY2Fz ZSBTY2FsYXI6OkludDE2OgorKyAgICAgIGFzX2xoYXgob3V0cHV0LmdwcigpLCBtZW1vcnlCYXNl LCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6VWludDE2OgorKyAgICAg IGFzX2xoengob3V0cHV0LmdwcigpLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOwor KyAgICBjYXNlIFNjYWxhcjo6SW50MzI6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50MzI6CisrICAg ICAgYXNfbHd6eChvdXRwdXQuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYXNfZXh0 c3cob3V0cHV0LmdwcigpLCBvdXRwdXQuZ3ByKCkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNl IFNjYWxhcjo6RmxvYXQ2NDoKKysgICAgICBpZiAoYWNjZXNzLmlzWmVyb0V4dGVuZFNpbWQxMjhM b2FkKCkgfHwgYWNjZXNzLmlzU3BsYXRTaW1kMTI4TG9hZCgpIHx8CisrICAgICAgICAgIGFjY2Vz cy5pc1dpZGVuU2ltZDEyOExvYWQoKSkgeworKyAgICAgICAgLy8gbGZkeCBpcyBYLWZvcm0gc2Nh bGFyIEZQIOKAlCBlbmNvZGVzIG9ubHkgNS1iaXQgRlJULCBzbyBhCisrICAgICAgICAvLyBTaW1k MTI4IGRlc3QgKGVuY29kaW5nIDMyKykgY29ycnVwdHMgdGhlIG9wY29kZS4gQnJpZGdlCisrICAg ICAgICAvLyB0aHJvdWdoIFNjcmF0Y2hEb3VibGVSZWcgKEZQUiBmMCwgZW5jb2RpbmcgMCkuCisr ICAgICAgICBTY3JhdGNoRG91YmxlU2NvcGUgZHNjcmF0Y2goYXNNYXNtKCkpOworKyAgICAgICAg YXNfbGZkeChkc2NyYXRjaCwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICAgIGlmIChhY2Nlc3Mu aXNaZXJvRXh0ZW5kU2ltZDEyOExvYWQoKSkgeworKyAgICAgICAgICAvLyBMb2FkZWQgdmFsdWUg Z29lcyB0byBCRSBkdzEgKD0gTEUgZHcwID0gbGFuZSAwKTsgQkUgZHcwID0gMC4KKysgICAgICAg ICAgYXNfeHhseG9yKFNjcmF0Y2hTaW1kMTI4UmVnLCBTY3JhdGNoU2ltZDEyOFJlZywgU2NyYXRj aFNpbWQxMjhSZWcpOworKyAgICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIFNjcmF0 Y2hTaW1kMTI4UmVnLCBkc2NyYXRjaCwgMCk7CisrICAgICAgICB9IGVsc2UgaWYgKGFjY2Vzcy5p c1NwbGF0U2ltZDEyOExvYWQoKSkgeworKyAgICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1 KCksIGRzY3JhdGNoLCBkc2NyYXRjaCwgMCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAg ICAvLyB3aWRlbjogcGxhY2UgbG9hZGVkIDY0IGJpdHMgaW4gTEUgZHcwICg9IEJFIGR3MSkgZm9y IHdpZGVuTG93LgorKyAgICAgICAgICBhc194eHBlcm1kaShvdXRwdXQuZnB1KCksIGRzY3JhdGNo LCBkc2NyYXRjaCwgMik7CisrICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLndpZGVuU2ltZE9wKCkp IHsKKysgICAgICAgICAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOExvYWQ4eDhTOgorKyAgICAg ICAgICAgICAgYXNNYXNtKCkud2lkZW5Mb3dJbnQ4eDE2KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZw dSgpKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2lt ZE9wOjpWMTI4TG9hZDh4OFU6CisrICAgICAgICAgICAgICBhc01hc20oKS51bnNpZ25lZFdpZGVu TG93SW50OHgxNihvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSk7CisrICAgICAgICAgICAgICBi cmVhazsKKysgICAgICAgICAgICBjYXNlIHdhc206OlNpbWRPcDo6VjEyOExvYWQxNng0UzoKKysg ICAgICAgICAgICAgIGFzTWFzbSgpLndpZGVuTG93SW50MTZ4OChvdXRwdXQuZnB1KCksIG91dHB1 dC5mcHUoKSk7CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIHdhc206 OlNpbWRPcDo6VjEyOExvYWQxNng0VToKKysgICAgICAgICAgICAgIGFzTWFzbSgpLnVuc2lnbmVk V2lkZW5Mb3dJbnQxNng4KG91dHB1dC5mcHUoKSwgb3V0cHV0LmZwdSgpKTsKKysgICAgICAgICAg ICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ugd2FzbTo6U2ltZE9wOjpWMTI4TG9hZDMyeDJT OgorKyAgICAgICAgICAgICAgYXNNYXNtKCkud2lkZW5Mb3dJbnQzMng0KG91dHB1dC5mcHUoKSwg b3V0cHV0LmZwdSgpKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2Ug d2FzbTo6U2ltZE9wOjpWMTI4TG9hZDMyeDJVOgorKyAgICAgICAgICAgICAgYXNNYXNtKCkudW5z aWduZWRXaWRlbkxvd0ludDMyeDQob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCkpOworKyAgICAg ICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgIE1P Wl9DUkFTSCgiVW5leHBlY3RlZCB3aWRlbiBvcCIpOworKyAgICAgICAgICB9CisrICAgICAgICB9 CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX2xmZHgob3V0cHV0LmZwdSgpLCBtZW1vcnlC YXNlLCBwdHIpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkZs b2F0MzI6CisrICAgICAgaWYgKGFjY2Vzcy5pc1plcm9FeHRlbmRTaW1kMTI4TG9hZCgpKSB7Cisr ICAgICAgICAvLyB2MTI4LmxvYWQzMl96ZXJvOiBsb2FkIDMyIHJhdyBiaXRzIGludG8gbGFuZSAw LCB6ZXJvIHRoZSByZXN0LgorKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMo YXNNYXNtKCkpOworKyAgICAgICAgUmVnaXN0ZXIgdG1wID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICAgICAgYXNfbHd6eCh0bXAsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgICBhc194eGx4b3Io b3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCksIG91dHB1dC5mcHUoKSk7CisrICAgICAgICBpZiAo SGFzUE9XRVI5KCkpIHsKKysgICAgICAgICAgYXNfbXR2c3J3cyhTY3JhdGNoU2ltZDEyOFJlZywg dG1wKTsKKysgICAgICAgICAgYXNfeHhpbnNlcnR3KG91dHB1dC5mcHUoKSwgU2NyYXRjaFNpbWQx MjhSZWcsIDEyKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIC8vIFBPV0VSODogbXR2 c3JkIHB1dHMgdmFsdWUgaW4gQkUgZHcwIGxvdyAzMiBiaXRzLgorKyAgICAgICAgICAvLyB4eHBl cm1kaShkZXN0LCB6ZXJvLCBzY3JhdGNoLCAwKSA9IHt6ZXJvW2R3MF0sIHNjcmF0Y2hbZHcwXX0K KysgICAgICAgICAgLy8gaW4gQkUsIHBsYWNpbmcgdGhlIHZhbHVlIGluIExFIHdvcmQgMCB3aXRo IHRoZSByZXN0IHplcm8uCisrICAgICAgICAgIGFzX210dnNyZChTY3JhdGNoU2ltZDEyOFJlZywg dG1wKTsKKysgICAgICAgICAgYXNfeHhwZXJtZGkob3V0cHV0LmZwdSgpLCBvdXRwdXQuZnB1KCks IFNjcmF0Y2hTaW1kMTI4UmVnLCAwKTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgeworKyAg ICAgICAgYXNfbGZzeChvdXRwdXQuZnB1KCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgfQor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6U2ltZDEyODoKKysgICAgICBpZiAoSGFz UE9XRVI5KCkpIHsKKysgICAgICAgIGFzX2x4dngob3V0cHV0LmZwdSgpLCBtZW1vcnlCYXNlLCBw dHIpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc19seHZkMngob3V0cHV0LmZwdSgpLCBt ZW1vcnlCYXNlLCBwdHIpOworKyAgICAgICAgYXNfeHhwZXJtZGkob3V0cHV0LmZwdSgpLCBvdXRw dXQuZnB1KCksIG91dHB1dC5mcHUoKSwgMik7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAg ICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3RlZCBhcnJheSB0eXBlIik7Cisr ICB9CisrCisrICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIoYWNjZXNzLnN5bmMoKSk7Cisr fQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6d2FzbVN0b3JlSW1wbCgKKysg ICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBBbnlSZWdpc3RlciB2YWx1 ZSwKKysgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBwdHJT Y3JhdGNoKSB7CisrICBhY2Nlc3MuYXNzZXJ0T2Zmc2V0SW5HdWFyZFBhZ2VzKCk7CisrICB1aW50 MzJfdCBvZmZzZXQgPSBhY2Nlc3Mub2Zmc2V0MzIoKTsKKysgIE1PWl9BU1NFUlRfSUYob2Zmc2V0 LCBwdHJTY3JhdGNoICE9IEludmFsaWRSZWcpOworKworKyAgaWYgKG9mZnNldCkgeworKyAgICBh c01hc20oKS5hZGRQdHIoSW1tV29yZChvZmZzZXQpLCBwdHJTY3JhdGNoKTsKKysgICAgcHRyID0g cHRyU2NyYXRjaDsKKysgIH0KKysKKysgIHdhc21Qcm9iZUxhc3RCeXRlKGFjY2VzcywgbWVtb3J5 QmFzZSwgcHRyKTsKKysKKysgIGFzTWFzbSgpLm1lbW9yeUJhcnJpZXJCZWZvcmUoYWNjZXNzLnN5 bmMoKSk7CisrICAvLyBSZWNvcmQgdHJhcCBzaXRlIGF0IHRoZSBmYXVsdGluZyBtZW1vcnkgaW5z dHJ1Y3Rpb24uIEZvciBQOCBTaW1kMTI4CisrICAvLyBzdG9yZSwgdGhlIGZhdWx0aW5nIGluc3Ry dWN0aW9uIChzdHh2ZDJ4KSBpcyBhZnRlciBhIGJ5dGUtc3dhcAorKyAgLy8gKHh4cGVybWRpKSwg c28gd2UgZGVmZXIgdGhlIHRyYXAgc2l0ZSByZWNvcmRpbmcuCisrICAvLyBGbHVzaCBwb29sIGZp cnN0OyBzZWUgY29tbWVudCBpbiB3YXNtTG9hZEltcGwuCisrICBpZiAoYWNjZXNzLnR5cGUoKSAh PSBTY2FsYXI6OlNpbWQxMjggfHwgSGFzUE9XRVI5KCkpIHsKKysgICAgbV9idWZmZXIuZmx1c2hQ b29sKCk7CisrICAgIGFwcGVuZChhY2Nlc3MsCisrICAgICAgICAgICB3YXNtOjpUcmFwTWFjaGlu ZUluc25Gb3JTdG9yZShTY2FsYXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKKysgICAgICAg ICAgIEZhdWx0aW5nQ29kZU9mZnNldChjdXJyZW50T2Zmc2V0KCkpKTsKKysgIH0KKysKKysgIHN3 aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworKyAgICBjYXNlIFNjYWxhcjo6SW50ODoKKysgICAgY2Fz ZSBTY2FsYXI6OlVpbnQ4OgorKyAgICAgIGFzX3N0YngodmFsdWUuZ3ByKCksIG1lbW9yeUJhc2Us IHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQxNjoKKysgICAgY2Fz ZSBTY2FsYXI6OlVpbnQxNjoKKysgICAgICBhc19zdGh4KHZhbHVlLmdwcigpLCBtZW1vcnlCYXNl LCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50MzI6CisrICAgIGNh c2UgU2NhbGFyOjpVaW50MzI6CisrICAgICAgYXNfc3R3eCh2YWx1ZS5ncHIoKSwgbWVtb3J5QmFz ZSwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkludDY0OgorKyAgICAg IGFzX3N0ZHgodmFsdWUuZ3ByKCksIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgU2NhbGFyOjpGbG9hdDY0OgorKyAgICAgIGFzX3N0ZmR4KHZhbHVlLmZwdSgpLCBt ZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6RmxvYXQz MjoKKysgICAgICBhc19zdGZzeCh2YWx1ZS5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAg ICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OlNpbWQxMjg6CisrICAgICAgaWYgKEhhc1BPV0VS OSgpKSB7CisrICAgICAgICBhc19zdHh2eCh2YWx1ZS5mcHUoKSwgbWVtb3J5QmFzZSwgcHRyKTsK KysgICAgICB9IGVsc2UgeworKyAgICAgICAgYXNfeHhwZXJtZGkoU2NyYXRjaFNpbWQxMjhSZWcs IHZhbHVlLmZwdSgpLCB2YWx1ZS5mcHUoKSwgMik7CisrICAgICAgICBtX2J1ZmZlci5mbHVzaFBv b2woKTsgIC8vIHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAorKyAgICAgICAgYXBwZW5kKGFj Y2VzcywKKysgICAgICAgICAgICAgICB3YXNtOjpUcmFwTWFjaGluZUluc25Gb3JTdG9yZShTY2Fs YXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKKysgICAgICAgICAgICAgICBGYXVsdGluZ0Nv ZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKSk7CisrICAgICAgICBhc19zdHh2ZDJ4KFNjcmF0Y2hT aW1kMTI4UmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysg ICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYXJyYXkgdHlwZSIpOwor KyAgfQorKworKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckFmdGVyKGFjY2Vzcy5zeW5jKCkpOwor K30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQ6Ondhc21Mb2FkSTY0SW1wbCgK KysgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLCBSZWdpc3RlciBtZW1v cnlCYXNlLCBSZWdpc3RlciBwdHIsCisrICAgIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIFJlZ2lzdGVy NjQgb3V0cHV0KSB7CisrICB1aW50MzJfdCBvZmZzZXQgPSBhY2Nlc3Mub2Zmc2V0MzIoKTsKKysg IE1PWl9BU1NFUlRfSUYob2Zmc2V0LCBwdHJTY3JhdGNoICE9IEludmFsaWRSZWcpOworKworKyAg aWYgKG9mZnNldCkgeworKyAgICBhc01hc20oKS5hZGRQdHIoSW1tV29yZChvZmZzZXQpLCBwdHJT Y3JhdGNoKTsKKysgICAgcHRyID0gcHRyU2NyYXRjaDsKKysgIH0KKysKKysgIHdhc21Qcm9iZUxh c3RCeXRlKGFjY2VzcywgbWVtb3J5QmFzZSwgcHRyKTsKKysKKysgIGFzTWFzbSgpLm1lbW9yeUJh cnJpZXJCZWZvcmUoYWNjZXNzLnN5bmMoKSk7CisrICBtX2J1ZmZlci5mbHVzaFBvb2woKTsgIC8v IHNlZSBjb21tZW50IGluIHdhc21Mb2FkSW1wbAorKyAgYXBwZW5kKGFjY2Vzcywgd2FzbTo6VHJh cE1hY2hpbmVJbnNuRm9yTG9hZChTY2FsYXI6OmJ5dGVTaXplKGFjY2Vzcy50eXBlKCkpKSwKKysg ICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQoY3VycmVudE9mZnNldCgpKSk7CisrCisrICBzd2l0 Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKysgICAgY2FzZSBTY2FsYXI6OkludDg6CisrICAgICAgYXNf bGJ6eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGFzX2V4dHNiKG91dHB1 dC5yZWcsIG91dHB1dC5yZWcpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6VWlu dDg6CisrICAgICAgYXNfbGJ6eChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAg IGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50MTY6CisrICAgICAgYXNfbGhheChvdXRwdXQu cmVnLCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6 VWludDE2OgorKyAgICAgIGFzX2xoengob3V0cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKKysg ICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OkludDMyOgorKyAgICAgIGFzX2x3engob3V0 cHV0LnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBhc19leHRzdyhvdXRwdXQucmVnLCBv dXRwdXQucmVnKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6OlVpbnQzMjoKKysg ICAgICBhc19sd3p4KG91dHB1dC5yZWcsIG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgLy8gWmVy by1leHRlbmRlZCBieSBsd3p4IGFscmVhZHkKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2Fs YXI6OkludDY0OgorKyAgICAgIGFzX2xkeChvdXRwdXQucmVnLCBtZW1vcnlCYXNlLCBwdHIpOwor KyAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5leHBlY3Rl ZCBhcnJheSB0eXBlIik7CisrICB9CisrCisrICBhc01hc20oKS5tZW1vcnlCYXJyaWVyQWZ0ZXIo YWNjZXNzLnN5bmMoKSk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXJQUEM2NENvbXBhdDo6 d2FzbVN0b3JlSTY0SW1wbCgKKysgICAgY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNj ZXNzLCBSZWdpc3RlcjY0IHZhbHVlLCBSZWdpc3RlciBtZW1vcnlCYXNlLAorKyAgICBSZWdpc3Rl ciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0Y2gpIHsKKysgIHVpbnQzMl90IG9mZnNldCA9IGFjY2Vz cy5vZmZzZXQzMigpOworKyAgTU9aX0FTU0VSVF9JRihvZmZzZXQsIHB0clNjcmF0Y2ggIT0gSW52 YWxpZFJlZyk7CisrCisrICBpZiAob2Zmc2V0KSB7CisrICAgIGFzTWFzbSgpLmFkZFB0cihJbW1X b3JkKG9mZnNldCksIHB0clNjcmF0Y2gpOworKyAgICBwdHIgPSBwdHJTY3JhdGNoOworKyAgfQor KworKyAgd2FzbVByb2JlTGFzdEJ5dGUoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIpOworKworKyAg YXNNYXNtKCkubWVtb3J5QmFycmllckJlZm9yZShhY2Nlc3Muc3luYygpKTsKKysgIG1fYnVmZmVy LmZsdXNoUG9vbCgpOyAgLy8gc2VlIGNvbW1lbnQgaW4gd2FzbUxvYWRJbXBsCisrICBhcHBlbmQo YWNjZXNzLCB3YXNtOjpUcmFwTWFjaGluZUluc25Gb3JTdG9yZShTY2FsYXI6OmJ5dGVTaXplKGFj Y2Vzcy50eXBlKCkpKSwKKysgICAgICAgICBGYXVsdGluZ0NvZGVPZmZzZXQoY3VycmVudE9mZnNl dCgpKSk7CisrCisrICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKysgICAgY2FzZSBTY2FsYXI6 OkludDg6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50ODoKKysgICAgICBhc19zdGJ4KHZhbHVlLnJl ZywgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBTY2FsYXI6Oklu dDE2OgorKyAgICBjYXNlIFNjYWxhcjo6VWludDE2OgorKyAgICAgIGFzX3N0aHgodmFsdWUucmVn LCBtZW1vcnlCYXNlLCBwdHIpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFNjYWxhcjo6SW50 MzI6CisrICAgIGNhc2UgU2NhbGFyOjpVaW50MzI6CisrICAgICAgYXNfc3R3eCh2YWx1ZS5yZWcs IG1lbW9yeUJhc2UsIHB0cik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgU2NhbGFyOjpJbnQ2 NDoKKysgICAgICBhc19zdGR4KHZhbHVlLnJlZywgbWVtb3J5QmFzZSwgcHRyKTsKKysgICAgICBi cmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goInVuZXhwZWN0ZWQgYXJyYXkg dHlwZSIpOworKyAgfQorKworKyAgYXNNYXNtKCkubWVtb3J5QmFycmllckFmdGVyKGFjY2Vzcy5z eW5jKCkpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtTG9hZChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIEFueVJlZ2lzdGVyIG91dHB1dCkgewor KyAgd2FzbUxvYWRJbXBsKGFjY2VzcywgbWVtb3J5QmFzZSwgcHRyLCBwdHJTY3JhdGNoLCBvdXRw dXQpOworK30KKysKKyt2b2lkIE1hY3JvQXNzZW1ibGVyOjp3YXNtTG9hZEk2NChjb25zdCB3YXNt OjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUmVnaXN0ZXIgbWVtb3J5QmFzZSwgUmVnaXN0ZXIgcHRyLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0clNjcmF0Y2gsIFJlZ2lzdGVyNjQgb3V0cHV0 KSB7CisrICB3YXNtTG9hZEk2NEltcGwoYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0clNjcmF0 Y2gsIG91dHB1dCk7CisrfQorKworK3ZvaWQgTWFjcm9Bc3NlbWJsZXI6Ondhc21TdG9yZShjb25z dCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFueVJlZ2lzdGVyIHZhbHVlLCBSZWdpc3RlciBtZW1vcnlCYXNlLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNjcmF0 Y2gpIHsKKysgIHdhc21TdG9yZUltcGwoYWNjZXNzLCB2YWx1ZSwgbWVtb3J5QmFzZSwgcHRyLCBw dHJTY3JhdGNoKTsKKyt9CisrCisrdm9pZCBNYWNyb0Fzc2VtYmxlcjo6d2FzbVN0b3JlSTY0KGNv bnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2VzcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnaXN0ZXI2NCB2YWx1ZSwgUmVnaXN0ZXIgbWVtb3J5QmFzZSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgcHRyLCBSZWdpc3RlciBw dHJTY3JhdGNoKSB7CisrICB3YXNtU3RvcmVJNjRJbXBsKGFjY2VzcywgdmFsdWUsIG1lbW9yeUJh c2UsIHB0ciwgcHRyU2NyYXRjaCk7CisrfQorKworKy8vfX19IGNoZWNrX21hY3JvYXNzZW1ibGVy X3N0eWxlCisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcworKwor KyNpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrLy8gc3RhdGljCisrYm9vbCBNYWNyb0Fzc2VtYmxl cjo6TXVzdE1hc2tTaGlmdENvdW50U2ltZDEyOCh3YXNtOjpTaW1kT3Agb3AsIGludDMyX3QqIG1h c2spIHsKKysgIHJldHVybiBmYWxzZTsKKyt9CisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvanMvc3Jj L2ppdC9wcGM2NC9NYWNyb0Fzc2VtYmxlci1wcGM2NC5oIGIvanMvc3JjL2ppdC9wcGM2NC9NYWNy b0Fzc2VtYmxlci1wcGM2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAw MDAwLi5iYzIxNDNiNjc0NjUKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQv TWFjcm9Bc3NlbWJsZXItcHBjNjQuaAorQEAgLTAsMCArMSwyMDMxIEBACisrLyogLSotIE1vZGU6 IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0 OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlz IFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEg UHVibGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90 IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBo dHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRfcHBjNjRfTWFj cm9Bc3NlbWJsZXJfcHBjNjRfaAorKyNkZWZpbmUgaml0X3BwYzY0X01hY3JvQXNzZW1ibGVyX3Bw YzY0X2gKKysKKysjaW5jbHVkZSAiaml0L01vdmVSZXNvbHZlci5oIgorKyNpbmNsdWRlICJqaXQv cHBjNjQvQXNzZW1ibGVyLXBwYzY0LmgiCisrI2luY2x1ZGUgIndhc20vV2FzbUJ1aWx0aW5zLmgi CisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKytpbmxpbmUgYm9vbCBp c19pbnROKGludDY0X3QgeCwgdW5zaWduZWQgbikgeworKyAgTU9aX0FTU0VSVCgoMCA8IG4pICYm IChuIDwgNjQpKTsKKysgIGludDY0X3QgbGltaXQgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8 PCAobiAtIDEpOworKyAgcmV0dXJuICgtbGltaXQgPD0geCkgJiYgKHggPCBsaW1pdCk7CisrfQor KworK2lubGluZSBib29sIGlzX3VpbnROKHVpbnQ2NF90IHgsIHVuc2lnbmVkIG4pIHsKKysgIE1P Wl9BU1NFUlQoKDAgPCBuKSAmJiAobiA8IDY0KSk7CisrICByZXR1cm4gISh4ID4+IG4pOworK30K KysKKysvLyBlbnRlck5vUG9vbCgpIGd1YXJkIHNpemVzLiBJbmhpYml0aW5nIHRoZSBjb25zdGFu dCBwb29sIGtlZXBzIHRoZXNlCisrLy8gc3RhbnphcyBhdCBhIGZpeGVkIGluc3RydWN0aW9uIGNv dW50LCB3aGljaCBwYXRjaGVycyBhbmQgbG9uZy1icmFuY2gKKysvLyByZXNvbHZlcnMgcmVseSBv bi4gRWFjaCBjb25zdGFudCBuYW1lcyBhIGRpc3RpbmN0IHN0YW56YSBzaGFwZTsgc2VlCisrLy8g dGhlIGVtaXR0aW5nIGNhbGwgc2l0ZSBmb3IgdGhlIGV4YWN0IGxheW91dC4KKysvLworKy8vIGtO b1Bvb2xMb2FkNjRTdGFuemFJbnNucyAoOCk6IGVtaXRMb2FkNjRTdGFuemEgYm9keSDigJQgOCBO T1BzIHRoYXQKKysvLyAgIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zIGxhdGVyIG92ZXJ3cml0ZXMg aW4gcGxhY2UuIFR3byBzaGFwZXMgc2hhcmUKKysvLyAgIHRoZSBzYW1lIDgtc2xvdCBmb290cHJp bnQgd2l0aCB0aGUgLnF1YWQgZml4ZWQgYXQgc2xvdHMgWzYuLjddOgorKy8vICAgICAtIFBPV0VS OSsgKEhhc1BPV0VSOSgpKTogYWRkcGNpcyArIGxkICsgYiArIDMgTk9QcyAoMiBkeW5hbWljIGlu c25zLAorKy8vICAgICAgIG5vIExSIGNsb2JiZXIpLiBQcmVmZXJyZWQgcGF0aC4KKysvLyAgICAg LSBQT1dFUjggZmFsbGJhY2s6IG1mbHIvYmNsL21mbHIvbXRsci9sZC9iIExSLWJvdW5jaW5nIHNl cXVlbmNlCisrLy8gICAgICAgKDYgZHluYW1pYyBpbnNucywgUkFTLXRocmFzaGluZyDigJQga2Vw dCBvbmx5IGJlY2F1c2UgUDggaGFzIG5vCisrLy8gICAgICAgYWRkcGNpcykuCisrLy8KKysvLyBr Tm9Qb29sUGF0Y2hhYmxlQnJhbmNoSW5zbnMgKDEwKTogcGF0Y2hhYmxlIGZhciBjYWxsIC8ganVt cCAvCisrLy8gICB1bmNvbmRpdGlvbmFsIGJyYW5jaC4gVGhyZWUgYWx0ZXJuYXRpdmUgc2hhcGVz LCBhbGwgZml0dGluZyB0aGUKKysvLyAgIHNhbWUgYnVkZ2V0OgorKy8vICAgICAtIGxvYWQ2NCBz dGFuemEgKDgpICsgbXRjdHIgKyBiY3RyW2xdICA9IDEwICAoYm91bmQgY2FsbC9qdW1wKQorKy8v ICAgICAtIDkgTk9QcyArIGJsICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEwICAoc2hvcnQg Ym91bmQgY2FsbCkKKysvLyAgICAgLSB4c190cmFwX3RhZ2dlZChUQUcpICsgY2hhaW4gKyA4IE5P UHMgPSAxMCAgKGZ3ZC1yZWYgc3RhbnphKQorKy8vCisrLy8ga05vUG9vbENvbmRMb25nQnJhbmNo SW5zbnNQOE1heCAoMTQpOiBjb25kaXRpb25hbCBsb25nIGJyYW5jaCwgUE9XRVI4CisrLy8gICBP dmVyZmxvdyB3b3JzdCBjYXNlLiBQT1dFUjggaGFzIG5vIG1jcnhyeCBzbyBvdmVyZmxvdy9jYXJy eSB0ZXN0IGlzCisrLy8gICBtZnhlcitybHdpbm0rbXRjcmYgKDMgaW5zbnMpIG9uIHRvcCBvZiB0 aGUgYmFzZSBzaGFwZS4gQnVkZ2V0ID0KKysvLyAgIDMgKFhFUiBpbnNwZWN0aW9uKSArIDEgKGJj KSArIDggKGxvYWQ2NCBzdGFuemEpICsgMiAobXRjdHIrYmN0cikgPSAxNC4KKytzdGF0aWMgY29u c3RleHByIHNpemVfdCBrTm9Qb29sTG9hZDY0U3RhbnphSW5zbnMgPSA4OworK3N0YXRpYyBjb25z dGV4cHIgc2l6ZV90IGtOb1Bvb2xQYXRjaGFibGVCcmFuY2hJbnNucyA9IDEwOworK3N0YXRpYyBj b25zdGV4cHIgc2l6ZV90IGtOb1Bvb2xDb25kTG9uZ0JyYW5jaEluc25zUDhNYXggPSAxNDsKKysK KytlbnVtIExvYWRTdG9yZVNpemUgeworKyAgU2l6ZUJ5dGUgPSA4LAorKyAgU2l6ZUhhbGZXb3Jk ID0gMTYsCisrICBTaXplV29yZCA9IDMyLAorKyAgU2l6ZURvdWJsZSA9IDY0CisrfTsKKysKKytl bnVtIExvYWRTdG9yZUV4dGVuc2lvbiB7IFplcm9FeHRlbmQgPSAwLCBTaWduRXh0ZW5kID0gMSB9 OworKworK3N0YXRpYyBSZWdpc3RlciBDYWxsUmVnID0gcjEyOworKworK3N0cnVjdCBJbW1TaGlm dGVkVGFnIDogcHVibGljIEltbVdvcmQgeworKyAgZXhwbGljaXQgSW1tU2hpZnRlZFRhZyhKU1Zh bHVlU2hpZnRlZFRhZyBzaHRhZykgOiBJbW1Xb3JkKCh1aW50cHRyX3Qpc2h0YWcpIHt9CisrICBl eHBsaWNpdCBJbW1TaGlmdGVkVGFnKEpTVmFsdWVUeXBlIHR5cGUpCisrICAgICAgOiBJbW1Xb3Jk KCgodWludHB0cl90KUpTVkFMX1RZUEVfVE9fU0hJRlRFRF9UQUcodHlwZSkpKSB7fQorK307Cisr Cisrc3RydWN0IEltbVRhZyA6IHB1YmxpYyBJbW0zMiB7CisrICBleHBsaWNpdCBJbW1UYWcoSlNW YWx1ZVRhZyB0YWcpIDogSW1tMzIodGFnKSB7fQorK307CisrCisrY2xhc3MgU2NyYXRjaFRhZ1Nj b3BlIHsKKysgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzXzsKKysgIFJlZ2lzdGVyIHNj cmF0Y2hfOworKyAgYm9vbCBvd25lZF87CisrICBtb3ppbGxhOjpEZWJ1Z09ubHk8Ym9vbD4gcmVs ZWFzZWRfOworKworKyBwdWJsaWM6CisrICBTY3JhdGNoVGFnU2NvcGUoQXNzZW1ibGVyJiBtYXNt LCBjb25zdCBWYWx1ZU9wZXJhbmQmKQorKyAgICAgIDogdGVtcHNfKG1hc20pLCBvd25lZF8odHJ1 ZSksIHJlbGVhc2VkXyhmYWxzZSkgeworKyAgICBzY3JhdGNoXyA9IHRlbXBzXy5BY3F1aXJlKCk7 CisrICB9CisrCisrICBvcGVyYXRvciBSZWdpc3RlcigpIHsKKysgICAgTU9aX0FTU0VSVCghcmVs ZWFzZWRfKTsKKysgICAgcmV0dXJuIHNjcmF0Y2hfOworKyAgfQorKworKyAgdm9pZCByZWxlYXNl KCkgeworKyAgICBNT1pfQVNTRVJUKCFyZWxlYXNlZF8pOworKyAgICByZWxlYXNlZF8gPSB0cnVl OworKyAgICBpZiAob3duZWRfKSB7CisrICAgICAgdGVtcHNfLlJlbGVhc2Uoc2NyYXRjaF8pOwor KyAgICAgIG93bmVkXyA9IGZhbHNlOworKyAgICB9CisrICB9CisrCisrICB2b2lkIHJlYWNxdWly ZSgpIHsKKysgICAgTU9aX0FTU0VSVChyZWxlYXNlZF8pOworKyAgICByZWxlYXNlZF8gPSBmYWxz ZTsKKysgICAgaWYgKCFvd25lZF8pIHsKKysgICAgICBzY3JhdGNoXyA9IHRlbXBzXy5BY3F1aXJl KCk7CisrICAgICAgb3duZWRfID0gdHJ1ZTsKKysgICAgfQorKyAgfQorK307CisrCisrY2xhc3Mg U2NyYXRjaFRhZ1Njb3BlUmVsZWFzZSB7CisrICBTY3JhdGNoVGFnU2NvcGUqIHRzXzsKKysKKysg cHVibGljOgorKyAgZXhwbGljaXQgU2NyYXRjaFRhZ1Njb3BlUmVsZWFzZShTY3JhdGNoVGFnU2Nv cGUqIHRzKSA6IHRzXyh0cykgeworKyAgICB0c18tPnJlbGVhc2UoKTsKKysgIH0KKysgIH5TY3Jh dGNoVGFnU2NvcGVSZWxlYXNlKCkgeyB0c18tPnJlYWNxdWlyZSgpOyB9CisrfTsKKysKKytjbGFz cyBNYWNyb0Fzc2VtYmxlclBQQzY0IDogcHVibGljIEFzc2VtYmxlciB7CisrIHByb3RlY3RlZDoK KysgIE1hY3JvQXNzZW1ibGVyJiBhc01hc20oKTsKKysgIGNvbnN0IE1hY3JvQXNzZW1ibGVyJiBh c01hc20oKSBjb25zdDsKKyt9OworKworK2NsYXNzIE1hY3JvQXNzZW1ibGVyUFBDNjRDb21wYXQg OiBwdWJsaWMgTWFjcm9Bc3NlbWJsZXJQUEM2NCB7CisrIHB1YmxpYzoKKysgIHVzaW5nIE1hY3Jv QXNzZW1ibGVyUFBDNjQ6Ok1hY3JvQXNzZW1ibGVyUFBDNjQ7CisrCisrICBNYWNyb0Fzc2VtYmxl clBQQzY0Q29tcGF0KCkge30KKysKKysgIGJvb2wgYnVpbGRPT0xGYWtlRXhpdEZyYW1lKHZvaWQq IGZha2VSZXR1cm5BZGRyKTsKKysKKysgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAgLy8gQ29udmVyc2lvbiBmdW5j dGlvbnMKKysKKysgIHZvaWQgY29udmVydEJvb2xUb0ludDMyKFJlZ2lzdGVyIHNyYywgUmVnaXN0 ZXIgZGVzdCkgeworKyAgICBhc19ybHdpbm0oZGVzdCwgc3JjLCAwLCAzMSwgMzEpOworKyAgfQor KyAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIg ZGVzdCkgeworKyAgICAvLyBtdHZzcndhOiBWU1JbZGVzdF0uZHcwID0gc2lnbl9leHRfNjQoc3Jj WzMyOjYzXSk7IFA4KyAoSVNBIDIuMDcpLgorKyAgICAvLyBSZXBsYWNlcyBleHRzdyArIG10dnNy ZCAoMiBpbnNucyArIHNjcmF0Y2ggR1BSKSB3aXRoIDEgaW5zbi4KKysgICAgYXNfbXR2c3J3YShk ZXN0LCBzcmMpOworKyAgICBhc19mY2ZpZChkZXN0LCBkZXN0KTsKKysgIH0KKysgIHZvaWQgY29u dmVydEludDMyVG9Eb3VibGUoY29uc3QgQWRkcmVzcyYgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3Qp IHsKKysgICAgLy8gbGZpd2F4IChQNyspOiBGUFIuZHdbMF0gPSBzaWduX2V4dF82NChNRU1bYWRk ciwgNF0pLiBYLWZvcm0gaW5kZXhlZAorKyAgICAvLyDigJQgbm8gaW1tZWRpYXRlIG9mZnNldCwg c28gd2hlbiBvZmZzZXQgIT0gMCB3ZSBhZGQgaXQgaW50byBhIHNjcmF0Y2gKKysgICAgLy8gZmly c3QuIFJlcGxhY2VzIGx3eiArIGV4dHN3ICsgbXR2c3JkIHdpdGggbGZpd2F4IChvbmUgaW5zbikg cGx1cworKyAgICAvLyBvcHRpb25hbCBhZGRyZXNzIGFkZC4KKysgICAgaWYgKHNyYy5vZmZzZXQg PT0gMCkgeworKyAgICAgIGFzX2xmaXdheChkZXN0LCByMCwgc3JjLmJhc2UpOworKyAgICB9IGVs c2UgeworKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIGlmIChpc19pbnRO KHNyYy5vZmZzZXQsIDE2KSkgeworKyAgICAgICAgYXNfYWRkaShzY3JhdGNoLCBzcmMuYmFzZSwg c3JjLm9mZnNldCk7CisrICAgICAgICBhc19sZml3YXgoZGVzdCwgcjAsIHNjcmF0Y2gpOworKyAg ICAgIH0gZWxzZSB7CisrICAgICAgICAvLyBYLWZvcm0gaW5kZXhlZDogbGZpd2F4IGNvbXB1dGVz IGJhc2UgKyBzY3JhdGNoIGRpcmVjdGx5LCBubyBhZGQuCisrICAgICAgICBtb3ZlUHRyKEltbVdv cmQoc3JjLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICAgICAgYXNfbGZpd2F4KGRlc3QsIHNyYy5i YXNlLCBzY3JhdGNoKTsKKysgICAgICB9CisrICAgIH0KKysgICAgYXNfZmNmaWQoZGVzdCwgZGVz dCk7CisrICB9CisrICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKGNvbnN0IEJhc2VJbmRleCYg c3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBjb252ZXJ0SW50 MzJUb0RvdWJsZShBZGRyZXNzKHNjcmF0Y2gsIHNyYy5vZmZzZXQpLCBkZXN0KTsKKysgIH0KKysg IHZvaWQgY29udmVydFVJbnQzMlRvRG91YmxlKFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBk ZXN0KTsKKysgIHZvaWQgY29udmVydFVJbnQzMlRvRmxvYXQzMihSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCk7CisrICB2b2lkIGNvbnZlcnREb3VibGVUb0Zsb2F0MzIoRmxvYXRSZWdp c3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBhc19mcnNwKGRlc3QsIHNyYyk7 CisrICB9CisrICAvLyBQT1dFUjkgRlAxNiBjb252ZXJzaW9ucyAoMSBpbnNuIGVhY2gpLiBDYWxs ZXIgbXVzdCBoYXZlIHZlcmlmaWVkCisrICAvLyBIYXNQT1dFUjkoKSDigJQgU3VwcG9ydHNGbG9h dHs2NCwzMn1UbzE2IGdhdGVzIHRoYXQuIFBQQzY0IEZQUnMgaG9sZAorKyAgLy8gZG91YmxlcyBp bnRlcm5hbGx5OyBhbiAiRlAzMi1pbi1GUFIiIGlzIGp1c3QgdGhlIEZQMzIgdmFsdWUgc3RvcmVk CisrICAvLyBhcyBleGFjdCBGUDY0LCBzbyB4c2N2ZHBocC94c2N2aHBkcCB3b3JrIGZvciBib3Ro IEZQMzLihpRGUDE2IGFuZAorKyAgLy8gRlA2NOKGlEZQMTYgKEZQMTYgZml0cyBleGFjdGx5IGlu IEZQMzIgd2hpY2ggZml0cyBleGFjdGx5IGluIEZQNjQpLgorKyAgdm9pZCBjb252ZXJ0RG91Ymxl VG9GbG9hdDE2KEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg TU9aX0FTU0VSVChIYXNQT1dFUjkoKSk7CisrICAgIGFzX3hzY3ZkcGhwKGRlc3QsIHNyYyk7Cisr ICB9CisrICB2b2lkIGNvbnZlcnRGbG9hdDE2VG9Eb3VibGUoRmxvYXRSZWdpc3RlciBzcmMsIEZs b2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgICAg YXNfeHNjdmhwZHAoZGVzdCwgc3JjKTsKKysgIH0KKysgIHZvaWQgY29udmVydEZsb2F0MzJUb0Zs b2F0MTYoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBNT1pf QVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgICAgYXNfeHNjdmRwaHAoZGVzdCwgc3JjKTsKKysgIH0K KysgIHZvaWQgY29udmVydEZsb2F0MTZUb0Zsb2F0MzIoRmxvYXRSZWdpc3RlciBzcmMsIEZsb2F0 UmVnaXN0ZXIgZGVzdCkgeworKyAgICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgICAgYXNf eHNjdmhwZHAoZGVzdCwgc3JjKTsKKysgIH0KKysgIHZvaWQgY29udmVydEludDMyVG9GbG9hdDE2 KFJlZ2lzdGVyIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoSGFz UE9XRVI5KCkpOworKyAgICBjb252ZXJ0SW50MzJUb0Zsb2F0MzIoc3JjLCBkZXN0KTsKKysgICAg Y29udmVydEZsb2F0MzJUb0Zsb2F0MTYoZGVzdCwgZGVzdCk7CisrICB9CisrICB2b2lkIGNvbnZl cnREb3VibGVUb0ludDMyKEZsb2F0UmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBMYWJlbCog ZmFpbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVj ayA9IHRydWUpOworKyAgdm9pZCBjb252ZXJ0RG91YmxlVG9QdHIoRmxvYXRSZWdpc3RlciBzcmMs IFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg Ym9vbCBuZWdhdGl2ZVplcm9DaGVjayA9IHRydWUpOworKyAgdm9pZCBjb252ZXJ0RmxvYXQzMlRv SW50MzIoRmxvYXRSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QsIExhYmVsKiBmYWlsLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZVplcm9DaGVjayA9IHRydWUp OworKyAgdm9pZCBjb252ZXJ0RmxvYXQzMlRvRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9h dFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgLy8gUFBDNjQgRlBScyBob2xkIGV2ZXJ5IEZQMzIgdmFs dWUgaW4gaXRzIEZQNjQtZXF1aXZhbGVudCByZXByZXNlbnRhdGlvbiwKKysgICAgLy8gc28gZjY0 LnByb21vdGVfZjMyIGlzIGNvbmNlcHR1YWxseSBhIG5vLW9wIGV4Y2VwdCB0aGF0IHdhc20gcmVx dWlyZXMKKysgICAgLy8gc05hTiBpbnB1dHMgdG8gYmUgcXVpZXRlZC4gZnJzcCAoUm91bmQgdG8g U2luZ2xlLVByZWNpc2lvbikgaXMgdGhlCisrICAgIC8vIGlkZW50aXR5IGZvciBTUC1yZXByZXNl bnRhYmxlIGlucHV0cyBidXQgYXBwbGllcyBJRUVFIE5hTi1xdWlldGluZyBhcworKyAgICAvLyBh IHNpZGUgZWZmZWN0LCByZXBsYWNpbmcgdGhlIHByaW9yIGZtciArIGZjbXB1ICsgYnJhbmNoICsg Y2Fub25pY2FsLQorKyAgICAvLyBOYU4tbG9hZCAoNSsgaW5zbnMgKyBzY3JhdGNoIEdQUikgd2l0 aCBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gUmVzdWx0CisrICAgIC8vIG1hdGNoZXMgd2hhdCB4ODYg dmN2dHNzMnNkIC8gQVJNIGZjdnQgcHJvZHVjZS4KKysgICAgYXNfZnJzcChkZXN0LCBzcmMpOwor KyAgfQorKyAgdm9pZCBjb252ZXJ0SW50MzJUb0Zsb2F0MzIoUmVnaXN0ZXIgc3JjLCBGbG9hdFJl Z2lzdGVyIGRlc3QpIHsKKysgICAgLy8gbXR2c3J3YSArIGZjZmlkczsgc2FtZSByZWNpcGUgYXMg Y29udmVydEludDMyVG9Eb3VibGUoUmVnaXN0ZXIpLgorKyAgICBhc19tdHZzcndhKGRlc3QsIHNy Yyk7CisrICAgIGFzX2ZjZmlkcyhkZXN0LCBkZXN0KTsKKysgIH0KKysgIHZvaWQgY29udmVydElu dDMyVG9GbG9hdDMyKGNvbnN0IEFkZHJlc3MmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7Cisr ICAgIC8vIGxmaXdheCArIGZjZmlkczsgc2FtZSByZWNpcGUgYXMgY29udmVydEludDMyVG9Eb3Vi bGUoQWRkcmVzcykuCisrICAgIGlmIChzcmMub2Zmc2V0ID09IDApIHsKKysgICAgICBhc19sZml3 YXgoZGVzdCwgcjAsIHNyYy5iYXNlKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgICAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsKKysg ICAgICAgIGFzX2FkZGkoc2NyYXRjaCwgc3JjLmJhc2UsIHNyYy5vZmZzZXQpOworKyAgICAgICAg YXNfbGZpd2F4KGRlc3QsIHIwLCBzY3JhdGNoKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAg bW92ZVB0cihJbW1Xb3JkKHNyYy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgICAgIGFzX2xmaXdh eChkZXN0LCBzcmMuYmFzZSwgc2NyYXRjaCk7CisrICAgICAgfQorKyAgICB9CisrICAgIGFzX2Zj ZmlkcyhkZXN0LCBkZXN0KTsKKysgIH0KKysKKysgIC8vIFBPV0VSOSBGUDE2IGxvYWQ6IGx4c2lo enggd3JpdGVzIHRoZSAyIG1lbW9yeSBieXRlcyBkaXJlY3RseSBpbnRvCisrICAvLyBkd1swXSBs b3cgMTYgYml0cyB3aXRoIHRoZSByZXN0IHplcm9lZCDigJQgbWF0Y2hpbmcgdGhlIGxheW91dCB0 aGF0CisrICAvLyB4c2N2aHBkcCBleHBlY3RzLCBpbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKysg IEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRmxvYXQxNihjb25zdCBBZGRyZXNzJiBhZGRyLCBGbG9h dFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgdGVtcCkgeworKyAgICBNT1pfQVNTRVJUKEhhc1BPV0VSOSgpKTsKKysgICAgaWYgKGFkZHIu b2Zmc2V0ID09IDApIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2x4c2lo engoZGVzdCwgcjAsIGFkZHIuYmFzZSkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGlmIChp c19pbnROKGFkZHIub2Zmc2V0LCAxNikpIHsKKysgICAgICBhc19hZGRpKHRlbXAsIGFkZHIuYmFz ZSwgYWRkci5vZmZzZXQpOworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbHhz aWh6eChkZXN0LCByMCwgdGVtcCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIG1vdmVQdHIo SW1tV29yZChhZGRyLm9mZnNldCksIHRlbXApOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zm c2V0KGFzX2x4c2loengoZGVzdCwgYWRkci5iYXNlLCB0ZW1wKS5nZXRPZmZzZXQoKSk7CisrICB9 CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZEZsb2F0MTYoY29uc3QgQmFzZUluZGV4JiBzcmMs IEZsb2F0UmVnaXN0ZXIgZGVzdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdpc3RlciB0ZW1wKSB7CisrICAgIE1PWl9BU1NFUlQoSGFzUE9XRVI5KCkpOworKyAgICBjb21w dXRlRWZmZWN0aXZlQWRkcmVzcyhzcmMsIHRlbXApOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX2x4c2loengoZGVzdCwgcjAsIHRlbXApLmdldE9mZnNldCgpKTsKKysgIH0KKysK KysgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAgLy8gRWZmZWN0aXZlIGFkZHJlc3MgY29tcHV0YXRpb24KKysKKysg IHZvaWQgY29tcHV0ZVNjYWxlZEFkZHJlc3MoY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLCBSZWdp c3RlciBkZXN0KSB7CisrICAgIGlmIChhZGRyZXNzLnNjYWxlID09IFRpbWVzT25lKSB7CisrICAg ICAgYXNfYWRkKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCk7CisrICAgIH0gZWxz ZSBpZiAoZGVzdCAhPSBhZGRyZXNzLmJhc2UgJiYgZGVzdCAhPSBhZGRyZXNzLmluZGV4KSB7Cisr ICAgICAgeF9zbGRpKGRlc3QsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOworKyAgICAg IGFzX2FkZChkZXN0LCBhZGRyZXNzLmJhc2UsIGRlc3QpOworKyAgICB9IGVsc2UgeworKyAgICAg IFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIHhfc2xkaShzY3JhdGNoLCBhZGRyZXNz LmluZGV4LCBhZGRyZXNzLnNjYWxlKTsKKysgICAgICBhc19hZGQoZGVzdCwgYWRkcmVzcy5iYXNl LCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorKworKyAgdm9pZCBjb21wdXRlRWZmZWN0aXZlQWRk cmVzcyhjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmIChh ZGRyZXNzLm9mZnNldCA9PSAwKSB7CisrICAgICAgaWYgKGRlc3QgIT0gYWRkcmVzcy5iYXNlKSB7 CisrICAgICAgICB4c19tcihkZXN0LCBhZGRyZXNzLmJhc2UpOworKyAgICAgIH0KKysgICAgfSBl bHNlIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICBhc19hZGRpKGRl c3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworKyAgICB9IGVsc2UgaWYgKEhhc1BP V0VSMTAoKSAmJiBpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAzNCkpIHsKKysgICAgICAvLyBTaW5n bGUtaW5zbiAzNC1iaXQtc2lnbmVkIHJlZytpbW0gYWRkLiBBdm9pZHMgdGhlIHNjcmF0Y2ggR1BS LgorKyAgICAgIGFzX3BhZGRpKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIC8q Uj0qL2ZhbHNlKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcygqdGhpcyk7CisrICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUo KTsKKysgICAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgICAgbW92ZVB0cihJ bW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgICAgYXNfYWRkKGRlc3QsIGFk ZHJlc3MuYmFzZSwgc2NyYXRjaCk7CisrICAgIH0KKysgIH0KKysgIHZvaWQgY29tcHV0ZUVmZmVj dGl2ZUFkZHJlc3MoY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7Cisr ICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIGRlc3QpOworKyAgICBpZiAoYWRkcmVz cy5vZmZzZXQpIHsKKysgICAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Cisr ICAgICAgICBhc19hZGRpKGRlc3QsIGRlc3QsIGFkZHJlc3Mub2Zmc2V0KTsKKysgICAgICB9IGVs c2UgaWYgKEhhc1BPV0VSMTAoKSAmJiBpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAzNCkpIHsKKysg ICAgICAgIGFzX3BhZGRpKGRlc3QsIGRlc3QsIGFkZHJlc3Mub2Zmc2V0LCAvKlI9Ki9mYWxzZSk7 CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKKysgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgICAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgICAgICBtb3ZlUHRyKElt bVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgICAgIGFzX2FkZChkZXN0LCBk ZXN0LCBzY3JhdGNoKTsKKysgICAgICB9CisrICAgIH0KKysgIH0KKysKKysgIC8vID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAgLy8gTW92ZSBpbnN0cnVjdGlvbnMKKysKKysgIHZvaWQgbW92KFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCkgeyB4c19tcihkZXN0LCBzcmMpOyB9CisrICB2b2lkIG1vdihJbW1Xb3JkIGlt bSwgUmVnaXN0ZXIgZGVzdCkgeyBtb3ZlUHRyKGltbSwgZGVzdCk7IH0KKysgIHZvaWQgbW92KElt bVB0ciBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbW92KEltbVdvcmQodWludHB0cl90KGlt bS52YWx1ZSkpLCBkZXN0KTsKKysgIH0KKysgIC8vIEVtaXQgYW4gOC1pbnN0cnVjdGlvbiBOT1Ag c3RhbnphIGZvciBhIHBhdGNoYWJsZSA2NC1iaXQgbG9hZC4KKysgIC8vIFBvb2wgZmx1c2hlcyBh cmUgaW5oaWJpdGVkIGR1cmluZyBlbWlzc2lvbiB0byBwcmV2ZW50IHBvb2wgZGF0YQorKyAgLy8g ZnJvbSBiZWluZyBpbnNlcnRlZCBtaWQtc3RhbnphLgorKyAgQnVmZmVyT2Zmc2V0IGVtaXRMb2Fk NjRTdGFuemEoUmVnaXN0ZXIgZGVzdCwgdWludDY0X3QgdmFsdWUpIHsKKysgICAgbV9idWZmZXIu ZW50ZXJOb1Bvb2woa05vUG9vbExvYWQ2NFN0YW56YUluc25zKTsKKysgICAgQnVmZmVyT2Zmc2V0 IGJvID0gd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAg IHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0 ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0 KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIG1fYnVmZmVyLmxlYXZl Tm9Qb29sKCk7CisrICAgIC8vIElmIGFueSBvZiB0aGUgOCB3cml0ZUluc3QgY2FsbHMgaGl0IE9P TSwgb25seSBzb21lIG9mIHRoZSBzdGFuemEKKysgICAgLy8gd2FzIHJlc2VydmVkIGluIHRoZSBi dWZmZXIuIFdyaXRlTG9hZDY0SW5zdHJ1Y3Rpb25zIHdyaXRlcyAzMiBieXRlcworKyAgICAvLyB1 bmNvbmRpdGlvbmFsbHksIHNvIGNhbGxpbmcgaXQgaGVyZSB3b3VsZCBvdmVyZmxvdyB0aGUgVmVj dG9yJ3MKKysgICAgLy8gYmFja2luZyBzdG9yZSBhbmQgY29ycnVwdCB0aGUgbmV4dCBoZWFwIGNo dW5rJ3MgbWV0YWRhdGEsIHN1cmZhY2luZworKyAgICAvLyBsYXRlciBhcyBhIG1hbGxvYy1kZXRl Y3RlZCBmcmVlLXRpbWUgY3Jhc2guCisrICAgIGlmIChtX2J1ZmZlci5vb20oKSkgeworKyAgICAg IHJldHVybiBibzsKKysgICAgfQorKyAgICBXcml0ZUxvYWQ2NEluc3RydWN0aW9ucygoSW5zdHJ1 Y3Rpb24qKWVkaXRTcmMoYm8pLCBkZXN0LCB2YWx1ZSk7CisrICAgIHJldHVybiBibzsKKysgIH0K KysKKysgIHZvaWQgbW92KENvZGVMYWJlbCogbGFiZWwsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg QnVmZmVyT2Zmc2V0IGJvID0gZW1pdExvYWQ2NFN0YW56YShkZXN0LCBMYWJlbEJhc2U6OklOVkFM SURfT0ZGU0VUKTsKKysgICAgbGFiZWwtPnBhdGNoQXQoKS0+YmluZChiby5nZXRPZmZzZXQoKSk7 CisrICAgIGxhYmVsLT5zZXRMaW5rTW9kZShDb2RlTGFiZWw6Ok1vdmVJbW1lZGlhdGUpOworKyAg fQorKyAgdm9pZCBtb3YoUmVnaXN0ZXIgc3JjLCBBZGRyZXNzIGRlc3QpIHsgc3RvcmVQdHIoc3Jj LCBkZXN0KTsgfQorKyAgdm9pZCBtb3YoQWRkcmVzcyBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgbG9h ZFB0cihzcmMsIGRlc3QpOyB9CisrCisrICB2b2lkIG1vdmUzMihJbW0zMiBpbW0sIFJlZ2lzdGVy IGRlc3QpIHsKKysgICAgaWYgKGlzX2ludE4oaW1tLnZhbHVlLCAxNikpIHsKKysgICAgICB4c19s aShkZXN0LCAoaW50MTZfdClpbW0udmFsdWUpOworKyAgICB9IGVsc2UgaWYgKGlzX3VpbnROKCh1 aW50MzJfdClpbW0udmFsdWUsIDE2KSkgeworKyAgICAgIHhzX2xpKGRlc3QsIDApOworKyAgICAg IGFzX29yaShkZXN0LCBkZXN0LCAodWludDE2X3QpaW1tLnZhbHVlKTsKKysgICAgfSBlbHNlIHsK KysgICAgICB4c19saXMoZGVzdCwgKGludDE2X3QpKCh1aW50MzJfdClpbW0udmFsdWUgPj4gMTYp KTsKKysgICAgICBpZiAoaW1tLnZhbHVlICYgMHhmZmZmKSB7CisrICAgICAgICBhc19vcmkoZGVz dCwgZGVzdCwgKHVpbnQxNl90KWltbS52YWx1ZSk7CisrICAgICAgfQorKyAgICB9CisrICB9Cisr ICB2b2lkIG1vdmUzMihSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgYXNfZXh0c3coZGVz dCwgc3JjKTsgfQorKworKyAgdm9pZCBtb3ZlUHRyKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVz dCkgeworKyAgICBpZiAoc3JjICE9IGRlc3QpIHsKKysgICAgICB4c19tcihkZXN0LCBzcmMpOwor KyAgICB9CisrICB9CisrICB2b2lkIG1vdmVQdHIoSW1tV29yZCBpbW0sIFJlZ2lzdGVyIGRlc3Qp IHsKKysgICAgaWYgKGltbS52YWx1ZSA9PSAwKSB7CisrICAgICAgeHNfbGkoZGVzdCwgMCk7Cisr ICAgIH0gZWxzZSBpZiAoaXNfaW50TigoaW50cHRyX3QpaW1tLnZhbHVlLCAxNikpIHsKKysgICAg ICB4c19saShkZXN0LCAoaW50MTZfdClpbW0udmFsdWUpOworKyAgICB9IGVsc2UgaWYgKGlzX3Vp bnROKGltbS52YWx1ZSwgMTYpKSB7CisrICAgICAgeHNfbGkoZGVzdCwgMCk7CisrICAgICAgYXNf b3JpKGRlc3QsIGRlc3QsICh1aW50MTZfdClpbW0udmFsdWUpOworKyAgICB9IGVsc2UgaWYgKGlz X2ludE4oKGludHB0cl90KWltbS52YWx1ZSwgMzIpKSB7CisrICAgICAgLy8gMzItYml0IHNpZ25l ZDogbGlzICsgb3JpICgyIGluc3RydWN0aW9ucykuCisrICAgICAgeHNfbGlzKGRlc3QsIChpbnQx Nl90KSgodWludDMyX3QpaW1tLnZhbHVlID4+IDE2KSk7CisrICAgICAgaWYgKGltbS52YWx1ZSAm IDB4RkZGRikgeworKyAgICAgICAgYXNfb3JpKGRlc3QsIGRlc3QsICh1aW50MTZfdClpbW0udmFs dWUpOworKyAgICAgIH0KKysgICAgfSBlbHNlIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50Tigo aW50cHRyX3QpaW1tLnZhbHVlLCAzNCkpIHsKKysgICAgICAvLyBQT1dFUjEwIHNpbmdsZS1pbnN0 cnVjdGlvbiAzNC1iaXQgc2lnbmVkIGltbWVkaWF0ZS4gUmVwbGFjZXMgdGhlCisrICAgICAgLy8g NS1pbnNuIGZhbGxiYWNrIGZvciB2YWx1ZXMgaW4gKDMzLTM0KS1iaXQgc2lnbmVkIHJhbmdlLgor KyAgICAgIC8vIDggYnl0ZXMgdnMgMjAgYnl0ZXM7IG9uZSBzbG90IHRlbXAgcmVnaXN0ZXIgaXMg bm8gbG9uZ2VyIG5lZWRlZC4KKysgICAgICBhc19wYWRkaShkZXN0LCByMCwgKGludDY0X3QpaW1t LnZhbHVlLCAvKlI9Ki9mYWxzZSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgLy8gRnVsbCA2NC1i aXQ6IEdDQy1zdHlsZSBsaXMrb3JpK2xpcytvcmkrcmxkaW1pICg1IGluc3RydWN0aW9ucykuCisr ICAgICAgLy8gTm8gTFIgY2xvYmJlciwgbm8gZW1iZWRkZWQgZGF0YSDigJQgcHVyZSBpbnN0cnVj dGlvbiBzZXF1ZW5jZS4KKysgICAgICB1aW50MzJfdCBsbzMyID0gKHVpbnQzMl90KShpbW0udmFs dWUpOworKyAgICAgIHVpbnQzMl90IGhpMzIgPSAodWludDMyX3QpKGltbS52YWx1ZSA+PiAzMik7 CisrICAgICAgUmVnaXN0ZXIgdGVtcCA9IChkZXN0ICE9IFNlY29uZFNjcmF0Y2hSZWcpID8gU2Vj b25kU2NyYXRjaFJlZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6IFNhdmVkU2NyYXRjaFJlZ2lzdGVyOworKyAgICAgIG1fYnVmZmVyLmVuc3VyZVNw YWNlKDUgKiBzaXplb2YodWludDMyX3QpKTsKKysgICAgICB4c19saXMoZGVzdCwgKGludDE2X3Qp KGxvMzIgPj4gMTYpKTsKKysgICAgICBhc19vcmkoZGVzdCwgZGVzdCwgbG8zMiAmIDB4RkZGRik7 CisrICAgICAgeHNfbGlzKHRlbXAsIChpbnQxNl90KShoaTMyID4+IDE2KSk7CisrICAgICAgYXNf b3JpKHRlbXAsIHRlbXAsIGhpMzIgJiAweEZGRkYpOworKyAgICAgIGFzX3JsZGltaShkZXN0LCB0 ZW1wLCAzMiwgMCk7CisrICAgIH0KKysgIH0KKysgIHZvaWQgbW92ZVB0cihJbW1QdHIgaW1tLCBS ZWdpc3RlciBkZXN0KSB7CisrICAgIG1vdmVQdHIoSW1tV29yZCh1aW50cHRyX3QoaW1tLnZhbHVl KSksIGRlc3QpOworKyAgfQorKworKyAgLy8gTG9hZCBhIDY0LWJpdCBGUFIgY29uc3RhbnQgZnJv bSB0aGUgaW5saW5lIGNvbnN0YW50IHBvb2wuCisrICAvLyBQT1dFUjk6IDIgaW5zdHJ1Y3Rpb25z IChhZGRwY2lzICsgbGZkKSAtLSBubyBhbGlnbm1lbnQgY29uc3RyYWludC4KKysgIC8vIFBPV0VS MTA6IDEgcHJlZml4ZWQgaW5zdHJ1Y3Rpb24gKHBsZmQsIDIgc2xvdHMpLCBvciAzIHNsb3RzIGlu IHRoZQorKyAgLy8gICAobG9hZEFkZHIgJiA2MykgPT0gNjAgYWxpZ25tZW50LWxlYWRpbmctbm9w IGNhc2UuIFJlc2VydmUgMyB0bworKyAgLy8gICBjb3ZlciBib3RoIGNhc2VzIGNvbnNlcnZhdGl2 ZWx5LgorKyAgLy8gUE9XRVI4OiBub3QgdXNlZCAtLSBsb2FkQ29uc3RhbnREb3VibGUgaW5saW5l cyB0aGUgY29uc3RhbnQuCisrICBCdWZmZXJPZmZzZXQgbG9hZEZyb21Qb29sRmxvYXQ2NChGbG9h dFJlZ2lzdGVyIGRlc3QsIGRvdWJsZSB2YWx1ZSkgeworKyAgICBzaXplX3Qgc2xvdHMgPSBIYXNQ T1dFUjEwKCkgPyAzIDogMjsKKysgICAgdWludDMyX3QgaGludCA9ICh1aW50MzJfdChkZXN0LmVu Y29kaW5nKCkpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAodWludDMyX3QoUG9vbExv YWRGUFI2NCkgPDwgMjEpIHwgMHhGMDAwMDAwMDsKKysgICAgdWludDMyX3QgaW5zdFszXSA9IHto aW50LCBOb3BJbnN0LCBOb3BJbnN0fTsKKysgICAgcmV0dXJuIG1fYnVmZmVyLmFsbG9jRW50cnko c2xvdHMsIDIsICh1aW50OF90KilpbnN0LCAodWludDhfdCopJnZhbHVlKTsKKysgIH0KKysgIC8v IExvYWQgYSAzMi1iaXQgRlBSIGNvbnN0YW50IGZyb20gdGhlIGlubGluZSBjb25zdGFudCBwb29s LgorKyAgLy8gU2FtZSBzaGFwZSBhcyBsb2FkRnJvbVBvb2xGbG9hdDY0IChhYm92ZSkuIGxmcy9w bGZzIGF1dG8tZXhwYW5kIHRoZQorKyAgLy8gMzItYml0IHNpbmdsZS1wcmVjaXNpb24gdmFsdWUg dG8gZG91YmxlIGluIHRoZSBGUFIsIHNvIG5vIGZvbGxvdy11cAorKyAgLy8geHNjdnNwZHBuIGlz IG5lZWRlZC4KKysgIEJ1ZmZlck9mZnNldCBsb2FkRnJvbVBvb2xGbG9hdDMyKEZsb2F0UmVnaXN0 ZXIgZGVzdCwgZmxvYXQgdmFsdWUpIHsKKysgICAgc2l6ZV90IHNsb3RzID0gSGFzUE9XRVIxMCgp ID8gMyA6IDI7CisrICAgIHVpbnQzMl90IGhpbnQgPSAodWludDMyX3QoZGVzdC5lbmNvZGluZygp KSA8PCAxNikgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KFBvb2xMb2FkRlBSMzIp IDw8IDIxKSB8IDB4RjAwMDAwMDA7CisrICAgIHVpbnQzMl90IGluc3RbM10gPSB7aGludCwgTm9w SW5zdCwgTm9wSW5zdH07CisrICAgIHJldHVybiBtX2J1ZmZlci5hbGxvY0VudHJ5KHNsb3RzLCAx LCAodWludDhfdCopaW5zdCwgKHVpbnQ4X3QqKSZ2YWx1ZSk7CisrICB9CisrICAvLyBMb2FkIGEg MTI4LWJpdCBTSU1EIGNvbnN0YW50IGZyb20gdGhlIGlubGluZSBjb25zdGFudCBwb29sLgorKyAg Ly8gUGVyLWFyY2ggc2xvdCByZXNlcnZhdGlvbiAtLSB0aGUgcGF0Y2hlciB3cml0ZXMgb25seSB0 aGUgc2xvdHMKKysgIC8vIGVhY2ggbWljcm8tYXJjaCBhY3R1YWxseSBuZWVkczoKKysgIC8vICAg UDg6IDUgKGJjbCArIG1mbHIgKyBhZGRpICsgbHh2ZDJ4ICsgeHhwZXJtZGkpCisrICAvLyAgIFA5 OiAzIChhZGRwY2lzICsgYWRkaSArIGx4dngpIC0tIG5vIExSIHRvdWNoLCBubyBSQVMgaGF6YXJk CisrICAvLyAgIFAxMDogMyAoYWxpZ25tZW50LXNhZmU6IHByZWZpeCArIHN1ZmZpeCArIDEgcmVz ZXJ2ZSBmb3IgdGhlCisrICAvLyAgICAgICAgICAobG9hZEFkZHIgJiA2MykgPT0gNjAgbGVhZGlu Zy1ub3AgY2FzZSkKKysgIC8vIFBvb2wgZW50cnkgaXMgNCDDlyA0LWJ5dGUgd29yZHMgPSAxNiBi eXRlcy4gUDkgdXNlcworKyAgLy8gU2F2ZWRTY3JhdGNoUmVnaXN0ZXIgKHIxNikgYXMgdGhlIFBD IGJhc2U7IFAxMCBlbWl0cyBhIHNpbmdsZQorKyAgLy8gUEMtcmVsYXRpdmUgcGx4diB3aXRoIG5v IHNjcmF0Y2ggYW5kIG5vIExSIHRvdWNoLiBPbmx5IFA4IHN0aWxsCisrICAvLyBjbG9iYmVycyBM UiAoY29ycmVjdG5lc3Mtb25seSBmYWxsYmFjazsgbGl2ZSBieSBkZXNpZ24pLgorKyAgQnVmZmVy T2Zmc2V0IGxvYWRGcm9tUG9vbFNpbWQxMjgoRmxvYXRSZWdpc3RlciBkZXN0LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2ltZENvbnN0YW50JiB2KSB7CisrICAg IHNpemVfdCBzbG90czsKKysgICAgaWYgKEhhc1BPV0VSMTAoKSkgeworKyAgICAgIHNsb3RzID0g MzsKKysgICAgfSBlbHNlIGlmIChIYXNQT1dFUjkoKSkgeworKyAgICAgIHNsb3RzID0gMzsKKysg ICAgfSBlbHNlIHsKKysgICAgICBzbG90cyA9IDU7CisrICAgIH0KKysgICAgLy8gU2ltZDEyOCBl bmNvZGluZyBpcyAzMi02MzsgbWFzayB0byA1IGJpdHMgZm9yIGhpbnQuCisrICAgIC8vIFBhdGNo Q29uc3RhbnRQb29sTG9hZCBzZXRzIFRYIGJpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIFNpbWQxMjgu CisrICAgIHVpbnQzMl90IGhpbnQgPSAoKHVpbnQzMl90KGRlc3QuZW5jb2RpbmcoKSkgJiAweDFG KSA8PCAxNikgfAorKyAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KFBvb2xMb2FkU2ltZDEy OCkgPDwgMjEpIHwgMHhGMDAwMDAwMDsKKysgICAgdWludDMyX3QgaW5zdFs1XSA9IHtoaW50LCBO b3BJbnN0LCBOb3BJbnN0LCBOb3BJbnN0LCBOb3BJbnN0fTsKKysgICAgcmV0dXJuIG1fYnVmZmVy LmFsbG9jRW50cnkoc2xvdHMsIDQsICh1aW50OF90KilpbnN0LCAodWludDhfdCopdi5ieXRlcygp KTsKKysgIH0KKysgIHZvaWQgbW92ZVB0cih3YXNtOjpTeW1ib2xpY0FkZHJlc3MgaW1tLCBSZWdp c3RlciBkZXN0KSB7CisrICAgIEJ1ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoZGVz dCwgKHVpbnQ2NF90KS0xKTsKKysgICAgYXBwZW5kKHdhc206OlN5bWJvbGljQWNjZXNzKENvZGVP ZmZzZXQoYm8uZ2V0T2Zmc2V0KCkpLCBpbW0pKTsKKysgIH0KKysgIHZvaWQgbW92ZVB0cihJbW1H Q1B0ciBpbW0sIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0gZW1pdExv YWQ2NFN0YW56YShkZXN0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh1aW50NjRfdCl1aW50cHRyX3QoaW1tLnZhbHVlKSk7CisrICAgIEFzc2VtYmxlcjo6d3JpdGVE YXRhUmVsb2NhdGlvbihibywgaW1tKTsKKysgIH0KKysKKysgIHZvaWQgbW92ZUZsb2F0MzIoRmxv YXRSZWdpc3RlciBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBpZiAoc3JjICE9IGRl c3QpIHsKKysgICAgICBhc19mbXIoZGVzdCwgc3JjKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBt b3ZlRG91YmxlKEZsb2F0UmVnaXN0ZXIgc3JjLCBGbG9hdFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg aWYgKHNyYyAhPSBkZXN0KSB7CisrICAgICAgYXNfZm1yKGRlc3QsIHNyYyk7CisrICAgIH0KKysg IH0KKysKKysgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAgLy8gQnJhbmNoIGZ1bmN0aW9ucworKworKyAgdm9pZCBi cmFuY2goSml0Q29kZSogYykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygq dGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIEJ1 ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEoc2NyYXRjaCwgKHVpbnQ2NF90KXVpbnRw dHJfdChjLT5yYXcoKSkpOworKyAgICBhZGRQZW5kaW5nSnVtcChibywgSW1tUHRyKGMtPnJhdygp KSwgUmVsb2NhdGlvbktpbmQ6OkpJVENPREUpOworKyAgICB4c19tdGN0cihzY3JhdGNoKTsKKysg ICAgYXNfYmN0cigpOworKyAgfQorKyAgdm9pZCBicmFuY2goY29uc3QgUmVnaXN0ZXIgcmVnKSB7 CisrICAgIHhzX210Y3RyKHJlZyk7CisrICAgIGFzX2JjdHIoKTsKKysgIH0KKysKKysgIHZvaWQg anVtcChMYWJlbCogbGFiZWwpIHsKKysgICAgaWYgKGxhYmVsLT5ib3VuZCgpKSB7CisrICAgICAg Ly8gT3BlbiB0aGUgbm8tcG9vbCB3aW5kb3cgQkVGT1JFIGNvbXB1dGluZyB0aGUgZGlzcGxhY2Vt ZW50LiBUaGUKKysgICAgICAvLyBlbnRlck5vUG9vbCgpIGNhbGwgaXRzZWxmIGNhbiB0cmlnZ2Vy IGEgcG9vbCBmbHVzaCwgd2hpY2ggYWR2YW5jZXMKKysgICAgICAvLyBjdXJyZW50T2Zmc2V0KCku IENvbXB1dGluZyB0aGUgZGlzcGxhY2VtZW50IGFnYWluc3QgdGhlIHByZS1mbHVzaAorKyAgICAg IC8vIG9mZnNldCBhbmQgdGhlbiBlbWl0dGluZyB0aGUgYiBhdCB0aGUgcG9zdC1mbHVzaCBvZmZz ZXQgd291bGQgbGFuZAorKyAgICAgIC8vIHRoZSBicmFuY2ggKHBvb2xTaXplKSBieXRlcyBwYXN0 IHRoZSBpbnRlbmRlZCB0YXJnZXQuCisrICAgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woMik7Cisr ICAgICAgaW50MzJfdCBvZmZzZXQgPSBsYWJlbC0+b2Zmc2V0KCkgLSBjdXJyZW50T2Zmc2V0KCk7 CisrICAgICAgaWYgKEpPZmZJbW0yNjo6SXNJblJhbmdlKG9mZnNldCkpIHsKKysgICAgICAgIGFz X2Iob2Zmc2V0KTsKKysgICAgICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgICAgIG1fYnVm ZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAgICAgIG1f YnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgICAgLy8gTG9uZyBqdW1wIHRvIGJvdW5kIGxhYmVs LgorKyAgICAgIEJ1ZmZlck9mZnNldCBibyA9CisrICAgICAgICAgIGVtaXRMb2FkNjRTdGFuemEo U2Vjb25kU2NyYXRjaFJlZywgTGFiZWxCYXNlOjpJTlZBTElEX09GRlNFVCk7CisrICAgICAgeHNf bXRjdHIoU2Vjb25kU2NyYXRjaFJlZyk7CisrICAgICAgYXNfYmN0cigpOworKyAgICAgIGFkZExv bmdKdW1wKGJvLCBCdWZmZXJPZmZzZXQobGFiZWwtPm9mZnNldCgpKSk7CisrICAgICAgcmV0dXJu OworKyAgICB9CisrICAgIC8vIFVuYm91bmQgbGFiZWw6IGVtaXQgdHJhcC10YWdnZWQgc3Rhbnph ICgxMCBzbG90cykuCisrICAgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xQYXRjaGFibGVC cmFuY2hJbnNucyk7CisrICAgIEJ1ZmZlck9mZnNldCBibyA9IHhzX3RyYXBfdGFnZ2VkKEJUYWcp OworKyAgICB3cml0ZUluc3QobGFiZWwtPnVzZWQoKSA/IGxhYmVsLT5vZmZzZXQoKSA6IExhYmVs QmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdy aXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUlu c3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5v cEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0 KTsKKysgICAgbV9idWZmZXIubGVhdmVOb1Bvb2woKTsKKysgICAgaWYgKCFvb20oKSkgeworKyAg ICAgIGxhYmVsLT51c2UoYm8uZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICB9CisrICB2b2lkIGp1 bXAoUmVnaXN0ZXIgcmVnKSB7CisrICAgIHhzX210Y3RyKHJlZyk7CisrICAgIGFzX2JjdHIoKTsK KysgIH0KKysgIHZvaWQganVtcChjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbG9hZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAg eHNfbXRjdHIoc2NyYXRjaCk7CisrICAgIGFzX2JjdHIoKTsKKysgIH0KKysgIHZvaWQganVtcChK aXRDb2RlKiBjb2RlKSB7IGJyYW5jaChjb2RlKTsgfQorKyAgdm9pZCBqdW1wKEltbVB0ciBwdHIp IHsKKysgICAgQnVmZmVyT2Zmc2V0IGJvID0KKysgICAgICAgIGVtaXRMb2FkNjRTdGFuemEoU2Vj b25kU2NyYXRjaFJlZywgKHVpbnQ2NF90KXVpbnRwdHJfdChwdHIudmFsdWUpKTsKKysgICAgYWRk UGVuZGluZ0p1bXAoYm8sIHB0ciwgUmVsb2NhdGlvbktpbmQ6OkhBUkRDT0RFRCk7CisrICAgIHhz X210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICBhc19iY3RyKCk7CisrICB9CisrICB2b2lk IGp1bXAoVHJhbXBvbGluZVB0ciBjb2RlKSB7IGp1bXAoSW1tUHRyKGNvZGUudmFsdWUpKTsgfQor KworKyAgLy8gQ29uZGl0aW9uYWwgYnJhbmNoIHRvIGxhYmVsLiBBc3N1bWVzIGEgY29tcGFyZSBp bnN0cnVjdGlvbiBoYXMgYWxyZWFkeQorKyAgLy8gYmVlbiBlbWl0dGVkIHRoYXQgc2V0cyBDUjAu CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29uZFQ+CisrICB2b2lkIG1hX2IoQ29uZFQgY29uZCwg TGFiZWwqIGxhYmVsKSB7CisrICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lX3Y8Q29uZFQs IENvbmRpdGlvbj4pIHsKKysgICAgICBpZiAoY29uZCA9PSBBbHdheXMpIHsKKysgICAgICAgIGp1 bXAobGFiZWwpOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0KKysgICAgfQorKyAgICBpZiAo bGFiZWwtPmJvdW5kKCkpIHsKKysgICAgICAvLyBPcGVuIHRoZSBuby1wb29sIHdpbmRvdyBCRUZP UkUgY29tcHV0aW5nIHRoZSBkaXNwbGFjZW1lbnQuIFNhbWUKKysgICAgICAvLyBoYXphcmQgYXMg anVtcCgpOiBlbnRlck5vUG9vbCBtYXkgaXRzZWxmIGZsdXNoIGEgcGVuZGluZyBwb29sLAorKyAg ICAgIC8vIGFkdmFuY2luZyBjdXJyZW50T2Zmc2V0KCk7IHRoZSBiYyBtdXN0IGVtaXQgd2l0aCBh IGRpc3BsYWNlbWVudAorKyAgICAgIC8vIGNvbXB1dGVkIGFnYWluc3QgdGhlIHBvc3QtZmx1c2gg b2Zmc2V0LiBCdWRnZXQgY292ZXJzIG1heCA2CisrICAgICAgLy8gaW5zdHJ1Y3Rpb25zOiBQT1dF UjggT3ZlcmZsb3cgWEVSIG9wcyAoMykgKyBjcm9yICgxKSArIGJjICgxKSArCisrICAgICAgLy8g bm9wICgxKSBmb3IgdGhlIHdvcnN0LWNhc2UgRG91YmxlQ29uZGl0aW9uK092ZXJmbG93IHNob3J0 IHBhdGguCisrICAgICAgbV9idWZmZXIuZW50ZXJOb1Bvb2woNik7CisrICAgICAgLy8gRm9yIERv dWJsZUNvbmRpdGlvbiwgYXNfYmMgZW1pdHMgY3Jvci9jcmFuZGMgYmVmb3JlIHRoZSBiYworKyAg ICAgIC8vIGluc3RydWN0aW9uLCBhZHZhbmNpbmcgY3VycmVudE9mZnNldCgpIGJ5IDQuIEFjY291 bnQgZm9yIHRoaXMKKysgICAgICAvLyBpbiB0aGUgb2Zmc2V0IGNhbGN1bGF0aW9uLgorKyAgICAg IGludDMyX3QgY3JBZGp1c3QgPSAwOworKyAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1l X3Y8Q29uZFQsIERvdWJsZUNvbmRpdGlvbj4pIHsKKysgICAgICAgIGNyQWRqdXN0ID0gLShpbnQz Ml90KXNpemVvZih1aW50MzJfdCk7CisrICAgICAgfQorKyAgICAgIGludDMyX3Qgb2Zmc2V0ID0g bGFiZWwtPm9mZnNldCgpIC0gY3VycmVudE9mZnNldCgpICsgY3JBZGp1c3Q7CisrICAgICAgaWYg KEJPZmZJbW0xNjo6SXNJblJhbmdlKG9mZnNldCkpIHsKKysgICAgICAgIGFzX2JjKChpbnQxNl90 KW9mZnNldCwgY29uZCk7CisrICAgICAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgICAgICBt X2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0KKysgICAg ICBtX2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgICAgIC8vIExvbmcgY29uZGl0aW9uYWwgYnJh bmNoIGZvciBib3VuZCBsYWJlbC4KKysgICAgICAvLyBYRVIgb3BzKDAtMykgKyBjcm9yKDAtMSkg KyBiYygxKSArIHN0YW56YSg4KSArIG10Y3RyKDEpICsgYmN0cigxKS4KKysgICAgICAvLyBQOCBP dmVyZmxvdzogbWZ4ZXIrcmx3aW5tK210Y3JmK2JjK3N0YW56YSttdGN0citiY3RyID0gMTQgbWF4 LgorKyAgICAgIG1fYnVmZmVyLmVudGVyTm9Qb29sKGtOb1Bvb2xDb25kTG9uZ0JyYW5jaEluc25z UDhNYXgpOworKyAgICAgIGFzX2JjKChpbnQxNl90KTQ0LCBJbnZlcnRDb25kaXRpb24oY29uZCkp OworKyAgICAgIEJ1ZmZlck9mZnNldCBib0xvYWQgPQorKyAgICAgICAgICBlbWl0TG9hZDY0U3Rh bnphKFNlY29uZFNjcmF0Y2hSZWcsIExhYmVsQmFzZTo6SU5WQUxJRF9PRkZTRVQpOworKyAgICAg IHhzX210Y3RyKFNlY29uZFNjcmF0Y2hSZWcpOworKyAgICAgIGFzX2JjdHIoKTsKKysgICAgICBt X2J1ZmZlci5sZWF2ZU5vUG9vbCgpOworKyAgICAgIGFkZExvbmdKdW1wKGJvTG9hZCwgQnVmZmVy T2Zmc2V0KGxhYmVsLT5vZmZzZXQoKSkpOworKyAgICAgIHJldHVybjsKKysgICAgfQorKyAgICAv LyBGb3J3YXJkIHJlZmVyZW5jZTogZW1pdCBCQ1RhZyBzdGFuemEuCisrICAgIC8vIFhFUiBvcHMo MC0zKSArIGNyb3IoMC0xKSArIGJjKDEpICsgdHJhcF90YWdnZWQoMSkgKyBjaGFpbigxKSArIDgg Tk9Qcy4KKysgICAgLy8gUDggT3ZlcmZsb3c6IG1meGVyK3Jsd2lubSttdGNyZitiYyt0cmFwK2No YWluKzhOT1BzID0gMTQgbWF4LgorKyAgICBtX2J1ZmZlci5lbnRlck5vUG9vbChrTm9Qb29sQ29u ZExvbmdCcmFuY2hJbnNuc1A4TWF4KTsKKysgICAgYXNfYmMoKGludDE2X3QpNDQsIEludmVydENv bmRpdGlvbihjb25kKSk7CisrICAgIEJ1ZmZlck9mZnNldCBibyA9IHhzX3RyYXBfdGFnZ2VkKEJD VGFnKTsKKysgICAgd3JpdGVJbnN0KGxhYmVsLT51c2VkKCkgPyBsYWJlbC0+b2Zmc2V0KCkgOiBM YWJlbEJhc2U6OklOVkFMSURfT0ZGU0VUKTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAg ICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5zdChOb3BJbnN0KTsKKysgICAgd3Jp dGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9wSW5zdCk7CisrICAgIHdyaXRlSW5z dChOb3BJbnN0KTsKKysgICAgd3JpdGVJbnN0KE5vcEluc3QpOworKyAgICB3cml0ZUluc3QoTm9w SW5zdCk7CisrICAgIG1fYnVmZmVyLmxlYXZlTm9Qb29sKCk7CisrICAgIGlmICghb29tKCkpIHsK KysgICAgICBsYWJlbC0+dXNlKGJvLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgfQorKworKyAg Ly8gU2V0IGRlc3QgPSAxIGlmIENSMCBzYXRpc2ZpZXMgY29uZCwgZWxzZSBkZXN0ID0gMC4KKysg IC8vIFBPV0VSMTA6IHNldGJjL3NldGJjciAoMSBpbnNuKS4gUDgvUDk6IGlzZWwtYmFzZWQgcGF0 aCB3aXRoIHRoZQorKyAgLy8gcjAtYXMtemVybyB0cmljayBvbiB0aGUgQnJhbmNoT25DbGVhciBo YWxmLgorKyAgdm9pZCBtYV9jbXBfc2V0KFJlZ2lzdGVyIGRlc3QsIENvbmRpdGlvbiBjb25kKSB7 CisrICAgIHVpbnQzMl90IGJhc2UgPSB1aW50MzJfdChjb25kKSAmIDB4ZmY7CisrICAgIHVpbnQz Ml90IHNldGJhc2UgPSAoYmFzZSAmIH5CcmFuY2hPcHRpb25NYXNrKSB8IEJyYW5jaE9uU2V0Owor KyAgICBpZiAoSGFzUE9XRVIxMCgpKSB7CisrICAgICAgaWYgKChiYXNlICYgQnJhbmNoT3B0aW9u TWFzaykgPT0gQnJhbmNoT25TZXQpIHsKKysgICAgICAgIGFzX3NldGJjKGRlc3QsIHNldGJhc2Us IGNyMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGFzX3NldGJjcihkZXN0LCBzZXRiYXNl LCBjcjApOworKyAgICAgIH0KKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICB4c19saShzY3JhdGNoLCAxKTsKKysgICAgaWYgKChiYXNlICYg QnJhbmNoT3B0aW9uTWFzaykgPT0gQnJhbmNoT25TZXQpIHsKKysgICAgICB4c19saShkZXN0LCAw KTsKKysgICAgICBhc19pc2VsKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIHNldGJhc2UsIGNyMCk7Cisr ICAgIH0gZWxzZSB7CisrICAgICAgYXNfaXNlbDAoZGVzdCwgcjAsIHNjcmF0Y2gsIHNldGJhc2Us IGNyMCk7CisrICAgIH0KKysgIH0KKysKKysgIHZvaWQgbWFfY21wX3NldF9kYmwoUmVnaXN0ZXIg ZGVzdCwgRG91YmxlQ29uZGl0aW9uIGNvbmQpIHsKKysgICAgdWludDMyX3QgYmFzZSA9IHVpbnQz Ml90KGNvbmQpICYgMHhmZjsKKysgICAgYm9vbCBoYXNVbm9yZGVyZWRGbGFnID0gdWludDMyX3Qo Y29uZCkgJiBEb3VibGVDb25kaXRpb25Vbm9yZGVyZWQ7CisrICAgIHVpbnQzMl90IHNldGJhc2Ug PSAoYmFzZSAmIH5CcmFuY2hPcHRpb25NYXNrKSB8IEJyYW5jaE9uU2V0OworKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICAgIGlmIChIYXNQT1dFUjEwKCkpIHsKKysgICAgICBpZiAoKGJh c2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkgeworKyAgICAgICAgYXNfc2V0 YmMoZGVzdCwgc2V0YmFzZSwgY3IwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgYXNfc2V0 YmNyKGRlc3QsIHNldGJhc2UsIGNyMCk7CisrICAgICAgfQorKyAgICAgIC8vIEZpeHVwIHBhdGhz IGJlbG93IHN0aWxsIG5lZWQgc2NyYXRjaD0xIGZvciB0aGUgU08taXNlbC4KKysgICAgICBpZiAo aGFzVW5vcmRlcmVkRmxhZyB8fCAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSAhPSBCcmFuY2hP blNldCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kICE9IERvdWJsZU9y ZGVyZWQpKSB7CisrICAgICAgICB4c19saShzY3JhdGNoLCAxKTsKKysgICAgICB9CisrICAgIH0g ZWxzZSB7CisrICAgICAgeHNfbGkoc2NyYXRjaCwgMSk7CisrICAgICAgaWYgKChiYXNlICYgQnJh bmNoT3B0aW9uTWFzaykgPT0gQnJhbmNoT25TZXQpIHsKKysgICAgICAgIHhzX2xpKGRlc3QsIDAp OworKyAgICAgICAgYXNfaXNlbChkZXN0LCBzY3JhdGNoLCBkZXN0LCBzZXRiYXNlLCBjcjApOwor KyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc19pc2VsMChkZXN0LCByMCwgc2NyYXRjaCwgc2V0 YmFzZSwgY3IwKTsKKysgICAgICB9CisrICAgIH0KKysgICAgaWYgKGhhc1Vub3JkZXJlZEZsYWcp IHsKKysgICAgICAvLyBDb25kaXRpb24gaW5jbHVkZXMgdW5vcmRlcmVkIChOYU4pOiBmb3JjZSBk ZXN0PTEgd2hlbiBTTyBpcyBzZXQuCisrICAgICAgLy8gaXNlbCBkZXN0LCBzY3JhdGNoKD0xKSwg ZGVzdCwgU08KKysgICAgICBhc19pc2VsKGRlc3QsIHNjcmF0Y2gsIGRlc3QsIHVpbnQxNl90KFNP Qml0KSwgY3IwKTsKKysgICAgfSBlbHNlIGlmICgoYmFzZSAmIEJyYW5jaE9wdGlvbk1hc2spICE9 IEJyYW5jaE9uU2V0ICYmCisrICAgICAgICAgICAgICAgY29uZCAhPSBEb3VibGVPcmRlcmVkKSB7 CisrICAgICAgLy8gT3JkZXJlZCBjb21wYXJpc29uIHRoYXQgbmVnYXRlcyBhIENSIGJpdCAoQnJh bmNoT25DbGVhcik6IE5hTgorKyAgICAgIC8vIHByb2R1Y2VzIGFsbC16ZXJvIExUL0dUL0VRIGJp dHMgd2hpY2ggbWFrZXMgdGhlIG5lZ2F0aW9uIHJldHVybgorKyAgICAgIC8vIHRydWUuICBGaXgg YnkgZm9yY2luZyBkZXN0PTAgd2hlbiBTTyBpcyBzZXQuCisrICAgICAgYXNfaXNlbDAoZGVzdCwg cjAsIGRlc3QsIHVpbnQxNl90KFNPQml0KSwgY3IwKTsKKysgICAgfQorKyAgfQorKworKyAgLy8g Q29uZGl0aW9uYWwgbW92ZTogaWYgQ1IwIHNhdGlzZmllcyBjb25kLCBkZXN0ID0gc3JjLgorKyAg dm9pZCBtYV9jbXBfbW92ZShSZWdpc3RlciBkZXN0LCBSZWdpc3RlciBzcmMsIENvbmRpdGlvbiBj b25kKSB7CisrICAgIHVpbnQzMl90IGJhc2UgPSB1aW50MzJfdChjb25kKSAmIDB4ZmY7CisrICAg IHVpbnQzMl90IHNldGJhc2UgPSAoYmFzZSAmIH5CcmFuY2hPcHRpb25NYXNrKSB8IEJyYW5jaE9u U2V0OworKyAgICBpZiAoKGJhc2UgJiBCcmFuY2hPcHRpb25NYXNrKSA9PSBCcmFuY2hPblNldCkg eworKyAgICAgIGFzX2lzZWwoZGVzdCwgc3JjLCBkZXN0LCBzZXRiYXNlLCBjcjApOworKyAgICB9 IGVsc2UgeworKyAgICAgIGFzX2lzZWwoZGVzdCwgZGVzdCwgc3JjLCBzZXRiYXNlLCBjcjApOwor KyAgICB9CisrICB9CisrCisrICAvLyBJZiBjb25kID09IDAsIG1vdmUgc3JjIHRvIGRzdDsgb3Ro ZXJ3aXNlIGRzdCBpcyB1bmNoYW5nZWQuIFRoZSBvbmx5CisrICAvLyBjYWxsZXJzIGFyZSB3YXNt IHNlbGVjdCwgd2hvc2UgY29uZGl0aW9uIGlzIGEgMzItYml0IHZhbHVlOiB0ZXN0IGl0cworKyAg Ly8gMzItYml0IHNpZ24gd2l0aCBjbXB3aSBzbyBoaWdoLWJpdCBnYXJiYWdlIChlLmcuIHVuZGVy IHJlZ2lzdGVyIHByZXNzdXJlKQorKyAgLy8gZG9lcyBub3QgbWFrZSBhIHplcm8gY29uZGl0aW9u IHJlYWQgYXMgbm9uLXplcm8uCisrICB2b2lkIG1vdmVJZlplcm8oUmVnaXN0ZXIgZHN0LCBSZWdp c3RlciBzcmMsIFJlZ2lzdGVyIGNvbmQpIHsKKysgICAgYXNfY21wd2koY29uZCwgMCk7CisrICAg IGFzX2lzZWwoZHN0LCBzcmMsIGRzdCwgRXF1YWwsIGNyMCk7CisrICB9CisrCisrICB2b2lkIG1h X2FkZDMyVGVzdENhcnJ5KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciByZCwgUmVnaXN0ZXIgcnMs IEltbTMyIGltbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIG92ZXJmbG93KTsK KysgIHZvaWQgbWFfYWRkUHRyVGVzdENhcnJ5KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlciByZCwg UmVnaXN0ZXIgcnMsIEltbVdvcmQgaW1tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGFi ZWwqIG92ZXJmbG93KTsKKysKKysgIC8vIElzc3VlIHRoZSBjb3JyZWN0IGNvbXBhcmUgaW5zdHJ1 Y3Rpb24gZm9yIHRoZSBnaXZlbiBjb25kaXRpb24gYW5kCisrICAvLyBvcGVyYW5kIHNpemVzLiBS ZXR1cm5zIHRoZSBjb25kaXRpb24gdG8gdXNlIHdpdGggbWFfYiBvciBtYV9jbXBfc2V0CisrICAv LyAodXN1YWxseSB0aGUgc2FtZSwgYnV0IHVuc2lnbmVkIGNvbmRpdGlvbnMgdXNlIGNtcGwqIHZh cmlhbnRzKS4KKysgIENvbmRpdGlvbiBtYV9jbXAoUmVnaXN0ZXIgbGhzLCBSZWdpc3RlciByaHMs IENvbmRpdGlvbiBjb25kLAorKyAgICAgICAgICAgICAgICAgICBib29sIGlzMzJiaXQgPSBmYWxz ZSkgeworKyAgICBDb25kaXRpb24gYmFzZSA9CisrICAgICAgICBzdGF0aWNfY2FzdDxDb25kaXRp b24+KGNvbmQgJiB+KENvbmRpdGlvblVuc2lnbmVkIHwgQ29uZGl0aW9uWmVybykpOworKyAgICBi b29sIGlzVW5zaWduZWQgPSAoY29uZCAmIENvbmRpdGlvblVuc2lnbmVkKSAhPSAwOworKyAgICAv LyBDb25kaXRpb25aZXJvLWZsYWdnZWQgY29uZGl0aW9ucyAoU2lnbmVkLCBOb3RTaWduZWQsIFpl cm8sIE5vblplcm8pCisrICAgIC8vIHRlc3QgYSBzaW5nbGUgcmVnaXN0ZXIgYWdhaW5zdCB6ZXJv LCBub3QgdHdvIHJlZ2lzdGVycyBhZ2FpbnN0IGVhY2gKKysgICAgLy8gb3RoZXIuIENvbXBhcmUg YWdhaW5zdCBpbW1lZGlhdGUgMC4KKysgICAgaWYgKChjb25kICYgQ29uZGl0aW9uWmVybykgIT0g MCkgeworKyAgICAgIGlmIChpczMyYml0KSB7CisrICAgICAgICBhc19jbXB3aShsaHMsIDApOwor KyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc19jbXBkaShsaHMsIDApOworKyAgICAgIH0KKysg ICAgICByZXR1cm4gYmFzZTsKKysgICAgfQorKyAgICBpZiAoaXMzMmJpdCkgeworKyAgICAgIGlm IChpc1Vuc2lnbmVkKSB7CisrICAgICAgICBhc19jbXBsdyhsaHMsIHJocyk7CisrICAgICAgfSBl bHNlIHsKKysgICAgICAgIGFzX2NtcHcobGhzLCByaHMpOworKyAgICAgIH0KKysgICAgfSBlbHNl IHsKKysgICAgICBpZiAoaXNVbnNpZ25lZCkgeworKyAgICAgICAgYXNfY21wbGQobGhzLCByaHMp OworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBhc19jbXBkKGxocywgcmhzKTsKKysgICAgICB9 CisrICAgIH0KKysgICAgcmV0dXJuIGJhc2U7CisrICB9CisrCisrICBDb25kaXRpb24gbWFfY21w KFJlZ2lzdGVyIGxocywgSW1tMzIgcmhzLCBDb25kaXRpb24gY29uZCwKKysgICAgICAgICAgICAg ICAgICAgYm9vbCBpczMyYml0ID0gZmFsc2UpIHsKKysgICAgQ29uZGl0aW9uIGJhc2UgPQorKyAg ICAgICAgc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfihDb25kaXRpb25VbnNpZ25lZCB8 IENvbmRpdGlvblplcm8pKTsKKysgICAgYm9vbCBpc1Vuc2lnbmVkID0gKGNvbmQgJiBDb25kaXRp b25VbnNpZ25lZCkgIT0gMDsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsKKysgICAgICBpZiAoaXNf dWludE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAgICAgIGlmIChpczMyYml0KSB7CisrICAgICAg ICAgIGFzX2NtcGx3aShsaHMsIHJocy52YWx1ZSk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAg ICAgICBhc19jbXBsZGkobGhzLCByaHMudmFsdWUpOworKyAgICAgICAgfQorKyAgICAgICAgcmV0 dXJuIGJhc2U7CisrICAgICAgfQorKyAgICB9IGVsc2UgeworKyAgICAgIGlmIChpc19pbnROKHJo cy52YWx1ZSwgMTYpKSB7CisrICAgICAgICBpZiAoaXMzMmJpdCkgeworKyAgICAgICAgICBhc19j bXB3aShsaHMsIHJocy52YWx1ZSk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBhc19j bXBkaShsaHMsIHJocy52YWx1ZSk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gYmFzZTsK KysgICAgICB9CisrICAgIH0KKysgICAgLy8gSW1tZWRpYXRlIGRvZXNuJ3QgZml0IOKAlCBtYXRl cmlhbGl6ZSBpbnRvIHNjcmF0Y2ggYW5kIGNvbXBhcmUuCisrICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgbW92ZTMyKHJocywgc2NyYXRjaCk7CisrICAgIHJldHVybiBtYV9jbXAobGhz LCBzY3JhdGNoLCBjb25kLCBpczMyYml0KTsKKysgIH0KKysKKysgIENvbmRpdGlvbiBtYV9jbXAo UmVnaXN0ZXIgbGhzLCBJbW1Xb3JkIHJocywgQ29uZGl0aW9uIGNvbmQpIHsKKysgICAgQ29uZGl0 aW9uIGJhc2UgPQorKyAgICAgICAgc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfihDb25k aXRpb25VbnNpZ25lZCB8IENvbmRpdGlvblplcm8pKTsKKysgICAgYm9vbCBpc1Vuc2lnbmVkID0g KGNvbmQgJiBDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKKysgICAgaWYgKGlzVW5zaWduZWQpIHsK KysgICAgICBpZiAoaXNfdWludE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAgICAgIGFzX2NtcGxk aShsaHMsIHJocy52YWx1ZSk7CisrICAgICAgICByZXR1cm4gYmFzZTsKKysgICAgICB9CisrICAg IH0gZWxzZSB7CisrICAgICAgaWYgKGlzX2ludE4ocmhzLnZhbHVlLCAxNikpIHsKKysgICAgICAg IGFzX2NtcGRpKGxocywgcmhzLnZhbHVlKTsKKysgICAgICAgIHJldHVybiBiYXNlOworKyAgICAg IH0KKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Cisr ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIocmhz LCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIG1hX2NtcChsaHMsIHNjcmF0Y2gsIGNvbmQpOworKyAg fQorKworKyAgQ29uZGl0aW9uIG1hX2NtcChSZWdpc3RlciBsaHMsIEltbVB0ciByaHMsIENvbmRp dGlvbiBjb25kKSB7CisrICAgIHJldHVybiBtYV9jbXAobGhzLCBJbW1Xb3JkKHVpbnRwdHJfdChy aHMudmFsdWUpKSwgY29uZCk7CisrICB9CisrCisrICBDb25kaXRpb24gbWFfY21wKFJlZ2lzdGVy IGxocywgSW1tR0NQdHIgcmhzLCBDb25kaXRpb24gY29uZCkgeworKyAgICBVc2VTY3JhdGNoUmVn aXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIG1vdmVQdHIocmhzLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIG1hX2Nt cChsaHMsIHNjcmF0Y2gsIGNvbmQpOworKyAgfQorKworKyAgQ29uZGl0aW9uIG1hX2NtcChSZWdp c3RlciBsaHMsIEltbVRhZyByaHMsIENvbmRpdGlvbiBjb25kKSB7CisrICAgIC8vIFRhZyB2YWx1 ZXMgb24gUFVOQk9YNjQgYXJlIDE3LWJpdCAoMHgxRkZGMCspLCB0b28gbGFyZ2UgZm9yIDE2LWJp dAorKyAgICAvLyBzaWduZWQgb3IgdW5zaWduZWQgaW1tZWRpYXRlcy4KKysgICAgQ29uZGl0aW9u IGJhc2UgPQorKyAgICAgICAgc3RhdGljX2Nhc3Q8Q29uZGl0aW9uPihjb25kICYgfihDb25kaXRp b25VbnNpZ25lZCB8IENvbmRpdGlvblplcm8pKTsKKysgICAgYm9vbCBpc1Vuc2lnbmVkID0gKGNv bmQgJiBDb25kaXRpb25VbnNpZ25lZCkgIT0gMDsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICBtb3ZlMzIoSW1tMzIocmhzLnZhbHVlKSwgc2NyYXRjaCk7CisrICAgIGlmIChpc1Vu c2lnbmVkKSB7CisrICAgICAgYXNfY21wbGQobGhzLCBzY3JhdGNoKTsKKysgICAgfSBlbHNlIHsK KysgICAgICBhc19jbXBkKGxocywgc2NyYXRjaCk7CisrICAgIH0KKysgICAgcmV0dXJuIGJhc2U7 CisrICB9CisrCisrICAvLyBDb21wYXJlIGEgdGFnIHJlZ2lzdGVyIGFnYWluc3QgYW4gSW1tVGFn IGNvbnN0YW50IGFuZCBicmFuY2gsIFdJVEhPVVQKKysgIC8vIGFjcXVpcmluZyBhIHNjcmF0Y2gg cmVnaXN0ZXIuICBVc2VzIHhvcmlzK2NtcGx3aSB3aGljaCBNT0RJRklFUyB0YWdSZWcuCisrICAv LyBPbmx5IHNhZmUgd2hlbiB0YWdSZWcgaXMgYSBzY3JhdGNoIHJlZ2lzdGVyIG93bmVkIGJ5IHRo ZSBjYWxsZXIuCisrICB2b2lkIGJyYW5jaFRlc3RUYWcoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy IHRhZ1JlZywgSW1tVGFnIHRhZywgTGFiZWwqIGxhYmVsKSB7CisrICAgIE1PWl9BU1NFUlQoY29u ZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgICAgdWludDMyX3QgdCA9IHRhZy52 YWx1ZTsKKysgICAgYXNfeG9yaXModGFnUmVnLCB0YWdSZWcsIHQgPj4gMTYpOworKyAgICBhc19j bXBsd2kodGFnUmVnLCB0ICYgMHhGRkZGKTsKKysgICAgQ29uZGl0aW9uIGMgPSAoY29uZCA9PSBF cXVhbCkgPyBFcXVhbCA6IE5vdEVxdWFsOworKyAgICBtYV9iKGMsIGxhYmVsKTsKKysgIH0KKysK KysgIHZvaWQgbWFfbW9kX21hc2soUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0LCBSZWdpc3Rl ciBob2xkLCBSZWdpc3RlciByZW1haW4sCisrICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2hp ZnQsIExhYmVsKiBuZWdaZXJvID0gbnVsbHB0cik7CisrCisrICB2b2lkIG5vcCgpIHsgd3JpdGVJ bnN0KE5vcEluc3QpOyB9CisrICB2b2lkIGJyZWFrcG9pbnQodWludDMyX3QgdmFsdWUgPSAwKSB7 IHhzX3RyYXAoKTsgfQorKworKyAgaW5saW5lIHZvaWQgcmV0bihJbW0zMiBuKTsKKysKKysgIC8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAgLy8gU3RhY2sgb3BlcmF0aW9ucworKworKyAgdm9pZCBwdXNoKEltbTMyIGlt bSkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmUzMihpbW0sIHNjcmF0 Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCBwdXNoKEltbVdvcmQgaW1t KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihpbW0sIHNjcmF0 Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCBwdXNoKEltbUdDUHRyIGlt bSkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoaW1tLCBzY3Jh dGNoKTsKKysgICAgcHVzaChzY3JhdGNoKTsKKysgIH0KKysgIHZvaWQgcHVzaChjb25zdCBBZGRy ZXNzJiBhZGRyZXNzKSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbG9hZFB0 cihhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAgcHVzaChzY3JhdGNoKTsKKysgIH0KKysgIHZvaWQg cHVzaChSZWdpc3RlciByZWcpIHsgYXNfc3RkdShyZWcsIFN0YWNrUG9pbnRlciwgLTgpOyB9Cisr ICB2b2lkIHB1c2goRmxvYXRSZWdpc3RlciByZWcpIHsKKysgICAgLy8gc3RmZHUvc3Rmc3UgZnVz ZXMgdGhlIFNQIGRlY3JlbWVudCBhbmQgdGhlIEZQIHN0b3JlOiBFQT1TUC04LAorKyAgICAvLyBN RU1bRUFdPXJlZywgU1A9RUEuIDEgaW5zbiBpbnN0ZWFkIG9mIGFkZGkrc3RmZC9zdGZzLgorKyAg ICBpZiAocmVnLmlzU2luZ2xlKCkpIHsKKysgICAgICBhc19zdGZzdShyZWcsIFN0YWNrUG9pbnRl ciwgLTgpOworKyAgICB9IGVsc2UgeworKyAgICAgIGFzX3N0ZmR1KHJlZywgU3RhY2tQb2ludGVy LCAtOCk7CisrICAgIH0KKysgIH0KKysgIHZvaWQgcG9wKFJlZ2lzdGVyIHJlZykgeworKyAgICBh c19sZChyZWcsIFN0YWNrUG9pbnRlciwgMCk7CisrICAgIGFzX2FkZGkoU3RhY2tQb2ludGVyLCBT dGFja1BvaW50ZXIsIDgpOworKyAgfQorKyAgdm9pZCBwb3AoRmxvYXRSZWdpc3RlciByZWcpIHsK KysgICAgaWYgKHJlZy5pc1NpbmdsZSgpKSB7CisrICAgICAgYXNfbGZzKHJlZywgU3RhY2tQb2lu dGVyLCAwKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBhc19sZmQocmVnLCBTdGFja1BvaW50ZXIs IDApOworKyAgICB9CisrICAgIGFzX2FkZGkoU3RhY2tQb2ludGVyLCBTdGFja1BvaW50ZXIsIDgp OworKyAgfQorKworKyAgQ29kZU9mZnNldCBwdXNoV2l0aFBhdGNoKEltbVdvcmQgaW1tKSB7Cisr ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgQ29kZU9mZnNldCBvZmZzZXQgPSBtb3ZX aXRoUGF0Y2goaW1tLCBzY3JhdGNoKTsKKysgICAgcHVzaChzY3JhdGNoKTsKKysgICAgcmV0dXJu IG9mZnNldDsKKysgIH0KKysgIENvZGVPZmZzZXQgbW92V2l0aFBhdGNoKEltbVdvcmQgaW1tLCBS ZWdpc3RlciBkZXN0KSB7CisrICAgIEJ1ZmZlck9mZnNldCBibyA9IGVtaXRMb2FkNjRTdGFuemEo ZGVzdCwgKHVpbnQ2NF90KWltbS52YWx1ZSk7CisrICAgIHJldHVybiBDb2RlT2Zmc2V0KGJvLmdl dE9mZnNldCgpKTsKKysgIH0KKysgIENvZGVPZmZzZXQgbW92V2l0aFBhdGNoKEltbVB0ciBpbW0s IFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgcmV0dXJuIG1vdldpdGhQYXRjaChJbW1Xb3JkKHVpbnRw dHJfdChpbW0udmFsdWUpKSwgZGVzdCk7CisrICB9CisrCisrICAvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgIC8vIFRh Zy91bmJveCBvcGVyYXRpb25zCisrCisrICB2b2lkIHNwbGl0VGFnKFJlZ2lzdGVyIHNyYywgUmVn aXN0ZXIgZGVzdCkgeworKyAgICB4X3NyZGkoZGVzdCwgc3JjLCBKU1ZBTF9UQUdfU0hJRlQpOwor KyAgfQorKyAgdm9pZCBzcGxpdFRhZyhjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJlZ2lz dGVyIGRlc3QpIHsKKysgICAgc3BsaXRUYWcob3BlcmFuZC52YWx1ZVJlZygpLCBkZXN0KTsKKysg IH0KKysgIHZvaWQgc3BsaXRUYWdGb3JUZXN0KGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsIFNj cmF0Y2hUYWdTY29wZSYgdGFnKSB7CisrICAgIHNwbGl0VGFnKHZhbHVlLCB0YWcpOworKyAgfQor KworKyAgdm9pZCB1bmJveE5vbkRvdWJsZShjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJl Z2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVUeXBlIHR5cGUpIHsK KysgICAgdW5ib3hOb25Eb3VibGUob3BlcmFuZC52YWx1ZVJlZygpLCBkZXN0LCB0eXBlKTsKKysg IH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCB1bmJveE5vbkRvdWJsZShUIHNy YywgUmVnaXN0ZXIgZGVzdCwgSlNWYWx1ZVR5cGUgdHlwZSkgeworKyAgICBNT1pfQVNTRVJUKHR5 cGUgIT0gSlNWQUxfVFlQRV9ET1VCTEUpOworKyAgICBpZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lO VDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9CT09MRUFOKSB7CisrICAgICAgbG9hZDMyKHNyYywg ZGVzdCk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsK KysgICAgdW5ib3hOb25Eb3VibGUoZGVzdCwgZGVzdCwgdHlwZSk7CisrICB9CisrICB2b2lkIHVu Ym94Tm9uRG91YmxlKFJlZ2lzdGVyIHNyYywgUmVnaXN0ZXIgZGVzdCwgSlNWYWx1ZVR5cGUgdHlw ZSkgeworKyAgICBNT1pfQVNTRVJUKHR5cGUgIT0gSlNWQUxfVFlQRV9ET1VCTEUpOworKyAgICBp ZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUgPT0gSlNWQUxfVFlQRV9CT09MRUFO KSB7CisrICAgICAgYXNfZXh0c3coZGVzdCwgc3JjKTsKKysgICAgICByZXR1cm47CisrICAgIH0K KysgICAgLy8gRXh0cmFjdCB0aGUgcGF5bG9hZCAobG93ZXIgNDcgYml0cykgYnkgY2xlYXJpbmcg dGhlIHRhZy4KKysgICAgLy8gVGhpcyBhdm9pZHMgYWNxdWlyaW5nIGEgc2NyYXRjaCByZWdpc3Rl ciwgcHJldmVudGluZyBwb29sIGV4aGF1c3Rpb24KKysgICAgLy8gd2hlbiBjYWxsZWQgZnJvbSBu ZXN0ZWQgc2NyYXRjaCBzY29wZXMgKGUuZy4sIFNjcmF0Y2hUYWdTY29wZSDihpIKKysgICAgLy8g YnJhbmNoVGVzdFN0cmluZ1RydXRoeSDihpIgdW5ib3hTdHJpbmcg4oaSIGhlcmUpLgorKyAgICAv LyBybGRpY2wgZGVzdCwgc3JjLCAwLCAxNyDigJQgY2xlYXIgdXBwZXIgMTcgYml0cyAodGFnKSwg a2VlcCBsb3dlciA0Ny4KKysgICAgYXNfcmxkaWNsKGRlc3QsIHNyYywgMCwgMTcpOworKyAgfQor KyAgdm9pZCB1bmJveEdDVGhpbmdGb3JHQ0JhcnJpZXIoY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICAgIGxvYWRQdHIoc3JjLCBkZXN0KTsKKysgICAgLy8gQ2xlYXIgdGFn IGJpdHMgKHRvcCAxNyBiaXRzIG9uIDY0LWJpdCkuCisrICAgIGFzX3JsZGljbChkZXN0LCBkZXN0 LCAwLCA2NCAtIEpTVkFMX1RBR19TSElGVCk7CisrICB9CisrICB2b2lkIHVuYm94R0NUaGluZ0Zv ckdDQmFycmllcihjb25zdCBWYWx1ZU9wZXJhbmQmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAg ICBhc19ybGRpY2woZGVzdCwgc3JjLnZhbHVlUmVnKCksIDAsIDY0IC0gSlNWQUxfVEFHX1NISUZU KTsKKysgIH0KKysgIHZvaWQgdW5ib3hXYXNtQW55UmVmR0NUaGluZ0ZvckdDQmFycmllcihjb25z dCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgc3RhdGljX2Fzc2VydCh3YXNt OjpBbnlSZWY6OlRhZ1NoaWZ0ID09IDIpOworKyAgICBsb2FkUHRyKHNyYywgZGVzdCk7CisrICAg IGFzX3JsZGljcihkZXN0LCBkZXN0LCAwLCA2MSk7CisrICB9CisrICB2b2lkIGdldEdDVGhpbmdW YWx1ZUNodW5rKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBsb2Fk UHRyKHNyYywgZGVzdCk7CisrICAgIGFzX3JsZGljbChkZXN0LCBkZXN0LCAwLCAxNyk7CisrICAg IGFzX3JsZGljcihkZXN0LCBkZXN0LCAwLCA0Myk7CisrICB9CisrICB2b2lkIGdldEdDVGhpbmdW YWx1ZUNodW5rKGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAg IGFzX3JsZGljbChkZXN0LCBzcmMudmFsdWVSZWcoKSwgMCwgMTcpOworKyAgICBhc19ybGRpY3Io ZGVzdCwgZGVzdCwgMCwgNDMpOworKyAgfQorKworKyAgdm9pZCBib3hEb3VibGUoRmxvYXRSZWdp c3RlciBzcmMsIGNvbnN0IFZhbHVlT3BlcmFuZCYgZGVzdCwgRmxvYXRSZWdpc3RlcikgeworKyAg ICBhc19tZnZzcmQoZGVzdC52YWx1ZVJlZygpLCBzcmMpOworKyAgfQorKyAgdm9pZCBib3hOb25E b3VibGUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgc3JjLCBjb25zdCBWYWx1ZU9wZXJhbmQm IGRlc3QpIHsKKysgICAgYm94VmFsdWUodHlwZSwgc3JjLCBkZXN0LnZhbHVlUmVnKCkpOworKyAg fQorKyAgdm9pZCBib3hOb25Eb3VibGUoUmVnaXN0ZXIgdHlwZSwgUmVnaXN0ZXIgc3JjLCBjb25z dCBWYWx1ZU9wZXJhbmQmIGRlc3QpIHsKKysgICAgYm94VmFsdWUodHlwZSwgc3JjLCBkZXN0LnZh bHVlUmVnKCkpOworKyAgfQorKyAgdm9pZCB1bmJveEludDMyKGNvbnN0IFZhbHVlT3BlcmFuZCYg b3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBhc19leHRzdyhkZXN0LCBvcGVyYW5kLnZh bHVlUmVnKCkpOworKyAgfQorKyAgdm9pZCB1bmJveEludDMyKGNvbnN0IEFkZHJlc3MmIHNyYywg UmVnaXN0ZXIgZGVzdCkgeyBsb2FkMzIoc3JjLCBkZXN0KTsgfQorKyAgdm9pZCB1bmJveEludDMy KGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7IGxvYWQzMihzcmMsIGRlc3Qp OyB9CisrICB2b2lkIHVuYm94Qm9vbGVhbihjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQsIFJl Z2lzdGVyIGRlc3QpIHsKKysgICAgYXNfZXh0c3coZGVzdCwgb3BlcmFuZC52YWx1ZVJlZygpKTsK KysgIH0KKysgIHZvaWQgdW5ib3hCb29sZWFuKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIg ZGVzdCkgeyBsb2FkMzIoc3JjLCBkZXN0KTsgfQorKyAgdm9pZCB1bmJveEJvb2xlYW4oY29uc3Qg QmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsgbG9hZDMyKHNyYywgZGVzdCk7IH0KKysg IHZvaWQgdW5ib3hEb3VibGUoY29uc3QgVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGbG9hdFJlZ2lz dGVyIGRlc3QpIHsKKysgICAgYXNfbXR2c3JkKGRlc3QsIG9wZXJhbmQudmFsdWVSZWcoKSk7Cisr ICB9CisrICB2b2lkIHVuYm94RG91YmxlKGNvbnN0IEFkZHJlc3MmIHNyYywgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICAgIGxvYWREb3VibGUoc3JjLCBkZXN0KTsKKysgIH0KKysgIHZvaWQgdW5i b3hEb3VibGUoY29uc3QgQmFzZUluZGV4JiBzcmMsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAg ICBsb2FkRG91YmxlKHNyYywgZGVzdCk7CisrICB9CisrICB2b2lkIHVuYm94U3RyaW5nKGNvbnN0 IFZhbHVlT3BlcmFuZCYgb3BlcmFuZCwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICB1bmJveE5vbkRv dWJsZShvcGVyYW5kLCBkZXN0LCBKU1ZBTF9UWVBFX1NUUklORyk7CisrICB9CisrICB2b2lkIHVu Ym94U3RyaW5nKGNvbnN0IEFkZHJlc3MmIHNyYywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICB1bmJv eE5vbkRvdWJsZShzcmMsIGRlc3QsIEpTVkFMX1RZUEVfU1RSSU5HKTsKKysgIH0KKysgIHZvaWQg dW5ib3hTeW1ib2woY29uc3QgVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBSZWdpc3RlciBkZXN0KSB7 CisrICAgIHVuYm94Tm9uRG91YmxlKG9wZXJhbmQsIGRlc3QsIEpTVkFMX1RZUEVfU1lNQk9MKTsK KysgIH0KKysgIHZvaWQgdW5ib3hTeW1ib2woY29uc3QgQWRkcmVzcyYgc3JjLCBSZWdpc3RlciBk ZXN0KSB7CisrICAgIHVuYm94Tm9uRG91YmxlKHNyYywgZGVzdCwgSlNWQUxfVFlQRV9TWU1CT0wp OworKyAgfQorKyAgdm9pZCB1bmJveEJpZ0ludChjb25zdCBWYWx1ZU9wZXJhbmQmIG9wZXJhbmQs IFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3VibGUob3BlcmFuZCwgZGVzdCwgSlNW QUxfVFlQRV9CSUdJTlQpOworKyAgfQorKyAgdm9pZCB1bmJveEJpZ0ludChjb25zdCBBZGRyZXNz JiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3VibGUoc3JjLCBkZXN0LCBK U1ZBTF9UWVBFX0JJR0lOVCk7CisrICB9CisrICB2b2lkIHVuYm94T2JqZWN0KGNvbnN0IFZhbHVl T3BlcmFuZCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIHVuYm94Tm9uRG91YmxlKHNyYywg ZGVzdCwgSlNWQUxfVFlQRV9PQkpFQ1QpOworKyAgfQorKyAgdm9pZCB1bmJveE9iamVjdChjb25z dCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgdW5ib3hOb25Eb3VibGUoc3Jj LCBkZXN0LCBKU1ZBTF9UWVBFX09CSkVDVCk7CisrICB9CisrICB2b2lkIHVuYm94T2JqZWN0KGNv bnN0IEJhc2VJbmRleCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIHVuYm94Tm9uRG91Ymxl KHNyYywgZGVzdCwgSlNWQUxfVFlQRV9PQkpFQ1QpOworKyAgfQorKyAgdm9pZCB1bmJveFZhbHVl KGNvbnN0IFZhbHVlT3BlcmFuZCYgc3JjLCBBbnlSZWdpc3RlciBkZXN0LCBKU1ZhbHVlVHlwZSB0 eXBlKSB7CisrICAgIGlmIChkZXN0LmlzRmxvYXQoKSkgeworKyAgICAgIHVuYm94RG91YmxlKHNy YywgZGVzdC5mcHUoKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgdW5ib3hOb25Eb3VibGUoc3Jj LCBkZXN0LmdwcigpLCB0eXBlKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCB1bmJveE9iamVjdE9y TnVsbChjb25zdCBBZGRyZXNzJiBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbG9hZFB0cihz cmMsIGRlc3QpOworKyAgICAvLyBPYmplY3QgcG9pbnRlcnMgaGF2ZSB0aGUgb2JqZWN0IHRhZyBp biBoaWdoIGJpdHM7IG51bGwgaGFzIGEgZGlmZmVyZW50CisrICAgIC8vIHRhZy4gQ2xlYXIgdGhl IHRvcCBiaXRzIHRvIGdldCBlaXRoZXIgYSB2YWxpZCBwb2ludGVyIG9yIHplcm8uCisrICAgIGFz X3JsZGljbChkZXN0LCBkZXN0LCAwLCA2NCAtIEpTVkFMX1RBR19TSElGVCk7CisrICB9CisrCisr ICB2b2lkIHRhZ1ZhbHVlKEpTVmFsdWVUeXBlIHR5cGUsIFJlZ2lzdGVyIHBheWxvYWQsIFZhbHVl T3BlcmFuZCBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQodHlwZSAhPSBKU1ZBTF9UWVBFX1VOREVG SU5FRCAmJiB0eXBlICE9IEpTVkFMX1RZUEVfTlVMTCk7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IHBheWxvYWQgJiYgc2NyYXRjaCAhPSBk ZXN0LnZhbHVlUmVnKCkpOworKyAgICB0YWdWYWx1ZVdpdGhTY3JhdGNoKHR5cGUsIHBheWxvYWQs IGRlc3QsIHNjcmF0Y2gpOworKyAgfQorKyAgdm9pZCB0YWdWYWx1ZVdpdGhTY3JhdGNoKEpTVmFs dWVUeXBlIHR5cGUsIFJlZ2lzdGVyIHBheWxvYWQsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgVmFsdWVPcGVyYW5kIGRlc3QsIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgICAgbW92ZVB0cihJ bW1TaGlmdGVkVGFnKHR5cGUpLCBzY3JhdGNoKTsKKysgICAgaWYgKHR5cGUgPT0gSlNWQUxfVFlQ RV9JTlQzMiB8fCB0eXBlID09IEpTVkFMX1RZUEVfQk9PTEVBTiB8fAorKyAgICAgICAgdHlwZSA9 PSBKU1ZBTF9UWVBFX01BR0lDKSB7CisrICAgICAgaWYgKHBheWxvYWQgIT0gZGVzdC52YWx1ZVJl ZygpKSB7CisrICAgICAgICBtb3ZlUHRyKHBheWxvYWQsIGRlc3QudmFsdWVSZWcoKSk7CisrICAg ICAgfQorKyAgICAgIGFzX3JsZGljbChkZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwg MCwgMzIpOworKyAgICAgIGFzX29yXyhkZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwg c2NyYXRjaCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgaWYgKHBheWxvYWQgIT0gZGVzdC52YWx1 ZVJlZygpKSB7CisrICAgICAgICBtb3ZlUHRyKHBheWxvYWQsIGRlc3QudmFsdWVSZWcoKSk7Cisr ICAgICAgfQorKyAgICAgIGFzX29yXyhkZXN0LnZhbHVlUmVnKCksIGRlc3QudmFsdWVSZWcoKSwg c2NyYXRjaCk7CisrICAgIH0KKysgIH0KKysgIHZvaWQgYm94VmFsdWUoSlNWYWx1ZVR5cGUgdHlw ZSwgUmVnaXN0ZXIgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoc3JjICE9 IGRlc3QpOworKyAgICBNT1pfQVNTRVJUKHR5cGUgIT0gSlNWQUxfVFlQRV9VTkRFRklORUQgJiYg dHlwZSAhPSBKU1ZBTF9UWVBFX05VTEwpOworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0 ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgIGJveFZhbHVlV2l0aFNjcmF0Y2godHlwZSwgc3JjLCBkZXN0LCBzY3JhdGNoKTsKKysgIH0K KysgIHZvaWQgYm94VmFsdWVXaXRoU2NyYXRjaChKU1ZhbHVlVHlwZSB0eXBlLCBSZWdpc3RlciBz cmMsIFJlZ2lzdGVyIGRlc3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIg c2NyYXRjaCkgeworKyAgICBpZiAodHlwZSA9PSBKU1ZBTF9UWVBFX0lOVDMyIHx8IHR5cGUgPT0g SlNWQUxfVFlQRV9CT09MRUFOIHx8CisrICAgICAgICB0eXBlID09IEpTVkFMX1RZUEVfTUFHSUMp IHsKKysgICAgICBhc19ybGRpY2woZGVzdCwgc3JjLCAwLCAzMik7CisrICAgICAgbW92ZVB0cihJ bW1TaGlmdGVkVGFnKHR5cGUpLCBzY3JhdGNoKTsKKysgICAgICBhc19vcl8oZGVzdCwgZGVzdCwg c2NyYXRjaCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgbW92ZVB0cihJbW1TaGlmdGVkVGFnKHR5 cGUpLCBzY3JhdGNoKTsKKysgICAgICB4c19tcihkZXN0LCBzcmMpOworKyAgICAgIGFzX29yXyhk ZXN0LCBkZXN0LCBzY3JhdGNoKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCBib3hWYWx1ZShSZWdp c3RlciB0eXBlLCBSZWdpc3RlciBzcmMsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgTU9aX0FTU0VS VChzcmMgIT0gZGVzdCk7CisrCisrI2lmZGVmIERFQlVHCisrICAgIExhYmVsIGRvbmUsIGlzTnVs bE9yVW5kZWZpbmVkLCBpc0Jvb2xlYW4sIGlzSW50MzJPck1hZ2ljOworKworKyAgICAvLyBVc2Ug bWFfY21wICsgbWFfYiBpbnN0ZWFkIG9mIGFzTWFzbSgpLmJyYW5jaDMyKCkgYmVjYXVzZQorKyAg ICAvLyBNYWNyb0Fzc2VtYmxlciBpcyBub3QgeWV0IGZ1bGx5IGRlZmluZWQgYXQgdGhpcyBwb2lu dC4KKysgICAgQ29uZGl0aW9uIGNvbmQ7CisrICAgIGNvbmQgPSBtYV9jbXAodHlwZSwgSW1tMzIo SlNWQUxfVFlQRV9OVUxMKSwgRXF1YWwsIHRydWUpOworKyAgICBtYV9iKGNvbmQsICZpc051bGxP clVuZGVmaW5lZCk7CisrICAgIGNvbmQgPSBtYV9jbXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQRV9V TkRFRklORUQpLCBFcXVhbCwgdHJ1ZSk7CisrICAgIG1hX2IoY29uZCwgJmlzTnVsbE9yVW5kZWZp bmVkKTsKKysgICAgY29uZCA9IG1hX2NtcCh0eXBlLCBJbW0zMihKU1ZBTF9UWVBFX0JPT0xFQU4p LCBFcXVhbCwgdHJ1ZSk7CisrICAgIG1hX2IoY29uZCwgJmlzQm9vbGVhbik7CisrICAgIGNvbmQg PSBtYV9jbXAodHlwZSwgSW1tMzIoSlNWQUxfVFlQRV9JTlQzMiksIEVxdWFsLCB0cnVlKTsKKysg ICAgbWFfYihjb25kLCAmaXNJbnQzMk9yTWFnaWMpOworKyAgICBjb25kID0gbWFfY21wKHR5cGUs IEltbTMyKEpTVkFMX1RZUEVfTUFHSUMpLCBFcXVhbCwgdHJ1ZSk7CisrICAgIG1hX2IoY29uZCwg JmlzSW50MzJPck1hZ2ljKTsKKysgICAgLy8gR0NUaGluZyB0eXBlcyBhcmVuJ3Qgc3VwcG9ydGVk LCBiZWNhdXNlIGFzX3JsZGljbCB0cnVuY2F0ZXMKKysgICAgLy8gcGF5bG9hZHMgYWJvdmUgVUlO VDMyX01BWC4KKysgICAgYnJlYWtwb2ludCgpOworKyAgICB7CisrICAgICAgYmluZCgmaXNOdWxs T3JVbmRlZmluZWQpOworKworKyAgICAgIC8vIEVuc3VyZSBubyBwYXlsb2FkIGZvciBudWxsIGFu ZCB1bmRlZmluZWQuCisrICAgICAgY29uZCA9IG1hX2NtcChzcmMsIEltbVdvcmQoMCksIEVxdWFs KTsKKysgICAgICBtYV9iKGNvbmQsICZkb25lKTsKKysgICAgICBicmVha3BvaW50KCk7CisrICAg IH0KKysgICAgeworKyAgICAgIGJpbmQoJmlzQm9vbGVhbik7CisrCisrICAgICAgLy8gRW5zdXJl IGJvb2xlYW4gdmFsdWVzIGFyZSBlaXRoZXIgMCBvciAxLgorKyAgICAgIGNvbmQgPSBtYV9jbXAo c3JjLCBJbW0zMigxKSwgQmVsb3dPckVxdWFsLCB0cnVlKTsKKysgICAgICBtYV9iKGNvbmQsICZk b25lKTsKKysgICAgICBicmVha3BvaW50KCk7CisrICAgIH0KKysgICAgeworKyAgICAgIGJpbmQo JmlzSW50MzJPck1hZ2ljKTsKKysKKysgICAgICAvLyBFbnN1cmUgfHNyY3wgaXMgc2lnbi1leHRl bmRlZC4KKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSBkZWJ1Z1RlbXBzKCp0aGlzKTsK KysgICAgICBSZWdpc3RlciBkZWJ1Z1NjcmF0Y2ggPSBkZWJ1Z1RlbXBzLkFjcXVpcmUoKTsKKysg ICAgICBhc19leHRzdyhkZWJ1Z1NjcmF0Y2gsIHNyYyk7CisrICAgICAgY29uZCA9IG1hX2NtcChz cmMsIGRlYnVnU2NyYXRjaCwgRXF1YWwpOworKyAgICAgIG1hX2IoY29uZCwgJmRvbmUpOworKyAg ICAgIGJyZWFrcG9pbnQoKTsKKysgICAgfQorKyAgICBiaW5kKCZkb25lKTsKKysjZW5kaWYKKysK KysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3Rl ciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0g ZGVzdCAmJiBzY3JhdGNoICE9IHNyYyAmJiBzY3JhdGNoICE9IHR5cGUpOworKyAgICAvLyBCdWls ZCB0YWc6ICh0eXBlIHwgSlNWQUxfVEFHX01BWF9ET1VCTEUpIDw8IEpTVkFMX1RBR19TSElGVAor KyAgICBtb3ZlMzIoSW1tMzIoSlNWQUxfVEFHX01BWF9ET1VCTEUpLCBzY3JhdGNoKTsKKysgICAg YXNfb3JfKHNjcmF0Y2gsIHNjcmF0Y2gsIHR5cGUpOworKyAgICB4X3NsZGkoc2NyYXRjaCwgc2Ny YXRjaCwgSlNWQUxfVEFHX1NISUZUKTsKKysgICAgLy8gSW5zZXJ0IDMyLWJpdCBwYXlsb2FkLgor KyAgICBhc19ybGRpY2woZGVzdCwgc3JjLCAwLCAzMik7CisrICAgIGFzX29yXyhkZXN0LCBkZXN0 LCBzY3JhdGNoKTsKKysgIH0KKysKKysgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAgLy8gVmFsdWUgc3RvcmUvbG9h ZC9wdXNoL3BvcAorKworKyAgdm9pZCBzdG9yZVZhbHVlKFZhbHVlT3BlcmFuZCB2YWwsIGNvbnN0 IEFkZHJlc3MmIGRlc3QpIHsKKysgICAgc3RvcmVQdHIodmFsLnZhbHVlUmVnKCksIGRlc3QpOwor KyAgfQorKyAgdm9pZCBzdG9yZVZhbHVlKFZhbHVlT3BlcmFuZCB2YWwsIGNvbnN0IEJhc2VJbmRl eCYgZGVzdCkgeworKyAgICBzdG9yZVB0cih2YWwudmFsdWVSZWcoKSwgZGVzdCk7CisrICB9Cisr ICB2b2lkIHN0b3JlVmFsdWUoSlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcmVnLCBBZGRyZXNz IGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAg ICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pfQVNTRVJUKGRl c3QuYmFzZSAhPSBzY3JhdGNoKTsKKysgICAgYm94VmFsdWUodHlwZSwgcmVnLCBzY3JhdGNoKTsK KysgICAgc3RvcmVQdHIoc2NyYXRjaCwgZGVzdCk7CisrICB9CisrICB2b2lkIHN0b3JlVmFsdWUo SlNWYWx1ZVR5cGUgdHlwZSwgUmVnaXN0ZXIgcmVnLCBCYXNlSW5kZXggZGVzdCkgeworKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0 Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIE1PWl9BU1NFUlQoZGVzdC5iYXNlICE9IHNjcmF0 Y2gpOworKyAgICBib3hWYWx1ZSh0eXBlLCByZWcsIHNjcmF0Y2gpOworKyAgICBzdG9yZVB0cihz Y3JhdGNoLCBkZXN0KTsKKysgIH0KKysgIHZvaWQgc3RvcmVWYWx1ZShjb25zdCBWYWx1ZSYgdmFs LCBBZGRyZXNzIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRo aXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBNT1pf QVNTRVJUKGRlc3QuYmFzZSAhPSBzY3JhdGNoKTsKKysgICAgaWYgKHZhbC5pc0dDVGhpbmcoKSkg eworKyAgICAgIENvZGVPZmZzZXQgb2ZmID0gbW92V2l0aFBhdGNoKEltbVdvcmQodmFsLmFzUmF3 Qml0cygpKSwgc2NyYXRjaCk7CisrICAgICAgd3JpdGVEYXRhUmVsb2NhdGlvbihvZmYsIHZhbCk7 CisrICAgIH0gZWxzZSB7CisrICAgICAgbW92ZVB0cihJbW1Xb3JkKHZhbC5hc1Jhd0JpdHMoKSks IHNjcmF0Y2gpOworKyAgICB9CisrICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGRlc3QpOworKyAgfQor KyAgdm9pZCBzdG9yZVZhbHVlKGNvbnN0IFZhbHVlJiB2YWwsIEJhc2VJbmRleCBkZXN0KSB7Cisr ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChkZXN0LmJhc2UgIT0g c2NyYXRjaCk7CisrICAgIGlmICh2YWwuaXNHQ1RoaW5nKCkpIHsKKysgICAgICBDb2RlT2Zmc2V0 IG9mZiA9IG1vdldpdGhQYXRjaChJbW1Xb3JkKHZhbC5hc1Jhd0JpdHMoKSksIHNjcmF0Y2gpOwor KyAgICAgIHdyaXRlRGF0YVJlbG9jYXRpb24ob2ZmLCB2YWwpOworKyAgICB9IGVsc2UgeworKyAg ICAgIG1vdmVQdHIoSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkpLCBzY3JhdGNoKTsKKysgICAgfQor KyAgICBzdG9yZVB0cihzY3JhdGNoLCBkZXN0KTsKKysgIH0KKysgIHZvaWQgc3RvcmVWYWx1ZShj b25zdCBBZGRyZXNzJiBzcmMsIGNvbnN0IEFkZHJlc3MmIGRlc3QsIFJlZ2lzdGVyIHRlbXApIHsK KysgICAgbG9hZFB0cihzcmMsIHRlbXApOworKyAgICBzdG9yZVB0cih0ZW1wLCBkZXN0KTsKKysg IH0KKysKKysgIHZvaWQgc3RvcmVQcml2YXRlVmFsdWUoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRy ZXNzJiBkZXN0KSB7CisrICAgIHN0b3JlUHRyKHNyYywgZGVzdCk7CisrICB9CisrICB2b2lkIHN0 b3JlUHJpdmF0ZVZhbHVlKEltbUdDUHRyIGltbSwgY29uc3QgQWRkcmVzcyYgZGVzdCkgeworKyAg ICBzdG9yZVB0cihpbW0sIGRlc3QpOworKyAgfQorKworKyAgdm9pZCBsb2FkVmFsdWUoQWRkcmVz cyBzcmMsIFZhbHVlT3BlcmFuZCB2YWwpIHsKKysgICAgbG9hZFB0cihzcmMsIHZhbC52YWx1ZVJl ZygpKTsKKysgIH0KKysgIHZvaWQgbG9hZFZhbHVlKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBWYWx1 ZU9wZXJhbmQgdmFsKSB7CisrICAgIGxvYWRQdHIoc3JjLCB2YWwudmFsdWVSZWcoKSk7CisrICB9 CisrICB2b2lkIGxvYWRVbmFsaWduZWRWYWx1ZShjb25zdCBBZGRyZXNzJiBzcmMsIFZhbHVlT3Bl cmFuZCBkZXN0KSB7CisrICAgIGxvYWRQdHIoc3JjLCBkZXN0LnZhbHVlUmVnKCkpOworKyAgfQor KworKyAgdm9pZCBwdXNoVmFsdWUoVmFsdWVPcGVyYW5kIHZhbCkgeyBwdXNoKHZhbC52YWx1ZVJl ZygpKTsgfQorKyAgdm9pZCBwb3BWYWx1ZShWYWx1ZU9wZXJhbmQgdmFsKSB7IHBvcCh2YWwudmFs dWVSZWcoKSk7IH0KKysgIHZvaWQgcHVzaFZhbHVlKGNvbnN0IFZhbHVlJiB2YWwpIHsKKysgICAg VXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3Jh dGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBpZiAodmFsLmlzR0NUaGluZygpKSB7CisrICAg ICAgQ29kZU9mZnNldCBvZmYgPSBtb3ZXaXRoUGF0Y2goSW1tV29yZCh2YWwuYXNSYXdCaXRzKCkp LCBzY3JhdGNoKTsKKysgICAgICB3cml0ZURhdGFSZWxvY2F0aW9uKG9mZiwgdmFsKTsKKysgICAg fSBlbHNlIHsKKysgICAgICBtb3ZlUHRyKEltbVdvcmQodmFsLmFzUmF3Qml0cygpKSwgc2NyYXRj aCk7CisrICAgIH0KKysgICAgcHVzaChzY3JhdGNoKTsKKysgIH0KKysgIHZvaWQgcHVzaFZhbHVl KEpTVmFsdWVUeXBlIHR5cGUsIFJlZ2lzdGVyIHJlZykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0 ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1 aXJlKCk7CisrICAgIGJveFZhbHVlKHR5cGUsIHJlZywgc2NyYXRjaCk7CisrICAgIHB1c2goc2Ny YXRjaCk7CisrICB9CisrICB2b2lkIHB1c2hWYWx1ZShjb25zdCBBZGRyZXNzJiBhZGRyKSB7Cisr ICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIg c2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbG9hZFB0cihhZGRyLCBzY3JhdGNoKTsK KysgICAgcHVzaChzY3JhdGNoKTsKKysgIH0KKysgIHZvaWQgcHVzaFZhbHVlKGNvbnN0IEJhc2VJ bmRleCYgYWRkciwgUmVnaXN0ZXIgc2NyYXRjaCkgeworKyAgICBsb2FkUHRyKGFkZHIsIHNjcmF0 Y2gpOworKyAgICBwdXNoKHNjcmF0Y2gpOworKyAgfQorKworKyAgLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICAvLyBM b2FkIGluc3RydWN0aW9ucworKworKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4U2lnbkV4dGVu ZChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIEZhdWx0aW5n Q29kZU9mZnNldCBmY287CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsK KysgICAgICBmY28gPSBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX2xieihkZXN0 LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0gZWxz ZSB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICAg IFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgTU9aX0FTU0VSVChz Y3JhdGNoICE9IGRlc3QpOworKyAgICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCks IHNjcmF0Y2gpOworKyAgICAgIGZjbyA9CisrICAgICAgICAgIEZhdWx0aW5nQ29kZU9mZnNldChh c19sYnp4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9 CisrICAgIGFzX2V4dHNiKGRlc3QsIGRlc3QpOworKyAgICByZXR1cm4gZmNvOworKyAgfQorKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ4U2lnbkV4dGVuZChjb25zdCBCYXNlSW5kZXgmIHNyYywg UmVnaXN0ZXIgZGVzdCkgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGNvbXB1 dGVTY2FsZWRBZGRyZXNzKHNyYywgc2NyYXRjaCk7CisrICAgIEZhdWx0aW5nQ29kZU9mZnNldCBm Y287CisrICAgIGlmIChpc19pbnROKHNyYy5vZmZzZXQsIDE2KSkgeworKyAgICAgIGZjbyA9IEZh dWx0aW5nQ29kZU9mZnNldChhc19sYnooZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zm c2V0KCkpOworKyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0 KTsKKysgICAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3QpOworKyAgICAgIGZj byA9IEZhdWx0aW5nQ29kZU9mZnNldChhc19sYnp4KGRlc3QsIHNjcmF0Y2gsIGRlc3QpLmdldE9m ZnNldCgpKTsKKysgICAgfQorKyAgICBhc19leHRzYihkZXN0LCBkZXN0KTsKKysgICAgcmV0dXJu IGZjbzsKKysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkOFplcm9FeHRlbmQoY29uc3Qg QWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBpZiAoaXNfaW50TihhZGRy ZXNzLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysg ICAgICAgICAgYXNfbGJ6KGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9m ZnNldCgpKTsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIE1PWl9B U1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zm c2V0KSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNfbGJ6eChk ZXN0LCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIEZhdWx0 aW5nQ29kZU9mZnNldCBsb2FkOFplcm9FeHRlbmQoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lz dGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOwor KyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBjb21wdXRlU2Nh bGVkQWRkcmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAx NikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xieihkZXN0LCBzY3Jh dGNoLCBzcmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgTU9aX0FTU0VSVChz Y3JhdGNoICE9IGRlc3QpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3Qp OworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xiengoZGVzdCwgc2NyYXRjaCwg ZGVzdCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQxNlNp Z25FeHRlbmQoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBp ZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5n Q29kZU9mZnNldCgKKysgICAgICAgICAgYXNfbGhhKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVz cy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJT Y29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgbW92ZVB0cihJbW1X b3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVP ZmZzZXQoYXNfbGhheChkZXN0LCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsK KysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkMTZTaWduRXh0ZW5kKGNvbnN0IEJhc2VJ bmRleCYgc3JjLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsK KysgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgICAgaWYgKGlzX2lu dE4oc3JjLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChh c19saGEoZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9Cisr ICAgIE1PWl9BU1NFUlQoc2NyYXRjaCAhPSBkZXN0KTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHNy Yy5vZmZzZXQpLCBkZXN0KTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19saGF4 KGRlc3QsIHNjcmF0Y2gsIGRlc3QpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0 eXBlbmFtZSBTPgorKyAgdm9pZCBsb2FkMTZVbmFsaWduZWRTaWduRXh0ZW5kKGNvbnN0IFMmIHNy YywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBsb2FkMTZTaWduRXh0ZW5kKHNyYywgZGVzdCk7Cisr ICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgbG9hZDE2WmVyb0V4dGVuZChjb25zdCBBZGRyZXNz JiBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zm c2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAg ICBhc19saHooZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkp OworKyAgICB9CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysg ICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChz Y3JhdGNoICE9IGRlc3QpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBz Y3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19saHp4KGRlc3QsIGFk ZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgRmF1bHRpbmdDb2Rl T2Zmc2V0IGxvYWQxNlplcm9FeHRlbmQoY29uc3QgQmFzZUluZGV4JiBzcmMsIFJlZ2lzdGVyIGRl c3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRk cmVzcyhzcmMsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50TihzcmMub2Zmc2V0LCAxNikpIHsK KysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoeihkZXN0LCBzY3JhdGNoLCBz cmMub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgTU9aX0FTU0VSVChzY3JhdGNo ICE9IGRlc3QpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9mZnNldCksIGRlc3QpOworKyAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX2xoengoZGVzdCwgc2NyYXRjaCwgZGVzdCku Z2V0T2Zmc2V0KCkpOworKyAgfQorKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CisrICB2b2lkIGxv YWQxNlVuYWxpZ25lZFplcm9FeHRlbmQoY29uc3QgUyYgc3JjLCBSZWdpc3RlciBkZXN0KSB7Cisr ICAgIGxvYWQxNlplcm9FeHRlbmQoc3JjLCBkZXN0KTsKKysgIH0KKysKKysgIEZhdWx0aW5nQ29k ZU9mZnNldCBsb2FkMzIoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgewor KyAgICAvLyBsd2EgaXMgRFMtZm9ybSAoMTQtYml0IGRpc3BsYWNlbWVudCDDlyA0ID0gMTYtYml0 LXNpZ25lZCBlZmZlY3RpdmUKKysgICAgLy8gcmFuZ2UsIDQtYnl0ZSBhbGlnbm1lbnQgcmVxdWly ZWQpLiBsd2F4IGlzIFgtZm9ybSBpbmRleGVkLCBubworKyAgICAvLyBhbGlnbm1lbnQgY29uc3Ry YWludC4gQm90aCBzaWduLWV4dGVuZCBpbiBvbmUgaW5zdHJ1Y3Rpb247IG9ubHkKKysgICAgLy8g dGhlIG1pc2FsaWduZWQgMTYtYml0LWZpdHRpbmcgY2FzZSBzdGlsbCBuZWVkcyBsd3ogKyBleHRz dy4KKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSAmJiAoYWRkcmVzcy5vZmZz ZXQgJiAzKSA9PSAwKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAg ICAgICAgYXNfbHdhKGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNl dCgpKTsKKysgICAgfQorKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7Cisr ICAgICAgRmF1bHRpbmdDb2RlT2Zmc2V0IGZjbygKKysgICAgICAgICAgYXNfbHd6KGRlc3QsIGFk ZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgICBhc19leHRz dyhkZXN0LCBkZXN0KTsKKysgICAgICByZXR1cm4gZmNvOworKyAgICB9CisrICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRl bXBzLkFjcXVpcmUoKTsKKysgICAgTU9aX0FTU0VSVChzY3JhdGNoICE9IGRlc3QpOworKyAgICBt b3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldChhc19sd2F4KGRlc3QsIGFkZHJlc3MuYmFzZSwgc2NyYXRjaCkuZ2V0 T2Zmc2V0KCkpOworKyAgfQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQzMihjb25zdCBCYXNl SW5kZXgmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVy U2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAg aWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSAmJiAoYWRkcmVzcy5vZmZzZXQgJiAzKSA9 PSAwKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNf bHdhKGRlc3QsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0K KysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2KSkgeworKyAgICAgIEZhdWx0aW5n Q29kZU9mZnNldCBmY28oYXNfbHd6KGRlc3QsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0KS5nZXRP ZmZzZXQoKSk7CisrICAgICAgYXNfZXh0c3coZGVzdCwgZGVzdCk7CisrICAgICAgcmV0dXJuIGZj bzsKKysgICAgfQorKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQ dHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIGRlc3QpOworKyAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KGFzX2x3YXgoZGVzdCwgc2NyYXRjaCwgZGVzdCkuZ2V0T2Zmc2V0KCkpOworKyAg fQorKyAgdm9pZCBsb2FkMzIoQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3Qp IHsKKysgICAgbW92ZVB0cihJbW1Xb3JkKCh1aW50cHRyX3QpYWRkcmVzcy5hZGRyKSwgZGVzdCk7 CisrICAgIGFzX2x3YShkZXN0LCBkZXN0LCAwKTsKKysgIH0KKysgIHZvaWQgbG9hZDMyKHdhc206 OlN5bWJvbGljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIG1vdmVQdHIo YWRkcmVzcywgZGVzdCk7CisrICAgIGFzX2x3YShkZXN0LCBkZXN0LCAwKTsKKysgIH0KKysgIHRl bXBsYXRlIDx0eXBlbmFtZSBTPgorKyAgdm9pZCBsb2FkMzJVbmFsaWduZWQoY29uc3QgUyYgc3Jj LCBSZWdpc3RlciBkZXN0KSB7CisrICAgIGxvYWQzMihzcmMsIGRlc3QpOworKyAgfQorKworKyAg RmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ2NChjb25zdCBBZGRyZXNzJiBhZGRyZXNzLCBSZWdpc3Rl cjY0IGRlc3QpIHsKKysgICAgcmV0dXJuIGxvYWRQdHIoYWRkcmVzcywgZGVzdC5yZWcpOworKyAg fQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWQ2NChjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3Ms IFJlZ2lzdGVyNjQgZGVzdCkgeworKyAgICByZXR1cm4gbG9hZFB0cihhZGRyZXNzLCBkZXN0LnJl Zyk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KKysgIHZvaWQgbG9hZDY0VW5hbGln bmVkKGNvbnN0IFMmIHNyYywgUmVnaXN0ZXI2NCBkZXN0KSB7CisrICAgIGxvYWQ2NChzcmMsIGRl c3QpOworKyAgfQorKworKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IGxvYWRQdHIoY29uc3QgQWRkcmVz cyYgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICAvLyBhc19sZCAoRFMtZm9ybSkgcmVx dWlyZXMgNC1ieXRlIGFsaWduZWQgb2Zmc2V0LgorKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9m ZnNldCwgMTYpICYmICEoYWRkcmVzcy5vZmZzZXQgJiAweDMpKSB7CisrICAgICAgcmV0dXJuIEZh dWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfbGQoZGVzdCwgYWRkcmVzcy5iYXNlLCBh ZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGlmIChIYXNQT1dFUjEw KCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkcmVzcy5vZmZzZXQsIDM0KSkgeworKyAgICAgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3BsZChkZXN0LCBhZGRyZXNz LmJhc2UsIChpbnQ2NF90KWFkZHJlc3Mub2Zmc2V0LCAvKlI9Ki9mYWxzZSkKKysgICAgICAgICAg ICAgIC5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChh ZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0 KGFzX2xkeChkZXN0LCBhZGRyZXNzLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNldCgpKTsKKysgIH0K KysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkUHRyKGNvbnN0IEJhc2VJbmRleCYgc3JjLCBSZWdp c3RlciBkZXN0KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsK KysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgY29tcHV0ZVNj YWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNldCwg MTYpICYmICEoc3JjLm9mZnNldCAmIDB4MykpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KGFzX2xkKGRlc3QsIHNjcmF0Y2gsIHNyYy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysg ICAgfQorKyAgICBNT1pfQVNTRVJUKHNjcmF0Y2ggIT0gZGVzdCk7CisrICAgIG1vdmVQdHIoSW1t V29yZChzcmMub2Zmc2V0KSwgZGVzdCk7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQo YXNfbGR4KGRlc3QsIHNjcmF0Y2gsIGRlc3QpLmdldE9mZnNldCgpKTsKKysgIH0KKysgIHZvaWQg bG9hZFB0cihBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXIgZGVzdCkgeworKyAgICBt b3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClhZGRyZXNzLmFkZHIpLCBkZXN0KTsKKysgICAgYXNf bGQoZGVzdCwgZGVzdCwgMCk7CisrICB9CisrICB2b2lkIGxvYWRQdHIod2FzbTo6U3ltYm9saWNB ZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbW92ZVB0cihhZGRyZXNzLCBk ZXN0KTsKKysgICAgYXNfbGQoZGVzdCwgZGVzdCwgMCk7CisrICB9CisrCisrICB2b2lkIGxvYWRQ cml2YXRlKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAgbG9h ZFB0cihhZGRyZXNzLCBkZXN0KTsKKysgIH0KKysKKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2Fk RG91YmxlKGNvbnN0IEFkZHJlc3MmIGFkZHIsIEZsb2F0UmVnaXN0ZXIgZGVzdCkgeworKyAgICBp ZiAoaXNfaW50TihhZGRyLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29k ZU9mZnNldCgKKysgICAgICAgICAgYXNfbGZkKGRlc3QsIGFkZHIuYmFzZSwgYWRkci5vZmZzZXQp LmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBpZiAoSGFzUE9XRVIxMCgpICYmIGlzX2ludE4o KGludHB0cl90KWFkZHIub2Zmc2V0LCAzNCkpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2Rl T2Zmc2V0KAorKyAgICAgICAgICBhc19wbGZkKGRlc3QsIGFkZHIuYmFzZSwgKGludDY0X3QpYWRk ci5vZmZzZXQsIC8qUj0qL2ZhbHNlKQorKyAgICAgICAgICAgICAgLmdldE9mZnNldCgpKTsKKysg ICAgfQorKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJl Z2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChh ZGRyLm9mZnNldCksIHNjcmF0Y2gpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFz X2xmZHgoZGVzdCwgYWRkci5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBG YXVsdGluZ0NvZGVPZmZzZXQgbG9hZERvdWJsZShjb25zdCBCYXNlSW5kZXgmIHNyYywgRmxvYXRS ZWdpc3RlciBkZXN0KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlz KTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgY29tcHV0 ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgICAgaWYgKGlzX2ludE4oc3JjLm9mZnNl dCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZmQoZGVzdCwg c2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFJlZ2lzdGVy IHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoc3JjLm9m ZnNldCksIHNjcmF0Y2gyKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19sZmR4 KGRlc3QsIHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGlu Z0NvZGVPZmZzZXQgbG9hZEZsb2F0MzIoY29uc3QgQWRkcmVzcyYgYWRkciwgRmxvYXRSZWdpc3Rl ciBkZXN0KSB7CisrICAgIGlmIChpc19pbnROKGFkZHIub2Zmc2V0LCAxNikpIHsKKysgICAgICBy ZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19sZnMoZGVzdCwgYWRkci5i YXNlLCBhZGRyLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIGlmIChIYXNQT1dF UjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkci5vZmZzZXQsIDM0KSkgeworKyAgICAgIHJl dHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3BsZnMoZGVzdCwgYWRkci5i YXNlLCAoaW50NjRfdClhZGRyLm9mZnNldCwgLypSPSovZmFsc2UpCisrICAgICAgICAgICAgICAu Z2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBz KCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAg bW92ZVB0cihJbW1Xb3JkKGFkZHIub2Zmc2V0KSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBGYXVs dGluZ0NvZGVPZmZzZXQoYXNfbGZzeChkZXN0LCBhZGRyLmJhc2UsIHNjcmF0Y2gpLmdldE9mZnNl dCgpKTsKKysgIH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBsb2FkRmxvYXQzMihjb25zdCBCYXNl SW5kZXgmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3Rl clNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVp cmUoKTsKKysgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3Moc3JjLCBzY3JhdGNoKTsKKysgICAgaWYg KGlzX2ludE4oc3JjLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9m ZnNldChhc19sZnMoZGVzdCwgc2NyYXRjaCwgc3JjLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAg ICB9CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3Zl UHRyKEltbVdvcmQoc3JjLm9mZnNldCksIHNjcmF0Y2gyKTsKKysgICAgcmV0dXJuIEZhdWx0aW5n Q29kZU9mZnNldChhc19sZnN4KGRlc3QsIHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7 CisrICB9CisrICAvLyBMb2FkIGEgRlAgY29uc3RhbnQgaW50byBgZGVzdGAuCisrICAvLworKyAg Ly8gKzAuMCAvICswLjBmOiBgeHhseG9yIGRlc3QsIGRlc3QsIGRlc3RgICgxIGluc24pLiBObyBy ZWdpc3RlciBjbG9iYmVycy4KKysgIC8vCisrICAvLyBQT1dFUjkgbm9uLXplcm86IGNvbnN0YW50 IHBvb2wgbG9hZCB2aWEgYGFkZHBjaXMgcjE2LCBoaTsgbGZkL2xmcyBmRCwKKysgIC8vIGxvKHIx Nik7IG5vcGAuIDIgcmVhbCBpbnNucyArIG5vcCwgbm8gTFIgY2xvYmJlciwgbm8gUmV0dXJuIEFk ZHJlc3MKKysgIC8vIFN0YWNrIGNvcnJ1cHRpb24uIGxmcyBhdXRvLWV4cGFuZHMgc2luZ2xlLXBy ZWNpc2lvbiB0byBkb3VibGUsIHNvIG5vCisrICAvLyBzZXBhcmF0ZSB4c2N2c3BkcG4gc3RlcC4g Q2xvYmJlcnMgcjE2IChTYXZlZFNjcmF0Y2hSZWdpc3RlcikuIFBvb2wKKysgIC8vIGVudHJpZXMg YXJlIHNoYXJlZCBhY3Jvc3MgZHVwbGljYXRlIGNvbnN0YW50cy4KKysgIC8vCisrICAvLyBQT1dF Ujggbm9uLXplcm86IGlubGluZSBgbW92ZVB0ciArIG10dnNyZCgreHNjdnNwZHBuKWAgcGF0aC4g V2UgZG8gTk9UCisrICAvLyB1c2UgdGhlIGJjbC1iYXNlZCBwb29sIHBhdGggb24gUE9XRVI4OiBi Y2wgY2xvYmJlcnMgTFIgYW5kIGNvcnJ1cHRzCisrICAvLyB0aGUgUmV0dXJuIEFkZHJlc3MgU3Rh Y2ssIHdoaWNoIGNhdXNlcyBjYXRhc3Ryb3BoaWMgbWlzcHJlZGljdHMgaW4KKysgIC8vIGhvdCBG UC1jb25zdGFudCBsb29wcyAofjIwMHggc2xvd2Rvd24gb2JzZXJ2ZWQgb24gY21wLWJpdHNlbGVj dC5qcykuCisrICAvLworKyAgLy8gUHJlY29uZGl0aW9uOiBtdXN0IG5vdCBiZSBjYWxsZWQgaW5z aWRlIGFuIGBlbnRlck5vUG9vbGAgcmVnaW9uIHdoZW4KKysgIC8vIEhhc1BPV0VSOSgpIGlzIHRy dWUgKHRoZSBwb29sIHBhdGggY2FsbHMgYGFsbG9jRW50cnlgIHdoaWNoIGFzc2VydHMKKysgIC8v IGBpbmhpYml0UG9vbHNfID09IDBgKS4gQXVkaXQtdmVyaWZpZWQgdGhhdCBubyBzdWNoIGNhbGwg c2l0ZSBleGlzdHMKKysgIC8vIHRvZGF5OyB0aGUgUE9XRVI4IGlubGluZSBwYXRoIGlzIHVuYWZm ZWN0ZWQuCisrICB2b2lkIGxvYWRDb25zdGFudERvdWJsZShkb3VibGUgZHAsIEZsb2F0UmVnaXN0 ZXIgZGVzdCkgeworKyAgICBpZiAobW96aWxsYTo6SXNQb3NpdGl2ZVplcm8oZHApKSB7CisrICAg ICAgYXNfeHhseG9yKGRlc3QsIGRlc3QsIGRlc3QpOworKyAgICAgIHJldHVybjsKKysgICAgfQor KyAgICBpZiAoSGFzUE9XRVI5KCkpIHsKKysgICAgICBsb2FkRnJvbVBvb2xGbG9hdDY0KGRlc3Qs IGRwKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICB1bmlvbiB7CisrICAgICAgZG91YmxlIGQ7CisrICAgICAgdWludDY0X3QgdTsKKysg ICAgfSB1OworKyAgICB1LmQgPSBkcDsKKysgICAgbW92ZVB0cihJbW1Xb3JkKHUudSksIHNjcmF0 Y2gpOworKyAgICBhc19tdHZzcmQoZGVzdCwgc2NyYXRjaCk7CisrICB9CisrICB2b2lkIGxvYWRD b25zdGFudEZsb2F0MzIoZmxvYXQgZiwgRmxvYXRSZWdpc3RlciBkZXN0KSB7CisrICAgIGlmICht b3ppbGxhOjpJc1Bvc2l0aXZlWmVybyhmKSkgeworKyAgICAgIGFzX3h4bHhvcihkZXN0LCBkZXN0 LCBkZXN0KTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysgICAgaWYgKEhhc1BPV0VSOSgpKSB7 CisrICAgICAgbG9hZEZyb21Qb29sRmxvYXQzMihkZXN0LCBmKTsKKysgICAgICByZXR1cm47Cisr ICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICB1bmlvbiB7CisrICAgICAg ZmxvYXQgZjsKKysgICAgICB1aW50MzJfdCB1OworKyAgICB9IHU7CisrICAgIHUuZiA9IGY7Cisr ICAgIG1vdmVQdHIoSW1tV29yZCh1LnUpLCBzY3JhdGNoKTsKKysgICAgeF9zbGRpKHNjcmF0Y2gs IHNjcmF0Y2gsIDMyKTsKKysgICAgYXNfbXR2c3JkKGRlc3QsIHNjcmF0Y2gpOworKyAgICBhc194 c2N2c3BkcG4oZGVzdCwgZGVzdCk7CisrICB9CisrCisrICB2b2lkIG5vdEJvb2xlYW4oY29uc3Qg VmFsdWVPcGVyYW5kJiB2YWwpIHsKKysgICAgYXNfeG9yaSh2YWwudmFsdWVSZWcoKSwgdmFsLnZh bHVlUmVnKCksIDEpOworKyAgfQorKworKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0 VGFnKGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MsIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgICAgbG9h ZFB0cihhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAgeF9zcmRpKHNjcmF0Y2gsIHNjcmF0Y2gsIEpT VkFMX1RBR19TSElGVCk7CisrICAgIHJldHVybiBzY3JhdGNoOworKyAgfQorKyAgW1tub2Rpc2Nh cmRdXSBSZWdpc3RlciBleHRyYWN0VGFnKGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcywKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAg IGlmIChzY3JhdGNoID09IHIwKSB7CisrICAgICAgLy8gcjAgY2Fubm90IGJlIHVzZWQgYXMgYSBi YXNlIHJlZ2lzdGVyIGluIEQtZm9ybS9YLWZvcm0gbG9hZHMsCisrICAgICAgLy8gc28gd2UgbmVl ZCBhIHNlcGFyYXRlIHRlbXAgZm9yIHRoZSBpbnRlcm1lZGlhdGUgYWRkcmVzcy4KKysgICAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgICAgUmVnaXN0ZXIgYmFz ZSA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNz LCBiYXNlKTsKKysgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgYWRkcmVzcy5vZmZzZXQpLCBz Y3JhdGNoKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAvLyBzY3JhdGNoIGlzIGEgcG9vbCByZWdp c3RlciAocjExL3IxMikgb3IgYW5vdGhlciBHUFIgdGhhdCBjYW4KKysgICAgICAvLyBzZXJ2ZSBh cyBhIGJhc2UgcmVnaXN0ZXIsIHNvIHJldXNlIGl0IGZvciB0aGUgYWRkcmVzcyBjb21wdXRhdGlv bi4KKysgICAgICBjb21wdXRlU2NhbGVkQWRkcmVzcyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAg ICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysg ICAgfQorKyAgICB4X3NyZGkoc2NyYXRjaCwgc2NyYXRjaCwgSlNWQUxfVEFHX1NISUZUKTsKKysg ICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrICBbW25vZGlzY2FyZF1dIFJlZ2lzdGVyIGV4dHJh Y3RUYWcoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIHNwbGl0VGFnKHZhbHVlLCBz Y3JhdGNoKTsKKysgICAgcmV0dXJuIHNjcmF0Y2g7CisrICB9CisrCisrICBbW25vZGlzY2FyZF1d IFJlZ2lzdGVyIGV4dHJhY3RPYmplY3QoY29uc3QgQWRkcmVzcyYgYWRkcmVzcywKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAg IGxvYWRQdHIoYWRkcmVzcywgc2NyYXRjaCk7CisrICAgIGFzX3JsZGljbChzY3JhdGNoLCBzY3Jh dGNoLCAwLCA2NCAtIEpTVkFMX1RBR19TSElGVCk7CisrICAgIHJldHVybiBzY3JhdGNoOworKyAg fQorKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0T2JqZWN0KGNvbnN0IFZhbHVlT3Bl cmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn aXN0ZXIgc2NyYXRjaCkgeworKyAgICB1bmJveE9iamVjdCh2YWx1ZSwgc2NyYXRjaCk7CisrICAg IHJldHVybiBzY3JhdGNoOworKyAgfQorKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0 SW50MzIoY29uc3QgVmFsdWVPcGVyYW5kJiB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gpIHsKKysgICAgdW5ib3hJbnQzMih2YWx1 ZSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBzY3JhdGNoOworKyAgfQorKyAgW1tub2Rpc2NhcmRd XSBSZWdpc3RlciBleHRyYWN0U3RyaW5nKGNvbnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCkgewor KyAgICB1bmJveFN0cmluZyh2YWx1ZSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBzY3JhdGNoOwor KyAgfQorKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRyYWN0U3ltYm9sKGNvbnN0IFZhbHVl T3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnaXN0ZXIgc2NyYXRjaCkgeworKyAgICB1bmJveFN5bWJvbCh2YWx1ZSwgc2NyYXRjaCk7Cisr ICAgIHJldHVybiBzY3JhdGNoOworKyAgfQorKyAgW1tub2Rpc2NhcmRdXSBSZWdpc3RlciBleHRy YWN0Qm9vbGVhbihjb25zdCBWYWx1ZU9wZXJhbmQmIHZhbHVlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlciBzY3JhdGNoKSB7CisrICAgIHVuYm94Qm9v bGVhbih2YWx1ZSwgc2NyYXRjaCk7CisrICAgIHJldHVybiBzY3JhdGNoOworKyAgfQorKworKyAg dm9pZCB0ZXN0T2JqZWN0U2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBWYWx1ZU9wZXJhbmQmIHZh bHVlLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoY29uZCA9PSBFcXVhbCB8fCBj b25kID09IE5vdEVxdWFsKTsKKysgICAgeworKyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3Bl IHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciB0YWcgPSB0ZW1wcy5BY3F1aXJlKCk7Cisr ICAgICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7CisrICAgICAgdWludDMyX3QgdCA9IEpTVkFMX1RB R19PQkpFQ1Q7CisrICAgICAgYXNfeG9yaXModGFnLCB0YWcsIHQgPj4gMTYpOworKyAgICAgIGFz X2NtcGx3aSh0YWcsIHQgJiAweEZGRkYpOworKyAgICB9CisrICAgIG1hX2NtcF9zZXQoZGVzdCwg Y29uZCk7CisrICB9CisrICB2b2lkIHRlc3RVbmRlZmluZWRTZXQoQ29uZGl0aW9uIGNvbmQsIGNv bnN0IFZhbHVlT3BlcmFuZCYgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0 ZXIgZGVzdCkgeworKyAgICBNT1pfQVNTRVJUKGNvbmQgPT0gRXF1YWwgfHwgY29uZCA9PSBOb3RF cXVhbCk7CisrICAgIHsKKysgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhp cyk7CisrICAgICAgUmVnaXN0ZXIgdGFnID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICAgIHNwbGl0 VGFnKHZhbHVlLCB0YWcpOworKyAgICAgIC8vIFVzZSB4b3JpcytjbXBsd2kgdG8gY29tcGFyZSB3 aXRob3V0IGEgc2Vjb25kIHNjcmF0Y2guCisrICAgICAgdWludDMyX3QgdCA9IEpTVkFMX1RBR19V TkRFRklORUQ7CisrICAgICAgYXNfeG9yaXModGFnLCB0YWcsIHQgPj4gMTYpOworKyAgICAgIGFz X2NtcGx3aSh0YWcsIHQgJiAweEZGRkYpOworKyAgICB9CisrICAgIG1hX2NtcF9zZXQoZGVzdCwg Y29uZCk7CisrICB9CisrICB2b2lkIHRlc3ROdWxsU2V0KENvbmRpdGlvbiBjb25kLCBjb25zdCBW YWx1ZU9wZXJhbmQmIHZhbHVlLCBSZWdpc3RlciBkZXN0KSB7CisrICAgIE1PWl9BU1NFUlQoY29u ZCA9PSBFcXVhbCB8fCBjb25kID09IE5vdEVxdWFsKTsKKysgICAgeworKyAgICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgICBSZWdpc3RlciB0YWcgPSB0ZW1w cy5BY3F1aXJlKCk7CisrICAgICAgc3BsaXRUYWcodmFsdWUsIHRhZyk7CisrICAgICAgdWludDMy X3QgdCA9IEpTVkFMX1RBR19OVUxMOworKyAgICAgIGFzX3hvcmlzKHRhZywgdGFnLCB0ID4+IDE2 KTsKKysgICAgICBhc19jbXBsd2kodGFnLCB0ICYgMHhGRkZGKTsKKysgICAgfQorKyAgICBtYV9j bXBfc2V0KGRlc3QsIGNvbmQpOworKyAgfQorKworKyAgQnVmZmVyT2Zmc2V0IHJldCgpIHsKKysg ICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBz Y3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBhc19sZChzY3JhdGNoLCBTdGFja1BvaW50 ZXIsIDApOworKyAgICBhc19hZGRpKFN0YWNrUG9pbnRlciwgU3RhY2tQb2ludGVyLCA4KTsKKysg ICAgeHNfbXRscihzY3JhdGNoKTsKKysgICAgcmV0dXJuIGFzX2JscigpOworKyAgfQorKworKyAg dm9pZCBqKExhYmVsKiBkZXN0KSB7IGp1bXAoZGVzdCk7IH0KKysKKysgIHZvaWQgZ2V0V2FzbUFu eVJlZkdDVGhpbmdDaHVuayhSZWdpc3RlciBhbnlyZWYsIFJlZ2lzdGVyIGRlc3QpIHsKKysgICAg c3RhdGljX2Fzc2VydChqczo6Z2M6OkNodW5rU2hpZnQgPT0gMjApOworKyAgICBhc19ybGRpY3Io ZGVzdCwgYW55cmVmLCAwLCA0Myk7CisrICB9CisrCisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K KysgIHZvaWQgbG9hZFVuYm94ZWRWYWx1ZShjb25zdCBUJiBhZGRyZXNzLCBNSVJUeXBlIHR5cGUs IEFueVJlZ2lzdGVyIGRlc3QpIHsKKysgICAgaWYgKGRlc3QuaXNGbG9hdCgpKSB7CisrICAgICAg bG9hZEludDMyT3JEb3VibGUoYWRkcmVzcywgZGVzdC5mcHUoKSk7CisrICAgIH0gZWxzZSB7Cisr ICAgICAgdW5ib3hOb25Eb3VibGUoYWRkcmVzcywgZGVzdC5ncHIoKSwgVmFsdWVUeXBlRnJvbU1J UlR5cGUodHlwZSkpOworKyAgICB9CisrICB9CisrCisrICB2b2lkIGxvYWRJbnQzMk9yRG91Ymxl KGNvbnN0IEFkZHJlc3MmIHNyYywgRmxvYXRSZWdpc3RlciBkZXN0KTsKKysgIHZvaWQgbG9hZElu dDMyT3JEb3VibGUoY29uc3QgQmFzZUluZGV4JiBhZGRyLCBGbG9hdFJlZ2lzdGVyIGRlc3QpOwor KworKyAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICAvLyBTdG9yZSBpbnN0cnVjdGlvbnMKKysKKysgIEZhdWx0aW5n Q29kZU9mZnNldCBzdG9yZTgoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7 CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19zdGIoc3JjLCBhZGRyZXNzLmJhc2Us IGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJl Z2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMu QWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNo KTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGJ4KHNyYywgYWRkcmVzcy5i YXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQg c3RvcmU4KFJlZ2lzdGVyIHNyYywgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7CisrICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgY29tcHV0ZVNjYWxlZEFkZHJlc3MoYWRkcmVzcywg c2NyYXRjaCk7CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAg ICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19zdGIoc3JjLCBzY3Jh dGNoLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9CisrICAgIFJlZ2lzdGVy IHNjcmF0Y2gyID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVz cy5vZmZzZXQpLCBzY3JhdGNoMik7CisrICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoYXNf c3RieChzcmMsIHNjcmF0Y2gsIHNjcmF0Y2gyKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICB2b2lk IHN0b3JlOChJbW0zMiBpbW0sIGNvbnN0IEFkZHJlc3MmIGFkZHJlc3MpIHsKKysgICAgVXNlU2Ny YXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKKysgICAgc3RvcmU4 KHNjcmF0Y2gsIGFkZHJlc3MpOworKyAgfQorKyAgdm9pZCBzdG9yZTgoSW1tMzIgaW1tLCBjb25z dCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVt cHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAg ICBtb3ZlMzIoaW1tLCBzY3JhdGNoKTsKKysgICAgc3RvcmU4KHNjcmF0Y2gsIGFkZHJlc3MpOwor KyAgfQorKworKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlMTYoUmVnaXN0ZXIgc3JjLCBjb25z dCBBZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIGlmIChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAx NikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19z dGgoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAg IH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRk cmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChh c19zdGh4KHNyYywgYWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9Cisr ICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmUxNihSZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJbmRl eCYgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7 CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIGNvbXB1dGVT Y2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gpOworKyAgICBpZiAoaXNfaW50TihhZGRyZXNz Lm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAg ICAgICAgYXNfc3RoKHNyYywgc2NyYXRjaCwgYWRkcmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsK KysgICAgfQorKyAgICBSZWdpc3RlciBzY3JhdGNoMiA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAg bW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0KSwgc2NyYXRjaDIpOworKyAgICByZXR1cm4g RmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0aHgoc3JjLCBzY3JhdGNoLCBzY3JhdGNoMikuZ2V0T2Zm c2V0KCkpOworKyAgfQorKyAgdm9pZCBzdG9yZTE2KEltbTMyIGltbSwgY29uc3QgQWRkcmVzcyYg YWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7Cisr ICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmUzMihpbW0s IHNjcmF0Y2gpOworKyAgICBzdG9yZTE2KHNjcmF0Y2gsIGFkZHJlc3MpOworKyAgfQorKyAgdm9p ZCBzdG9yZTE2KEltbTMyIGltbSwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNzKSB7CisrICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKGltbSwgc2NyYXRjaCk7CisrICAgIHN0 b3JlMTYoc2NyYXRjaCwgYWRkcmVzcyk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K KysgIHZvaWQgc3RvcmUxNlVuYWxpZ25lZChSZWdpc3RlciBzcmMsIGNvbnN0IFQmIGRlc3QpIHsK KysgICAgc3RvcmUxNihzcmMsIGRlc3QpOworKyAgfQorKworKyAgRmF1bHRpbmdDb2RlT2Zmc2V0 IHN0b3JlMzIoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIGlm IChpc19pbnROKGFkZHJlc3Mub2Zmc2V0LCAxNikpIHsKKysgICAgICByZXR1cm4gRmF1bHRpbmdD b2RlT2Zmc2V0KAorKyAgICAgICAgICBhc19zdHcoc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu b2Zmc2V0KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQpLCBzY3JhdGNoKTsKKysgICAg cmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdHd4KHNyYywgYWRkcmVzcy5iYXNlLCBzY3Jh dGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQgc3RvcmUzMihS ZWdpc3RlciBzcmMsIGNvbnN0IEJhc2VJbmRleCYgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNo UmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1w cy5BY3F1aXJlKCk7CisrICAgIGNvbXB1dGVTY2FsZWRBZGRyZXNzKGFkZHJlc3MsIHNjcmF0Y2gp OworKyAgICBpZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpKSB7CisrICAgICAgcmV0dXJu IEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfc3R3KHNyYywgc2NyYXRjaCwgYWRk cmVzcy5vZmZzZXQpLmdldE9mZnNldCgpKTsKKysgICAgfQorKyAgICBSZWdpc3RlciBzY3JhdGNo MiA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKGFkZHJlc3Mub2Zmc2V0 KSwgc2NyYXRjaDIpOworKyAgICByZXR1cm4gRmF1bHRpbmdDb2RlT2Zmc2V0KGFzX3N0d3goc3Jj LCBzY3JhdGNoLCBzY3JhdGNoMikuZ2V0T2Zmc2V0KCkpOworKyAgfQorKyAgdm9pZCBzdG9yZTMy KFJlZ2lzdGVyIHNyYywgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpIHsKKysgICAgVXNlU2NyYXRj aFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVt cHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClhZGRyZXNzLmFk ZHIpLCBzY3JhdGNoKTsKKysgICAgYXNfc3R3KHNyYywgc2NyYXRjaCwgMCk7CisrICB9CisrICB2 b2lkIHN0b3JlMzIoSW1tMzIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIFVz ZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZTMyKHNyYywgc2NyYXRjaCk7CisrICAgIHN0 b3JlMzIoc2NyYXRjaCwgYWRkcmVzcyk7CisrICB9CisrICB2b2lkIHN0b3JlMzIoSW1tMzIgc3Jj LCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3MpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgp OworKyAgICBtb3ZlMzIoc3JjLCBzY3JhdGNoKTsKKysgICAgc3RvcmUzMihzY3JhdGNoLCBhZGRy ZXNzKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorKyAgdm9pZCBzdG9yZTMyVW5h bGlnbmVkKFJlZ2lzdGVyIHNyYywgY29uc3QgVCYgZGVzdCkgeworKyAgICBzdG9yZTMyKHNyYywg ZGVzdCk7CisrICB9CisrCisrICB2b2lkIHN0b3JlNjQoSW1tNjQgaW1tLCBBZGRyZXNzIGFkZHJl c3MpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBS ZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQo aW1tLnZhbHVlKSwgc2NyYXRjaCk7CisrICAgIHN0b3JlUHRyKHNjcmF0Y2gsIGFkZHJlc3MpOwor KyAgfQorKyAgdm9pZCBzdG9yZTY0KEltbTY0IGltbSwgY29uc3QgQmFzZUluZGV4JiBhZGRyZXNz KSB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKCp0aGlzKTsKKysgICAgUmVn aXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbW92ZVB0cihJbW1Xb3JkKGlt bS52YWx1ZSksIHNjcmF0Y2gpOworKyAgICBzdG9yZVB0cihzY3JhdGNoLCBhZGRyZXNzKTsKKysg IH0KKysgIEZhdWx0aW5nQ29kZU9mZnNldCBzdG9yZTY0KFJlZ2lzdGVyNjQgc3JjLCBBZGRyZXNz IGFkZHJlc3MpIHsKKysgICAgcmV0dXJuIHN0b3JlUHRyKHNyYy5yZWcsIGFkZHJlc3MpOworKyAg fQorKyAgRmF1bHRpbmdDb2RlT2Zmc2V0IHN0b3JlNjQoUmVnaXN0ZXI2NCBzcmMsIGNvbnN0IEJh c2VJbmRleCYgYWRkcmVzcykgeworKyAgICByZXR1cm4gc3RvcmVQdHIoc3JjLnJlZywgYWRkcmVz cyk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgIHZvaWQgc3RvcmU2NFVuYWxp Z25lZChSZWdpc3RlcjY0IHNyYywgY29uc3QgVCYgZGVzdCkgeworKyAgICBzdG9yZTY0KHNyYywg ZGVzdCk7CisrICB9CisrCisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgIHZvaWQgc3RvcmVQ dHIoSW1tV29yZCBpbW0sIFQgYWRkcmVzcykgeworKyAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7 CisrICAgIG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKKysgICAgc3RvcmVQdHIoc2NyYXRjaCwgYWRk cmVzcyk7CisrICB9CisrICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKysgIHZvaWQgc3RvcmVQdHIo SW1tUHRyIGltbSwgVCBhZGRyZXNzKSB7CisrICAgIHN0b3JlUHRyKEltbVdvcmQodWludHB0cl90 KGltbS52YWx1ZSkpLCBhZGRyZXNzKTsKKysgIH0KKysgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor KyAgdm9pZCBzdG9yZVB0cihJbW1HQ1B0ciBpbW0sIFQgYWRkcmVzcykgeworKyAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcygqdGhpcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0 ZW1wcy5BY3F1aXJlKCk7CisrICAgIG1vdmVQdHIoaW1tLCBzY3JhdGNoKTsKKysgICAgc3RvcmVQ dHIoc2NyYXRjaCwgYWRkcmVzcyk7CisrICB9CisrICB2b2lkIHN0b3JlUHRyKFJlZ2lzdGVyIHNy YywgQWJzb2x1dGVBZGRyZXNzIGRlc3QpIHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUg dGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOwor KyAgICBtb3ZlUHRyKEltbVdvcmQoKHVpbnRwdHJfdClkZXN0LmFkZHIpLCBzY3JhdGNoKTsKKysg ICAgYXNfc3RkKHNyYywgc2NyYXRjaCwgMCk7CisrICB9CisrICBGYXVsdGluZ0NvZGVPZmZzZXQg c3RvcmVQdHIoUmVnaXN0ZXIgc3JjLCBjb25zdCBBZGRyZXNzJiBhZGRyZXNzKSB7CisrICAgIC8v IGFzX3N0ZCAoRFMtZm9ybSkgcmVxdWlyZXMgNC1ieXRlIGFsaWduZWQgb2Zmc2V0LgorKyAgICBp ZiAoaXNfaW50TihhZGRyZXNzLm9mZnNldCwgMTYpICYmICEoYWRkcmVzcy5vZmZzZXQgJiAweDMp KSB7CisrICAgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldCgKKysgICAgICAgICAgYXNfc3Rk KHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCkuZ2V0T2Zmc2V0KCkpOworKyAgICB9 CisrICAgIGlmIChIYXNQT1dFUjEwKCkgJiYgaXNfaW50TigoaW50cHRyX3QpYWRkcmVzcy5vZmZz ZXQsIDM0KSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0NvZGVPZmZzZXQoCisrICAgICAgICAg IGFzX3BzdGQoc3JjLCBhZGRyZXNzLmJhc2UsIChpbnQ2NF90KWFkZHJlc3Mub2Zmc2V0LCAvKlI9 Ki9mYWxzZSkKKysgICAgICAgICAgICAgIC5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgVXNl U2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdpc3RlciBzY3JhdGNo ID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtb3ZlUHRyKEltbVdvcmQoYWRkcmVzcy5vZmZzZXQp LCBzY3JhdGNoKTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGR4KHNyYywg YWRkcmVzcy5iYXNlLCBzY3JhdGNoKS5nZXRPZmZzZXQoKSk7CisrICB9CisrICBGYXVsdGluZ0Nv ZGVPZmZzZXQgc3RvcmVQdHIoUmVnaXN0ZXIgc3JjLCBjb25zdCBCYXNlSW5kZXgmIGFkZHJlc3Mp IHsKKysgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMoKnRoaXMpOworKyAgICBSZWdp c3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBjb21wdXRlU2NhbGVkQWRkcmVz cyhhZGRyZXNzLCBzY3JhdGNoKTsKKysgICAgaWYgKGlzX2ludE4oYWRkcmVzcy5vZmZzZXQsIDE2 KSAmJiAhKGFkZHJlc3Mub2Zmc2V0ICYgMHgzKSkgeworKyAgICAgIHJldHVybiBGYXVsdGluZ0Nv ZGVPZmZzZXQoCisrICAgICAgICAgIGFzX3N0ZChzcmMsIHNjcmF0Y2gsIGFkZHJlc3Mub2Zmc2V0 KS5nZXRPZmZzZXQoKSk7CisrICAgIH0KKysgICAgUmVnaXN0ZXIgc2NyYXRjaDIgPSB0ZW1wcy5B Y3F1aXJlKCk7CisrICAgIG1vdmVQdHIoSW1tV29yZChhZGRyZXNzLm9mZnNldCksIHNjcmF0Y2gy KTsKKysgICAgcmV0dXJuIEZhdWx0aW5nQ29kZU9mZnNldChhc19zdGR4KHNyYywgc2NyYXRjaCwg c2NyYXRjaDIpLmdldE9mZnNldCgpKTsKKysgIH0KKysKKysgIC8vID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAgLy8gTWlz YworKworKyAgdm9pZCBoYW5kbGVGYWlsdXJlV2l0aEhhbmRsZXJUYWlsKExhYmVsKiBwcm9maWxl ckV4aXRUYWlsLCBMYWJlbCogYmFpbG91dFRhaWwsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDMyX3QqIHJldHVyblZhbHVlQ2hlY2tPZmZzZXQpOworKworKyAgaW5s aW5lIHZvaWQgaW5jcmVtZW50SW50MzJWYWx1ZShjb25zdCBBZGRyZXNzJiBhZGRyKTsKKysKKysg IHZvaWQgemVyb0RvdWJsZShGbG9hdFJlZ2lzdGVyIHJlZykgeyBhc194eGx4b3IocmVnLCByZWcs IHJlZyk7IH0KKysKKysgIHZvaWQgd3JpdGVDb2RlUG9pbnRlcihDb2RlTGFiZWwqIGxhYmVsKSB7 CisrICAgIGxhYmVsLT5wYXRjaEF0KCktPmJpbmQoY3VycmVudE9mZnNldCgpKTsKKysgICAgbGFi ZWwtPnNldExpbmtNb2RlKENvZGVMYWJlbDo6UmF3UG9pbnRlcik7CisrICAgIG1fYnVmZmVyLmVu c3VyZVNwYWNlKHNpemVvZih2b2lkKikpOworKyAgICB3cml0ZUluc3QoLTEpOworKyAgICB3cml0 ZUluc3QoLTEpOworKyAgfQorKyAgdm9pZCB3cml0ZURhdGFSZWxvY2F0aW9uKGNvbnN0IFZhbHVl JiB2YWwpIHsKKysgICAgaWYgKHZhbC5pc0dDVGhpbmcoKSkgeworKyAgICAgIGdjOjpDZWxsKiBj ZWxsID0gdmFsLnRvR0NUaGluZygpOworKyAgICAgIGlmIChjZWxsICYmIGdjOjpJc0luc2lkZU51 cnNlcnkoY2VsbCkpIHsKKysgICAgICAgIGVtYmVkc051cnNlcnlQb2ludGVyc18gPSB0cnVlOwor KyAgICAgIH0KKysgICAgICBkYXRhUmVsb2NhdGlvbnNfLndyaXRlVW5zaWduZWQoY3VycmVudE9m ZnNldCgpKTsKKysgICAgfQorKyAgfQorKyAgdm9pZCB3cml0ZURhdGFSZWxvY2F0aW9uKENvZGVP ZmZzZXQgb2ZmLCBjb25zdCBWYWx1ZSYgdmFsKSB7CisrICAgIGlmICh2YWwuaXNHQ1RoaW5nKCkp IHsKKysgICAgICBnYzo6Q2VsbCogY2VsbCA9IHZhbC50b0dDVGhpbmcoKTsKKysgICAgICBpZiAo Y2VsbCAmJiBnYzo6SXNJbnNpZGVOdXJzZXJ5KGNlbGwpKSB7CisrICAgICAgICBlbWJlZHNOdXJz ZXJ5UG9pbnRlcnNfID0gdHJ1ZTsKKysgICAgICB9CisrICAgICAgZGF0YVJlbG9jYXRpb25zXy53 cml0ZVVuc2lnbmVkKG9mZi5vZmZzZXQoKSk7CisrICAgIH0KKysgIH0KKysKKysgIENvZGVPZmZz ZXQgdG9nZ2xlZEp1bXAoTGFiZWwqIGxhYmVsKSB7CisrICAgIENvZGVPZmZzZXQgcmV0KG5leHRP ZmZzZXQoKS5nZXRPZmZzZXQoKSk7CisrICAgIGp1bXAobGFiZWwpOworKyAgICByZXR1cm4gcmV0 OworKyAgfQorKyAgQ29kZU9mZnNldCB0b2dnbGVkQ2FsbChKaXRDb2RlKiB0YXJnZXQsIGJvb2wg ZW5hYmxlZCk7CisrICAvLyA4IGluc3RydWN0aW9ucyBmb3IgbG9hZDY0ICsgbXRjdHIgKyBiY3Ry bCA9IDEwIGluc3RydWN0aW9ucyB0b3RhbC4KKysgIHN0YXRpYyBzaXplX3QgVG9nZ2xlZENhbGxT aXplKHVpbnQ4X3QqIGNvZGUpIHsgcmV0dXJuIDEwICogc2l6ZW9mKHVpbnQzMl90KTsgfQorKwor KyAgdm9pZCBjaGVja1N0YWNrQWxpZ25tZW50KCkge30KKysKKysgIHN0YXRpYyB2b2lkIGNhbGN1 bGF0ZUFsaWduZWRTdGFja1BvaW50ZXIodm9pZCoqIHN0YWNrUG9pbnRlcikgeworKyAgICAqc3Rh Y2tQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKHVpbnRwdHJfdCgqc3RhY2tQb2lu dGVyKSkgJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfihB QklTdGFja0FsaWdubWVudCAtIDEpKTsKKysgIH0KKysKKysgIHZvaWQgbGVhKE9wZXJhbmQgYWRk ciwgUmVnaXN0ZXIgZGVzdCkgeworKyAgICAvLyB4ODYtaXNtOyBvbiBQUEMsIGNvbXB1dGUgZWZm ZWN0aXZlIGFkZHJlc3MgbWFudWFsbHkuCisrICAgIE1PWl9DUkFTSCgiUFBDNjQ6IGxlYSBub3Qg c3VwcG9ydGVkOyB1c2UgY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MiKTsKKysgIH0KKysKKysgIHZv aWQgYWJpcmV0KCkgeyBhc19ibHIoKTsgfQorKworKyAgdm9pZCBwcm9maWxlckVudGVyRnJhbWUo UmVnaXN0ZXIgZnJhbWVQdHIsIFJlZ2lzdGVyIHNjcmF0Y2gpOworKyAgdm9pZCBwcm9maWxlckV4 aXRGcmFtZSgpOworKworKyAgdm9pZCBvdXRPZkxpbmVXYXNtVHJ1bmNhdGVUb0ludDMyQ2hlY2so CisrICAgICAgRmxvYXRSZWdpc3RlciBpbnB1dCwgUmVnaXN0ZXIgb3V0cHV0LCBNSVJUeXBlIGZy b21UeXBlLCBUcnVuY0ZsYWdzIGZsYWdzLAorKyAgICAgIExhYmVsKiByZWpvaW4sIGNvbnN0IHdh c206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjKTsKKysgIHZvaWQgb3V0T2ZMaW5lV2FzbVRy dW5jYXRlVG9JbnQ2NENoZWNrKAorKyAgICAgIEZsb2F0UmVnaXN0ZXIgaW5wdXQsIFJlZ2lzdGVy NjQgb3V0cHV0LCBNSVJUeXBlIGZyb21UeXBlLAorKyAgICAgIFRydW5jRmxhZ3MgZmxhZ3MsIExh YmVsKiByZWpvaW4sIGNvbnN0IHdhc206OlRyYXBTaXRlRGVzYyYgdHJhcFNpdGVEZXNjKTsKKysK KysgIHZvaWQgd2FzbUxvYWRJbXBsKGNvbnN0IHdhc206Ok1lbW9yeUFjY2Vzc0Rlc2MmIGFjY2Vz cywgUmVnaXN0ZXIgbWVtb3J5QmFzZSwKKysgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIHB0 ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCwgQW55UmVnaXN0ZXIgb3V0cHV0KTsKKysgIHZvaWQgd2Fz bVN0b3JlSW1wbChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsIEFueVJlZ2lz dGVyIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1lbW9yeUJhc2UsIFJl Z2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCk7CisrICB2b2lkIHdhc21Mb2FkSTY0SW1w bChjb25zdCB3YXNtOjpNZW1vcnlBY2Nlc3NEZXNjJiBhY2Nlc3MsCisrICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIsIFJlZ2lzdGVyIHB0clNj cmF0Y2gsCisrICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlcjY0IG91dHB1dCk7CisrICB2 b2lkIHdhc21TdG9yZUk2NEltcGwoY29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNz LCBSZWdpc3RlcjY0IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyIG1l bW9yeUJhc2UsIFJlZ2lzdGVyIHB0ciwgUmVnaXN0ZXIgcHRyU2NyYXRjaCk7CisrCisrICAvLyBM YXN0LWJ5dGUgcHJvYmluZyBsb2FkIHRvIGVuZm9yY2Ugd2FzbS1zcGVjIGF0b21pY2l0eSBmb3Ig bXVsdGktYnl0ZQorKyAgLy8gd2FzbSBhY2Nlc3NlcyBvbiBQT1dFUiBJU0EuIFBPV0VSIHBlcm1p dHMgdW5hbGlnbmVkIHBhZ2Utc3Bhbm5pbmcKKysgIC8vIGFjY2Vzc2VzIHRvIGNvbW1pdCBvbmUg aGFsZiBiZWZvcmUgdGhlIG90aGVyIGhhbGYgdGFrZXMgYSBEU0k7IHdhc20KKysgIC8vIHJlcXVp cmVzIGF0b21pY2l0eS4gVG91Y2hpbmcgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgdXBjb21pbmcgYWNj ZXNzCisrICAvLyB3aXRoIGEgMS1ieXRlIGxienggdHJpZ2dlcnMgU0lHU0VHViAo4oaSIHdhc20g dHJhcCB2aWEgdGhlIHNpZ25hbAorKyAgLy8gaGFuZGxlcikgYmVmb3JlIHRoZSBhY3R1YWwgYWNj ZXNzIGV4ZWN1dGVzIOKAlCBQT1dFUidzIHByZWNpc2UtCisrICAvLyBpbnRlcnJ1cHQgbW9kZWwg Z3VhcmFudGVlcyB0aGUgc3Vic2VxdWVudCBhY2Nlc3MgaXMgbmV2ZXIKKysgIC8vIGFyY2hpdGVj dHVyYWxseSBleGVjdXRlZCBpZiB0aGUgcHJvYmUgZmF1bHRzLgorKyAgLy8KKysgIC8vIFdhc20g bGluZWFyIG1lbW9yeSBpcyBvbmUgY29udGlndW91cyBtYXBwZWQgcmVnaW9uIGZvbGxvd2VkIGJ5 IGFuCisrICAvLyBtcHJvdGVjdCdkIGd1YXJkLCBzbyBsYXN0LWJ5dGUtbWFwcGVkIOKHkiBhbGwt Ynl0ZXMtbWFwcGVkLCBhbmQgYQorKyAgLy8gc2luZ2xlLWJ5dGUgcHJvYmUgaXMgc3VmZmljaWVu dCByZWdhcmRsZXNzIG9mIGFjY2VzcyBzaXplLgorKyAgLy8KKysgIC8vIE5vLW9wIHdoZW4gSGFz UE9XRVI5KCkgKHJlYWwgUE9XRVI5L1BPV0VSMTAgc2lsaWNvbiBoYW5kbGVzIHBhZ2UtCisrICAv LyBzcGFubmluZyB1bmFsaWduZWQgc3RvcmVzIGF0b21pY2FsbHkgYXQgdGhlIMK1YXJjaCBsZXZl bCksIGFuZCB3aGVuCisrICAvLyBhY2Nlc3Mgc2l6ZSBpcyAxLiBOZXZlciBjYWxsZWQgb24gdGhl IGF0b21pYyBwYXRoOiBhdG9taWMgb3BzIGFyZQorKyAgLy8gbmF0dXJhbGx5IGFsaWduZWQgcGVy IHdhc20gc3BlYyArIElTQS1lbmZvcmNlZCBsd2FyeCBhbGlnbm1lbnQsIHNvCisrICAvLyB0aGV5 IGNhbm5vdCBzcGFuIHBhZ2VzOyBtaXNhbGlnbmVkIGF0b21pY3MgdGFrZSBhIHByZWNpc2UgU0lH QlVTCisrICAvLyBiZWZvcmUgYW55IGNvbW1pdC4KKysgIC8vCisrICAvLyAyIGluc3RydWN0aW9u cyB3aGVuIGVtaXR0ZWQgKGFkZGkgKyBsYnp4KS4KKysgIHZvaWQgd2FzbVByb2JlTGFzdEJ5dGUo Y29uc3Qgd2FzbTo6TWVtb3J5QWNjZXNzRGVzYyYgYWNjZXNzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdpc3RlciBtZW1vcnlCYXNlLCBSZWdpc3RlciBwdHIpOworK307CisrCisrdHlw ZWRlZiBNYWNyb0Fzc2VtYmxlclBQQzY0Q29tcGF0IE1hY3JvQXNzZW1ibGVyU3BlY2lmaWM7Cisr CisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcworKworKyNlbmRpZiAv KiBqaXRfcHBjNjRfTWFjcm9Bc3NlbWJsZXJfcHBjNjRfaCAqLworZGlmZiAtLWdpdCBhL2pzL3Ny Yy9qaXQvcHBjNjQvTW92ZUVtaXR0ZXItcHBjNjQuY3BwIGIvanMvc3JjL2ppdC9wcGM2NC9Nb3Zl RW1pdHRlci1wcGM2NC5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAw MDAuLjk4OWQzZjYxZjEyMQorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9N b3ZlRW1pdHRlci1wcGM2NC5jcHAKK0BAIC0wLDAgKzEsMzU3IEBACisrLyogLSotIE1vZGU6IEMr KzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAy IC0qLQorKyAqIHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNv dXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVi bGljCisrICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRp c3RyaWJ1dGVkIHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRw Oi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovCisrCisrI2luY2x1ZGUgImppdC9wcGM2NC9Nb3Zl RW1pdHRlci1wcGM2NC5oIgorKworKyNpbmNsdWRlICJqaXQvTWFjcm9Bc3NlbWJsZXItaW5sLmgi CisrCisrdXNpbmcgbmFtZXNwYWNlIGpzOworK3VzaW5nIG5hbWVzcGFjZSBqczo6aml0OworKwor K3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6YnJlYWtDeWNsZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJv bSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW92ZU9wZXJhbmQm IHRvLCBNb3ZlT3A6OlR5cGUgdHlwZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3Qgc2xvdElkKSB7CisrICBzd2l0Y2ggKHR5cGUpIHsKKysgICAgY2FzZSBNb3Zl T3A6OkZMT0FUMzI6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFNjcmF0 Y2hGbG9hdDMyU2NvcGUgZnBzY3JhdGNoMzIobWFzbSk7CisrICAgICAgICBtYXNtLmxvYWRGbG9h dDMyKGdldEFkanVzdGVkQWRkcmVzcyh0byksIGZwc2NyYXRjaDMyKTsKKysgICAgICAgIG1hc20u c3RvcmVGbG9hdDMyKGZwc2NyYXRjaDMyLCBjeWNsZVNsb3Qoc2xvdElkKSk7CisrICAgICAgfSBl bHNlIHsKKysgICAgICAgIG1hc20uc3RvcmVGbG9hdDMyKHRvLmZsb2F0UmVnKCksIGN5Y2xlU2xv dChzbG90SWQpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9wOjpE T1VCTEU6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFNjcmF0Y2hEb3Vi bGVTY29wZSBmcHNjcmF0Y2g2NChtYXNtKTsKKysgICAgICAgIG1hc20ubG9hZERvdWJsZShnZXRB ZGp1c3RlZEFkZHJlc3ModG8pLCBmcHNjcmF0Y2g2NCk7CisrICAgICAgICBtYXNtLnN0b3JlRG91 YmxlKGZwc2NyYXRjaDY0LCBjeWNsZVNsb3Qoc2xvdElkKSk7CisrICAgICAgfSBlbHNlIHsKKysg ICAgICAgIG1hc20uc3RvcmVEb3VibGUodG8uZmxvYXRSZWcoKSwgY3ljbGVTbG90KHNsb3RJZCkp OworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBNb3ZlT3A6OklOVDMyOgorKyAg ICAgIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAgICAgICBVc2VTY3JhdGNoUmVnaXN0ZXJTY29w ZSB0ZW1wcyhtYXNtKTsKKysgICAgICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJl KCk7CisrICAgICAgICBtYXNtLmxvYWQzMihnZXRBZGp1c3RlZEFkZHJlc3ModG8pLCBzY3JhdGNo KTsKKysgICAgICAgIG1hc20uc3RvcmUzMihzY3JhdGNoLCBjeWNsZVNsb3QoMCkpOworKyAgICAg IH0gZWxzZSB7CisrICAgICAgICBtYXNtLnN0b3JlMzIodG8ucmVnKCksIGN5Y2xlU2xvdCgwKSk7 CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6R0VORVJBTDoKKysg ICAgICBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2Nv cGUgdGVtcHMobWFzbSk7CisrICAgICAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWly ZSgpOworKyAgICAgICAgbWFzbS5sb2FkUHRyKGdldEFkanVzdGVkQWRkcmVzcyh0byksIHNjcmF0 Y2gpOworKyAgICAgICAgbWFzbS5zdG9yZVB0cihzY3JhdGNoLCBjeWNsZVNsb3QoMCkpOworKyAg ICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLnN0b3JlUHRyKHRvLnJlZygpLCBjeWNsZVNsb3Qo MCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBNb3ZlT3A6OlNJTUQxMjg6 CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFNjcmF0Y2hTaW1kMTI4U2Nv cGUgc2NyYXRjaChtYXNtKTsKKysgICAgICAgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoZ2V0 QWRqdXN0ZWRBZGRyZXNzKHRvKSwgc2NyYXRjaCk7CisrICAgICAgICBtYXNtLnN0b3JlVW5hbGln bmVkU2ltZDEyOChzY3JhdGNoLCBjeWNsZVNsb3Qoc2xvdElkKSk7CisrICAgICAgfSBlbHNlIHsK KysgICAgICAgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4KHRvLmZsb2F0UmVnKCksIGN5Y2xl U2xvdChzbG90SWQpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6Cisr ICAgICAgTU9aX0NSQVNIKCJVbmV4cGVjdGVkIG1vdmUgdHlwZSIpOworKyAgfQorK30KKysKKyt2 b2lkIE1vdmVFbWl0dGVyUFBDNjQ6OmNvbXBsZXRlQ3ljbGUoY29uc3QgTW92ZU9wZXJhbmQmIGZy b20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1vdmVPcGVy YW5kJiB0bywgTW92ZU9wOjpUeXBlIHR5cGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IHNsb3RJZCkgeworKyAgc3dpdGNoICh0eXBlKSB7CisrICAgIGNh c2UgTW92ZU9wOjpGTE9BVDMyOgorKyAgICAgIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAgICAg ICBTY3JhdGNoRmxvYXQzMlNjb3BlIGZwc2NyYXRjaDMyKG1hc20pOworKyAgICAgICAgbWFzbS5s b2FkRmxvYXQzMihjeWNsZVNsb3Qoc2xvdElkKSwgZnBzY3JhdGNoMzIpOworKyAgICAgICAgbWFz bS5zdG9yZUZsb2F0MzIoZnBzY3JhdGNoMzIsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOworKyAg ICAgIH0gZWxzZSB7CisrICAgICAgICBtYXNtLmxvYWRGbG9hdDMyKGN5Y2xlU2xvdChzbG90SWQp LCB0by5mbG9hdFJlZygpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92 ZU9wOjpET1VCTEU6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFNjcmF0 Y2hEb3VibGVTY29wZSBmcHNjcmF0Y2g2NChtYXNtKTsKKysgICAgICAgIG1hc20ubG9hZERvdWJs ZShjeWNsZVNsb3Qoc2xvdElkKSwgZnBzY3JhdGNoNjQpOworKyAgICAgICAgbWFzbS5zdG9yZURv dWJsZShmcHNjcmF0Y2g2NCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgICAgfSBlbHNl IHsKKysgICAgICAgIG1hc20ubG9hZERvdWJsZShjeWNsZVNsb3Qoc2xvdElkKSwgdG8uZmxvYXRS ZWcoKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6SU5UMzI6 CisrICAgICAgTU9aX0FTU0VSVChzbG90SWQgPT0gMCk7CisrICAgICAgaWYgKHRvLmlzTWVtb3J5 KCkpIHsKKysgICAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAg ICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICAgIG1hc20u bG9hZDMyKGN5Y2xlU2xvdCgwKSwgc2NyYXRjaCk7CisrICAgICAgICBtYXNtLnN0b3JlMzIoc2Ny YXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IG1hc20ubG9hZDMyKGN5Y2xlU2xvdCgwKSwgdG8ucmVnKCkpOworKyAgICAgIH0KKysgICAgICBi cmVhazsKKysgICAgY2FzZSBNb3ZlT3A6OkdFTkVSQUw6CisrICAgICAgTU9aX0FTU0VSVChzbG90 SWQgPT0gMCk7CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFVzZVNjcmF0 Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgICAgUmVnaXN0ZXIgc2NyYXRjaCA9 IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICAgIG1hc20ubG9hZFB0cihjeWNsZVNsb3QoMCksIHNj cmF0Y2gpOworKyAgICAgICAgbWFzbS5zdG9yZVB0cihzY3JhdGNoLCBnZXRBZGp1c3RlZEFkZHJl c3ModG8pKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgbWFzbS5sb2FkUHRyKGN5Y2xlU2xv dCgwKSwgdG8ucmVnKCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgY2FzZSBNb3Zl T3A6OlNJTUQxMjg6CisrICAgICAgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICAgIFNjcmF0 Y2hTaW1kMTI4U2NvcGUgc2NyYXRjaChtYXNtKTsKKysgICAgICAgIG1hc20ubG9hZFVuYWxpZ25l ZFNpbWQxMjgoY3ljbGVTbG90KHNsb3RJZCksIHNjcmF0Y2gpOworKyAgICAgICAgbWFzbS5zdG9y ZVVuYWxpZ25lZFNpbWQxMjgoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAg ICAgfSBlbHNlIHsKKysgICAgICAgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoY3ljbGVTbG90 KHNsb3RJZCksIHRvLmZsb2F0UmVnKCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAg ZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgbW92ZSB0eXBlIik7CisrICB9 CisrfQorKworK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6ZW1pdChjb25zdCBNb3ZlUmVzb2x2ZXIm IG1vdmVzKSB7CisrICBpZiAobW92ZXMubnVtQ3ljbGVzKCkpIHsKKysgICAgLy8gU3BpbGxTbG90 U2l6ZSBtdXN0IGJlIHdpZGUgZW5vdWdoIGZvciB0aGUgd2lkZXN0IGN5Y2xlZCB2YWx1ZQorKyAg ICAvLyAoU0lNRDEyOCA9IDE2IGJ5dGVzKS4gVGhlIHN0cmlkZSBiZWxvdyBhc3N1bWVzIHRoZSBz YW1lLiBTZWUKKysgICAgLy8gQXJjaGl0ZWN0dXJlLXBwYzY0LmggZm9yIHRoZSByYXRpb25hbGUu CisrICAgIHN0YXRpY19hc3NlcnQoU3BpbGxTbG90U2l6ZSA9PSAxNik7CisrICAgIG1hc20ucmVz ZXJ2ZVN0YWNrKG1vdmVzLm51bUN5Y2xlcygpICogU3BpbGxTbG90U2l6ZSk7CisrICAgIHB1c2hl ZEF0Q3ljbGVfID0gbWFzbS5mcmFtZVB1c2hlZCgpOworKyAgfQorKworKyAgZm9yIChzaXplX3Qg aSA9IDA7IGkgPCBtb3Zlcy5udW1Nb3ZlcygpOyBpKyspIHsKKysgICAgZW1pdChtb3Zlcy5nZXRN b3ZlKGkpKTsKKysgIH0KKyt9CisrCisrQWRkcmVzcyBNb3ZlRW1pdHRlclBQQzY0OjpjeWNsZVNs b3QodWludDMyX3Qgc2xvdCwgdWludDMyX3Qgc3Vic2xvdCkgY29uc3QgeworKyAgaW50MzJfdCBv ZmZzZXQgPSBtYXNtLmZyYW1lUHVzaGVkKCkgLSBwdXNoZWRBdEN5Y2xlXzsKKysgIC8vIFN0cmlk ZSBtdXN0IG1hdGNoIHRoZSBwZXItY3ljbGUgcmVzZXJ2YXRpb24gaW4gZW1pdCgpOyB1c2luZyBh CisrICAvLyBuYXJyb3dlciBzdHJpZGUgY2F1c2VzIGFkamFjZW50IFNJTUQxMjggc2xvdHMgdG8g b3ZlcmxhcC4KKysgIHJldHVybiBBZGRyZXNzKFN0YWNrUG9pbnRlciwgb2Zmc2V0ICsgc2xvdCAq IFNwaWxsU2xvdFNpemUgKyBzdWJzbG90KTsKKyt9CisrCisraW50MzJfdCBNb3ZlRW1pdHRlclBQ QzY0OjpnZXRBZGp1c3RlZE9mZnNldChjb25zdCBNb3ZlT3BlcmFuZCYgb3BlcmFuZCkgeworKyAg TU9aX0FTU0VSVChvcGVyYW5kLmlzTWVtb3J5T3JFZmZlY3RpdmVBZGRyZXNzKCkpOworKyAgaWYg KG9wZXJhbmQuYmFzZSgpICE9IFN0YWNrUG9pbnRlcikgeworKyAgICByZXR1cm4gb3BlcmFuZC5k aXNwKCk7CisrICB9CisrCisrICByZXR1cm4gb3BlcmFuZC5kaXNwKCkgKyBtYXNtLmZyYW1lUHVz aGVkKCkgLSBwdXNoZWRBdFN0YXJ0XzsKKyt9CisrCisrQWRkcmVzcyBNb3ZlRW1pdHRlclBQQzY0 OjpnZXRBZGp1c3RlZEFkZHJlc3MoY29uc3QgTW92ZU9wZXJhbmQmIG9wZXJhbmQpIHsKKysgIHJl dHVybiBBZGRyZXNzKG9wZXJhbmQuYmFzZSgpLCBnZXRBZGp1c3RlZE9mZnNldChvcGVyYW5kKSk7 CisrfQorKworK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6ZW1pdE1vdmUoY29uc3QgTW92ZU9wZXJh bmQmIGZyb20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3Bl cmFuZCYgdG8pIHsKKysgIGlmIChmcm9tLmlzR2VuZXJhbFJlZygpKSB7CisrICAgIGlmICh0by5p c0dlbmVyYWxSZWcoKSkgeworKyAgICAgIG1hc20ubW92ZVB0cihmcm9tLnJlZygpLCB0by5yZWco KSk7CisrICAgIH0gZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgIG1hc20uc3RvcmVQ dHIoZnJvbS5yZWcoKSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0gZWxzZSB7Cisr ICAgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKKysgICAgfQor KyAgfSBlbHNlIGlmIChmcm9tLmlzTWVtb3J5KCkpIHsKKysgICAgaWYgKHRvLmlzR2VuZXJhbFJl ZygpKSB7CisrICAgICAgbWFzbS5sb2FkUHRyKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgdG8u cmVnKCkpOworKyAgICB9IGVsc2UgaWYgKHRvLmlzTWVtb3J5KCkpIHsKKysgICAgICBVc2VTY3Jh dGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgICBSZWdpc3RlciBzY3JhdGNoID0g dGVtcHMuQWNxdWlyZSgpOworKyAgICAgIG1hc20ubG9hZFB0cihnZXRBZGp1c3RlZEFkZHJlc3Mo ZnJvbSksIHNjcmF0Y2gpOworKyAgICAgIG1hc20uc3RvcmVQdHIoc2NyYXRjaCwgZ2V0QWRqdXN0 ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0NSQVNIKCJJbnZhbGlk IGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKKysgICAgfQorKyAgfSBlbHNlIGlmIChmcm9tLmlzRWZm ZWN0aXZlQWRkcmVzcygpKSB7CisrICAgIGlmICh0by5pc0dlbmVyYWxSZWcoKSkgeworKyAgICAg IG1hc20uY29tcHV0ZUVmZmVjdGl2ZUFkZHJlc3MoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0 by5yZWcoKSk7CisrICAgIH0gZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgeworKyAgICAgIFVzZVNj cmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgIFJlZ2lzdGVyIHNjcmF0Y2gg PSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhn ZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHNjcmF0Y2gpOworKyAgICAgIG1hc20uc3RvcmVQdHIo c2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAg TU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKKysgICAgfQorKyAgfSBl bHNlIHsKKysgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRNb3ZlIGFyZ3VtZW50cy4iKTsKKysg IH0KKyt9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0SW50MzJNb3ZlKGNvbnN0IE1v dmVPcGVyYW5kJiBmcm9tLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsKKysgIGlmIChmcm9tLmlzR2VuZXJhbFJlZygpKSB7Cisr ICAgIGlmICh0by5pc0dlbmVyYWxSZWcoKSkgeworKyAgICAgIG1hc20ubW92ZTMyKGZyb20ucmVn KCksIHRvLnJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgpKSB7CisrICAgICAg bWFzbS5zdG9yZTMyKGZyb20ucmVnKCksIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOworKyAgICB9 IGVsc2UgeworKyAgICAgIE1PWl9DUkFTSCgiSW52YWxpZCBlbWl0SW50MzJNb3ZlIGFyZ3VtZW50 cy4iKTsKKysgICAgfQorKyAgfSBlbHNlIGlmIChmcm9tLmlzTWVtb3J5KCkpIHsKKysgICAgaWYg KHRvLmlzR2VuZXJhbFJlZygpKSB7CisrICAgICAgbWFzbS5sb2FkMzIoZ2V0QWRqdXN0ZWRBZGRy ZXNzKGZyb20pLCB0by5yZWcoKSk7CisrICAgIH0gZWxzZSBpZiAodG8uaXNNZW1vcnkoKSkgewor KyAgICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOworKyAgICAgIFJlZ2lz dGVyIHNjcmF0Y2ggPSB0ZW1wcy5BY3F1aXJlKCk7CisrICAgICAgbWFzbS5sb2FkMzIoZ2V0QWRq dXN0ZWRBZGRyZXNzKGZyb20pLCBzY3JhdGNoKTsKKysgICAgICBtYXNtLnN0b3JlMzIoc2NyYXRj aCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgTU9aX0NS QVNIKCJJbnZhbGlkIGVtaXRJbnQzMk1vdmUgYXJndW1lbnRzLiIpOworKyAgICB9CisrICB9IGVs c2UgaWYgKGZyb20uaXNFZmZlY3RpdmVBZGRyZXNzKCkpIHsKKysgICAgaWYgKHRvLmlzR2VuZXJh bFJlZygpKSB7CisrICAgICAgbWFzbS5jb21wdXRlRWZmZWN0aXZlQWRkcmVzcyhnZXRBZGp1c3Rl ZEFkZHJlc3MoZnJvbSksIHRvLnJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc01lbW9yeSgp KSB7CisrICAgICAgVXNlU2NyYXRjaFJlZ2lzdGVyU2NvcGUgdGVtcHMobWFzbSk7CisrICAgICAg UmVnaXN0ZXIgc2NyYXRjaCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgICBtYXNtLmNvbXB1dGVF ZmZlY3RpdmVBZGRyZXNzKGdldEFkanVzdGVkQWRkcmVzcyhmcm9tKSwgc2NyYXRjaCk7CisrICAg ICAgbWFzbS5zdG9yZTMyKHNjcmF0Y2gsIGdldEFkanVzdGVkQWRkcmVzcyh0bykpOworKyAgICB9 IGVsc2UgeworKyAgICAgIE1PWl9DUkFTSCgiSW52YWxpZCBlbWl0SW50MzJNb3ZlIGFyZ3VtZW50 cy4iKTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgTU9aX0NSQVNIKCJJbnZhbGlkIGVtaXRJ bnQzMk1vdmUgYXJndW1lbnRzLiIpOworKyAgfQorK30KKysKKyt2b2lkIE1vdmVFbWl0dGVyUFBD NjQ6OmVtaXRGbG9hdDMyTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pIHsKKysg IGlmIChmcm9tLmlzRmxvYXRSZWcoKSkgeworKyAgICBpZiAodG8uaXNGbG9hdFJlZygpKSB7Cisr ICAgICAgbWFzbS5tb3ZlRmxvYXQzMihmcm9tLmZsb2F0UmVnKCksIHRvLmZsb2F0UmVnKCkpOwor KyAgICB9IGVsc2UgeworKyAgICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7CisrICAgICAg bWFzbS5zdG9yZUZsb2F0MzIoZnJvbS5mbG9hdFJlZygpLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8p KTsKKysgICAgfQorKyAgfSBlbHNlIGlmICh0by5pc0Zsb2F0UmVnKCkpIHsKKysgICAgTU9aX0FT U0VSVChmcm9tLmlzTWVtb3J5KCkpOworKyAgICBtYXNtLmxvYWRGbG9hdDMyKGdldEFkanVzdGVk QWRkcmVzcyhmcm9tKSwgdG8uZmxvYXRSZWcoKSk7CisrICB9IGVsc2UgeworKyAgICBNT1pfQVNT RVJUKGZyb20uaXNNZW1vcnkoKSk7CisrICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7Cisr ICAgIFNjcmF0Y2hGbG9hdDMyU2NvcGUgZnBzY3JhdGNoMzIobWFzbSk7CisrICAgIG1hc20ubG9h ZEZsb2F0MzIoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCBmcHNjcmF0Y2gzMik7CisrICAgIG1h c20uc3RvcmVGbG9hdDMyKGZwc2NyYXRjaDMyLCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysg IH0KKyt9CisrCisrdm9pZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0RG91YmxlTW92ZShjb25zdCBN b3ZlT3BlcmFuZCYgZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IE1vdmVPcGVyYW5kJiB0bykgeworKyAgaWYgKGZyb20uaXNGbG9hdFJlZygpKSB7Cisr ICAgIGlmICh0by5pc0Zsb2F0UmVnKCkpIHsKKysgICAgICBtYXNtLm1vdmVEb3VibGUoZnJvbS5m bG9hdFJlZygpLCB0by5mbG9hdFJlZygpKTsKKysgICAgfSBlbHNlIGlmICh0by5pc0dlbmVyYWxS ZWcoKSkgeworKyAgICAgIC8vIEZQUiAtPiBHUFI6IHVzZSBtZnZzcmQgZGlyZWN0bHkuCisrICAg ICAgbWFzbS5hc19tZnZzcmQodG8ucmVnKCksIGZyb20uZmxvYXRSZWcoKSk7CisrICAgIH0gZWxz ZSB7CisrICAgICAgTU9aX0FTU0VSVCh0by5pc01lbW9yeSgpKTsKKysgICAgICBtYXNtLnN0b3Jl RG91YmxlKGZyb20uZmxvYXRSZWcoKSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0K KysgIH0gZWxzZSBpZiAodG8uaXNGbG9hdFJlZygpKSB7CisrICAgIGlmIChmcm9tLmlzTWVtb3J5 KCkpIHsKKysgICAgICBtYXNtLmxvYWREb3VibGUoZ2V0QWRqdXN0ZWRBZGRyZXNzKGZyb20pLCB0 by5mbG9hdFJlZygpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAvLyBHUFIgLT4gRlBSOiB1c2Ug bXR2c3JkIGRpcmVjdGx5LgorKyAgICAgIG1hc20uYXNfbXR2c3JkKHRvLmZsb2F0UmVnKCksIGZy b20ucmVnKCkpOworKyAgICB9CisrICB9IGVsc2UgeworKyAgICBNT1pfQVNTRVJUKGZyb20uaXNN ZW1vcnkoKSk7CisrICAgIE1PWl9BU1NFUlQodG8uaXNNZW1vcnkoKSk7CisrICAgIFNjcmF0Y2hE b3VibGVTY29wZSBmcHNjcmF0Y2g2NChtYXNtKTsKKysgICAgbWFzbS5sb2FkRG91YmxlKGdldEFk anVzdGVkQWRkcmVzcyhmcm9tKSwgZnBzY3JhdGNoNjQpOworKyAgICBtYXNtLnN0b3JlRG91Ymxl KGZwc2NyYXRjaDY0LCBnZXRBZGp1c3RlZEFkZHJlc3ModG8pKTsKKysgIH0KKyt9CisrCisrdm9p ZCBNb3ZlRW1pdHRlclBQQzY0OjplbWl0U2ltZDEyOE1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZy b20sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTW92ZU9w ZXJhbmQmIHRvKSB7CisrICBpZiAoZnJvbS5pc0Zsb2F0UmVnKCkpIHsKKysgICAgaWYgKHRvLmlz RmxvYXRSZWcoKSkgeworKyAgICAgIG1hc20ubW92ZVNpbWQxMjgoZnJvbS5mbG9hdFJlZygpLCB0 by5mbG9hdFJlZygpKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBNT1pfQVNTRVJUKHRvLmlzTWVt b3J5KCkpOworKyAgICAgIG1hc20uc3RvcmVVbmFsaWduZWRTaW1kMTI4KGZyb20uZmxvYXRSZWco KSwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICAgIH0KKysgIH0gZWxzZSBpZiAodG8uaXNG bG9hdFJlZygpKSB7CisrICAgIE1PWl9BU1NFUlQoZnJvbS5pc01lbW9yeSgpKTsKKysgICAgbWFz bS5sb2FkVW5hbGlnbmVkU2ltZDEyOChnZXRBZGp1c3RlZEFkZHJlc3MoZnJvbSksIHRvLmZsb2F0 UmVnKCkpOworKyAgfSBlbHNlIHsKKysgICAgTU9aX0FTU0VSVChmcm9tLmlzTWVtb3J5KCkpOwor KyAgICBNT1pfQVNTRVJUKHRvLmlzTWVtb3J5KCkpOworKyAgICBTY3JhdGNoU2ltZDEyOFNjb3Bl IHNjcmF0Y2gobWFzbSk7CisrICAgIG1hc20ubG9hZFVuYWxpZ25lZFNpbWQxMjgoZ2V0QWRqdXN0 ZWRBZGRyZXNzKGZyb20pLCBzY3JhdGNoKTsKKysgICAgbWFzbS5zdG9yZVVuYWxpZ25lZFNpbWQx Mjgoc2NyYXRjaCwgZ2V0QWRqdXN0ZWRBZGRyZXNzKHRvKSk7CisrICB9CisrfQorKworK3ZvaWQg TW92ZUVtaXR0ZXJQUEM2NDo6ZW1pdChjb25zdCBNb3ZlT3AmIG1vdmUpIHsKKysgIGNvbnN0IE1v dmVPcGVyYW5kJiBmcm9tID0gbW92ZS5mcm9tKCk7CisrICBjb25zdCBNb3ZlT3BlcmFuZCYgdG8g PSBtb3ZlLnRvKCk7CisrCisrICBpZiAobW92ZS5pc0N5Y2xlRW5kKCkgJiYgbW92ZS5pc0N5Y2xl QmVnaW4oKSkgeworKyAgICBicmVha0N5Y2xlKGZyb20sIHRvLCBtb3ZlLmVuZEN5Y2xlVHlwZSgp LCBtb3ZlLmN5Y2xlQmVnaW5TbG90KCkpOworKyAgICBjb21wbGV0ZUN5Y2xlKGZyb20sIHRvLCBt b3ZlLnR5cGUoKSwgbW92ZS5jeWNsZUVuZFNsb3QoKSk7CisrICAgIHJldHVybjsKKysgIH0KKysK KysgIGlmIChtb3ZlLmlzQ3ljbGVFbmQoKSkgeworKyAgICBNT1pfQVNTRVJUKGluQ3ljbGVfKTsK KysgICAgY29tcGxldGVDeWNsZShmcm9tLCB0bywgbW92ZS50eXBlKCksIG1vdmUuY3ljbGVFbmRT bG90KCkpOworKyAgICBNT1pfQVNTRVJUKGluQ3ljbGVfID4gMCk7CisrICAgIGluQ3ljbGVfLS07 CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGlmIChtb3ZlLmlzQ3ljbGVCZWdpbigpKSB7Cisr ICAgIGJyZWFrQ3ljbGUoZnJvbSwgdG8sIG1vdmUuZW5kQ3ljbGVUeXBlKCksIG1vdmUuY3ljbGVC ZWdpblNsb3QoKSk7CisrICAgIGluQ3ljbGVfKys7CisrICB9CisrCisrICBzd2l0Y2ggKG1vdmUu dHlwZSgpKSB7CisrICAgIGNhc2UgTW92ZU9wOjpGTE9BVDMyOgorKyAgICAgIGVtaXRGbG9hdDMy TW92ZShmcm9tLCB0byk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9wOjpET1VCTEU6 CisrICAgICAgZW1pdERvdWJsZU1vdmUoZnJvbSwgdG8pOworKyAgICAgIGJyZWFrOworKyAgICBj YXNlIE1vdmVPcDo6U0lNRDEyODoKKysgICAgICBlbWl0U2ltZDEyOE1vdmUoZnJvbSwgdG8pOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIE1vdmVPcDo6SU5UMzI6CisrICAgICAgZW1pdEludDMy TW92ZShmcm9tLCB0byk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgTW92ZU9wOjpHRU5FUkFM OgorKyAgICAgIGVtaXRNb3ZlKGZyb20sIHRvKTsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVs dDoKKysgICAgICBNT1pfQ1JBU0goIlVuZXhwZWN0ZWQgbW92ZSB0eXBlIik7CisrICB9CisrfQor KworK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6YXNzZXJ0RG9uZSgpIHsgTU9aX0FTU0VSVChpbkN5 Y2xlXyA9PSAwKTsgfQorKworK3ZvaWQgTW92ZUVtaXR0ZXJQUEM2NDo6ZmluaXNoKCkgeworKyAg YXNzZXJ0RG9uZSgpOworKworKyAgbWFzbS5mcmVlU3RhY2sobWFzbS5mcmFtZVB1c2hlZCgpIC0g cHVzaGVkQXRTdGFydF8pOworK30KK2RpZmYgLS1naXQgYS9qcy9zcmMvaml0L3BwYzY0L01vdmVF bWl0dGVyLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L01vdmVFbWl0dGVyLXBwYzY0LmgKK25l dyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLmE5ZmFhMzRkZTZiYgorLS0t IC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9Nb3ZlRW1pdHRlci1wcGM2NC5oCitA QCAtMCwwICsxLDY0IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQt dGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAqIHZpbTogc2V0IHRzPTgg c3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVj dCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICogTGljZW5zZSwgdi4gMi4w LiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworKyAq IGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8u ICovCisrCisrI2lmbmRlZiBqaXRfcHBjNjRfTW92ZUVtaXR0ZXJfcHBjNjRfaAorKyNkZWZpbmUg aml0X3BwYzY0X01vdmVFbWl0dGVyX3BwYzY0X2gKKysKKysjaW5jbHVkZSAiaml0L01hY3JvQXNz ZW1ibGVyLmgiCisrI2luY2x1ZGUgImppdC9Nb3ZlUmVzb2x2ZXIuaCIKKysKKytuYW1lc3BhY2Ug anMgeworK25hbWVzcGFjZSBqaXQgeworKworK2NsYXNzIE1vdmVFbWl0dGVyUFBDNjQgeworKyAg dm9pZCBlbWl0RG91YmxlTW92ZShjb25zdCBNb3ZlT3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9w ZXJhbmQmIHRvKTsKKysgIHZvaWQgZW1pdFNpbWQxMjhNb3ZlKGNvbnN0IE1vdmVPcGVyYW5kJiBm cm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8pOworKyAgdm9pZCBicmVha0N5Y2xlKGNvbnN0IE1v dmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8sCisrICAgICAgICAgICAgICAg ICAgTW92ZU9wOjpUeXBlIHR5cGUsIHVpbnQzMl90IHNsb3QpOworKyAgdm9pZCBjb21wbGV0ZUN5 Y2xlKGNvbnN0IE1vdmVPcGVyYW5kJiBmcm9tLCBjb25zdCBNb3ZlT3BlcmFuZCYgdG8sCisrICAg ICAgICAgICAgICAgICAgICAgTW92ZU9wOjpUeXBlIHR5cGUsIHVpbnQzMl90IHNsb3QpOworKwor KyBwcm90ZWN0ZWQ6CisrICB1aW50MzJfdCBpbkN5Y2xlXzsKKysgIE1hY3JvQXNzZW1ibGVyJiBt YXNtOworKworKyAgdWludDMyX3QgcHVzaGVkQXRTdGFydF87CisrCisrICBpbnQzMl90IHB1c2hl ZEF0Q3ljbGVfOworKworKyAgdm9pZCBhc3NlcnREb25lKCk7CisrICBBZGRyZXNzIGN5Y2xlU2xv dCh1aW50MzJfdCBzbG90LCB1aW50MzJfdCBzdWJzbG90ID0gMCkgY29uc3Q7CisrICBpbnQzMl90 IGdldEFkanVzdGVkT2Zmc2V0KGNvbnN0IE1vdmVPcGVyYW5kJiBvcGVyYW5kKTsKKysgIEFkZHJl c3MgZ2V0QWRqdXN0ZWRBZGRyZXNzKGNvbnN0IE1vdmVPcGVyYW5kJiBvcGVyYW5kKTsKKysKKysg IHZvaWQgZW1pdE1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNvbnN0IE1vdmVPcGVyYW5k JiB0byk7CisrICB2b2lkIGVtaXRJbnQzMk1vdmUoY29uc3QgTW92ZU9wZXJhbmQmIGZyb20sIGNv bnN0IE1vdmVPcGVyYW5kJiB0byk7CisrICB2b2lkIGVtaXRGbG9hdDMyTW92ZShjb25zdCBNb3Zl T3BlcmFuZCYgZnJvbSwgY29uc3QgTW92ZU9wZXJhbmQmIHRvKTsKKysgIHZvaWQgZW1pdChjb25z dCBNb3ZlT3AmIG1vdmUpOworKworKyBwdWJsaWM6CisrICBleHBsaWNpdCBNb3ZlRW1pdHRlclBQ QzY0KE1hY3JvQXNzZW1ibGVyJiBtYXNtKQorKyAgICAgIDogaW5DeWNsZV8oMCksCisrICAgICAg ICBtYXNtKG1hc20pLAorKyAgICAgICAgcHVzaGVkQXRTdGFydF8obWFzbS5mcmFtZVB1c2hlZCgp KSwKKysgICAgICAgIHB1c2hlZEF0Q3ljbGVfKC0xKSB7fQorKworKyAgfk1vdmVFbWl0dGVyUFBD NjQoKSB7IGFzc2VydERvbmUoKTsgfQorKworKyAgdm9pZCBlbWl0KGNvbnN0IE1vdmVSZXNvbHZl ciYgbW92ZXMpOworKyAgdm9pZCBmaW5pc2goKTsKKysgIC8vIHNldFNjcmF0Y2hSZWdpc3RlciBp cyBwYXJ0IG9mIHRoZSBjcm9zcy1hcmNoIE1vdmVFbWl0dGVyIGludGVyZmFjZQorKyAgLy8gYnV0 IHdlIG5ldmVyIHNwaWxsLCBzbyB0aGVyZSdzIG5vIHNjcmF0Y2ggdG8gc2V0LiBOby1vcCBrZXB0 IGZvcgorKyAgLy8gc2hhcmVkLWNvZGUgY29tcGF0aWJpbGl0eS4KKysgIHZvaWQgc2V0U2NyYXRj aFJlZ2lzdGVyKFJlZ2lzdGVyIHJlZykge30KKyt9OworKworK3R5cGVkZWYgTW92ZUVtaXR0ZXJQ UEM2NCBNb3ZlRW1pdHRlcjsKKysKKyt9ICAvLyBuYW1lc3BhY2Ugaml0CisrfSAgLy8gbmFtZXNw YWNlIGpzCisrCisrI2VuZGlmIC8qIGppdF9wcGM2NF9Nb3ZlRW1pdHRlcl9wcGM2NF9oICovCitk aWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQtaW5sLmgg Yi9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaAorbmV3IGZpbGUg bW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMC4uYWE4NzRkZmQ2NzMyCistLS0gL2Rldi9u dWxsCisrKysgYi9qcy9zcmMvaml0L3BwYzY0L1NoYXJlZElDSGVscGVycy1wcGM2NC1pbmwuaAor QEAgLTAsMCArMSw4MyBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50 LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04 IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIu MC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysg KiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAv LiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9pbmxfaAor KyNkZWZpbmUgaml0X3BwYzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9pbmxfaAorKworKyNpbmNs dWRlICJqaXQvQmFzZWxpbmVGcmFtZS5oIgorKyNpbmNsdWRlICJqaXQvU2hhcmVkSUNIZWxwZXJz LmgiCisrCisrI2luY2x1ZGUgImppdC9NYWNyb0Fzc2VtYmxlci1pbmwuaCIKKysKKytuYW1lc3Bh Y2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworK2lubGluZSB2b2lkIEVtaXRCYXNlbGluZVRh aWxDYWxsVk0oVHJhbXBvbGluZVB0ciB0YXJnZXQsIE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgYXJnU2l6ZSkgeworKyNp ZmRlZiBERUJVRworKyAgUmVnaXN0ZXIgc2NyYXRjaCA9IFIyLnNjcmF0Y2hSZWcoKTsKKysKKysg IC8vIENvbXB1dGUgZnJhbWUgc2l6ZS4KKysgIG1hc20ubW92ZVB0cihGcmFtZVBvaW50ZXIsIHNj cmF0Y2gpOworKyAgbWFzbS5zdWJQdHIoU3RhY2tQb2ludGVyLCBzY3JhdGNoKTsKKysKKysgIC8v IFN0b3JlIGZyYW1lIHNpemUgd2l0aG91dCBWTUZ1bmN0aW9uIGFyZ3VtZW50cyBmb3IgZGVidWcg YXNzZXJ0aW9ucy4KKysgIG1hc20uc3ViUHRyKEltbTMyKGFyZ1NpemUpLCBzY3JhdGNoKTsKKysg IEFkZHJlc3MgZnJhbWVTaXplQWRkcihGcmFtZVBvaW50ZXIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgQmFzZWxpbmVGcmFtZTo6cmV2ZXJzZU9mZnNldE9mRGVidWdGcmFtZVNpemUoKSk7Cisr ICBtYXNtLnN0b3JlMzIoc2NyYXRjaCwgZnJhbWVTaXplQWRkcik7CisrICBtYXNtLmFkZFB0cihJ bW0zMihhcmdTaXplKSwgc2NyYXRjaCk7CisrI2VuZGlmCisrCisrICAvLyBQdXNoIGZyYW1lIGRl c2NyaXB0b3IgYW5kIHBlcmZvcm0gdGhlIHRhaWwgY2FsbC4KKysgIG1hc20ucHVzaChGcmFtZURl c2NyaXB0b3IoRnJhbWVUeXBlOjpCYXNlbGluZUpTKSk7CisrCisrICAvLyBUaGUgcmV0dXJuIGFk ZHJlc3MgaXMgaW4gTFIgKHNldCBieSB0aGUgb3JpZ2luYWwgYmwvYmN0cmwgY2FsbCkuCisrICAv LyBUaGUgVk1XcmFwcGVyIGNvZGUgd2lsbCBwdXNoIGl0IHZpYSBwdXNoUmV0dXJuQWRkcmVzcygp LgorKworKyAgbWFzbS5qdW1wKHRhcmdldCk7CisrfQorKworK2lubGluZSB2b2lkIEVtaXRCYXNl bGluZUNhbGxWTShUcmFtcG9saW5lUHRyIHRhcmdldCwgTWFjcm9Bc3NlbWJsZXImIG1hc20pIHsK KysgIG1hc20ucHVzaChGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBlOjpCYXNlbGluZVN0dWIpKTsK KysgIG1hc20uY2FsbCh0YXJnZXQpOworK30KKysKKytpbmxpbmUgdm9pZCBFbWl0QmFzZWxpbmVF bnRlclN0dWJGcmFtZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnaXN0ZXIgc2NyYXRjaCkgewor KyAgTU9aX0FTU0VSVChzY3JhdGNoICE9IElDVGFpbENhbGxSZWcpOworKworKyNpZmRlZiBERUJV RworKyAgLy8gQ29tcHV0ZSBmcmFtZSBzaXplLgorKyAgbWFzbS5tb3ZlUHRyKEZyYW1lUG9pbnRl ciwgc2NyYXRjaCk7CisrICBtYXNtLnN1YlB0cihTdGFja1BvaW50ZXIsIHNjcmF0Y2gpOworKwor KyAgQWRkcmVzcyBmcmFtZVNpemVBZGRyKEZyYW1lUG9pbnRlciwKKysgICAgICAgICAgICAgICAg ICAgICAgICBCYXNlbGluZUZyYW1lOjpyZXZlcnNlT2Zmc2V0T2ZEZWJ1Z0ZyYW1lU2l6ZSgpKTsK KysgIG1hc20uc3RvcmUzMihzY3JhdGNoLCBmcmFtZVNpemVBZGRyKTsKKysjZW5kaWYKKysKKysg IC8vIE5vdGU6IHdoZW4gbWFraW5nIGNoYW5nZXMgaGVyZSwgZG9uJ3QgZm9yZ2V0IHRvIHVwZGF0 ZQorKyAgLy8gQmFzZWxpbmVTdHViRnJhbWUgaWYgbmVlZGVkLgorKworKyAgLy8gUHVzaCBmcmFt ZSBkZXNjcmlwdG9yIGFuZCByZXR1cm4gYWRkcmVzcy4KKysgIC8vIExSIGhvbGRzIHRoZSByZXR1 cm4gYWRkcmVzczsgcmVhZCBpdCBpbnRvIElDVGFpbENhbGxSZWcgdG8gcHVzaC4KKysgIG1hc20u UHVzaChGcmFtZURlc2NyaXB0b3IoRnJhbWVUeXBlOjpCYXNlbGluZUpTKSk7CisrICBtYXNtLnhz X21mbHIoSUNUYWlsQ2FsbFJlZyk7CisrICBtYXNtLlB1c2goSUNUYWlsQ2FsbFJlZyk7CisrCisr ICAvLyBTYXZlIG9sZCBmcmFtZSBwb2ludGVyLCBzdGFjayBwb2ludGVyIGFuZCBzdHViIHJlZy4K KysgIG1hc20uUHVzaChGcmFtZVBvaW50ZXIpOworKyAgbWFzbS5tb3ZlUHRyKFN0YWNrUG9pbnRl ciwgRnJhbWVQb2ludGVyKTsKKysgIG1hc20uUHVzaChJQ1N0dWJSZWcpOworKworKyAgLy8gU3Rh Y2sgc2hvdWxkIHJlbWFpbiBhbGlnbmVkLgorKyAgbWFzbS5hc3NlcnRTdGFja0FsaWdubWVudChz aXplb2YoVmFsdWUpLCAwKTsKKyt9CisrCisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5h bWVzcGFjZSBqcworKworKyNlbmRpZiAvKiBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0 X2lubF9oICovCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMt cHBjNjQuaCBiL2pzL3NyYy9qaXQvcHBjNjQvU2hhcmVkSUNIZWxwZXJzLXBwYzY0LmgKK25ldyBm aWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLjMxYmE4MzBkMjYwOQorLS0tIC9k ZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQuaAor QEAgLTAsMCArMSw5NyBAQAorKy8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50 LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04 IHN0cz0yIGV0IHN3PTIgdHc9ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIu MC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysg KiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAv LiAqLworKworKyNpZm5kZWYgaml0X3BwYzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9oCisrI2Rl ZmluZSBqaXRfcHBjNjRfU2hhcmVkSUNIZWxwZXJzX3BwYzY0X2gKKysKKysjaW5jbHVkZSAiaml0 L0Jhc2VsaW5lSUMuaCIKKysjaW5jbHVkZSAiaml0L0ppdEZyYW1lcy5oIgorKyNpbmNsdWRlICJq aXQvTWFjcm9Bc3NlbWJsZXIuaCIKKysjaW5jbHVkZSAiaml0L1NoYXJlZElDUmVnaXN0ZXJzLmgi CisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysKKysvLyBEaXN0YW5jZSBm cm9tIHNwIHRvIHRoZSB0b3AgVmFsdWUgaW5zaWRlIGFuIElDIHN0dWIgKG5vIHJldHVybiBhZGRy ZXNzIG9uCisrLy8gdGhlIHN0YWNrIG9uIFBQQzY0KS4KKytzdGF0aWMgY29uc3Qgc2l6ZV90IElD U3RhY2tWYWx1ZU9mZnNldCA9IDA7CisrCisrc3RydWN0IEJhc2VsaW5lU3R1YkZyYW1lIHsKKysg IHVpbnRwdHJfdCBzYXZlZEZyYW1lOworKyAgdWludHB0cl90IHNhdmVkU3R1YjsKKysgIHVpbnRw dHJfdCByZXR1cm5BZGRyZXNzOworKyAgdWludHB0cl90IGRlc2NyaXB0b3I7CisrfTsKKysKKytp bmxpbmUgdm9pZCBFbWl0UmVzdG9yZVRhaWxDYWxsUmVnKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7 CisrICAvLyBPbiBQUEM2NCwgTFIgYWx3YXlzIGhvbGRzIHRoZSByZXR1cm4gYWRkcmVzcyBhZnRl ciBhIGJsL2JjdHJsIGNhbGwuCisrICAvLyBOby1vcDogTFIgaXMgdGhlIGhhcmR3YXJlIGxpbmsg cmVnaXN0ZXIsIG5vdCBhIEdQUiBvbiB0aGUgc3RhY2suCisrfQorKworK2lubGluZSB2b2lkIEVt aXRSZXB1c2hUYWlsQ2FsbFJlZyhNYWNyb0Fzc2VtYmxlciYgbWFzbSkgeworKyAgLy8gTm8tb3A6 IExSIGFscmVhZHkgaG9sZHMgdGhlIHJldHVybiBhZGRyZXNzLgorK30KKysKKytpbmxpbmUgdm9p ZCBFbWl0Q2FsbElDKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBDb2RlT2Zmc2V0KiBjYWxsT2Zmc2V0 KSB7CisrICAvLyBUaGUgc3R1YiBwb2ludGVyIG11c3QgYWxyZWFkeSBiZSBpbiBJQ1N0dWJSZWcu CisrICAvLyBMb2FkIHN0dWJjb2RlIHBvaW50ZXIgZnJvbSB0aGUgSUNTdHViLgorKyAgLy8gUjIg d29uJ3QgYmUgYWN0aXZlIHdoZW4gd2UgY2FsbCBJQ3MsIHNvIHdlIGNhbiB1c2UgaXQgYXMgc2Ny YXRjaC4KKysgIG1hc20ubG9hZFB0cihBZGRyZXNzKElDU3R1YlJlZywgSUNTdHViOjpvZmZzZXRP ZlN0dWJDb2RlKCkpLCBSMi5zY3JhdGNoUmVnKCkpOworKworKyAgLy8gQ2FsbCB0aGUgc3R1YmNv ZGUuIE9uIFBQQzY0IGNhbGwoUmVnaXN0ZXIpIGVtaXRzIG10Y3RyICsgYmN0cmwsCisrICAvLyB3 aGljaCBzZXRzIExSIHRvIHRoZSBhZGRyZXNzIGFmdGVyIGJjdHJsLgorKyAgbWFzbS5jYWxsKFIy LnNjcmF0Y2hSZWcoKSk7CisrICAqY2FsbE9mZnNldCA9IENvZGVPZmZzZXQobWFzbS5jdXJyZW50 T2Zmc2V0KCkpOworK30KKysKKytpbmxpbmUgdm9pZCBFbWl0UmV0dXJuRnJvbUlDKE1hY3JvQXNz ZW1ibGVyJiBtYXNtKSB7CisrICAvLyBSZXR1cm4gdmlhIGhhcmR3YXJlIExSIChzZXQgYnkgdGhl IG9yaWdpbmFsIGJsL2JjdHJsIGNhbGwpLgorKyAgbWFzbS5hc19ibHIoKTsKKyt9CisrCisraW5s aW5lIHZvaWQgRW1pdEJhc2VsaW5lTGVhdmVTdHViRnJhbWUoTWFjcm9Bc3NlbWJsZXImIG1hc20p IHsKKysgIG1hc20ubG9hZFB0cigKKysgICAgICBBZGRyZXNzKEZyYW1lUG9pbnRlciwgQmFzZWxp bmVTdHViRnJhbWVMYXlvdXQ6OklDU3R1Yk9mZnNldEZyb21GUCksCisrICAgICAgSUNTdHViUmVn KTsKKysKKysgIG1hc20ubW92ZVB0cihGcmFtZVBvaW50ZXIsIFN0YWNrUG9pbnRlcik7CisrICBt YXNtLlBvcChGcmFtZVBvaW50ZXIpOworKworKyAgLy8gTG9hZCB0aGUgcmV0dXJuIGFkZHJlc3Mg YW5kIHJlc3RvcmUgaXQgdG8gTFIuCisrICBtYXNtLlBvcChJQ1RhaWxDYWxsUmVnKTsKKysgIG1h c20ueHNfbXRscihJQ1RhaWxDYWxsUmVnKTsKKysKKysgIC8vIERpc2NhcmQgdGhlIGZyYW1lIGRl c2NyaXB0b3IuCisrICB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20p OworKyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtYXNtLlBv cChzY3JhdGNoKTsKKysgIH0KKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIEFkZHJUeXBlPgor K2lubGluZSB2b2lkIEVtaXRQcmVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBjb25zdCBB ZGRyVHlwZSYgYWRkciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBNSVJUeXBlIHR5cGUp IHsKKysgIC8vIE9uIFBQQzY0LCBMUiBpcyBjbG9iYmVyZWQgYnkgZ3VhcmRlZENhbGxQcmVCYXJy aWVyLiBTYXZlIGl0IGZpcnN0LgorKyAgbWFzbS54c19tZmxyKHIwKTsKKysgIG1hc20ucHVzaChy MCk7CisrICBtYXNtLmd1YXJkZWRDYWxsUHJlQmFycmllcihhZGRyLCB0eXBlKTsKKysgIG1hc20u cG9wKHIwKTsKKysgIG1hc20ueHNfbXRscihyMCk7CisrfQorKworK2lubGluZSB2b2lkIEVtaXRT dHViR3VhcmRGYWlsdXJlKE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7CisrICAvLyBMb2FkIG5leHQg c3R1YiBpbnRvIElDU3R1YlJlZy4KKysgIG1hc20ubG9hZFB0cihBZGRyZXNzKElDU3R1YlJlZywg SUNDYWNoZUlSU3R1Yjo6b2Zmc2V0T2ZOZXh0KCkpLCBJQ1N0dWJSZWcpOworKworKyAgLy8gUmV0 dXJuIGFkZHJlc3MgaXMgaW4gTFIuIEp1bXAgdG8gdGhlIG5leHQgc3R1YmNvZGUuCisrICBtYXNt Lmp1bXAoQWRkcmVzcyhJQ1N0dWJSZWcsIElDU3R1Yjo6b2Zmc2V0T2ZTdHViQ29kZSgpKSk7Cisr fQorKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysjZW5k aWYgLyogaml0X3BwYzY0X1NoYXJlZElDSGVscGVyc19wcGM2NF9oICovCitkaWZmIC0tZ2l0IGEv anMvc3JjL2ppdC9wcGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oIGIvanMvc3JjL2ppdC9w cGM2NC9TaGFyZWRJQ1JlZ2lzdGVycy1wcGM2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5k ZXggMDAwMDAwMDAwMDAwLi5kZGY2NzM0MmY4NTUKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3Ny Yy9qaXQvcHBjNjQvU2hhcmVkSUNSZWdpc3RlcnMtcHBjNjQuaAorQEAgLTAsMCArMSw0NiBAQAor Ky8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBj LWJhc2ljLW9mZnNldDogMiAtKi0KKysgKiB2aW06IHNldCB0cz04IHN0cz0yIGV0IHN3PTIgdHc9 ODA6CisrICogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9m IHRoZSBNb3ppbGxhIFB1YmxpYworKyAqIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRo ZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKysgKiBmaWxlLCBZb3UgY2FuIG9i dGFpbiBvbmUgYXQgaHR0cDovL21vemlsbGEub3JnL01QTC8yLjAvLiAqLworKworKyNpZm5kZWYg aml0X3BwYzY0X1NoYXJlZElDUmVnaXN0ZXJzX3BwYzY0X2gKKysjZGVmaW5lIGppdF9wcGM2NF9T aGFyZWRJQ1JlZ2lzdGVyc19wcGM2NF9oCisrCisrI2luY2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJs ZXItcHBjNjQuaCIKKysjaW5jbHVkZSAiaml0L1JlZ2lzdGVycy5oIgorKyNpbmNsdWRlICJqaXQv UmVnaXN0ZXJTZXRzLmgiCisrCisrbmFtZXNwYWNlIGpzIHsKKytuYW1lc3BhY2Ugaml0IHsKKysK KysvLyBWYWx1ZU9wZXJhbmRzIFIwLCBSMSwgYW5kIFIyLgorKy8vIFIwID09IEpTUmV0dXJuUmVn LCBhbmQgUjIgdXNlcyByZWdpc3RlcnMgbm90IHByZXNlcnZlZCBhY3Jvc3MgY2FsbHMuIFIxIHZh bHVlCisrLy8gc2hvdWxkIGJlIHByZXNlcnZlZCBhY3Jvc3MgY2FsbHMuCisrc3RhdGljIGNvbnN0 ZXhwciBWYWx1ZU9wZXJhbmQgUjAocjUpOworK3N0YXRpYyBjb25zdGV4cHIgVmFsdWVPcGVyYW5k IFIxKHIxNSk7Cisrc3RhdGljIGNvbnN0ZXhwciBWYWx1ZU9wZXJhbmQgUjIocjQpOworKworKy8v IElDVGFpbENhbGxSZWcgYW5kIElDU3R1YlJlZy4KKysvLyBPbiBQUEM2NCwgTFIgaXMgbm90IGEg R1BSLCBzbyBJQ1RhaWxDYWxsUmVnIG11c3QgYmUgYSBub3JtYWwgR1BSLgorKy8vIFBQQzY0IEVM RnYyIGhhcyBubyB2b2xhdGlsZSBub24tYXJnIEdQUnMgKHIzLXIxMCBhcmUgYWxsIGFyZyByZWdz KSwgc28KKysvLyB1c2luZyBhbiBhcmcgcmVnaXN0ZXIgcmlza3MgY2xvYmJlcmluZyBieSBBQkkg Y2FsbHMgd2l0aCBlbm91Z2ggYXJndW1lbnRzLgorKy8vIFdlIHVzZSBjYWxsZWUtc2F2ZWQgcmVn aXN0ZXJzIGluc3RlYWQsIG1hdGNoaW5nIE1JUFM2NC9SSVNDLVYgc3RyYXRlZ3kuCisrLy8gVGhl c2UgYXJlIGV4Y2x1ZGVkIGZyb20gQmFzZWxpbmVJQ0F2YWlsYWJsZUdlbmVyYWxSZWdzLgorK3N0 YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgSUNUYWlsQ2FsbFJlZyA9IHIyNzsKKytzdGF0aWMgY29u c3RleHByIFJlZ2lzdGVyIElDU3R1YlJlZyA9IHIyNjsKKysKKysvLyBGbG9hdFJlZzAgbXVzdCBi ZSBlcXVhbCB0byBSZXR1cm5GbG9hdFJlZy4KKytzdGF0aWMgY29uc3RleHByIEZsb2F0UmVnaXN0 ZXIgRmxvYXRSZWcwID0ge0Zsb2F0UmVnaXN0ZXJzOjpmMSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpEb3VibGV9OworK3N0YXRp YyBjb25zdGV4cHIgRmxvYXRSZWdpc3RlciBGbG9hdFJlZzEgPSB7RmxvYXRSZWdpc3RlcnM6OmYy LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWdp c3RlcnM6OkRvdWJsZX07Cisrc3RhdGljIGNvbnN0ZXhwciBGbG9hdFJlZ2lzdGVyIEZsb2F0UmVn MiA9IHtGbG9hdFJlZ2lzdGVyczo6ZjMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGbG9hdFJlZ2lzdGVyczo6RG91YmxlfTsKKytzdGF0aWMgY29uc3RleHBy IEZsb2F0UmVnaXN0ZXIgRmxvYXRSZWczID0ge0Zsb2F0UmVnaXN0ZXJzOjpmNCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpEb3Vi bGV9OworKworK30gIC8vIG5hbWVzcGFjZSBqaXQKKyt9ICAvLyBuYW1lc3BhY2UganMKKysKKysj ZW5kaWYgLyogaml0X3BwYzY0X1NoYXJlZElDUmVnaXN0ZXJzX3BwYzY0X2ggKi8KK2RpZmYgLS1n aXQgYS9qcy9zcmMvaml0L3BwYzY0L1NpbXVsYXRvci1wcGM2NC5jcHAgYi9qcy9zcmMvaml0L3Bw YzY0L1NpbXVsYXRvci1wcGM2NC5jcHAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAw MDAwMDAwMDAuLjhiMjllYjNhZGQwNAorLS0tIC9kZXYvbnVsbAorKysrIGIvanMvc3JjL2ppdC9w cGM2NC9TaW11bGF0b3ItcHBjNjQuY3BwCitAQCAtMCwwICsxLDcyOTYgQEAKKysvKiAtKi0gTW9k ZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZz ZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9MiBldCBzdz0yIHR3PTgwOgorKyAqIFRo aXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxs YSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBu b3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0 IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8KKysKKysjaW5jbHVkZSAiaml0L3BwYzY0 L1NpbXVsYXRvci1wcGM2NC5oIgorKworKyNpbmNsdWRlIDxjaW50dHlwZXM+CisrI2luY2x1ZGUg PGNtYXRoPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxmbG9hdC5oPgorKyNpbmNs dWRlIDxsaW1pdHM+CisrCisrI2luY2x1ZGUgImppdC9BdG9taWNPcGVyYXRpb25zLmgiCisrI2lu Y2x1ZGUgImppdC9wcGM2NC9Bc3NlbWJsZXItcHBjNjQuaCIKKysjaW5jbHVkZSAianMvQ29udmVy c2lvbnMuaCIKKysjaW5jbHVkZSAidGhyZWFkaW5nL0xvY2tHdWFyZC5oIgorKyNpbmNsdWRlICJ2 bS9GbG9hdDE2LmgiCisrI2luY2x1ZGUgInZtL0pTQ29udGV4dC5oIgorKyNpbmNsdWRlICJ2bS9S dW50aW1lLmgiCisrI2luY2x1ZGUgIndhc20vV2FzbUluc3RhbmNlLmgiCisrI2luY2x1ZGUgIndh c20vV2FzbVNpZ25hbEhhbmRsZXJzLmgiCisrCisrI2RlZmluZSBJOCh2KSBzdGF0aWNfY2FzdDxp bnQ4X3Q+KHYpCisrI2RlZmluZSBJMTYodikgc3RhdGljX2Nhc3Q8aW50MTZfdD4odikKKysjZGVm aW5lIFUxNih2KSBzdGF0aWNfY2FzdDx1aW50MTZfdD4odikKKysjZGVmaW5lIEkzMih2KSBzdGF0 aWNfY2FzdDxpbnQzMl90Pih2KQorKyNkZWZpbmUgVTMyKHYpIHN0YXRpY19jYXN0PHVpbnQzMl90 Pih2KQorKyNkZWZpbmUgSTY0KHYpIHN0YXRpY19jYXN0PGludDY0X3Q+KHYpCisrI2RlZmluZSBV NjQodikgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHYpCisrI2RlZmluZSBJMTI4KHYpIHN0YXRpY19j YXN0PF9faW50MTI4X3Q+KHYpCisrI2RlZmluZSBVMTI4KHYpIHN0YXRpY19jYXN0PF9fdWludDEy OF90Pih2KQorKworK25hbWVzcGFjZSBqcyB7CisrbmFtZXNwYWNlIGppdCB7CisrCisrc3RhdGlj IGludDY0X3QgTXVsdGlwbHlIaWdoU2lnbmVkKGludDY0X3QgdSwgaW50NjRfdCB2KSB7CisrICB1 aW50NjRfdCB1MCwgdjAsIHcwOworKyAgaW50NjRfdCB1MSwgdjEsIHcxLCB3MiwgdDsKKysKKysg IHUwID0gdSAmIDB4RkZGRkZGRkZMOworKyAgdTEgPSB1ID4+IDMyOworKyAgdjAgPSB2ICYgMHhG RkZGRkZGRkw7CisrICB2MSA9IHYgPj4gMzI7CisrCisrICB3MCA9IHUwICogdjA7CisrICB0ID0g dTEgKiB2MCArICh3MCA+PiAzMik7CisrICB3MSA9IHQgJiAweEZGRkZGRkZGTDsKKysgIHcyID0g dCA+PiAzMjsKKysgIHcxID0gdTAgKiB2MSArIHcxOworKworKyAgcmV0dXJuIHUxICogdjEgKyB3 MiArICh3MSA+PiAzMik7CisrfQorKworK3N0YXRpYyB1aW50NjRfdCBNdWx0aXBseUhpZ2hVbnNp Z25lZCh1aW50NjRfdCB1LCB1aW50NjRfdCB2KSB7CisrICB1aW50NjRfdCB1MCwgdjAsIHcwOwor KyAgdWludDY0X3QgdTEsIHYxLCB3MSwgdzIsIHQ7CisrCisrICB1MCA9IHUgJiAweEZGRkZGRkZG TDsKKysgIHUxID0gdSA+PiAzMjsKKysgIHYwID0gdiAmIDB4RkZGRkZGRkZMOworKyAgdjEgPSB2 ID4+IDMyOworKworKyAgdzAgPSB1MCAqIHYwOworKyAgdCA9IHUxICogdjAgKyAodzAgPj4gMzIp OworKyAgdzEgPSB0ICYgMHhGRkZGRkZGRkw7CisrICB3MiA9IHQgPj4gMzI7CisrICB3MSA9IHUw ICogdjEgKyB3MTsKKysKKysgIHJldHVybiB1MSAqIHYxICsgdzIgKyAodzEgPj4gMzIpOworK30K KysKKytpbmxpbmUgY29uc3RleHByIHVpbnQzMl90IFJvdGF0ZUxlZnQzMih1aW50MzJfdCB2YWx1 ZSwgdWludDMyX3Qgc2hpZnQpIHsKKysgIHJldHVybiAodmFsdWUgPDwgc2hpZnQpIHwgKHZhbHVl ID4+ICgoMzIgLSBzaGlmdCkgJiAzMSkpOworK30KKysKKytpbmxpbmUgY29uc3RleHByIHVpbnQ2 NF90IFJvdGF0ZUxlZnQ2NCh1aW50NjRfdCB2YWx1ZSwgdWludDY0X3Qgc2hpZnQpIHsKKysgIHJl dHVybiAodmFsdWUgPDwgc2hpZnQpIHwgKHZhbHVlID4+ICgoNjQgLSBzaGlmdCkgJiA2MykpOwor K30KKysKKysvLyBHZW5lcmF0ZSBhIDY0LWJpdCBtYXNrIHdpdGggYml0cyBtYi4ubWUgc2V0IChQ UEMgbnVtYmVyaW5nOiAwID0gTVNCID0gYml0CisrLy8gNjMgaW4gQykuICBXaGVuIG1iIDw9IG1l LCBhIGNvbnRpZ3VvdXMgcmFuZ2UgaXMgc2V0OyB3aGVuIG1iID4gbWUsIHRoZQorKy8vIG1hc2sg d3JhcHMgYXJvdW5kIChiaXRzIDAuLm1lIGFuZCBtYi4uNjMgYXJlIHNldCkuCisrc3RhdGljIGlu bGluZSB1aW50NjRfdCBNQVNLNjQodW5zaWduZWQgbWIsIHVuc2lnbmVkIG1lKSB7CisrICBNT1pf QVNTRVJUKG1iIDwgNjQgJiYgbWUgPCA2NCk7CisrICB1aW50NjRfdCBtYXNrX2JlZ2luID0gfjBV TEwgPj4gbWI7CisrICB1aW50NjRfdCBtYXNrX2VuZCA9IH4wVUxMIDw8ICg2MyAtIG1lKTsKKysg IGlmIChtYiA8PSBtZSkgeworKyAgICByZXR1cm4gbWFza19iZWdpbiAmIG1hc2tfZW5kOworKyAg fQorKyAgcmV0dXJuIG1hc2tfYmVnaW4gfCBtYXNrX2VuZDsKKyt9CisrCisrc3RhdGljIGlubGlu ZSB1aW50MzJfdCBNQVNLMzIodW5zaWduZWQgbWIsIHVuc2lnbmVkIG1lKSB7CisrICBNT1pfQVNT RVJUKG1iIDwgMzIgJiYgbWUgPCAzMik7CisrICB1aW50MzJfdCBtYXNrX2JlZ2luID0gfjBVID4+ IG1iOworKyAgdWludDMyX3QgbWFza19lbmQgPSB+MFUgPDwgKDMxIC0gbWUpOworKyAgaWYgKG1i IDw9IG1lKSB7CisrICAgIHJldHVybiBtYXNrX2JlZ2luICYgbWFza19lbmQ7CisrICB9CisrICBy ZXR1cm4gbWFza19iZWdpbiB8IG1hc2tfZW5kOworK30KKysKKysvLyBDb3VudCBsZWFkaW5nIHpl cm9zLgorK3N0YXRpYyBpbmxpbmUgaW50IENvdW50TGVhZGluZ1plcm9zNjQodWludDY0X3QgdmFs dWUpIHsKKysgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gNjQ7CisrICByZXR1cm4gX19idWlsdGlu X2NsemxsKHZhbHVlKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQgQ291bnRMZWFkaW5nWmVy b3MzMih1aW50MzJfdCB2YWx1ZSkgeworKyAgaWYgKHZhbHVlID09IDApIHJldHVybiAzMjsKKysg IHJldHVybiBfX2J1aWx0aW5fY2x6KHZhbHVlKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQg Q291bnRUcmFpbGluZ1plcm9zNjQodWludDY0X3QgdmFsdWUpIHsKKysgIGlmICh2YWx1ZSA9PSAw KSByZXR1cm4gNjQ7CisrICByZXR1cm4gX19idWlsdGluX2N0emxsKHZhbHVlKTsKKyt9CisrCisr c3RhdGljIGlubGluZSBpbnQgQ291bnRUcmFpbGluZ1plcm9zMzIodWludDMyX3QgdmFsdWUpIHsK KysgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gMzI7CisrICByZXR1cm4gX19idWlsdGluX2N0eih2 YWx1ZSk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50IFBvcENvdW50NjQodWludDY0X3QgdmFs dWUpIHsKKysgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnRsbCh2YWx1ZSk7CisrfQorKworK3N0 YXRpYyBpbmxpbmUgaW50IFBvcENvdW50MzIodWludDMyX3QgdmFsdWUpIHsKKysgIHJldHVybiBf X2J1aWx0aW5fcG9wY291bnQodmFsdWUpOworK30KKysKKytzdGF0aWMgaW5saW5lIHVpbnQ2NF90 IFBvcENvdW50UGVyQnl0ZSh1aW50NjRfdCB2YWx1ZSkgeworKyAgdWludDY0X3QgcmVzdWx0ID0g MDsKKysgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgIHVpbnQ4X3QgYnl0ZSA9 ICh2YWx1ZSA+PiAoaSAqIDgpKSAmIDB4RkY7CisrICAgIHJlc3VsdCB8PSAodWludDY0X3QpX19i dWlsdGluX3BvcGNvdW50KGJ5dGUpIDw8IChpICogOCk7CisrICB9CisrICByZXR1cm4gcmVzdWx0 OworK30KKysKKysvLyBQUEM2NCBDIGFyZ3VtZW50IHNsb3RzOiBQUEM2NCBFTEZ2MiBBQkkgZG9l cyBub3QgcmVxdWlyZSBDIGFyZ3VtZW50CisrLy8gc2xvdHMgb24gdGhlIHN0YWNrIGZvciByZWdp c3Rlci1wYXNzZWQgYXJndW1lbnRzLCBidXQgd2UgcmVzZXJ2ZSB0aGUKKysvLyBsaW5rIGFyZWEg KDMyIGJ5dGVzKS4KKytjb25zdCBpbnQga0NBcmdTbG90Q291bnQgPSAwOworK2NvbnN0IGludCBr Q0FyZ3NTbG90c1NpemUgPSBrQ0FyZ1Nsb3RDb3VudCAqIHNpemVvZih1aW50cHRyX3QpOworKwor Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gUFBDNjQgU2ltSW5zdHJ1Y3Rpb24uCisrCisr Y2xhc3MgU2ltSW5zdHJ1Y3Rpb24geworKyBwdWJsaWM6CisrICBlbnVtIHsKKysgICAga0luc3Ry U2l6ZSA9IDQsCisrICAgIGtQQ1JlYWRPZmZzZXQgPSAwCisrICB9OworKworKyAgaW5saW5lIElu c3RyIGluc3RydWN0aW9uQml0cygpIGNvbnN0IHsKKysgICAgcmV0dXJuICpyZWludGVycHJldF9j YXN0PGNvbnN0IEluc3RyKj4odGhpcyk7CisrICB9CisrCisrICBpbmxpbmUgdm9pZCBzZXRJbnN0 cnVjdGlvbkJpdHMoSW5zdHIgdmFsdWUpIHsKKysgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8SW5zdHIq Pih0aGlzKSA9IHZhbHVlOworKyAgfQorKworKyAgaW5saW5lIGludCBiaXQoaW50IG5yKSBjb25z dCB7IHJldHVybiAoaW5zdHJ1Y3Rpb25CaXRzKCkgPj4gbnIpICYgMTsgfQorKworKyAgaW5saW5l IHVpbnQzMl90IGJpdHMoaW50IGhpLCBpbnQgbG8pIGNvbnN0IHsKKysgICAgcmV0dXJuIChpbnN0 cnVjdGlvbkJpdHMoKSA+PiBsbykgJiAoKDJVIDw8IChoaSAtIGxvKSkgLSAxKTsKKysgIH0KKysK KysgIGlubGluZSB1aW50MzJfdCBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBiaXRzKDMxLCAyNik7 IH0KKysKKysgIGlubGluZSB1aW50MzJfdCBydFZhbHVlKCkgY29uc3QgeyByZXR1cm4gYml0cygy NSwgMjEpOyB9CisrICBpbmxpbmUgdWludDMyX3QgcnNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJp dHMoMjUsIDIxKTsgfQorKyAgaW5saW5lIHVpbnQzMl90IHJhVmFsdWUoKSBjb25zdCB7IHJldHVy biBiaXRzKDIwLCAxNik7IH0KKysgIGlubGluZSB1aW50MzJfdCByYlZhbHVlKCkgY29uc3QgeyBy ZXR1cm4gYml0cygxNSwgMTEpOyB9CisrICBpbmxpbmUgdWludDMyX3QgcmNWYWx1ZSgpIGNvbnN0 IHsgcmV0dXJuIGJpdHMoMTAsIDYpOyB9CisrCisrICBpbmxpbmUgdWludDMyX3QgYm9WYWx1ZSgp IGNvbnN0IHsgcmV0dXJuIGJpdHMoMjUsIDIxKTsgfQorKyAgaW5saW5lIHVpbnQzMl90IGJpVmFs dWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDIwLCAxNik7IH0KKysKKysgIC8vIEQtZm9ybSAxNi1i aXQgaW1tZWRpYXRlIChzaWduLWV4dGVuZCB0byBnZXQgc2lnbmVkIHZhbHVlKS4KKysgIGlubGlu ZSBpbnQxNl90IGltbTE2VmFsdWUoKSBjb25zdCB7IHJldHVybiBJMTYoYml0cygxNSwgMCkpOyB9 CisrICBpbmxpbmUgdWludDE2X3QgdWltbTE2VmFsdWUoKSBjb25zdCB7IHJldHVybiBVMTYoYml0 cygxNSwgMCkpOyB9CisrCisrICAvLyBEUy1mb3JtIDE0LWJpdCBkaXNwbGFjZW1lbnQgKGJpdHMg Mi4uMTUsIDQtYnl0ZSBhbGlnbmVkKS4KKysgIGlubGluZSBpbnQxNl90IGRzMTRWYWx1ZSgpIGNv bnN0IHsKKysgICAgcmV0dXJuIEkxNihiaXRzKDE1LCAyKSA8PCAyKTsKKysgIH0KKysKKysgIC8v IEItZm9ybSAxNC1iaXQgYnJhbmNoIGRpc3BsYWNlbWVudCAoYml0cyAyLi4xNSwgNC1ieXRlIGFs aWduZWQpLgorKyAgaW5saW5lIGludDMyX3QgYmQxNlZhbHVlKCkgY29uc3QgeworKyAgICBpbnQx Nl90IHJhdyA9IEkxNihiaXRzKDE1LCAyKSA8PCAyKTsKKysgICAgcmV0dXJuIChpbnQzMl90KXJh dzsKKysgIH0KKysKKysgIC8vIEktZm9ybSAyNC1iaXQgYnJhbmNoIG9mZnNldCAoYml0cyAyLi4y NSwgc2lnbi1leHRlbmRlZCwgNC1ieXRlIGFsaWduZWQpLgorKyAgaW5saW5lIGludDMyX3QgbGky NlZhbHVlKCkgY29uc3QgeworKyAgICBpbnQzMl90IHJhdyA9IEkzMihiaXRzKDI1LCAyKSA8PCAy KTsKKysgICAgLy8gU2lnbi1leHRlbmQgZnJvbSAyNiBiaXRzLgorKyAgICByZXR1cm4gKHJhdyA8 PCA2KSA+PiA2OworKyAgfQorKworKyAgLy8gRXh0ZW5kZWQgb3Bjb2RlIGZvciBYLWZvcm0gLyBY Ty1mb3JtIChiaXRzIDEuLjEwKS4KKysgIGlubGluZSB1aW50MzJfdCB4b1ZhbHVlKCkgY29uc3Qg eyByZXR1cm4gYml0cygxMCwgMSk7IH0KKysKKysgIC8vIEV4dGVuZGVkIG9wY29kZSBmb3IgWEwt Zm9ybSAoYml0cyAxLi4xMCkuCisrICBpbmxpbmUgdWludDMyX3QgeGxWYWx1ZSgpIGNvbnN0IHsg cmV0dXJuIGJpdHMoMTAsIDEpOyB9CisrCisrICAvLyBNRC1mb3JtIFNIIGZpZWxkOiBzaFswOjRd IGluIGluc3RydWN0aW9uIGJpdHMgMTU6MTEsIHNoWzVdIGluIGJpdCAxLgorKyAgLy8gQXNzZW1i bGVyIGVuY29kZXM6ICgoc2ggJiAweDFmKSA8PCAxMSkgfCAoKHNoICYgMHgyMCkgPj4gNCkuCisr ICBpbmxpbmUgdWludDMyX3QgbWRTSFZhbHVlKCkgY29uc3QgeworKyAgICByZXR1cm4gYml0cygx NSwgMTEpIHwgKGJpdCgxKSA8PCA1KTsKKysgIH0KKysgIC8vIG1iL21lIGZvciBNRC1mb3JtIChy bGRpY2wvcmxkaWNyL3JsZGljL3JsZGltaSk6IDYtYml0IGZpZWxkIHNwbGl0IGFzCisrICAvLyBt YlswOjRdIGluIGluc3RydWN0aW9uIGJpdHMgMTA6NiBhbmQgbWJbNV0gaW4gYml0IDUuCisrICBp bmxpbmUgdWludDMyX3QgbWRNQlZhbHVlKCkgY29uc3QgeworKyAgICByZXR1cm4gYml0cygxMCwg NikgfCAoYml0KDUpIDw8IDUpOworKyAgfQorKyAgaW5saW5lIHVpbnQzMl90IG1kTUVWYWx1ZSgp IGNvbnN0IHsgcmV0dXJuIG1kTUJWYWx1ZSgpOyB9CisrCisrICAvLyBNRC1mb3JtIFhPIChiaXRz IDIuLjQpLgorKyAgaW5saW5lIHVpbnQzMl90IG1kWE9WYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJp dHMoNCwgMik7IH0KKysKKysgIC8vIE1EUy1mb3JtIChybGRjbCwgcmxkY3IpOiBtYlswOjRdIGlu IGJpdHMgMTA6NiwgbWJbNV0gaW4gYml0IDUuCisrICBpbmxpbmUgdWludDMyX3QgbWRzTUJWYWx1 ZSgpIGNvbnN0IHsKKysgICAgcmV0dXJuIGJpdHMoMTAsIDYpIHwgKGJpdCg1KSA8PCA1KTsKKysg IH0KKysKKysgIC8vIE0tZm9ybSBmaWVsZHMgKDMyLWJpdCByb3RhdGUvbWFzaykuCisrICBpbmxp bmUgdWludDMyX3QgbVNIVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDE1LCAxMSk7IH0KKysg IGlubGluZSB1aW50MzJfdCBtTUJWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHMoMTAsIDYpOyB9 CisrICBpbmxpbmUgdWludDMyX3QgbU1FVmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDUsIDEp OyB9CisrCisrICAvLyBSYyBiaXQuCisrICBpbmxpbmUgYm9vbCByY0JpdCgpIGNvbnN0IHsgcmV0 dXJuIGJpdCgwKTsgfQorKworKyAgLy8gQUEgYml0IGZvciBicmFuY2ggaW5zdHJ1Y3Rpb25zLgor KyAgaW5saW5lIGJvb2wgYWFCaXQoKSBjb25zdCB7IHJldHVybiBiaXQoMSk7IH0KKysKKysgIC8v IExLIGJpdCBmb3IgYnJhbmNoIGluc3RydWN0aW9ucy4KKysgIGlubGluZSBib29sIGxrQml0KCkg Y29uc3QgeyByZXR1cm4gYml0KDApOyB9CisrCisrICAvLyBPRSBiaXQgZm9yIFhPLWZvcm0gYXJp dGhtZXRpYy4KKysgIGlubGluZSBib29sIG9lQml0KCkgY29uc3QgeyByZXR1cm4gYml0KDEwKTsg fQorKworKyAgLy8gTCBiaXQgZm9yIGNvbXBhcmUgaW5zdHJ1Y3Rpb25zIChiaXQgMjEpLgorKyAg aW5saW5lIGJvb2wgbEJpdCgpIGNvbnN0IHsgcmV0dXJuIGJpdCgyMSk7IH0KKysKKysgIC8vIEJG IGZpZWxkIChiaXRzIDIzLi4yNSkgZm9yIGNvbXBhcmVzLgorKyAgaW5saW5lIHVpbnQzMl90IGJm VmFsdWUoKSBjb25zdCB7IHJldHVybiBiaXRzKDI1LCAyMyk7IH0KKysKKysgIGJvb2wgaXNUcmFw KCkgY29uc3QgeworKyAgICB1aW50MzJfdCBpbnN0ciA9IGluc3RydWN0aW9uQml0cygpOworKyAg ICAvLyBQUENfdHJhcCA9IDB4N0ZFMDAwMDggKHR3IDMxLDAsMCkuCisrICAgIC8vIERvbid0IHRy ZWF0IHRoZSBjYWxsLXJlZGlyZWN0aW9uIGluc3RydWN0aW9uIG9yIHdhc20gdHJhcCBhcyBhCisr ICAgIC8vIGRlYnVnZ2VyIHRyYXAuCisrICAgIGlmIChpbnN0ciA9PSBrQ2FsbFJlZGlySW5zdHIp IHJldHVybiBmYWxzZTsKKysgICAgaWYgKGluc3RyID09IDB4N0ZFMDAwMDgpIHJldHVybiBmYWxz ZTsKKysgICAgLy8gQW55IG90aGVyIHR3IGluc3RydWN0aW9uIHdpdGggVE89MzEgaXMgYSB0cmFw LgorKyAgICBpZiAob3Bjb2RlKCkgPT0gMzEgJiYgKHhvVmFsdWUoKSA9PSA0KSkgcmV0dXJuIHRy dWU7CisrICAgIHJldHVybiBmYWxzZTsKKysgIH0KKysKKysgcHJpdmF0ZToKKysgIFNpbUluc3Ry dWN0aW9uKCkgPSBkZWxldGU7CisrICBTaW1JbnN0cnVjdGlvbihjb25zdCBTaW1JbnN0cnVjdGlv biYgb3RoZXIpID0gZGVsZXRlOworKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU2ltSW5zdHJ1Y3Rp b24mIG90aGVyKSA9IGRlbGV0ZTsKKyt9OworKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisr Ly8gSUNhY2hlLgorKworK2NsYXNzIENhY2hlUGFnZSB7CisrIHB1YmxpYzoKKysgIHN0YXRpYyBj b25zdCBpbnQgTElORV9WQUxJRCA9IDA7CisrICBzdGF0aWMgY29uc3QgaW50IExJTkVfSU5WQUxJ RCA9IDE7CisrCisrICBzdGF0aWMgY29uc3QgaW50IGtQYWdlU2hpZnQgPSAxMjsKKysgIHN0YXRp YyBjb25zdCBpbnQga1BhZ2VTaXplID0gMSA8PCBrUGFnZVNoaWZ0OworKyAgc3RhdGljIGNvbnN0 IGludCBrUGFnZU1hc2sgPSBrUGFnZVNpemUgLSAxOworKyAgc3RhdGljIGNvbnN0IGludCBrTGlu ZVNoaWZ0ID0gMjsKKysgIHN0YXRpYyBjb25zdCBpbnQga0xpbmVMZW5ndGggPSAxIDw8IGtMaW5l U2hpZnQ7CisrICBzdGF0aWMgY29uc3QgaW50IGtMaW5lTWFzayA9IGtMaW5lTGVuZ3RoIC0gMTsK KysKKysgIENhY2hlUGFnZSgpIHsgbWVtc2V0KCZ2YWxpZGl0eV9tYXBfLCBMSU5FX0lOVkFMSUQs IHNpemVvZih2YWxpZGl0eV9tYXBfKSk7IH0KKysKKysgIGNoYXIqIHZhbGlkaXR5Qnl0ZShpbnQg b2Zmc2V0KSB7CisrICAgIHJldHVybiAmdmFsaWRpdHlfbWFwX1tvZmZzZXQgPj4ga0xpbmVTaGlm dF07CisrICB9CisrCisrICBjaGFyKiBjYWNoZWREYXRhKGludCBvZmZzZXQpIHsgcmV0dXJuICZk YXRhX1tvZmZzZXRdOyB9CisrCisrIHByaXZhdGU6CisrICBjaGFyIGRhdGFfW2tQYWdlU2l6ZV07 CisrICBzdGF0aWMgY29uc3QgaW50IGtWYWxpZGl0eU1hcFNpemUgPSBrUGFnZVNpemUgPj4ga0xp bmVTaGlmdDsKKysgIGNoYXIgdmFsaWRpdHlfbWFwX1trVmFsaWRpdHlNYXBTaXplXTsKKyt9Owor KworK2NsYXNzIEF1dG9Mb2NrU2ltdWxhdG9yQ2FjaGUgOiBwdWJsaWMgTG9ja0d1YXJkPE11dGV4 PiB7CisrICB1c2luZyBCYXNlID0gTG9ja0d1YXJkPE11dGV4PjsKKysKKysgcHVibGljOgorKyAg ZXhwbGljaXQgQXV0b0xvY2tTaW11bGF0b3JDYWNoZSgpCisrICAgICAgOiBCYXNlKFNpbXVsYXRv clByb2Nlc3M6OnNpbmdsZXRvbl8tPmNhY2hlTG9ja18pIHt9CisrfTsKKysKKyttb3ppbGxhOjpB dG9taWM8c2l6ZV90LCBtb3ppbGxhOjpSZWxlYXNlQWNxdWlyZT4KKysgICAgU2ltdWxhdG9yUHJv Y2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQoMSk7CisrU2ltdWxhdG9yUHJvY2Vzcyog U2ltdWxhdG9yUHJvY2Vzczo6c2luZ2xldG9uXyA9IG51bGxwdHI7CisrCisraW50NjRfdCBTaW11 bGF0b3I6OlN0b3BTaW1BdCA9IC0xOworKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8g U2ltdWxhdG9yIENyZWF0ZSAvIERlc3Ryb3kuCisrCisrU2ltdWxhdG9yKiBTaW11bGF0b3I6OkNy ZWF0ZSgpIHsKKysgIGF1dG8gc2ltID0gTWFrZVVuaXF1ZTxTaW11bGF0b3I+KCk7CisrICBpZiAo IXNpbSkgeworKyAgICByZXR1cm4gbnVsbHB0cjsKKysgIH0KKysKKysgIGlmICghc2ltLT5pbml0 KCkpIHsKKysgICAgcmV0dXJuIG51bGxwdHI7CisrICB9CisrCisrICBpbnQ2NF90IHN0b3BBdDsK KysgIGNoYXIqIHN0b3BBdFN0ciA9IGdldGVudigiUFBDNjRfU0lNX1NUT1BfQVQiKTsKKysgIGlm IChzdG9wQXRTdHIgJiYgc3NjYW5mKHN0b3BBdFN0ciwgIiUiIFBSSWk2NCwgJnN0b3BBdCkgPT0g MSkgeworKyAgICBmcHJpbnRmKHN0ZGVyciwgIlxuU3RvcHBpbmcgc2ltdWxhdGlvbiBhdCBpY291 bnQgJSIgUFJJaTY0ICJcbiIsIHN0b3BBdCk7CisrICAgIFNpbXVsYXRvcjo6U3RvcFNpbUF0ID0g c3RvcEF0OworKyAgfQorKworKyAgcmV0dXJuIHNpbS5yZWxlYXNlKCk7CisrfQorKworK3ZvaWQg U2ltdWxhdG9yOjpEZXN0cm95KFNpbXVsYXRvciogc2ltKSB7IGpzX2RlbGV0ZShzaW0pOyB9Cisr CisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBEZWJ1Z2dlci4KKysKKytjbGFzcyBwcGM2 NERlYnVnZ2VyIHsKKysgcHVibGljOgorKyAgZXhwbGljaXQgcHBjNjREZWJ1Z2dlcihTaW11bGF0 b3IqIHNpbSkgOiBzaW1fKHNpbSkge30KKysKKysgIHZvaWQgc3RvcChTaW1JbnN0cnVjdGlvbiog aW5zdHIpOworKyAgdm9pZCBkZWJ1ZygpOworKyAgdm9pZCBwcmludEFsbFJlZ3MoKTsKKysgIHZv aWQgcHJpbnRBbGxSZWdzSW5jbHVkaW5nRlBVKCk7CisrCisrIHByaXZhdGU6CisrICBzdGF0aWMg Y29uc3QgSW5zdHIga0JyZWFrcG9pbnRJbnN0ciA9IDB4N0ZFMDAwMDg7ICAvLyBQUENfdHJhcAor KyAgc3RhdGljIGNvbnN0IEluc3RyIGtOb3BJbnN0ciA9IDB4NjAwMDAwMDA7ICAgICAgICAgIC8v IFBQQ19ub3AKKysKKysgIFNpbXVsYXRvciogc2ltXzsKKysKKysgIGludDY0X3QgZ2V0UmVnaXN0 ZXJWYWx1ZShpbnQgcmVnbnVtKTsKKysgIGludDY0X3QgZ2V0RlBVUmVnaXN0ZXJWYWx1ZUxvbmco aW50IHJlZ251bSk7CisrICBmbG9hdCBnZXRGUFVSZWdpc3RlclZhbHVlRmxvYXQoaW50IHJlZ251 bSk7CisrICBkb3VibGUgZ2V0RlBVUmVnaXN0ZXJWYWx1ZURvdWJsZShpbnQgcmVnbnVtKTsKKysg IGJvb2wgZ2V0VmFsdWUoY29uc3QgY2hhciogZGVzYywgaW50NjRfdCogdmFsdWUpOworKworKyAg Ym9vbCBzZXRCcmVha3BvaW50KFNpbUluc3RydWN0aW9uKiBicmVha3BjKTsKKysgIGJvb2wgZGVs ZXRlQnJlYWtwb2ludChTaW1JbnN0cnVjdGlvbiogYnJlYWtwYyk7CisrCisrICB2b2lkIHVuZG9C cmVha3BvaW50cygpOworKyAgdm9pZCByZWRvQnJlYWtwb2ludHMoKTsKKyt9OworKworK1tbbWF5 YmVfdW51c2VkXV0gc3RhdGljIHZvaWQgVU5JTVBMRU1FTlRFRCgpIHsKKysgIHByaW50ZigiVU5J TVBMRU1FTlRFRCBpbnN0cnVjdGlvbi5cbiIpOworKyAgTU9aX0NSQVNIKCk7CisrfQorK1tbbWF5 YmVfdW51c2VkXV0gc3RhdGljIHZvaWQgVU5SRUFDSEFCTEUoKSB7CisrICBwcmludGYoIlVOUkVB Q0hBQkxFIGluc3RydWN0aW9uLlxuIik7CisrICBNT1pfQ1JBU0goKTsKKyt9CisrW1ttYXliZV91 bnVzZWRdXSBzdGF0aWMgdm9pZCBVTlNVUFBPUlRFRCgpIHsKKysgIHByaW50ZigiVW5zdXBwb3J0 ZWQgaW5zdHJ1Y3Rpb24uXG4iKTsKKysgIE1PWl9DUkFTSCgpOworK30KKysKKyt2b2lkIHBwYzY0 RGVidWdnZXI6OnN0b3AoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICB1aW50MzJfdCBjb2Rl ID0gMDsKKysgIGNoYXIqIG1zZyA9ICpyZWludGVycHJldF9jYXN0PGNoYXIqKj4oc2ltXy0+Z2V0 X3BjKCkgKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0 cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICBpZiAoIXNpbV8tPndhdGNoZWRTdG9wc19bY29kZV0u ZGVzY18pIHsKKysgICAgc2ltXy0+d2F0Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXyA9IG1zZzsKKysg IH0KKysgIGlmIChjb2RlICE9IGtNYXhTdG9wQ29kZSkgeworKyAgICBwcmludGYoIlNpbXVsYXRv ciBoaXQgc3RvcCAldTogJXNcbiIsIGNvZGUsIG1zZyk7CisrICB9IGVsc2UgeworKyAgICBwcmlu dGYoIlNpbXVsYXRvciBoaXQgJXNcbiIsIG1zZyk7CisrICB9CisrICBzaW1fLT5zZXRfcGMoc2lt Xy0+Z2V0X3BjKCkgKyAyICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgZGVidWco KTsKKyt9CisrCisraW50NjRfdCBwcGM2NERlYnVnZ2VyOjpnZXRSZWdpc3RlclZhbHVlKGludCBy ZWdudW0pIHsKKysgIGlmIChyZWdudW0gPT0ga1BDUmVnaXN0ZXIpIHsKKysgICAgcmV0dXJuIHNp bV8tPmdldF9wYygpOworKyAgfQorKyAgcmV0dXJuIHNpbV8tPmdldFJlZ2lzdGVyKHJlZ251bSk7 CisrfQorKworK2ludDY0X3QgcHBjNjREZWJ1Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZUxvbmco aW50IHJlZ251bSkgeworKyAgcmV0dXJuIHNpbV8tPmdldEZwdVJlZ2lzdGVyKHJlZ251bSk7Cisr fQorKworK2Zsb2F0IHBwYzY0RGVidWdnZXI6OmdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChpbnQg cmVnbnVtKSB7CisrICByZXR1cm4gc2ltXy0+Z2V0RnB1UmVnaXN0ZXJGbG9hdChyZWdudW0pOwor K30KKysKKytkb3VibGUgcHBjNjREZWJ1Z2dlcjo6Z2V0RlBVUmVnaXN0ZXJWYWx1ZURvdWJsZShp bnQgcmVnbnVtKSB7CisrICByZXR1cm4gc2ltXy0+Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmVnbnVt KTsKKyt9CisrCisrYm9vbCBwcGM2NERlYnVnZ2VyOjpnZXRWYWx1ZShjb25zdCBjaGFyKiBkZXNj LCBpbnQ2NF90KiB2YWx1ZSkgeworKyAgUmVnaXN0ZXIgcmVnID0gUmVnaXN0ZXI6OkZyb21OYW1l KGRlc2MpOworKyAgaWYgKHJlZyAhPSBJbnZhbGlkUmVnKSB7CisrICAgICp2YWx1ZSA9IGdldFJl Z2lzdGVyVmFsdWUocmVnLmNvZGUoKSk7CisrICAgIHJldHVybiB0cnVlOworKyAgfQorKworKyAg aWYgKHN0cm5jbXAoZGVzYywgIjB4IiwgMikgPT0gMCkgeworKyAgICByZXR1cm4gc3NjYW5mKGRl c2MgKyAyLCAiJSIgUFJJeDY0LCByZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4odmFsdWUpKSA9 PQorKyAgICAgICAgICAgMTsKKysgIH0KKysgIHJldHVybiBzc2NhbmYoZGVzYywgIiUiIFBSSXU2 NCwgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KHZhbHVlKSkgPT0gMTsKKyt9CisrCisrYm9v bCBwcGM2NERlYnVnZ2VyOjpzZXRCcmVha3BvaW50KFNpbUluc3RydWN0aW9uKiBicmVha3BjKSB7 CisrICBpZiAoc2ltXy0+YnJlYWtfcGNfICE9IG51bGxwdHIpIHsKKysgICAgcmV0dXJuIGZhbHNl OworKyAgfQorKworKyAgc2ltXy0+YnJlYWtfcGNfID0gYnJlYWtwYzsKKysgIHNpbV8tPmJyZWFr X2luc3RyXyA9IGJyZWFrcGMtPmluc3RydWN0aW9uQml0cygpOworKyAgcmV0dXJuIHRydWU7Cisr fQorKworK2Jvb2wgcHBjNjREZWJ1Z2dlcjo6ZGVsZXRlQnJlYWtwb2ludChTaW1JbnN0cnVjdGlv biogYnJlYWtwYykgeworKyAgaWYgKHNpbV8tPmJyZWFrX3BjXyAhPSBudWxscHRyKSB7CisrICAg IHNpbV8tPmJyZWFrX3BjXy0+c2V0SW5zdHJ1Y3Rpb25CaXRzKHNpbV8tPmJyZWFrX2luc3RyXyk7 CisrICB9CisrCisrICBzaW1fLT5icmVha19wY18gPSBudWxscHRyOworKyAgc2ltXy0+YnJlYWtf aW5zdHJfID0gMDsKKysgIHJldHVybiB0cnVlOworK30KKysKKyt2b2lkIHBwYzY0RGVidWdnZXI6 OnVuZG9CcmVha3BvaW50cygpIHsKKysgIGlmIChzaW1fLT5icmVha19wY18pIHsKKysgICAgc2lt Xy0+YnJlYWtfcGNfLT5zZXRJbnN0cnVjdGlvbkJpdHMoc2ltXy0+YnJlYWtfaW5zdHJfKTsKKysg IH0KKyt9CisrCisrdm9pZCBwcGM2NERlYnVnZ2VyOjpyZWRvQnJlYWtwb2ludHMoKSB7CisrICBp ZiAoc2ltXy0+YnJlYWtfcGNfKSB7CisrICAgIHNpbV8tPmJyZWFrX3BjXy0+c2V0SW5zdHJ1Y3Rp b25CaXRzKGtCcmVha3BvaW50SW5zdHIpOworKyAgfQorK30KKysKKyt2b2lkIHBwYzY0RGVidWdn ZXI6OnByaW50QWxsUmVncygpIHsKKysgIGludDY0X3QgdmFsdWU7CisrICBmb3IgKHVpbnQzMl90 IGkgPSAwOyBpIDwgUmVnaXN0ZXJzOjpUb3RhbDsgaSsrKSB7CisrICAgIHZhbHVlID0gZ2V0UmVn aXN0ZXJWYWx1ZShpKTsKKysgICAgcHJpbnRmKCIlM3M6IDB4JTAxNiIgUFJJeDY0ICIgJTIwIiBQ UklpNjQgIiAgICIsIFJlZ2lzdGVyczo6R2V0TmFtZShpKSwKKysgICAgICAgICAgIHZhbHVlLCB2 YWx1ZSk7CisrCisrICAgIGlmIChpICUgMikgeworKyAgICAgIHByaW50ZigiXG4iKTsKKysgICAg fQorKyAgfQorKyAgcHJpbnRmKCJcbiIpOworKworKyAgdmFsdWUgPSBnZXRSZWdpc3RlclZhbHVl KFNpbXVsYXRvcjo6cGMpOworKyAgcHJpbnRmKCIgIHBjOiAweCUwMTYiIFBSSXg2NCAiXG4iLCB2 YWx1ZSk7CisrICBwcmludGYoIiAgbHI6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldExS KCkpOworKyAgcHJpbnRmKCIgY3RyOiAweCUwMTYiIFBSSXg2NCAiXG4iLCBzaW1fLT5nZXRDVFIo KSk7CisrICBwcmludGYoIiAgY3I6IDB4JTA4eFxuIiwgc2ltXy0+Z2V0Q1IoKSk7CisrICBwcmlu dGYoIiB4ZXI6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldFhFUigpKTsKKyt9CisrCisr dm9pZCBwcGM2NERlYnVnZ2VyOjpwcmludEFsbFJlZ3NJbmNsdWRpbmdGUFUoKSB7CisrICBwcmlu dEFsbFJlZ3MoKTsKKysKKysgIHByaW50ZigiXG5cbiIpOworKyAgZm9yICh1aW50MzJfdCBpID0g MDsgaSA8IEZsb2F0UmVnaXN0ZXJzOjpUb3RhbFBoeXM7IGkrKykgeworKyAgICBwcmludGYoIiUz czogMHglMDE2IiBQUkl4NjQgIlx0Zmx0OiAlLTguNGdcdGRibDogJS0xNi40Z1xuIiwKKysgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpHZXROYW1lKGkpLCBnZXRGUFVSZWdpc3RlclZhbHVlTG9u ZyhpKSwKKysgICAgICAgICAgIGdldEZQVVJlZ2lzdGVyVmFsdWVGbG9hdChpKSwgZ2V0RlBVUmVn aXN0ZXJWYWx1ZURvdWJsZShpKSk7CisrICB9CisrfQorKworK3N0YXRpYyBjaGFyKiBSZWFkTGlu ZShjb25zdCBjaGFyKiBwcm9tcHQpIHsKKysgIFVuaXF1ZUNoYXJzIHJlc3VsdDsKKysgIGNoYXIg bGluZUJ1ZlsyNTZdOworKyAgaW50IG9mZnNldCA9IDA7CisrICBib29sIGtlZXBHb2luZyA9IHRy dWU7CisrICBmcHJpbnRmKHN0ZG91dCwgIiVzIiwgcHJvbXB0KTsKKysgIGZmbHVzaChzdGRvdXQp OworKyAgd2hpbGUgKGtlZXBHb2luZykgeworKyAgICBpZiAoZmdldHMobGluZUJ1Ziwgc2l6ZW9m KGxpbmVCdWYpLCBzdGRpbikgPT0gbnVsbHB0cikgeworKyAgICAgIHJldHVybiBudWxscHRyOwor KyAgICB9CisrICAgIGludCBsZW4gPSBzdHJsZW4obGluZUJ1Zik7CisrICAgIGlmIChsZW4gPiAw ICYmIGxpbmVCdWZbbGVuIC0gMV0gPT0gJ1xuJykgeworKyAgICAgIGtlZXBHb2luZyA9IGZhbHNl OworKyAgICB9CisrICAgIGlmICghcmVzdWx0KSB7CisrICAgICAgcmVzdWx0LnJlc2V0KGpzX3Bv ZF9tYWxsb2M8Y2hhcj4obGVuICsgMSkpOworKyAgICAgIGlmICghcmVzdWx0KSB7CisrICAgICAg ICByZXR1cm4gbnVsbHB0cjsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgaW50IG5l d19sZW4gPSBvZmZzZXQgKyBsZW4gKyAxOworKyAgICAgIGNoYXIqIG5ld19yZXN1bHQgPSBqc19w b2RfbWFsbG9jPGNoYXI+KG5ld19sZW4pOworKyAgICAgIGlmICghbmV3X3Jlc3VsdCkgeworKyAg ICAgICAgcmV0dXJuIG51bGxwdHI7CisrICAgICAgfQorKyAgICAgIG1lbWNweShuZXdfcmVzdWx0 LCByZXN1bHQuZ2V0KCksIG9mZnNldCAqIHNpemVvZihjaGFyKSk7CisrICAgICAgcmVzdWx0LnJl c2V0KG5ld19yZXN1bHQpOworKyAgICB9CisrICAgIG1lbWNweShyZXN1bHQuZ2V0KCkgKyBvZmZz ZXQsIGxpbmVCdWYsIGxlbiAqIHNpemVvZihjaGFyKSk7CisrICAgIG9mZnNldCArPSBsZW47Cisr ICB9CisrCisrICBNT1pfQVNTRVJUKHJlc3VsdCk7CisrICByZXN1bHRbb2Zmc2V0XSA9ICdcMCc7 CisrICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyt9CisrCisrc3RhdGljIHZvaWQgRGlzYXNz ZW1ibGVJbnN0cnVjdGlvbih1aW50NjRfdCBwYykgeworKyAgcHJpbnRmKCIgIDB4JTAxNiIgUFJJ eDY0ICI6ICAlMDh4XG4iLCBwYywKKysgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf dCo+KHBjKSk7CisrfQorKworK3ZvaWQgcHBjNjREZWJ1Z2dlcjo6ZGVidWcoKSB7CisrICBpbnRw dHJfdCBsYXN0UEMgPSAtMTsKKysgIGJvb2wgZG9uZSA9IGZhbHNlOworKworKyNkZWZpbmUgQ09N TUFORF9TSVpFIDYzCisrI2RlZmluZSBBUkdfU0laRSAyNTUKKysKKysjZGVmaW5lIFNUUihhKSAj YQorKyNkZWZpbmUgWFNUUihhKSBTVFIoYSkKKysKKysgIGNoYXIgY21kW0NPTU1BTkRfU0laRSAr IDFdOworKyAgY2hhciBhcmcxW0FSR19TSVpFICsgMV07CisrICBjaGFyIGFyZzJbQVJHX1NJWkUg KyAxXTsKKysgIGNoYXIqIGFyZ3ZbM10gPSB7Y21kLCBhcmcxLCBhcmcyfTsKKysKKysgIGNtZFtD T01NQU5EX1NJWkVdID0gMDsKKysgIGFyZzFbQVJHX1NJWkVdID0gMDsKKysgIGFyZzJbQVJHX1NJ WkVdID0gMDsKKysKKysgIHVuZG9CcmVha3BvaW50cygpOworKworKyAgd2hpbGUgKCFkb25lICYm IChzaW1fLT5nZXRfcGMoKSAhPSBTaW11bGF0b3I6OmVuZF9zaW1fcGMpKSB7CisrICAgIGlmIChs YXN0UEMgIT0gc2ltXy0+Z2V0X3BjKCkpIHsKKysgICAgICBEaXNhc3NlbWJsZUluc3RydWN0aW9u KHNpbV8tPmdldF9wYygpKTsKKysgICAgICBsYXN0UEMgPSBzaW1fLT5nZXRfcGMoKTsKKysgICAg fQorKyAgICBjaGFyKiBsaW5lID0gUmVhZExpbmUoInNpbT4gIik7CisrICAgIGlmIChsaW5lID09 IG51bGxwdHIpIHsKKysgICAgICBicmVhazsKKysgICAgfSBlbHNlIHsKKysgICAgICBjaGFyKiBs YXN0X2lucHV0ID0gc2ltXy0+bGFzdERlYnVnZ2VySW5wdXQoKTsKKysgICAgICBpZiAoc3RyY21w KGxpbmUsICJcbiIpID09IDAgJiYgbGFzdF9pbnB1dCAhPSBudWxscHRyKSB7CisrICAgICAgICBs aW5lID0gbGFzdF9pbnB1dDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgc2ltXy0+c2V0TGFz dERlYnVnZ2VySW5wdXQobGluZSk7CisrICAgICAgfQorKyAgICAgIGludCBhcmdjID0gc3NjYW5m KGxpbmUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiIFhTVFIoQ09NTUFORF9T SVpFKSAicyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiIFhTVFIoQVJHX1NJ WkUpICJzICIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgWFNUUihBUkdfU0la RSkgInMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgYXJnMSwgYXJnMik7 CisrICAgICAgaWYgKChzdHJjbXAoY21kLCAic2kiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgInN0 ZXBpIikgPT0gMCkpIHsKKysgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0ciA9CisrICAgICAg ICAgICAgcmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KHNpbV8tPmdldF9wYygpKTsK KysgICAgICAgIGlmICghaW5zdHItPmlzVHJhcCgpKSB7CisrICAgICAgICAgIHNpbV8tPmluc3Ry dWN0aW9uRGVjb2RlKGluc3RyKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHByaW50 ZigiLyFcXCBKdW1waW5nIG92ZXIgZ2VuZXJhdGVkIGJyZWFrcG9pbnQuXG4iKTsKKysgICAgICAg ICAgc2ltXy0+c2V0X3BjKHNpbV8tPmdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNp emUpOworKyAgICAgICAgfQorKyAgICAgICAgc2ltXy0+aWNvdW50XysrOworKyAgICAgIH0gZWxz ZSBpZiAoKHN0cmNtcChjbWQsICJjIikgPT0gMCkgfHwgKHN0cmNtcChjbWQsICJjb250IikgPT0g MCkpIHsKKysgICAgICAgIHNpbV8tPmluc3RydWN0aW9uRGVjb2RlKAorKyAgICAgICAgICAgIHJl aW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24qPihzaW1fLT5nZXRfcGMoKSkpOworKyAgICAg ICAgc2ltXy0+aWNvdW50XysrOworKyAgICAgICAgZG9uZSA9IHRydWU7CisrICAgICAgfSBlbHNl IGlmICgoc3RyY21wKGNtZCwgInAiKSA9PSAwKSB8fCAoc3RyY21wKGNtZCwgInByaW50IikgPT0g MCkpIHsKKysgICAgICAgIGlmIChhcmdjID09IDIpIHsKKysgICAgICAgICAgaW50NjRfdCB2YWx1 ZTsKKysgICAgICAgICAgaWYgKHN0cmNtcChhcmcxLCAiYWxsIikgPT0gMCkgeworKyAgICAgICAg ICAgIHByaW50QWxsUmVncygpOworKyAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmcxLCAi YWxsZiIpID09IDApIHsKKysgICAgICAgICAgICBwcmludEFsbFJlZ3NJbmNsdWRpbmdGUFUoKTsK KysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBSZWdpc3RlciByZWcgPSBSZWdpc3Rl cjo6RnJvbU5hbWUoYXJnMSk7CisrICAgICAgICAgICAgRmxvYXRSZWdpc3RlcnM6OkNvZGUgZlJl ZyA9IEZsb2F0UmVnaXN0ZXJzOjpGcm9tTmFtZShhcmcxKTsKKysgICAgICAgICAgICBpZiAocmVn ICE9IEludmFsaWRSZWcpIHsKKysgICAgICAgICAgICAgIHZhbHVlID0gZ2V0UmVnaXN0ZXJWYWx1 ZShyZWcuY29kZSgpKTsKKysgICAgICAgICAgICAgIHByaW50ZigiJXM6IDB4JTAxNiIgUFJJeDY0 ICIgJTIwIiBQUklpNjQgIiBcbiIsIGFyZzEsIHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAg IHZhbHVlKTsKKysgICAgICAgICAgICB9IGVsc2UgaWYgKGZSZWcgIT0gRmxvYXRSZWdpc3RlcnM6 OkludmFsaWQpIHsKKysgICAgICAgICAgICAgIHByaW50ZigiJTNzOiAweCUwMTYiIFBSSXg2NCAi XHRmbHQ6ICUtOC40Z1x0ZGJsOiAlLTE2LjRnXG4iLAorKyAgICAgICAgICAgICAgICAgICAgIEZs b2F0UmVnaXN0ZXJzOjpHZXROYW1lKGZSZWcpLAorKyAgICAgICAgICAgICAgICAgICAgIGdldEZQ VVJlZ2lzdGVyVmFsdWVMb25nKGZSZWcpLAorKyAgICAgICAgICAgICAgICAgICAgIGdldEZQVVJl Z2lzdGVyVmFsdWVGbG9hdChmUmVnKSwKKysgICAgICAgICAgICAgICAgICAgICBnZXRGUFVSZWdp c3RlclZhbHVlRG91YmxlKGZSZWcpKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAg ICAgICAgcHJpbnRmKCIlcyB1bnJlY29nbml6ZWRcbiIsIGFyZzEpOworKyAgICAgICAgICAgIH0K KysgICAgICAgICAgfQorKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgcHJpbnRmKCJwcmlu dCA8cmVnaXN0ZXI+IG9yIHByaW50IDxmcHUgcmVnaXN0ZXI+IHNpbmdsZVxuIik7CisrICAgICAg ICB9CisrICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAic3RhY2siKSA9PSAwIHx8IHN0cmNt cChjbWQsICJtZW0iKSA9PSAwKSB7CisrICAgICAgICBpbnQ2NF90KiBjdXIgPSBudWxscHRyOwor KyAgICAgICAgaW50NjRfdCogZW5kID0gbnVsbHB0cjsKKysgICAgICAgIGludCBuZXh0X2FyZyA9 IDE7CisrCisrICAgICAgICBpZiAoc3RyY21wKGNtZCwgInN0YWNrIikgPT0gMCkgeworKyAgICAg ICAgICBjdXIgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihzaW1fLT5nZXRSZWdpc3RlcihT aW11bGF0b3I6OnNwKSk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBpbnQ2NF90IHZh bHVlOworKyAgICAgICAgICBpZiAoIWdldFZhbHVlKGFyZzEsICZ2YWx1ZSkpIHsKKysgICAgICAg ICAgICBwcmludGYoIiVzIHVucmVjb2duaXplZFxuIiwgYXJnMSk7CisrICAgICAgICAgICAgY29u dGludWU7CisrICAgICAgICAgIH0KKysgICAgICAgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDxp bnQ2NF90Kj4odmFsdWUpOworKyAgICAgICAgICBuZXh0X2FyZysrOworKyAgICAgICAgfQorKwor KyAgICAgICAgaW50NjRfdCB3b3JkczsKKysgICAgICAgIGlmIChhcmdjID09IG5leHRfYXJnKSB7 CisrICAgICAgICAgIHdvcmRzID0gMTA7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBp ZiAoIWdldFZhbHVlKGFyZ3ZbbmV4dF9hcmddLCAmd29yZHMpKSB7CisrICAgICAgICAgICAgd29y ZHMgPSAxMDsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZW5kID0gY3VyICsg d29yZHM7CisrCisrICAgICAgICB3aGlsZSAoY3VyIDwgZW5kKSB7CisrICAgICAgICAgIHByaW50 ZigiICAlcDogIDB4JTAxNiIgUFJJeDY0ICIgJTIwIiBQUklpNjQsIGN1ciwgKmN1ciwgKmN1cik7 CisrICAgICAgICAgIHByaW50ZigiXG4iKTsKKysgICAgICAgICAgY3VyKys7CisrICAgICAgICB9 CisrCisrICAgICAgfSBlbHNlIGlmICgoc3RyY21wKGNtZCwgImRpc2FzbSIpID09IDApIHx8IChz dHJjbXAoY21kLCAiZHBjIikgPT0gMCkgfHwKKysgICAgICAgICAgICAgICAgIChzdHJjbXAoY21k LCAiZGkiKSA9PSAwKSkgeworKyAgICAgICAgdWludDhfdCogY3VyID0gbnVsbHB0cjsKKysgICAg ICAgIHVpbnQ4X3QqIGVuZCA9IG51bGxwdHI7CisrCisrICAgICAgICBpZiAoYXJnYyA9PSAxKSB7 CisrICAgICAgICAgIGN1ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNpbV8tPmdldF9w YygpKTsKKysgICAgICAgICAgZW5kID0gY3VyICsgKDEwICogU2ltSW5zdHJ1Y3Rpb246OmtJbnN0 clNpemUpOworKyAgICAgICAgfSBlbHNlIGlmIChhcmdjID09IDIpIHsKKysgICAgICAgICAgUmVn aXN0ZXIgcmVnID0gUmVnaXN0ZXI6OkZyb21OYW1lKGFyZzEpOworKyAgICAgICAgICBpZiAocmVn ICE9IEludmFsaWRSZWcgfHwgc3RybmNtcChhcmcxLCAiMHgiLCAyKSA9PSAwKSB7CisrICAgICAg ICAgICAgaW50NjRfdCB2YWx1ZTsKKysgICAgICAgICAgICBpZiAoZ2V0VmFsdWUoYXJnMSwgJnZh bHVlKSkgeworKyAgICAgICAgICAgICAgY3VyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o dmFsdWUpOworKyAgICAgICAgICAgICAgZW5kID0gY3VyICsgKDEwICogU2ltSW5zdHJ1Y3Rpb246 OmtJbnN0clNpemUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgfSBlbHNlIHsKKysgICAg ICAgICAgICBpbnQ2NF90IHZhbHVlOworKyAgICAgICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAm dmFsdWUpKSB7CisrICAgICAgICAgICAgICBjdXIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq PihzaW1fLT5nZXRfcGMoKSk7CisrICAgICAgICAgICAgICBlbmQgPSBjdXIgKyAodmFsdWUgKiBT aW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9 CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBpbnQ2NF90IHZhbHVlMTsKKysgICAgICAg ICAgaW50NjRfdCB2YWx1ZTI7CisrICAgICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAmdmFsdWUx KSAmJiBnZXRWYWx1ZShhcmcyLCAmdmFsdWUyKSkgeworKyAgICAgICAgICAgIGN1ciA9IHJlaW50 ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHZhbHVlMSk7CisrICAgICAgICAgICAgZW5kID0gY3VyICsg KHZhbHVlMiAqIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgICAgfQorKyAg ICAgICAgfQorKworKyAgICAgICAgd2hpbGUgKGN1ciA8IGVuZCkgeworKyAgICAgICAgICBEaXNh c3NlbWJsZUluc3RydWN0aW9uKHVpbnQ2NF90KGN1cikpOworKyAgICAgICAgICBjdXIgKz0gU2lt SW5zdHJ1Y3Rpb246OmtJbnN0clNpemU7CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIGlmIChz dHJjbXAoY21kLCAiZ2RiIikgPT0gMCkgeworKyAgICAgICAgcHJpbnRmKCJyZWxpbnF1aXNoaW5n IGNvbnRyb2wgdG8gZ2RiXG4iKTsKKysjaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorKyAgICAgICAg YXNtKCJpbnQgJDMiKTsKKysjZWxpZiBkZWZpbmVkKF9fYWFyY2g2NF9fKQorKyAgICAgICAgYXNt KCJicmsgIzB4ZjAwMCIpOworKyNlbmRpZgorKyAgICAgICAgcHJpbnRmKCJyZWdhaW5pbmcgY29u dHJvbCBmcm9tIGdkYlxuIik7CisrICAgICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAiYnJlYWsi KSA9PSAwKSB7CisrICAgICAgICBpZiAoYXJnYyA9PSAyKSB7CisrICAgICAgICAgIGludDY0X3Qg dmFsdWU7CisrICAgICAgICAgIGlmIChnZXRWYWx1ZShhcmcxLCAmdmFsdWUpKSB7CisrICAgICAg ICAgICAgaWYgKCFzZXRCcmVha3BvaW50KHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24q Pih2YWx1ZSkpKSB7CisrICAgICAgICAgICAgICBwcmludGYoInNldHRpbmcgYnJlYWtwb2ludCBm YWlsZWRcbiIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgICBwcmludGYoIiVzIHVucmVjb2duaXplZFxuIiwgYXJnMSk7CisrICAgICAgICAgIH0KKysg ICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHByaW50ZigiYnJlYWsgPGFkZHJlc3M+XG4iKTsK KysgICAgICAgIH0KKysgICAgICB9IGVsc2UgaWYgKHN0cmNtcChjbWQsICJkZWwiKSA9PSAwKSB7 CisrICAgICAgICBpZiAoIWRlbGV0ZUJyZWFrcG9pbnQobnVsbHB0cikpIHsKKysgICAgICAgICAg cHJpbnRmKCJkZWxldGluZyBicmVha3BvaW50IGZhaWxlZFxuIik7CisrICAgICAgICB9CisrICAg ICAgfSBlbHNlIGlmIChzdHJjbXAoY21kLCAiZmxhZ3MiKSA9PSAwKSB7CisrICAgICAgICBwcmlu dGYoIkNSOiAweCUwOHggICBYRVI6IDB4JTAxNiIgUFJJeDY0ICJcbiIsIHNpbV8tPmdldENSKCks CisrICAgICAgICAgICAgICAgc2ltXy0+Z2V0WEVSKCkpOworKyAgICAgIH0gZWxzZSBpZiAoc3Ry Y21wKGNtZCwgInN0b3AiKSA9PSAwKSB7CisrICAgICAgICBpbnQ2NF90IHZhbHVlOworKyAgICAg ICAgaW50cHRyX3Qgc3RvcF9wYyA9IHNpbV8tPmdldF9wYygpIC0gMiAqIFNpbUluc3RydWN0aW9u OjprSW5zdHJTaXplOworKyAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIHN0b3BfaW5zdHIgPQorKyAg ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8U2ltSW5zdHJ1Y3Rpb24qPihzdG9wX3BjKTsKKysg ICAgICAgIFNpbUluc3RydWN0aW9uKiBtc2dfYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2lt SW5zdHJ1Y3Rpb24qPigKKysgICAgICAgICAgICBzdG9wX3BjICsgU2ltSW5zdHJ1Y3Rpb246OmtJ bnN0clNpemUpOworKyAgICAgICAgaWYgKChhcmdjID09IDIpICYmIChzdHJjbXAoYXJnMSwgInVu c3RvcCIpID09IDApKSB7CisrICAgICAgICAgIGlmIChzaW1fLT5pc1N0b3BJbnN0cnVjdGlvbihz dG9wX2luc3RyKSkgeworKyAgICAgICAgICAgIHN0b3BfaW5zdHItPnNldEluc3RydWN0aW9uQml0 cyhrTm9wSW5zdHIpOworKyAgICAgICAgICAgIG1zZ19hZGRyZXNzLT5zZXRJbnN0cnVjdGlvbkJp dHMoa05vcEluc3RyKTsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludGYo Ik5vdCBhdCBkZWJ1Z2dlciBzdG9wLlxuIik7CisrICAgICAgICAgIH0KKysgICAgICAgIH0gZWxz ZSBpZiAoYXJnYyA9PSAzKSB7CisrICAgICAgICAgIGlmIChzdHJjbXAoYXJnMSwgImluZm8iKSA9 PSAwKSB7CisrICAgICAgICAgICAgaWYgKHN0cmNtcChhcmcyLCAiYWxsIikgPT0gMCkgeworKyAg ICAgICAgICAgICAgcHJpbnRmKCJTdG9wIGluZm9ybWF0aW9uOlxuIik7CisrICAgICAgICAgICAg ICBmb3IgKHVpbnQzMl90IGkgPSBrTWF4V2F0Y2hwb2ludENvZGUgKyAxOyBpIDw9IGtNYXhTdG9w Q29kZTsKKysgICAgICAgICAgICAgICAgICAgaSsrKSB7CisrICAgICAgICAgICAgICAgIHNpbV8t PnByaW50U3RvcEluZm8oaSk7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfSBlbHNl IGlmIChnZXRWYWx1ZShhcmcyLCAmdmFsdWUpKSB7CisrICAgICAgICAgICAgICBzaW1fLT5wcmlu dFN0b3BJbmZvKHZhbHVlKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAg cHJpbnRmKCJVbnJlY29nbml6ZWQgYXJndW1lbnQuXG4iKTsKKysgICAgICAgICAgICB9CisrICAg ICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZzEsICJlbmFibGUiKSA9PSAwKSB7CisrICAgICAg ICAgICAgaWYgKHN0cmNtcChhcmcyLCAiYWxsIikgPT0gMCkgeworKyAgICAgICAgICAgICAgZm9y ICh1aW50MzJfdCBpID0ga01heFdhdGNocG9pbnRDb2RlICsgMTsgaSA8PSBrTWF4U3RvcENvZGU7 CisrICAgICAgICAgICAgICAgICAgIGkrKykgeworKyAgICAgICAgICAgICAgICBzaW1fLT5lbmFi bGVTdG9wKGkpOworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0 VmFsdWUoYXJnMiwgJnZhbHVlKSkgeworKyAgICAgICAgICAgICAgc2ltXy0+ZW5hYmxlU3RvcCh2 YWx1ZSk7CisrICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgIHByaW50ZigiVW5y ZWNvZ25pemVkIGFyZ3VtZW50LlxuIik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICB9IGVs c2UgaWYgKHN0cmNtcChhcmcxLCAiZGlzYWJsZSIpID09IDApIHsKKysgICAgICAgICAgICBpZiAo c3RyY21wKGFyZzIsICJhbGwiKSA9PSAwKSB7CisrICAgICAgICAgICAgICBmb3IgKHVpbnQzMl90 IGkgPSBrTWF4V2F0Y2hwb2ludENvZGUgKyAxOyBpIDw9IGtNYXhTdG9wQ29kZTsKKysgICAgICAg ICAgICAgICAgICAgaSsrKSB7CisrICAgICAgICAgICAgICAgIHNpbV8tPmRpc2FibGVTdG9wKGkp OworKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0VmFsdWUoYXJn MiwgJnZhbHVlKSkgeworKyAgICAgICAgICAgICAgc2ltXy0+ZGlzYWJsZVN0b3AodmFsdWUpOwor KyAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICBwcmludGYoIlVucmVjb2duaXpl ZCBhcmd1bWVudC5cbiIpOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgfQorKyAgICAgICAg fSBlbHNlIHsKKysgICAgICAgICAgcHJpbnRmKCJXcm9uZyB1c2FnZS4gVXNlIGhlbHAgY29tbWFu ZCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSBp ZiAoKHN0cmNtcChjbWQsICJoIikgPT0gMCkgfHwgKHN0cmNtcChjbWQsICJoZWxwIikgPT0gMCkp IHsKKysgICAgICAgIHByaW50ZigiY29udFxuIik7CisrICAgICAgICBwcmludGYoIiAgY29udGlu dWUgZXhlY3V0aW9uIChhbGlhcyAnYycpXG4iKTsKKysgICAgICAgIHByaW50Zigic3RlcGlcbiIp OworKyAgICAgICAgcHJpbnRmKCIgIHN0ZXAgb25lIGluc3RydWN0aW9uIChhbGlhcyAnc2knKVxu Iik7CisrICAgICAgICBwcmludGYoInByaW50IDxyZWdpc3Rlcj5cbiIpOworKyAgICAgICAgcHJp bnRmKCIgIHByaW50IHJlZ2lzdGVyIGNvbnRlbnQgKGFsaWFzICdwJylcbiIpOworKyAgICAgICAg cHJpbnRmKCIgIHVzZSByZWdpc3RlciBuYW1lICdhbGwnIHRvIHByaW50IGFsbCByZWdpc3RlcnNc biIpOworKyAgICAgICAgcHJpbnRmKCJzdGFjayBbPHdvcmRzPl1cbiIpOworKyAgICAgICAgcHJp bnRmKCIgIGR1bXAgc3RhY2sgY29udGVudCwgZGVmYXVsdCBkdW1wIDEwIHdvcmRzKVxuIik7Cisr ICAgICAgICBwcmludGYoIm1lbSA8YWRkcmVzcz4gWzx3b3Jkcz5dXG4iKTsKKysgICAgICAgIHBy aW50ZigiICBkdW1wIG1lbW9yeSBjb250ZW50LCBkZWZhdWx0IGR1bXAgMTAgd29yZHMpXG4iKTsK KysgICAgICAgIHByaW50ZigiZmxhZ3NcbiIpOworKyAgICAgICAgcHJpbnRmKCIgIHByaW50IENS IGFuZCBYRVJcbiIpOworKyAgICAgICAgcHJpbnRmKCJkaXNhc20gWzxpbnN0cnVjdGlvbnM+XVxu Iik7CisrICAgICAgICBwcmludGYoImRpc2FzbSBbPGFkZHJlc3MvcmVnaXN0ZXI+XVxuIik7Cisr ICAgICAgICBwcmludGYoImRpc2FzbSBbWzxhZGRyZXNzL3JlZ2lzdGVyPl0gPGluc3RydWN0aW9u cz5dXG4iKTsKKysgICAgICAgIHByaW50ZigiICBkaXNhc3NlbWJsZSBjb2RlLCBkZWZhdWx0IGlz IDEwIGluc3RydWN0aW9uc1xuIik7CisrICAgICAgICBwcmludGYoIiAgZnJvbSBwYyAoYWxpYXMg J2RpJylcbiIpOworKyAgICAgICAgcHJpbnRmKCJnZGJcbiIpOworKyAgICAgICAgcHJpbnRmKCIg IGVudGVyIGdkYlxuIik7CisrICAgICAgICBwcmludGYoImJyZWFrIDxhZGRyZXNzPlxuIik7Cisr ICAgICAgICBwcmludGYoIiAgc2V0IGEgYnJlYWsgcG9pbnQgb24gdGhlIGFkZHJlc3NcbiIpOwor KyAgICAgICAgcHJpbnRmKCJkZWxcbiIpOworKyAgICAgICAgcHJpbnRmKCIgIGRlbGV0ZSB0aGUg YnJlYWtwb2ludFxuIik7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHByaW50ZigiVW5rbm93 biBjb21tYW5kOiAlc1xuIiwgY21kKTsKKysgICAgICB9CisrICAgIH0KKysgIH0KKysKKysgIHJl ZG9CcmVha3BvaW50cygpOworKworKyN1bmRlZiBDT01NQU5EX1NJWkUKKysjdW5kZWYgQVJHX1NJ WkUKKysKKysjdW5kZWYgU1RSCisrI3VuZGVmIFhTVFIKKyt9CisrCisrLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKysvLyBJQ2FjaGUgaGVscGVycy4KKysKKytzdGF0aWMgYm9vbCBBbGxPbk9uZVBh Z2UodWludHB0cl90IHN0YXJ0LCBpbnQgc2l6ZSkgeworKyAgaW50cHRyX3Qgc3RhcnRfcGFnZSA9 IChzdGFydCAmIH5DYWNoZVBhZ2U6OmtQYWdlTWFzayk7CisrICBpbnRwdHJfdCBlbmRfcGFnZSA9 ICgoc3RhcnQgKyBzaXplKSAmIH5DYWNoZVBhZ2U6OmtQYWdlTWFzayk7CisrICByZXR1cm4gc3Rh cnRfcGFnZSA9PSBlbmRfcGFnZTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OnNldExhc3REZWJ1 Z2dlcklucHV0KGNoYXIqIGlucHV0KSB7CisrICBqc19mcmVlKGxhc3REZWJ1Z2dlcklucHV0Xyk7 CisrICBsYXN0RGVidWdnZXJJbnB1dF8gPSBpbnB1dDsKKyt9CisrCisrc3RhdGljIENhY2hlUGFn ZSogR2V0Q2FjaGVQYWdlTG9ja2VkKFNpbXVsYXRvclByb2Nlc3M6OklDYWNoZU1hcCYgaV9jYWNo ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcGFnZSkgewor KyAgU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlTWFwOjpBZGRQdHIgcCA9IGlfY2FjaGUubG9va3Vw Rm9yQWRkKHBhZ2UpOworKyAgaWYgKHApIHsKKysgICAgcmV0dXJuIHAtPnZhbHVlKCk7CisrICB9 CisrICBBdXRvRW50ZXJPT01VbnNhZmVSZWdpb24gb29tVW5zYWZlOworKyAgQ2FjaGVQYWdlKiBu ZXdfcGFnZSA9IGpzX25ldzxDYWNoZVBhZ2U+KCk7CisrICBpZiAoIW5ld19wYWdlIHx8ICFpX2Nh Y2hlLmFkZChwLCBwYWdlLCBuZXdfcGFnZSkpIHsKKysgICAgb29tVW5zYWZlLmNyYXNoKCJTaW11 bGF0b3IgQ2FjaGVQYWdlIik7CisrICB9CisrICByZXR1cm4gbmV3X3BhZ2U7CisrfQorKworK3N0 YXRpYyB2b2lkIEZsdXNoT25lUGFnZUxvY2tlZChTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVNYXAm IGlfY2FjaGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHB0cl90IHN0YXJ0 LCBpbnQgc2l6ZSkgeworKyAgTU9aX0FTU0VSVChzaXplIDw9IENhY2hlUGFnZTo6a1BhZ2VTaXpl KTsKKysgIE1PWl9BU1NFUlQoQWxsT25PbmVQYWdlKHN0YXJ0LCBzaXplIC0gMSkpOworKyAgTU9a X0FTU0VSVCgoc3RhcnQgJiBDYWNoZVBhZ2U6OmtMaW5lTWFzaykgPT0gMCk7CisrICBNT1pfQVNT RVJUKChzaXplICYgQ2FjaGVQYWdlOjprTGluZU1hc2spID09IDApOworKyAgdm9pZCogcGFnZSA9 IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXJ0ICYgKH5DYWNoZVBhZ2U6OmtQYWdlTWFzaykp OworKyAgaW50IG9mZnNldCA9IChzdGFydCAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKKysgIENh Y2hlUGFnZSogY2FjaGVfcGFnZSA9IEdldENhY2hlUGFnZUxvY2tlZChpX2NhY2hlLCBwYWdlKTsK KysgIGNoYXIqIHZhbGlkX2J5dGVtYXAgPSBjYWNoZV9wYWdlLT52YWxpZGl0eUJ5dGUob2Zmc2V0 KTsKKysgIG1lbXNldCh2YWxpZF9ieXRlbWFwLCBDYWNoZVBhZ2U6OkxJTkVfSU5WQUxJRCwgc2l6 ZSA+PiBDYWNoZVBhZ2U6OmtMaW5lU2hpZnQpOworK30KKysKKytzdGF0aWMgdm9pZCBGbHVzaElD YWNoZUxvY2tlZChTaW11bGF0b3JQcm9jZXNzOjpJQ2FjaGVNYXAmIGlfY2FjaGUsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogc3RhcnRfYWRkciwgc2l6ZV90IHNpemUpIHsK KysgIGludHB0cl90IHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3RhcnRfYWRk cik7CisrICBpbnQgaW50cmFfbGluZSA9IChzdGFydCAmIENhY2hlUGFnZTo6a0xpbmVNYXNrKTsK KysgIHN0YXJ0IC09IGludHJhX2xpbmU7CisrICBzaXplICs9IGludHJhX2xpbmU7CisrICBzaXpl ID0gKChzaXplIC0gMSkgfCBDYWNoZVBhZ2U6OmtMaW5lTWFzaykgKyAxOworKyAgaW50IG9mZnNl dCA9IChzdGFydCAmIENhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKKysgIHdoaWxlICghQWxsT25PbmVQ YWdlKHN0YXJ0LCBzaXplIC0gMSkpIHsKKysgICAgaW50IGJ5dGVzX3RvX2ZsdXNoID0gQ2FjaGVQ YWdlOjprUGFnZVNpemUgLSBvZmZzZXQ7CisrICAgIEZsdXNoT25lUGFnZUxvY2tlZChpX2NhY2hl LCBzdGFydCwgYnl0ZXNfdG9fZmx1c2gpOworKyAgICBzdGFydCArPSBieXRlc190b19mbHVzaDsK KysgICAgc2l6ZSAtPSBieXRlc190b19mbHVzaDsKKysgICAgTU9aX0FTU0VSVCgoc3RhcnQgJiBD YWNoZVBhZ2U6OmtQYWdlTWFzaykgPT0gMCk7CisrICAgIG9mZnNldCA9IDA7CisrICB9CisrICBp ZiAoc2l6ZSAhPSAwKSB7CisrICAgIEZsdXNoT25lUGFnZUxvY2tlZChpX2NhY2hlLCBzdGFydCwg c2l6ZSk7CisrICB9CisrfQorKworKy8qIHN0YXRpYyAqLworK3ZvaWQgU2ltdWxhdG9yUHJvY2Vz czo6Y2hlY2tJQ2FjaGVMb2NrZWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpbnRwdHJf dCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpOworKyAgdm9pZCog cGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MgJiAofkNhY2hlUGFnZTo6a1Bh Z2VNYXNrKSk7CisrICB2b2lkKiBsaW5lID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVz cyAmICh+Q2FjaGVQYWdlOjprTGluZU1hc2spKTsKKysgIGludCBvZmZzZXQgPSAoYWRkcmVzcyAm IENhY2hlUGFnZTo6a1BhZ2VNYXNrKTsKKysgIENhY2hlUGFnZSogY2FjaGVfcGFnZSA9IEdldENh Y2hlUGFnZUxvY2tlZChpY2FjaGUoKSwgcGFnZSk7CisrICBjaGFyKiBjYWNoZV92YWxpZF9ieXRl ID0gY2FjaGVfcGFnZS0+dmFsaWRpdHlCeXRlKG9mZnNldCk7CisrICBib29sIGNhY2hlX2hpdCA9 ICgqY2FjaGVfdmFsaWRfYnl0ZSA9PSBDYWNoZVBhZ2U6OkxJTkVfVkFMSUQpOworKyAgY2hhciog Y2FjaGVkX2xpbmUgPSBjYWNoZV9wYWdlLT5jYWNoZWREYXRhKG9mZnNldCAmIH5DYWNoZVBhZ2U6 OmtMaW5lTWFzayk7CisrCisrICBpZiAoY2FjaGVfaGl0KSB7CisrICAgIG1vemlsbGE6OkRlYnVn T25seTxpbnQ+IGNtcHJldCA9CisrICAgICAgICBtZW1jbXAocmVpbnRlcnByZXRfY2FzdDx2b2lk Kj4oaW5zdHIpLCBjYWNoZV9wYWdlLT5jYWNoZWREYXRhKG9mZnNldCksCisrICAgICAgICAgICAg ICAgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICBNT1pfQVNTRVJUKGNtcHJldCA9 PSAwKTsKKysgIH0gZWxzZSB7CisrICAgIG1lbWNweShjYWNoZWRfbGluZSwgbGluZSwgQ2FjaGVQ YWdlOjprTGluZUxlbmd0aCk7CisrICAgICpjYWNoZV92YWxpZF9ieXRlID0gQ2FjaGVQYWdlOjpM SU5FX1ZBTElEOworKyAgfQorK30KKysKKytIYXNoTnVtYmVyIFNpbXVsYXRvclByb2Nlc3M6OklD YWNoZUhhc2hlcjo6aGFzaChjb25zdCBMb29rdXAmIGwpIHsKKysgIHJldHVybiBVMzIocmVpbnRl cnByZXRfY2FzdDx1aW50cHRyX3Q+KGwpKSA+PiAyOworK30KKysKKytib29sIFNpbXVsYXRvclBy b2Nlc3M6OklDYWNoZUhhc2hlcjo6bWF0Y2goY29uc3QgS2V5JiBrLCBjb25zdCBMb29rdXAmIGwp IHsKKysgIE1PWl9BU1NFUlQoKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGspICYgQ2FjaGVQ YWdlOjprUGFnZU1hc2spID09IDApOworKyAgTU9aX0FTU0VSVCgocmVpbnRlcnByZXRfY2FzdDxp bnRwdHJfdD4obCkgJiBDYWNoZVBhZ2U6OmtQYWdlTWFzaykgPT0gMCk7CisrICByZXR1cm4gayA9 PSBsOworK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkIFNpbXVsYXRvclByb2Nlc3M6OkZsdXNo SUNhY2hlKHZvaWQqIHN0YXJ0X2FkZHIsIHNpemVfdCBzaXplKSB7CisrICBpZiAoIUlDYWNoZUNo ZWNraW5nRGlzYWJsZUNvdW50KSB7CisrICAgIEF1dG9Mb2NrU2ltdWxhdG9yQ2FjaGUgYWxzOwor KyAgICBqczo6aml0OjpGbHVzaElDYWNoZUxvY2tlZChpY2FjaGUoKSwgc3RhcnRfYWRkciwgc2l6 ZSk7CisrICB9CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gUmVkaXJlY3Rp b24uCisrCisrY2xhc3MgUmVkaXJlY3Rpb24geworKyAgZnJpZW5kIGNsYXNzIFNpbXVsYXRvclBy b2Nlc3M7CisrCisrICBSZWRpcmVjdGlvbih2b2lkKiBuYXRpdmVGdW5jdGlvbiwgQUJJRnVuY3Rp b25UeXBlIHR5cGUpCisrICAgICAgOiBuYXRpdmVGdW5jdGlvbl8obmF0aXZlRnVuY3Rpb24pLAor KyAgICAgICAgc3dpSW5zdHJ1Y3Rpb25fKGtDYWxsUmVkaXJJbnN0ciksCisrICAgICAgICB0eXBl Xyh0eXBlKSwKKysgICAgICAgIG5leHRfKG51bGxwdHIpIHsKKysgICAgbmV4dF8gPSBTaW11bGF0 b3JQcm9jZXNzOjpyZWRpcmVjdGlvbigpOworKyAgICBpZiAoIVNpbXVsYXRvclByb2Nlc3M6OklD YWNoZUNoZWNraW5nRGlzYWJsZUNvdW50KSB7CisrICAgICAgRmx1c2hJQ2FjaGVMb2NrZWQoU2lt dWxhdG9yUHJvY2Vzczo6aWNhY2hlKCksIGFkZHJlc3NPZlN3aUluc3RydWN0aW9uKCksCisrICAg ICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICB9 CisrICAgIFNpbXVsYXRvclByb2Nlc3M6OnNldFJlZGlyZWN0aW9uKHRoaXMpOworKyAgfQorKwor KyBwdWJsaWM6CisrICB2b2lkKiBhZGRyZXNzT2ZTd2lJbnN0cnVjdGlvbigpIHsgcmV0dXJuICZz d2lJbnN0cnVjdGlvbl87IH0KKysgIHZvaWQqIG5hdGl2ZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1 cm4gbmF0aXZlRnVuY3Rpb25fOyB9CisrICBBQklGdW5jdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsg cmV0dXJuIHR5cGVfOyB9CisrCisrICBzdGF0aWMgUmVkaXJlY3Rpb24qIEdldCh2b2lkKiBuYXRp dmVGdW5jdGlvbiwgQUJJRnVuY3Rpb25UeXBlIHR5cGUpIHsKKysgICAgQXV0b0xvY2tTaW11bGF0 b3JDYWNoZSBhbHM7CisrCisrICAgIFJlZGlyZWN0aW9uKiBjdXJyZW50ID0gU2ltdWxhdG9yUHJv Y2Vzczo6cmVkaXJlY3Rpb24oKTsKKysgICAgZm9yICg7IGN1cnJlbnQgIT0gbnVsbHB0cjsgY3Vy cmVudCA9IGN1cnJlbnQtPm5leHRfKSB7CisrICAgICAgaWYgKGN1cnJlbnQtPm5hdGl2ZUZ1bmN0 aW9uXyA9PSBuYXRpdmVGdW5jdGlvbikgeworKyAgICAgICAgTU9aX0FTU0VSVChjdXJyZW50LT50 eXBlKCkgPT0gdHlwZSk7CisrICAgICAgICByZXR1cm4gY3VycmVudDsKKysgICAgICB9CisrICAg IH0KKysKKysgICAgQXV0b0VudGVyT09NVW5zYWZlUmVnaW9uIG9vbVVuc2FmZTsKKysgICAgUmVk aXJlY3Rpb24qIHJlZGlyID0ganNfcG9kX21hbGxvYzxSZWRpcmVjdGlvbj4oMSk7CisrICAgIGlm ICghcmVkaXIpIHsKKysgICAgICBvb21VbnNhZmUuY3Jhc2goIlNpbXVsYXRvciByZWRpcmVjdGlv biIpOworKyAgICB9CisrICAgIG5ldyAocmVkaXIpIFJlZGlyZWN0aW9uKG5hdGl2ZUZ1bmN0aW9u LCB0eXBlKTsKKysgICAgcmV0dXJuIHJlZGlyOworKyAgfQorKworKyAgc3RhdGljIFJlZGlyZWN0 aW9uKiBGcm9tU3dpSW5zdHJ1Y3Rpb24oU2ltSW5zdHJ1Y3Rpb24qIHN3aUluc3RydWN0aW9uKSB7 CisrICAgIHVpbnQ4X3QqIGFkZHJPZlN3aSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHN3 aUluc3RydWN0aW9uKTsKKysgICAgdWludDhfdCogYWRkck9mUmVkaXJlY3Rpb24gPQorKyAgICAg ICAgYWRkck9mU3dpIC0gb2Zmc2V0b2YoUmVkaXJlY3Rpb24sIHN3aUluc3RydWN0aW9uXyk7Cisr ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFJlZGlyZWN0aW9uKj4oYWRkck9mUmVkaXJlY3Rp b24pOworKyAgfQorKworKyBwcml2YXRlOgorKyAgdm9pZCogbmF0aXZlRnVuY3Rpb25fOworKyAg dWludDMyX3Qgc3dpSW5zdHJ1Y3Rpb25fOworKyAgQUJJRnVuY3Rpb25UeXBlIHR5cGVfOworKyAg UmVkaXJlY3Rpb24qIG5leHRfOworK307CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysv LyBTaW11bGF0b3IgY29uc3RydWN0b3IgLyBkZXN0cnVjdG9yIC8gaW5pdC4KKysKKytTaW11bGF0 b3I6OlNpbXVsYXRvcigpIHsKKysgIHN0YWNrXyA9IG51bGxwdHI7CisrICBzdGFja0xpbWl0XyA9 IDA7CisrICBwY19tb2RpZmllZF8gPSBmYWxzZTsKKysgIGljb3VudF8gPSAwOworKyAgYnJlYWtf Y291bnRfID0gMDsKKysgIGJyZWFrX3BjXyA9IG51bGxwdHI7CisrICBicmVha19pbnN0cl8gPSAw OworKyAgc2luZ2xlX3N0ZXBwaW5nXyA9IGZhbHNlOworKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tf ID0gbnVsbHB0cjsKKysgIHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18gPSBudWxscHRyOworKwor KyAgZm9yIChpbnQgaSA9IDA7IGkgPCBSZWdpc3Rlcjo6a051bVNpbXVSZWdpc3RlcnM7IGkrKykg eworKyAgICByZWdpc3RlcnNfW2ldID0gMDsKKysgIH0KKysgIGZvciAoaW50IGkgPSAwOyBpIDwg U2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVyczsgaSsrKSB7CisrICAgIEZQ VXJlZ2lzdGVyc19baV0gPSAwOworKyAgfQorKworKyAgTFJfID0gMDsKKysgIENUUl8gPSAwOwor KyAgQ1JfID0gMDsKKysgIFhFUl8gPSAwOworKyAgRlBTQ1JfID0gMDsKKysgIExMQml0XyA9IGZh bHNlOworKyAgTExBZGRyXyA9IDA7CisrICBsYXN0TExWYWx1ZV8gPSAwOworKworKyAgLy8gSW5p dGlhbGl6ZSBQQyBhbmQgTFIgdG8gYSBrbm93biBiYWQgdmFsdWUgdGhhdCB3aWxsIGNhdXNlIGFu CisrICAvLyBhY2Nlc3MgdmlvbGF0aW9uIGlmIHRoZSBzaW11bGF0b3IgZXZlciB0cmllcyB0byBl eGVjdXRlIGl0LgorKyAgcmVnaXN0ZXJzX1twY10gPSBiYWRfcmE7CisrICBMUl8gPSBiYWRfcmE7 CisrCisrICBsYXN0RGVidWdnZXJJbnB1dF8gPSBudWxscHRyOworK30KKysKKytib29sIFNpbXVs YXRvcjo6aW5pdCgpIHsKKysgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3RhY2tTaXplID0gMiAqIDEw MjQgKiAxMDI0OworKyAgc3RhY2tfID0ganNfcG9kX21hbGxvYzxjaGFyPihzdGFja1NpemUpOwor KyAgaWYgKCFzdGFja18pIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgLy8gTGVh dmUgYSBzYWZldHkgbWFyZ2luIG9mIDFNQiB0byBwcmV2ZW50IG92ZXJydW5uaW5nIHRoZSBzdGFj ay4KKysgIHN0YWNrTGltaXRfID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YWNrXykg KyAxMDI0ICogMTAyNDsKKysKKysgIC8vIFRoZSBzcCBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0 byB0aGUgYm90dG9tIChoaWdoIGFkZHJlc3MpIG9mIHRoZQorKyAgLy8gYWxsb2NhdGVkIHN0YWNr IGFyZWEuCisrICByZWdpc3RlcnNfW3NwXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oc3Rh Y2tfKSArIHN0YWNrU2l6ZSAtIDY0OworKworKyAgLy8gWmVyby1pbml0aWFsaXplIFZSIG5hbWVz cGFjZS4gU2ltdWxhdGVkIFBQQzY0IGRvZXMgbm90IGd1YXJhbnRlZSBhbnkKKysgIC8vIHZhbHVl IGluIFZScyBhdCBlbnRyeSwgYnV0IHplcm9pbmcgYXZvaWRzIHVuaW5pdGlhbGl6ZWQtcmVhZCBm YWxzZQorKyAgLy8gcG9zaXRpdmVzIGluIHRvb2xzIGFuZCBtYWtlcyByZWdyZXNzaW9uIHRyYWNl cyBkZXRlcm1pbmlzdGljLgorKyAgbWVtc2V0KFZScmVnaXN0ZXJzXywgMCwgc2l6ZW9mKFZScmVn aXN0ZXJzXykpOworKworKyAgcmV0dXJuIHRydWU7CisrfQorKworK1NpbXVsYXRvcjo6flNpbXVs YXRvcigpIHsganNfZnJlZShzdGFja18pOyB9CisrCisrU2ltdWxhdG9yUHJvY2Vzczo6U2ltdWxh dG9yUHJvY2VzcygpCisrICAgIDogY2FjaGVMb2NrXyhtdXRleGlkOjpTaW11bGF0b3JDYWNoZUxv Y2spLCByZWRpcmVjdGlvbl8obnVsbHB0cikgeworKyAgaWYgKGdldGVudigiUFBDNjRfU0lNX0lD QUNIRV9DSEVDS1MiKSkgeworKyAgICBJQ2FjaGVDaGVja2luZ0Rpc2FibGVDb3VudCA9IDA7Cisr ICB9CisrfQorKworK1NpbXVsYXRvclByb2Nlc3M6On5TaW11bGF0b3JQcm9jZXNzKCkgeworKyAg UmVkaXJlY3Rpb24qIHIgPSByZWRpcmVjdGlvbl87CisrICB3aGlsZSAocikgeworKyAgICBSZWRp cmVjdGlvbiogbmV4dCA9IHItPm5leHRfOworKyAgICBqc19kZWxldGUocik7CisrICAgIHIgPSBu ZXh0OworKyAgfQorK30KKysKKysvKiBzdGF0aWMgKi8KKyt2b2lkKiBTaW11bGF0b3I6OlJlZGly ZWN0TmF0aXZlRnVuY3Rpb24odm9pZCogbmF0aXZlRnVuY3Rpb24sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFCSUZ1bmN0aW9uVHlwZSB0eXBlKSB7CisrICBSZWRp cmVjdGlvbiogcmVkaXJlY3Rpb24gPSBSZWRpcmVjdGlvbjo6R2V0KG5hdGl2ZUZ1bmN0aW9uLCB0 eXBlKTsKKysgIHJldHVybiByZWRpcmVjdGlvbi0+YWRkcmVzc09mU3dpSW5zdHJ1Y3Rpb24oKTsK Kyt9CisrCisrU2ltdWxhdG9yKiBTaW11bGF0b3I6OkN1cnJlbnQoKSB7CisrICBKU0NvbnRleHQq IGN4ID0gVGxzQ29udGV4dC5nZXQoKTsKKysgIE1PWl9BU1NFUlQoQ3VycmVudFRocmVhZENhbkFj Y2Vzc1J1bnRpbWUoY3gtPnJ1bnRpbWUoKSkpOworKyAgcmV0dXJuIGN4LT5zaW11bGF0b3IoKTsK Kyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBSZWdpc3RlciBhY2Nlc3NvcnMu CisrCisrdm9pZCBTaW11bGF0b3I6OnNldFJlZ2lzdGVyKGludCByZWcsIGludDY0X3QgdmFsdWUp IHsKKysgIE1PWl9BU1NFUlQoKHJlZyA+PSAwKSAmJiAocmVnIDwgUmVnaXN0ZXI6OmtOdW1TaW11 UmVnaXN0ZXJzKSk7CisrICBpZiAocmVnID09IHBjKSB7CisrICAgIHBjX21vZGlmaWVkXyA9IHRy dWU7CisrICB9CisrICByZWdpc3RlcnNfW3JlZ10gPSB2YWx1ZTsKKyt9CisrCisraW50NjRfdCBT aW11bGF0b3I6OmdldFJlZ2lzdGVyKGludCByZWcpIGNvbnN0IHsKKysgIE1PWl9BU1NFUlQoKHJl ZyA+PSAwKSAmJiAocmVnIDwgUmVnaXN0ZXI6OmtOdW1TaW11UmVnaXN0ZXJzKSk7CisrICByZXR1 cm4gcmVnaXN0ZXJzX1tyZWddICsgKChyZWcgPT0gcGMpID8gU2ltSW5zdHJ1Y3Rpb246OmtQQ1Jl YWRPZmZzZXQgOiAwKTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OnNldEZwdVJlZ2lzdGVyKGlu dCBmcHVyZWcsIGludDY0X3QgdmFsdWUpIHsKKysgIE1PWl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAm JgorKyAgICAgICAgICAgICAoZnB1cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQ VVJlZ2lzdGVycykpOworKyAgRlBVcmVnaXN0ZXJzX1tmcHVyZWddID0gdmFsdWU7CisrfQorKwor K3ZvaWQgU2ltdWxhdG9yOjpzZXRGcHVSZWdpc3RlcldvcmQoaW50IGZwdXJlZywgaW50MzJfdCB2 YWx1ZSkgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCisrICAgICAgICAgICAgIChm cHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7CisrICBp bnQzMl90KiBwd29yZDsKKysgIHB3b3JkID0gcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Kj4oJkZQ VXJlZ2lzdGVyc19bZnB1cmVnXSk7CisrICAqcHdvcmQgPSB2YWx1ZTsKKyt9CisrCisrLy8gUHJv bW90ZSBmMzIg4oaSIGY2NCBwcmVzZXJ2aW5nIE5hTiBwYXlsb2FkLCBsaWtlIFBQQzY0J3MgYGxm c2AgYW5kCisrLy8gYHhzY3ZzcGRwbmAuIFRoZSBwbGFpbiBDIGNhc3QgYChkb3VibGUpZjMyX25h bmAgaXMgcGVybWl0dGVkIGJ5IHRoZQorKy8vIHN0YW5kYXJkIHRvIHF1aWV0IGEgc2lnbmFsaW5n IE5hTiwgd2hpY2ggb24geDg2L0FSTSBob3N0cyB2aXNpYmx5CisrLy8gdHJhbnNmb3JtcyAweDdG QTAwMDAwIChzTmFOKSBpbnRvIGEgcU5hTiBzdWNoIGFzIDB4N0ZFMDAwMDAg4oCUIGJyZWFraW5n CisrLy8gZXZlcnkgd2FzbSB0ZXN0IHRoYXQgbG9hZHMgYSBjb25zdGFudCBzTmFOIGJpdCBwYXR0 ZXJuLiBNYW51YWxseQorKy8vIHJlY29uc3RydWN0IHRoZSBmNjQgTmFOIHdpdGggdGhlIHNhbWUg c2lnbiArIHBheWxvYWQgKHBheWxvYWQgc2hpZnRlZAorKy8vIGxlZnQgYnkgMjkgdG8gZmlsbCB0 aGUgd2lkZXIgbWFudGlzc2EpLgorK3N0YXRpYyBkb3VibGUgcHJvbW90ZUZsb2F0UHJlc2Vydmlu Z05hTihmbG9hdCBmKSB7CisrICB1aW50MzJfdCBiaXRzOworKyAgbWVtY3B5KCZiaXRzLCAmZiwg c2l6ZW9mKGJpdHMpKTsKKysgIGlmICgoYml0cyAmIDB4N0Y4MDAwMDB1KSA9PSAweDdGODAwMDAw dSAmJiAoYml0cyAmIDB4MDA3RkZGRkZ1KSAhPSAwdSkgeworKyAgICB1aW50NjRfdCBzaWduID0g dWludDY0X3QoYml0cyA+PiAzMSkgJiAxdTsKKysgICAgdWludDY0X3QgcGF5bG9hZCA9IHVpbnQ2 NF90KGJpdHMgJiAweDAwN0ZGRkZGdSk7CisrICAgIHVpbnQ2NF90IGRiaXRzID0gKHNpZ24gPDwg NjMpIHwgKHVpbnQ2NF90KDB4N0ZGdSkgPDwgNTIpIHwgKHBheWxvYWQgPDwgMjkpOworKyAgICBk b3VibGUgZDsKKysgICAgbWVtY3B5KCZkLCAmZGJpdHMsIHNpemVvZihkKSk7CisrICAgIHJldHVy biBkOworKyAgfQorKyAgcmV0dXJuIChkb3VibGUpZjsKKyt9CisrCisrLy8gRGVtb3RlIGY2NCDi hpIgZjMyIHByZXNlcnZpbmcgTmFOIHBheWxvYWQgKG5vbi1zaWduYWxpbmc6IG1hdGNoZXMgUFBD NjQKKysvLyBgc3Rmc2AgLyBgeHNjdmRwc3BuYCwgYW5kIHdhc20gYGxmc2AtZXF1aXZhbGVudCBz dG9yZXMpLiBUcnVuY2F0ZXMgdGhlCisrLy8gbG93ZXIgMjkgYml0cyBvZiB0aGUgZjY0IHBheWxv YWQgKHRob3NlIGJpdHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluCisrLy8gdGhlIG5hcnJvd2Vy IGYzMiBtYW50aXNzYSk7IGlmIHRoZSB0cnVuY2F0aW9uIHdvdWxkIHlpZWxkIGEgcGF5bG9hZCBv ZgorKy8vIHplcm8gKHdoaWNoIHdvdWxkIGRlZ3JhZGUgdGhlIE5hTiB0byBhbiBJbmZpbml0eSks IGZvcmNlIHRoZSBMU0Igc28KKysvLyB0aGUgcmVzdWx0IGlzIHN0aWxsIGEgTmFOLiBUaGlzIGlu dGVudGlvbmFsbHkgZG9lcyBOT1Qgc2V0IHRoZSBxdWlldAorKy8vIGJpdCDigJQgdGhhdCdzIHRo ZSBqb2Igb2YgdGhlIGV4cGxpY2l0LXF1aWV0aW5nIG9wIGB4c2N2ZHBzcGAgYW5kCisrLy8gZjMy LmRlbW90ZV9mNjQncyB3YXNtLWxldmVsIGxvd2VyaW5nLgorK3N0YXRpYyBmbG9hdCBkZW1vdGVE b3VibGVQcmVzZXJ2aW5nTmFOKGRvdWJsZSBkKSB7CisrICB1aW50NjRfdCBiaXRzOworKyAgbWVt Y3B5KCZiaXRzLCAmZCwgc2l6ZW9mKGJpdHMpKTsKKysgIGlmICgoYml0cyAmIDB4N0ZGMDAwMDAw MDAwMDAwMFVMTCkgPT0gMHg3RkYwMDAwMDAwMDAwMDAwVUxMICYmCisrICAgICAgKGJpdHMgJiAw eDAwMEZGRkZGRkZGRkZGRkZVTEwpICE9IDApIHsKKysgICAgdWludDMyX3Qgc2lnbiA9IHVpbnQz Ml90KGJpdHMgPj4gNjMpICYgMXU7CisrICAgIHVpbnQzMl90IHBheWxvYWQgPSB1aW50MzJfdCgo Yml0cyA+PiAyOSkgJiAweDAwN0ZGRkZGdSk7CisrICAgIGlmIChwYXlsb2FkID09IDApIHBheWxv YWQgPSAxOworKyAgICB1aW50MzJfdCBmYml0cyA9IChzaWduIDw8IDMxKSB8IDB4N0Y4MDAwMDB1 IHwgcGF5bG9hZDsKKysgICAgZmxvYXQgZjsKKysgICAgbWVtY3B5KCZmLCAmZmJpdHMsIHNpemVv ZihmKSk7CisrICAgIHJldHVybiBmOworKyAgfQorKyAgcmV0dXJuIChmbG9hdClkOworK30KKysK Kyt2b2lkIFNpbXVsYXRvcjo6c2V0RnB1UmVnaXN0ZXJGbG9hdChpbnQgZnB1cmVnLCBmbG9hdCB2 YWx1ZSkgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCisrICAgICAgICAgICAgIChm cHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7CisrICAv LyBFTEZ2MiBBQkk6IHNpbmdsZS1wcmVjaXNpb24gdmFsdWVzIGluIEZQUnMgYXJlIHN0b3JlZCBh cyB0aGVpcgorKyAgLy8gZG91YmxlLXByZWNpc2lvbiByZXByZXNlbnRhdGlvbi4gUHJvbW90ZSBh bmQgc3RvcmUgdGhlIGZ1bGwgOCBieXRlcywKKysgIC8vIG5vdCBqdXN0IHRoZSBsb3cgNC4gKE90 aGVyd2lzZSB0aGUgdXBwZXIgNCBieXRlcyBhcmUgc3RhbGUsIG1hdGNoaW5nCisrICAvLyB0aGUg bGF5b3V0IHRoYXQgZmN0aWQvZmNmaWQvbGZkIHdvdWxkIHJlYWQgYnV0IE5PVCB3aGF0IHRoZSBK SVQgYW5kCisrICAvLyB0aGUgQyBBQkkgZXhwZWN0IGZvciBhICdmbG9hdCcgcGFyYW1ldGVyLikg VXNlIHRoZSBOYU4tcHJlc2VydmluZworKyAgLy8gaGVscGVyIHNvIGEgc2lnbmFsaW5nLU5hTiBy ZXR1cm4gdmFsdWUgaXNuJ3QgcXVpZXRlZCBpbnRvIGEgcU5hTi4KKysgIGRvdWJsZSBwcm9tb3Rl ZCA9IHByb21vdGVGbG9hdFByZXNlcnZpbmdOYU4odmFsdWUpOworKyAgbWVtY3B5KCZGUFVyZWdp c3RlcnNfW2ZwdXJlZ10sICZwcm9tb3RlZCwgc2l6ZW9mKHByb21vdGVkKSk7CisrfQorKworK3Zv aWQgU2ltdWxhdG9yOjpzZXRGcHVSZWdpc3RlckRvdWJsZShpbnQgZnB1cmVnLCBkb3VibGUgdmFs dWUpIHsKKysgIE1PWl9BU1NFUlQoKGZwdXJlZyA+PSAwKSAmJgorKyAgICAgICAgICAgICAoZnB1 cmVnIDwgU2ltdWxhdG9yOjpGUFVSZWdpc3Rlcjo6a051bUZQVVJlZ2lzdGVycykpOworKyAgKm1v emlsbGE6OkJpdHdpc2VDYXN0PGRvdWJsZSo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pID0gdmFs dWU7CisrfQorKworK2ludDY0X3QgU2ltdWxhdG9yOjpnZXRGcHVSZWdpc3RlcihpbnQgZnB1cmVn KSBjb25zdCB7CisrICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAgICAgICAg KGZwdXJlZyA8IFNpbXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKKysg IHJldHVybiBGUFVyZWdpc3RlcnNfW2ZwdXJlZ107CisrfQorKworK2ludDMyX3QgU2ltdWxhdG9y OjpnZXRGcHVSZWdpc3RlcldvcmQoaW50IGZwdXJlZykgY29uc3QgeworKyAgTU9aX0FTU0VSVCgo ZnB1cmVnID49IDApICYmCisrICAgICAgICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJl Z2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7CisrICByZXR1cm4gKm1vemlsbGE6OkJpdHdpc2VD YXN0PGludDMyX3QqPigmRlBVcmVnaXN0ZXJzX1tmcHVyZWddKTsKKyt9CisrCisraW50MzJfdCBT aW11bGF0b3I6OmdldEZwdVJlZ2lzdGVyU2lnbmVkV29yZChpbnQgZnB1cmVnKSBjb25zdCB7Cisr ICBNT1pfQVNTRVJUKChmcHVyZWcgPj0gMCkgJiYKKysgICAgICAgICAgICAgKGZwdXJlZyA8IFNp bXVsYXRvcjo6RlBVUmVnaXN0ZXI6OmtOdW1GUFVSZWdpc3RlcnMpKTsKKysgIHJldHVybiAqbW96 aWxsYTo6Qml0d2lzZUNhc3Q8aW50MzJfdCo+KCZGUFVyZWdpc3RlcnNfW2ZwdXJlZ10pOworK30K KysKKytmbG9hdCBTaW11bGF0b3I6OmdldEZwdVJlZ2lzdGVyRmxvYXQoaW50IGZwdXJlZykgY29u c3QgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCisrICAgICAgICAgICAgIChmcHVy ZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJzKSk7CisrICAvLyBF TEZ2MiBBQkk6IHNpbmdsZS1wcmVjaXNpb24gdmFsdWVzIGFyZSBwYXNzZWQvcmV0dXJuZWQgaW4g RlBScyBhcyB0aGVpcgorKyAgLy8gZG91YmxlLXByZWNpc2lvbiByZXByZXNlbnRhdGlvbi4gUmVh ZCB0aGUgZnVsbCA4IGJ5dGVzIGFzIGRvdWJsZSwgdGhlbgorKyAgLy8gbmFycm93IHRvIGZsb2F0 IOKAlCBtYXRjaGluZyB0aGUgYGZyc3BgIHRoZSBDIGNhbGxlZSB3b3VsZCBkbywgYW5kIG1hdGNo aW5nCisrICAvLyB3aGF0IHJlYWwgUFBDNjQgaGFyZHdhcmUgc2VlcyB3aGVuIHRoZSBGUFIgd2Fz IGxvYWRlZCB2aWEgYGxmc2AuIFVzZSB0aGUKKysgIC8vIE5hTi1wcmVzZXJ2aW5nIGhlbHBlciBz byBhIHNpZ25hbGluZy1OYU4gcGFyYW1ldGVyIGlzbid0IHF1aWV0ZWQuCisrICBkb3VibGUgcHJv bW90ZWQ7CisrICBtZW1jcHkoJnByb21vdGVkLCAmRlBVcmVnaXN0ZXJzX1tmcHVyZWddLCBzaXpl b2YocHJvbW90ZWQpKTsKKysgIHJldHVybiBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKHByb21v dGVkKTsKKyt9CisrCisrZG91YmxlIFNpbXVsYXRvcjo6Z2V0RnB1UmVnaXN0ZXJEb3VibGUoaW50 IGZwdXJlZykgY29uc3QgeworKyAgTU9aX0FTU0VSVCgoZnB1cmVnID49IDApICYmCisrICAgICAg ICAgICAgIChmcHVyZWcgPCBTaW11bGF0b3I6OkZQVVJlZ2lzdGVyOjprTnVtRlBVUmVnaXN0ZXJz KSk7CisrICByZXR1cm4gKm1vemlsbGE6OkJpdHdpc2VDYXN0PGRvdWJsZSo+KCZGUFVyZWdpc3Rl cnNfW2ZwdXJlZ10pOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6c2V0VlJCeXRlcyhpbnQgdnJl ZywgY29uc3QgdWludDhfdCBieXRlc1sxNl0pIHsKKysgIE1PWl9BU1NFUlQoKHZyZWcgPj0gMCkg JiYgKHZyZWcgPCBrTnVtVlJSZWdpc3RlcnMpKTsKKysgIG1lbWNweShWUnJlZ2lzdGVyc19bdnJl Z10sIGJ5dGVzLCAxNik7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpnZXRWUkJ5dGVzKGludCB2 cmVnLCB1aW50OF90IGJ5dGVzWzE2XSkgY29uc3QgeworKyAgTU9aX0FTU0VSVCgodnJlZyA+PSAw KSAmJiAodnJlZyA8IGtOdW1WUlJlZ2lzdGVycykpOworKyAgbWVtY3B5KGJ5dGVzLCBWUnJlZ2lz dGVyc19bdnJlZ10sIDE2KTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmdldFZTUjEyOChpbnQg dnNyLCB1aW50OF90IGJ5dGVzWzE2XSkgY29uc3QgeworKyAgTU9aX0FTU0VSVCgodnNyID49IDAp ICYmICh2c3IgPCBrTnVtRlBVUmVnaXN0ZXJzICsga051bVZSUmVnaXN0ZXJzKSk7CisrICBpZiAo dnNyIDwga051bUZQVVJlZ2lzdGVycykgeworKyAgICAvLyBWU1IgMC0zMTogRlBSIHZpZXcuIFRo ZSBGUFIgc2NhbGFyIGxpdmVzIGluIEJFIERXMCBvZiB0aGUgVlNSLAorKyAgICAvLyB3aGljaCBv biBQUEM2NExFIHJlZ2lzdGVyIHN0b3JhZ2UgbWFwcyB0byBMRSBieXRlcyA4LTE1LgorKyAgICAv LyBEVzEgaXMgdW5kZWZpbmVkIHBlciBJU0E7IHdlIG1vZGVsIGl0IGFzIHplcm8uCisrICAgIC8v IGBsZmQgZjAsKG1lbSk7IHh4bG9yIDx2cj4sZjAsZjA7IHN0eHZ4IDx2cj4sLi4uYCB3cml0ZXMg dGhlCisrICAgIC8vIGRvdWJsZSdzIDggYnl0ZXMgdG8gdGhlIEhJR0ggaGFsZiBvZiB0aGUgMTYt Ynl0ZSBzdG9yZSAoTEUKKysgICAgLy8gYnl0ZXMgOC0xNSkuCisrICAgIGludDY0X3QgdmFsID0g RlBVcmVnaXN0ZXJzX1t2c3JdOworKyAgICBtZW1zZXQoYnl0ZXMsIDAsIDgpOworKyAgICBtZW1j cHkoYnl0ZXMgKyA4LCAmdmFsLCA4KTsKKysgIH0gZWxzZSB7CisrICAgIG1lbWNweShieXRlcywg VlJyZWdpc3RlcnNfW3ZzciAtIGtOdW1GUFVSZWdpc3RlcnNdLCAxNik7CisrICB9CisrfQorKwor K3ZvaWQgU2ltdWxhdG9yOjpzZXRWU1IxMjgoaW50IHZzciwgY29uc3QgdWludDhfdCBieXRlc1sx Nl0pIHsKKysgIE1PWl9BU1NFUlQoKHZzciA+PSAwKSAmJiAodnNyIDwga051bUZQVVJlZ2lzdGVy cyArIGtOdW1WUlJlZ2lzdGVycykpOworKyAgaWYgKHZzciA8IGtOdW1GUFVSZWdpc3RlcnMpIHsK KysgICAgLy8gRlBSIHNjYWxhciBhdCBCRSBEVzAgPSBMRSBieXRlcyA4LTE1LiBEVzEgaXMgYXJj aGl0ZWN0dXJhbGx5CisrICAgIC8vIGRpc2NhcmRlZCBvbiBWU1ItdG8tRlBSIHdyaXRlcy4KKysg ICAgaW50NjRfdCB2YWw7CisrICAgIG1lbWNweSgmdmFsLCBieXRlcyArIDgsIDgpOworKyAgICBG UFVyZWdpc3RlcnNfW3Zzcl0gPSB2YWw7CisrICB9IGVsc2UgeworKyAgICBtZW1jcHkoVlJyZWdp c3RlcnNfW3ZzciAtIGtOdW1GUFVSZWdpc3RlcnNdLCBieXRlcywgMTYpOworKyAgfQorK30KKysK Kyt2b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJlc3VsdERvdWJsZShkb3VibGUgcmVzdWx0KSB7Cisr ICBzZXRGcHVSZWdpc3RlckRvdWJsZShTaW11bGF0b3I6OmYxLCByZXN1bHQpOworK30KKysKKyt2 b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJlc3VsdEZsb2F0KGZsb2F0IHJlc3VsdCkgeworKyAgc2V0 RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYxLCByZXN1bHQpOworK30KKysKKyt2b2lkIFNp bXVsYXRvcjo6c2V0Q2FsbFJlc3VsdChpbnQ2NF90IHJlcykgeyBzZXRSZWdpc3RlcihyMywgcmVz KTsgfQorKworKyNpZmRlZiBYUF9EQVJXSU4KKyt2b2lkIFNpbXVsYXRvcjo6c2V0Q2FsbFJlc3Vs dChpbnRwdHJfdCByZXMpIHsKKysgIHNldFJlZ2lzdGVyKHIzLCBJNjQocmVzKSk7CisrfQorKyNl bmRpZgorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRDYWxsUmVzdWx0KF9faW50MTI4IHJlcykgewor KyAgc2V0UmVnaXN0ZXIocjMsIEk2NChyZXMpKTsKKysgIHNldFJlZ2lzdGVyKHI0LCBJNjQocmVz ID4+IDY0KSk7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpzZXRfcGMoaW50NjRfdCB2YWx1ZSkg eworKyAgcGNfbW9kaWZpZWRfID0gdHJ1ZTsKKysgIHJlZ2lzdGVyc19bcGNdID0gdmFsdWU7Cisr fQorKworK2Jvb2wgU2ltdWxhdG9yOjpoYXNfYmFkX3BjKCkgY29uc3QgeworKyAgcmV0dXJuICgo cmVnaXN0ZXJzX1twY10gPT0gYmFkX3JhKSB8fCAocmVnaXN0ZXJzX1twY10gPT0gZW5kX3NpbV9w YykpOworK30KKysKKytpbnQ2NF90IFNpbXVsYXRvcjo6Z2V0X3BjKCkgY29uc3QgeyByZXR1cm4g cmVnaXN0ZXJzX1twY107IH0KKysKKytKUzo6UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6UmVnaXN0 ZXJTdGF0ZSBTaW11bGF0b3I6OnJlZ2lzdGVyU3RhdGUoKSB7CisrICB3YXNtOjpSZWdpc3RlclN0 YXRlIHN0YXRlOworKyAgc3RhdGUucGMgPSAodm9pZCopZ2V0X3BjKCk7CisrICBzdGF0ZS5mcCA9 ICh2b2lkKilnZXRSZWdpc3RlcihmcCk7CisrICBzdGF0ZS5zcCA9ICh2b2lkKilnZXRSZWdpc3Rl cihzcCk7CisrICBzdGF0ZS5sciA9ICh2b2lkKilnZXRMUigpOworKyAgcmV0dXJuIHN0YXRlOwor K30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIE1lbW9yeSBhY2Nlc3MgaGVscGVy cy4KKysKKyt1aW50OF90IFNpbXVsYXRvcjo6cmVhZEJVKHVpbnQ2NF90IGFkZHIpIHsKKysgIGlm IChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMSkpIHsKKysgICAgcmV0dXJuIDB4ZmY7CisrICB9 CisrICB1aW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihhZGRyKTsKKysg IHJldHVybiAqcHRyOworK30KKysKKytpbnQ4X3QgU2ltdWxhdG9yOjpyZWFkQih1aW50NjRfdCBh ZGRyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDEpKSB7CisrICAgIHJldHVy biAtMTsKKysgIH0KKysgIGludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihh ZGRyKTsKKysgIHJldHVybiAqcHRyOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVCKHVp bnQ2NF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQo YWRkciwgMSkpIHsKKysgICAgcmV0dXJuOworKyAgfQorKyAgdWludDhfdCogcHRyID0gcmVpbnRl cnByZXRfY2FzdDx1aW50OF90Kj4oYWRkcik7CisrICAqcHRyID0gdmFsdWU7CisrfQorKworK3Zv aWQgU2ltdWxhdG9yOjp3cml0ZUIodWludDY0X3QgYWRkciwgaW50OF90IHZhbHVlKSB7CisrICBp ZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDEpKSB7CisrICAgIHJldHVybjsKKysgIH0KKysg IGludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ4X3QqPihhZGRyKTsKKysgICpwdHIg PSB2YWx1ZTsKKyt9CisrCisrdWludDE2X3QgU2ltdWxhdG9yOjpyZWFkSFUodWludDY0X3QgYWRk ciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFk ZHIsIDIpKSB7CisrICAgIHJldHVybiAweGZmZmY7CisrICB9CisrICB1aW50MTZfdCogcHRyID0g cmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGFkZHIpOworKyAgcmV0dXJuICpwdHI7CisrfQor KworK2ludDE2X3QgU2ltdWxhdG9yOjpyZWFkSCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKKysgICAg cmV0dXJuIC0xOworKyAgfQorKyAgaW50MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQx Nl90Kj4oYWRkcik7CisrICByZXR1cm4gKnB0cjsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6Ondy aXRlSCh1aW50NjRfdCBhZGRyLCB1aW50MTZfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDIpKSB7CisrICAgIHJldHVybjsK KysgIH0KKysgIHVpbnQxNl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYWRk cik7CisrICBMTEJpdF8gPSBmYWxzZTsKKysgICpwdHIgPSB2YWx1ZTsKKyt9CisrCisrdm9pZCBT aW11bGF0b3I6OndyaXRlSCh1aW50NjRfdCBhZGRyLCBpbnQxNl90IHZhbHVlLCBTaW1JbnN0cnVj dGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKKysg ICAgcmV0dXJuOworKyAgfQorKyAgaW50MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQx Nl90Kj4oYWRkcik7CisrICBMTEJpdF8gPSBmYWxzZTsKKysgICpwdHIgPSB2YWx1ZTsKKyt9Cisr CisrdWludDMyX3QgU2ltdWxhdG9yOjpyZWFkV1UodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFkZHIsIDQpKSB7CisrICAg IHJldHVybiAtMTsKKysgIH0KKysgIHVpbnQzMl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVp bnQzMl90Kj4oYWRkcik7CisrICByZXR1cm4gKnB0cjsKKyt9CisrCisraW50MzJfdCBTaW11bGF0 b3I6OnJlYWRXKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA0KSkgeworKyAgICByZXR1cm4gLTE7CisrICB9Cisr ICBpbnQzMl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDMyX3QqPihhZGRyKTsKKysgIHJl dHVybiAqcHRyOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVXKHVpbnQ2NF90IGFkZHIs IHVpbnQzMl90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVX YXNtU2VnRmF1bHQoYWRkciwgNCkpIHsKKysgICAgcmV0dXJuOworKyAgfQorKyAgdWludDMyX3Qq IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihhZGRyKTsKKysgIExMQml0XyA9IGZh bHNlOworKyAgKnB0ciA9IHZhbHVlOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVXKHVp bnQ2NF90IGFkZHIsIGludDMyX3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAg aWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA0KSkgeworKyAgICByZXR1cm47CisrICB9Cisr ICBpbnQzMl90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDMyX3QqPihhZGRyKTsKKysgIExM Qml0XyA9IGZhbHNlOworKyAgKnB0ciA9IHZhbHVlOworK30KKysKKytpbnQ2NF90IFNpbXVsYXRv cjo6cmVhZERXKHVpbnQ2NF90IGFkZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYg KGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA4KSkgeworKyAgICByZXR1cm4gLTE7CisrICB9Cisr ICBpbnQ2NF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PGludDY0X3QqPihhZGRyKTsKKysgIHJl dHVybiAqcHRyOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6d3JpdGVEVyh1aW50NjRfdCBhZGRy LCBpbnQ2NF90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIGlmIChoYW5kbGVX YXNtU2VnRmF1bHQoYWRkciwgOCkpIHsKKysgICAgcmV0dXJuOworKyAgfQorKyAgaW50NjRfdCog cHRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90Kj4oYWRkcik7CisrICBMTEJpdF8gPSBmYWxz ZTsKKysgICpwdHIgPSB2YWx1ZTsKKyt9CisrCisrZG91YmxlIFNpbXVsYXRvcjo6cmVhZEQodWlu dDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNl Z0ZhdWx0KGFkZHIsIDgpKSB7CisrICAgIHJldHVybiBOQU47CisrICB9CisrICBkb3VibGUqIHB0 ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlKj4oYWRkcik7CisrICByZXR1cm4gKnB0cjsKKyt9 CisrCisrdm9pZCBTaW11bGF0b3I6OndyaXRlRCh1aW50NjRfdCBhZGRyLCBkb3VibGUgdmFsdWUs IFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRy LCA4KSkgeworKyAgICByZXR1cm47CisrICB9CisrICBkb3VibGUqIHB0ciA9IHJlaW50ZXJwcmV0 X2Nhc3Q8ZG91YmxlKj4oYWRkcik7CisrICBMTEJpdF8gPSBmYWxzZTsKKysgICpwdHIgPSB2YWx1 ZTsKKyt9CisrCisrLy8gQnl0ZS13aWRlIGxvYWQtcmVzZXJ2ZSAvIHN0b3JlLWNvbmRpdGlvbmFs IChsYmFyeCAvIHN0YmN4LikuCisrLy8gQnl0ZSBhY2Nlc3NlcyBoYXZlIG5vIGFsaWdubWVudCBy ZXF1aXJlbWVudC4KKyt1aW50OF90IFNpbXVsYXRvcjo6bG9hZExpbmtlZEIodWludDY0X3QgYWRk ciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoaGFuZGxlV2FzbVNlZ0ZhdWx0KGFk ZHIsIDEpKSB7CisrICAgIHJldHVybiAwOworKyAgfQorKyAgdm9sYXRpbGUgdWludDhfdCogcHRy ID0gcmVpbnRlcnByZXRfY2FzdDx2b2xhdGlsZSB1aW50OF90Kj4oYWRkcik7CisrICB1aW50OF90 IHZhbHVlID0gKnB0cjsKKysgIGxhc3RMTFZhbHVlXyA9IHZhbHVlOworKyAgTExBZGRyXyA9IGFk ZHI7CisrICBMTEJpdF8gPSB0cnVlOworKyAgcmV0dXJuIHZhbHVlOworK30KKysKKytpbnQgU2lt dWxhdG9yOjpzdG9yZUNvbmRpdGlvbmFsQih1aW50NjRfdCBhZGRyLCB1aW50OF90IHZhbHVlLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cikg eworKyAgaWYgKGFkZHIgIT0gTExBZGRyXykgeworKyAgICBwcmludGYoInN0YmN4LiB0byBiYWQg YWRkcmVzczogMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSCisrICAgICAgICAg ICAiLCBleHBlY3RlZDogMHglMDE2IiBQUkl4UFRSICJcbiIsCisrICAgICAgICAgICBhZGRyLCBy ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0ciksIExMQWRkcl8pOworKyAgICBNT1pfQ1JB U0goKTsKKysgIH0KKysgIFNoYXJlZE1lbTx1aW50OF90Kj4gcHRyID0KKysgICAgICBTaGFyZWRN ZW08dWludDhfdCo+OjpzaGFyZWQocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYWRkcikpOwor KyAgaWYgKCFMTEJpdF8pIHsKKysgICAgcmV0dXJuIDA7CisrICB9CisrICBMTEJpdF8gPSBmYWxz ZTsKKysgIExMQWRkcl8gPSAwOworKyAgdWludDhfdCBleHBlY3RlZCA9IHVpbnQ4X3QobGFzdExM VmFsdWVfKTsKKysgIHVpbnQ4X3Qgb2xkID0KKysgICAgICBBdG9taWNPcGVyYXRpb25zOjpjb21w YXJlRXhjaGFuZ2VTZXFDc3QocHRyLCBleHBlY3RlZCwgdmFsdWUpOworKyAgcmV0dXJuIChvbGQg PT0gZXhwZWN0ZWQpID8gMSA6IDA7CisrfQorKworKy8vIEhhbGZ3b3JkLXdpZGUgbG9hZC1yZXNl cnZlIC8gc3RvcmUtY29uZGl0aW9uYWwgKGxoYXJ4IC8gc3RoY3guKS4KKysvLyAyLWJ5dGUgYWxp Z25lZCBwZXIgSVNBLgorK3VpbnQxNl90IFNpbXVsYXRvcjo6bG9hZExpbmtlZEgodWludDY0X3Qg YWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoKGFkZHIgJiAxKSA9PSAwKSB7 CisrICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgMikpIHsKKysgICAgICByZXR1cm4g MDsKKysgICAgfQorKyAgICB2b2xhdGlsZSB1aW50MTZfdCogcHRyID0gcmVpbnRlcnByZXRfY2Fz dDx2b2xhdGlsZSB1aW50MTZfdCo+KGFkZHIpOworKyAgICB1aW50MTZfdCB2YWx1ZSA9ICpwdHI7 CisrICAgIGxhc3RMTFZhbHVlXyA9IHZhbHVlOworKyAgICBMTEFkZHJfID0gYWRkcjsKKysgICAg TExCaXRfID0gdHJ1ZTsKKysgICAgcmV0dXJuIHZhbHVlOworKyAgfQorKyAgcHJpbnRmKCJVbmFs aWduZWQgbGhhcnggYXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSICJcbiIs IGFkZHIsCisrICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oaW5zdHIpKTsKKysg IE1PWl9DUkFTSCgpOworKyAgcmV0dXJuIDA7CisrfQorKworK2ludCBTaW11bGF0b3I6OnN0b3Jl Q29uZGl0aW9uYWxIKHVpbnQ2NF90IGFkZHIsIHVpbnQxNl90IHZhbHVlLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYgKGFk ZHIgIT0gTExBZGRyXykgeworKyAgICBwcmludGYoInN0aGN4LiB0byBiYWQgYWRkcmVzczogMHgl MDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSCisrICAgICAgICAgICAiLCBleHBlY3Rl ZDogMHglMDE2IiBQUkl4UFRSICJcbiIsCisrICAgICAgICAgICBhZGRyLCByZWludGVycHJldF9j YXN0PGludHB0cl90PihpbnN0ciksIExMQWRkcl8pOworKyAgICBNT1pfQ1JBU0goKTsKKysgIH0K KysgIGlmICgoYWRkciAmIDEpID09IDApIHsKKysgICAgU2hhcmVkTWVtPHVpbnQxNl90Kj4gcHRy ID0KKysgICAgICAgIFNoYXJlZE1lbTx1aW50MTZfdCo+OjpzaGFyZWQocmVpbnRlcnByZXRfY2Fz dDx1aW50MTZfdCo+KGFkZHIpKTsKKysgICAgaWYgKCFMTEJpdF8pIHsKKysgICAgICByZXR1cm4g MDsKKysgICAgfQorKyAgICBMTEJpdF8gPSBmYWxzZTsKKysgICAgTExBZGRyXyA9IDA7CisrICAg IHVpbnQxNl90IGV4cGVjdGVkID0gdWludDE2X3QobGFzdExMVmFsdWVfKTsKKysgICAgdWludDE2 X3Qgb2xkID0KKysgICAgICAgIEF0b21pY09wZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNz dChwdHIsIGV4cGVjdGVkLCB2YWx1ZSk7CisrICAgIHJldHVybiAob2xkID09IGV4cGVjdGVkKSA/ IDEgOiAwOworKyAgfQorKyAgcHJpbnRmKCJVbmFsaWduZWQgc3RoY3guIGF0IDB4JTAxNiIgUFJJ eDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAiXG4iLCBhZGRyLAorKyAgICAgICAgIHJlaW50ZXJw cmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7CisrICBNT1pfQ1JBU0goKTsKKysgIHJldHVybiAw OworK30KKysKKytpbnQzMl90IFNpbXVsYXRvcjo6bG9hZExpbmtlZFcodWludDY0X3QgYWRkciwg U2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoKGFkZHIgJiAzKSA9PSAwKSB7CisrICAg IGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoYWRkciwgNCkpIHsKKysgICAgICByZXR1cm4gLTE7Cisr ICAgIH0KKysKKysgICAgdm9sYXRpbGUgaW50MzJfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx2 b2xhdGlsZSBpbnQzMl90Kj4oYWRkcik7CisrICAgIGludDMyX3QgdmFsdWUgPSAqcHRyOworKyAg ICBsYXN0TExWYWx1ZV8gPSB2YWx1ZTsKKysgICAgTExBZGRyXyA9IGFkZHI7CisrICAgIExMQml0 XyA9IHRydWU7CisrICAgIHJldHVybiB2YWx1ZTsKKysgIH0KKysgIHByaW50ZigiVW5hbGlnbmVk IGx3YXJ4IGF0IDB4JTAxNiIgUFJJeDY0ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAiXG4iLCBhZGRy LAorKyAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7CisrICBNT1pf Q1JBU0goKTsKKysgIHJldHVybiAwOworK30KKysKKytpbnQgU2ltdWxhdG9yOjpzdG9yZUNvbmRp dGlvbmFsVyh1aW50NjRfdCBhZGRyLCBpbnQzMl90IHZhbHVlLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cikgeworKyAgaWYgKGFkZHIgIT0g TExBZGRyXykgeworKyAgICBwcmludGYoInN0d2N4LiB0byBiYWQgYWRkcmVzczogMHglMDE2IiBQ Ukl4NjQgIiwgcGM9MHglMDE2IiBQUkl4UFRSCisrICAgICAgICAgICAiLCBleHBlY3RlZDogMHgl MDE2IiBQUkl4UFRSICJcbiIsCisrICAgICAgICAgICBhZGRyLCByZWludGVycHJldF9jYXN0PGlu dHB0cl90PihpbnN0ciksIExMQWRkcl8pOworKyAgICBNT1pfQ1JBU0goKTsKKysgIH0KKysKKysg IGlmICgoYWRkciAmIDMpID09IDApIHsKKysgICAgU2hhcmVkTWVtPGludDMyX3QqPiBwdHIgPQor KyAgICAgICAgU2hhcmVkTWVtPGludDMyX3QqPjo6c2hhcmVkKHJlaW50ZXJwcmV0X2Nhc3Q8aW50 MzJfdCo+KGFkZHIpKTsKKysKKysgICAgaWYgKCFMTEJpdF8pIHsKKysgICAgICByZXR1cm4gMDsK KysgICAgfQorKworKyAgICBMTEJpdF8gPSBmYWxzZTsKKysgICAgTExBZGRyXyA9IDA7CisrICAg IGludDMyX3QgZXhwZWN0ZWQgPSBpbnQzMl90KGxhc3RMTFZhbHVlXyk7CisrICAgIGludDMyX3Qg b2xkID0KKysgICAgICAgIEF0b21pY09wZXJhdGlvbnM6OmNvbXBhcmVFeGNoYW5nZVNlcUNzdChw dHIsIGV4cGVjdGVkLCB2YWx1ZSk7CisrICAgIHJldHVybiAob2xkID09IGV4cGVjdGVkKSA/IDEg OiAwOworKyAgfQorKyAgcHJpbnRmKCJVbmFsaWduZWQgc3R3Y3guIGF0IDB4JTAxNiIgUFJJeDY0 ICIsIHBjPTB4JTAxNiIgUFJJeFBUUiAiXG4iLCBhZGRyLAorKyAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSk7CisrICBNT1pfQ1JBU0goKTsKKysgIHJldHVybiAwOwor K30KKysKKytpbnQ2NF90IFNpbXVsYXRvcjo6bG9hZExpbmtlZEQodWludDY0X3QgYWRkciwgU2lt SW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoKGFkZHIgJiBrUG9pbnRlckFsaWdubWVudE1h c2spID09IDApIHsKKysgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChhZGRyLCA4KSkgeworKyAg ICAgIHJldHVybiAtMTsKKysgICAgfQorKworKyAgICB2b2xhdGlsZSBpbnQ2NF90KiBwdHIgPSBy ZWludGVycHJldF9jYXN0PHZvbGF0aWxlIGludDY0X3QqPihhZGRyKTsKKysgICAgaW50NjRfdCB2 YWx1ZSA9ICpwdHI7CisrICAgIGxhc3RMTFZhbHVlXyA9IHZhbHVlOworKyAgICBMTEFkZHJfID0g YWRkcjsKKysgICAgTExCaXRfID0gdHJ1ZTsKKysgICAgcmV0dXJuIHZhbHVlOworKyAgfQorKyAg cHJpbnRmKCJVbmFsaWduZWQgbGRhcnggYXQgMHglMDE2IiBQUkl4NjQgIiwgcGM9MHglMDE2IiBQ Ukl4UFRSICJcbiIsIGFkZHIsCisrICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o aW5zdHIpKTsKKysgIE1PWl9DUkFTSCgpOworKyAgcmV0dXJuIDA7CisrfQorKworK2ludCBTaW11 bGF0b3I6OnN0b3JlQ29uZGl0aW9uYWxEKHVpbnQ2NF90IGFkZHIsIGludDY0X3QgdmFsdWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7 CisrICBpZiAoYWRkciAhPSBMTEFkZHJfKSB7CisrICAgIHByaW50Zigic3RkY3guIHRvIGJhZCBh ZGRyZXNzOiAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIKKysgICAgICAgICAg ICIsIGV4cGVjdGVkOiAweCUwMTYiIFBSSXhQVFIgIlxuIiwKKysgICAgICAgICAgIGFkZHIsIHJl aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwgTExBZGRyXyk7CisrICAgIE1PWl9DUkFT SCgpOworKyAgfQorKworKyAgaWYgKChhZGRyICYga1BvaW50ZXJBbGlnbm1lbnRNYXNrKSA9PSAw KSB7CisrICAgIFNoYXJlZE1lbTxpbnQ2NF90Kj4gcHRyID0KKysgICAgICAgIFNoYXJlZE1lbTxp bnQ2NF90Kj46OnNoYXJlZChyZWludGVycHJldF9jYXN0PGludDY0X3QqPihhZGRyKSk7CisrCisr ICAgIGlmICghTExCaXRfKSB7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgTExC aXRfID0gZmFsc2U7CisrICAgIExMQWRkcl8gPSAwOworKyAgICBpbnQ2NF90IGV4cGVjdGVkID0g bGFzdExMVmFsdWVfOworKyAgICBpbnQ2NF90IG9sZCA9CisrICAgICAgICBBdG9taWNPcGVyYXRp b25zOjpjb21wYXJlRXhjaGFuZ2VTZXFDc3QocHRyLCBleHBlY3RlZCwgdmFsdWUpOworKyAgICBy ZXR1cm4gKG9sZCA9PSBleHBlY3RlZCkgPyAxIDogMDsKKysgIH0KKysgIHByaW50ZigiVW5hbGln bmVkIHN0ZGN4LiBhdCAweCUwMTYiIFBSSXg2NCAiLCBwYz0weCUwMTYiIFBSSXhQVFIgIlxuIiwg YWRkciwKKysgICAgICAgICByZWludGVycHJldF9jYXN0PGludHB0cl90PihpbnN0cikpOworKyAg TU9aX0NSQVNIKCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysvLyBTdGFjayBsaW1pdCAvIHJlY3Vyc2lvbiBoZWxwZXJzLgorKworK3VpbnRwdHJfdCBT aW11bGF0b3I6OnN0YWNrTGltaXQoKSBjb25zdCB7IHJldHVybiBzdGFja0xpbWl0XzsgfQorKwor K3VpbnRwdHJfdCogU2ltdWxhdG9yOjphZGRyZXNzT2ZTdGFja0xpbWl0KCkgeyByZXR1cm4gJnN0 YWNrTGltaXRfOyB9CisrCisrYm9vbCBTaW11bGF0b3I6Om92ZXJSZWN1cnNlZCh1aW50cHRyX3Qg bmV3c3ApIGNvbnN0IHsKKysgIGlmIChuZXdzcCA9PSAwKSB7CisrICAgIG5ld3NwID0gZ2V0UmVn aXN0ZXIoc3ApOworKyAgfQorKyAgcmV0dXJuIG5ld3NwIDw9IHN0YWNrTGltaXQoKTsKKyt9Cisr CisrYm9vbCBTaW11bGF0b3I6Om92ZXJSZWN1cnNlZFdpdGhFeHRyYSh1aW50MzJfdCBleHRyYSkg Y29uc3QgeworKyAgdWludHB0cl90IG5ld3NwID0gZ2V0UmVnaXN0ZXIoc3ApIC0gZXh0cmE7Cisr ICByZXR1cm4gbmV3c3AgPD0gc3RhY2tMaW1pdCgpOworK30KKysKKyt2b2lkIFNpbXVsYXRvcjo6 Zm9ybWF0KFNpbUluc3RydWN0aW9uKiBpbnN0ciwgY29uc3QgY2hhciogZm9ybWF0KSB7CisrICBw cmludGYoIlNpbXVsYXRvciBmb3VuZCB1bnN1cHBvcnRlZCBpbnN0cnVjdGlvbjpcbiAweCUwMTYi IFBSSXhQVFIKKysgICAgICAgICAiOiAlMDh4ICVzXG4iLAorKyAgICAgICAgIHJlaW50ZXJwcmV0 X2Nhc3Q8aW50cHRyX3Q+KGluc3RyKSwgaW5zdHItPmluc3RydWN0aW9uQml0cygpLCBmb3JtYXQp OworKyAgTU9aX0NSQVNIKCk7CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8g c29mdHdhcmVJbnRlcnJ1cHQgLSBoYW5kbGUga0NhbGxSZWRpckluc3RyIChQUENfc3RvcCkgYW5k IFBQQ190cmFwLgorKworK0FCSV9GVU5DVElPTl9UWVBFX1NJTV9QUk9UT1RZUEVTCisrCisrdm9p ZCBTaW11bGF0b3I6OnNvZnR3YXJlSW50ZXJydXB0KFNpbUluc3RydWN0aW9uKiBpbnN0cikgewor KyAgdWludDMyX3QgaW5zdHJCaXRzID0gaW5zdHItPmluc3RydWN0aW9uQml0cygpOworKworKyAg aWYgKGluc3RyQml0cyA9PSBrQ2FsbFJlZGlySW5zdHIpIHsKKysgICAgUmVkaXJlY3Rpb24qIHJl ZGlyZWN0aW9uID0gUmVkaXJlY3Rpb246OkZyb21Td2lJbnN0cnVjdGlvbihpbnN0cik7CisrICAg IHVpbnRwdHJfdCBuYXRpdmVGbiA9CisrICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJf dD4ocmVkaXJlY3Rpb24tPm5hdGl2ZUZ1bmN0aW9uKCkpOworKworKyAgICAvLyBHZXQgdGhlIFNQ IGZvciByZWFkaW5nIHN0YWNrIGFyZ3VtZW50cy4KKysgICAgaW50NjRfdCogc3BfID0gcmVpbnRl cnByZXRfY2FzdDxpbnQ2NF90Kj4oZ2V0UmVnaXN0ZXIoc3ApKTsKKysgICAgLy8gU2tpcCBwYXN0 IHRoZSBQUEM2NCBFTEZ2MiBsaW5rIGFyZWEgKDQgZG91Ymxld29yZHMgPSAzMiBieXRlcykuCisr ICAgIHNwXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu dHB0cl90PihzcF8pICsgMzIpOworKworKyAgICAvLyBQUEM2NCBFTEZ2MjogaW50ZWdlciBhcmdz IGluIHIzLXIxMCwgRlAgYXJncyBpbiBmMS1mMTMuCisrICAgIGludDY0X3QgYTBfID0gZ2V0UmVn aXN0ZXIocjMpOworKyAgICBpbnQ2NF90IGExXyA9IGdldFJlZ2lzdGVyKHI0KTsKKysgICAgaW50 NjRfdCBhMl8gPSBnZXRSZWdpc3RlcihyNSk7CisrICAgIGludDY0X3QgYTNfID0gZ2V0UmVnaXN0 ZXIocjYpOworKyAgICBpbnQ2NF90IGE0XyA9IGdldFJlZ2lzdGVyKHI3KTsKKysgICAgaW50NjRf dCBhNV8gPSBnZXRSZWdpc3RlcihyOCk7CisrICAgIGludDY0X3QgYTZfID0gZ2V0UmVnaXN0ZXIo cjkpOworKyAgICBpbnQ2NF90IGE3XyA9IGdldFJlZ2lzdGVyKHIxMCk7CisrICAgIC8vIFBQQzY0 IEVMRnYyOiBGUCBhcmdzIGluIGYxLWYxMywgbWFwcGVkIHRvIGYwX3MuLmYxMl9zIGFuZCBmMF9k Li5mMTJfZC4KKysgICAgZmxvYXQgZjBfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9y OjpmMSk7CisrICAgIGZsb2F0IGYxX3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6 ZjIpOworKyAgICBmbG9hdCBmMl9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmYz KTsKKysgICAgZmxvYXQgZjNfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmNCk7 CisrICAgIGZsb2F0IGY0X3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjUpOwor KyAgICBmbG9hdCBmNV9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY2KTsKKysg ICAgZmxvYXQgZjZfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmNyk7CisrICAg IGZsb2F0IGY3X3MgPSBnZXRGcHVSZWdpc3RlckZsb2F0KFNpbXVsYXRvcjo6ZjgpOworKyAgICBm bG9hdCBmOF9zID0gZ2V0RnB1UmVnaXN0ZXJGbG9hdChTaW11bGF0b3I6OmY5KTsKKysgICAgZmxv YXQgZjlfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMTApOworKyAgICBmbG9h dCBmMTBfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMTEpOworKyAgICBmbG9h dCBmMTFfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMTIpOworKyAgICBmbG9h dCBmMTJfcyA9IGdldEZwdVJlZ2lzdGVyRmxvYXQoU2ltdWxhdG9yOjpmMTMpOworKyAgICBkb3Vi bGUgZjBfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEpOworKyAgICBkb3Vi bGUgZjFfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjIpOworKyAgICBkb3Vi bGUgZjJfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjMpOworKyAgICBkb3Vi bGUgZjNfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjQpOworKyAgICBkb3Vi bGUgZjRfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjUpOworKyAgICBkb3Vi bGUgZjVfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjYpOworKyAgICBkb3Vi bGUgZjZfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjcpOworKyAgICBkb3Vi bGUgZjdfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjgpOworKyAgICBkb3Vi bGUgZjhfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjkpOworKyAgICBkb3Vi bGUgZjlfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEwKTsKKysgICAgZG91 YmxlIGYxMF9kID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUoU2ltdWxhdG9yOjpmMTEpOworKyAgICBk b3VibGUgZjExX2QgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShTaW11bGF0b3I6OmYxMik7CisrICAg IGRvdWJsZSBmMTJfZCA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKFNpbXVsYXRvcjo6ZjEzKTsKKysK KysgICAgLy8gU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGZvciBoaWdoZXIgRlAg YXJnIHJlZ2lzdGVycy4KKysgICAgLy8gVGhleSBleGlzdCBmb3IgQUJJIGNvbXBsZXRlbmVzcyBi dXQgZmV3IGZ1bmN0aW9uIHR5cGVzIHVzZSA+NSBGUCBhcmdzLgorKyAgICAodm9pZClmNF9zOyAo dm9pZClmNV9zOyAodm9pZClmNl9zOyAodm9pZClmN19zOyAodm9pZClmOF9zOyAodm9pZClmOV9z OworKyAgICAodm9pZClmMTBfczsgKHZvaWQpZjExX3M7ICh2b2lkKWYxMl9zOworKyAgICAodm9p ZClmNF9kOyAodm9pZClmNV9kOyAodm9pZClmNl9kOyAodm9pZClmN19kOyAodm9pZClmOF9kOyAo dm9pZClmOV9kOworKyAgICAodm9pZClmMTBfZDsgKHZvaWQpZjExX2Q7ICh2b2lkKWYxMl9kOwor KworKyAgICBpbnQ2NF90IHNhdmVkX2xyID0gZ2V0TFIoKTsKKysKKysgICAgYm9vbCBzdGFja19h bGlnbmVkID0gKGdldFJlZ2lzdGVyKHNwKSAmIChBQklTdGFja0FsaWdubWVudCAtIDEpKSA9PSAw OworKyAgICBpZiAoIXN0YWNrX2FsaWduZWQpIHsKKysgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJ1 bnRpbWUgY2FsbCB3aXRoIHVuYWxpZ25lZCBzdGFjayFcbiIpOworKyAgICAgIE1PWl9DUkFTSCgp OworKyAgICB9CisrCisrICAgIGlmIChzaW5nbGVfc3RlcHBpbmdfKSB7CisrICAgICAgc2luZ2xl X3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIp OworKyAgICB9CisrCisrICAgIHN3aXRjaCAocmVkaXJlY3Rpb24tPnR5cGUoKSkgeworKyAgICAg IEFCSV9GVU5DVElPTl9UWVBFX1BQQzY0X1NJTV9ESVNQQVRDSAorKworKyAgICAgIGRlZmF1bHQ6 CisrICAgICAgICBNT1pfQ1JBU0goIlVua25vd24gZnVuY3Rpb24gdHlwZS4iKTsKKysgICAgfQor KworKyAgICBpZiAoc2luZ2xlX3N0ZXBwaW5nXykgeworKyAgICAgIHNpbmdsZV9zdGVwX2NhbGxi YWNrXyhzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfLCB0aGlzLCBudWxscHRyKTsKKysgICAgfQor KworKyAgICBzZXRMUihzYXZlZF9scik7CisrICAgIHNldF9wYyhnZXRMUigpKTsKKysgIH0gZWxz ZSBpZiAoaW5zdHJCaXRzID09IDB4N0ZFMDAwMDgpIHsKKysgICAgLy8gUFBDX3RyYXA6IHVzZWQg Zm9yIHdhc20gdHJhcHMuCisrICAgIHVpbnQ4X3QqIG5ld1BDOworKyAgICBpZiAod2FzbTo6SGFu ZGxlSWxsZWdhbEluc3RydWN0aW9uKHJlZ2lzdGVyU3RhdGUoKSwgJm5ld1BDKSkgeworKyAgICAg IHNldF9wYyhpbnQ2NF90KG5ld1BDKSk7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIE1P Wl9DUkFTSCgiVW5leHBlY3RlZCB0cmFwIGluc3RydWN0aW9uIik7CisrICB9IGVsc2UgeworKyAg ICAvLyBPdGhlciB0cmFwLWxpa2UgaW5zdHJ1Y3Rpb25zOiBlbnRlciBkZWJ1Z2dlci4KKysgICAg cHBjNjREZWJ1Z2dlciBkYmcodGhpcyk7CisrICAgIGRiZy5kZWJ1ZygpOworKyAgfQorK30KKysK KysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIFN0b3AvYnJlYWtwb2ludCBoZWxwZXJzLgor KworK2Jvb2wgU2ltdWxhdG9yOjppc1dhdGNocG9pbnQodWludDMyX3QgY29kZSkgeworKyAgcmV0 dXJuIChjb2RlIDw9IGtNYXhXYXRjaHBvaW50Q29kZSk7CisrfQorKworK3ZvaWQgU2ltdWxhdG9y OjpwcmludFdhdGNocG9pbnQodWludDMyX3QgY29kZSkgeworKyAgcHBjNjREZWJ1Z2dlciBkYmco dGhpcyk7CisrICArK2JyZWFrX2NvdW50XzsKKysgIHByaW50ZigiXG4tLS0tIGJyZWFrICVkIG1h cmtlcjogJTIwIiBQUklpNjQgIiAgKGluc3RyIGNvdW50OiAlMjAiIFBSSWk2NAorKyAgICAgICAg ICIpIC0tLS1cbiIsCisrICAgICAgICAgY29kZSwgYnJlYWtfY291bnRfLCBpY291bnRfKTsKKysg IGRiZy5wcmludEFsbFJlZ3MoKTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmhhbmRsZVN0b3Ao dWludDMyX3QgY29kZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICBpZiAoaXNFbmFibGVk U3RvcChjb2RlKSkgeworKyAgICBwcGM2NERlYnVnZ2VyIGRiZyh0aGlzKTsKKysgICAgZGJnLnN0 b3AoaW5zdHIpOworKyAgfSBlbHNlIHsKKysgICAgc2V0X3BjKGdldF9wYygpICsgU2ltSW5zdHJ1 Y3Rpb246OmtJbnN0clNpemUpOworKyAgfQorK30KKysKKytib29sIFNpbXVsYXRvcjo6aXNTdG9w SW5zdHJ1Y3Rpb24oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICByZXR1cm4gaW5zdHItPmlu c3RydWN0aW9uQml0cygpID09IGtDYWxsUmVkaXJJbnN0cjsKKyt9CisrCisrYm9vbCBTaW11bGF0 b3I6OmlzRW5hYmxlZFN0b3AodWludDMyX3QgY29kZSkgeworKyAgTU9aX0FTU0VSVChjb2RlIDw9 IGtNYXhTdG9wQ29kZSk7CisrICBNT1pfQVNTRVJUKGNvZGUgPiBrTWF4V2F0Y2hwb2ludENvZGUp OworKyAgcmV0dXJuICEod2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gJiBrU3RvcERpc2FibGVk Qml0KTsKKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmVuYWJsZVN0b3AodWludDMyX3QgY29kZSkg eworKyAgaWYgKCFpc0VuYWJsZWRTdG9wKGNvZGUpKSB7CisrICAgIHdhdGNoZWRTdG9wc19bY29k ZV0uY291bnRfICY9IH5rU3RvcERpc2FibGVkQml0OworKyAgfQorK30KKysKKyt2b2lkIFNpbXVs YXRvcjo6ZGlzYWJsZVN0b3AodWludDMyX3QgY29kZSkgeworKyAgaWYgKGlzRW5hYmxlZFN0b3Ao Y29kZSkpIHsKKysgICAgd2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8gfD0ga1N0b3BEaXNhYmxl ZEJpdDsKKysgIH0KKyt9CisrCisrdm9pZCBTaW11bGF0b3I6OmluY3JlYXNlU3RvcENvdW50ZXIo dWludDMyX3QgY29kZSkgeworKyAgTU9aX0FTU0VSVChjb2RlIDw9IGtNYXhTdG9wQ29kZSk7Cisr ICBpZiAoKHdhdGNoZWRTdG9wc19bY29kZV0uY291bnRfICYgfigxIDw8IDMxKSkgPT0gMHg3ZmZm ZmZmZikgeworKyAgICBwcmludGYoCisrICAgICAgICAiU3RvcCBjb3VudGVyIGZvciBjb2RlICVp IGhhcyBvdmVyZmxvd2VkLlxuIgorKyAgICAgICAgIkVuYWJsaW5nIHRoaXMgY29kZSBhbmQgcmVz ZXRpbmcgdGhlIGNvdW50ZXIgdG8gMC5cbiIsCisrICAgICAgICBjb2RlKTsKKysgICAgd2F0Y2hl ZFN0b3BzX1tjb2RlXS5jb3VudF8gPSAwOworKyAgICBlbmFibGVTdG9wKGNvZGUpOworKyAgfSBl bHNlIHsKKysgICAgd2F0Y2hlZFN0b3BzX1tjb2RlXS5jb3VudF8rKzsKKysgIH0KKyt9CisrCisr dm9pZCBTaW11bGF0b3I6OnByaW50U3RvcEluZm8odWludDMyX3QgY29kZSkgeworKyAgaWYgKGNv ZGUgPD0ga01heFdhdGNocG9pbnRDb2RlKSB7CisrICAgIHByaW50ZigiVGhhdCBpcyBhIHdhdGNo cG9pbnQsIG5vdCBhIHN0b3AuXG4iKTsKKysgICAgcmV0dXJuOworKyAgfSBlbHNlIGlmIChjb2Rl ID4ga01heFN0b3BDb2RlKSB7CisrICAgIHByaW50ZigiQ29kZSB0b28gbGFyZ2UsIG9ubHkgJXUg c3RvcHMgY2FuIGJlIHVzZWRcbiIsIGtNYXhTdG9wQ29kZSArIDEpOworKyAgICByZXR1cm47Cisr ICB9CisrICBjb25zdCBjaGFyKiBzdGF0ZSA9IGlzRW5hYmxlZFN0b3AoY29kZSkgPyAiRW5hYmxl ZCIgOiAiRGlzYWJsZWQiOworKyAgaW50MzJfdCBjb3VudCA9IHdhdGNoZWRTdG9wc19bY29kZV0u Y291bnRfICYgfmtTdG9wRGlzYWJsZWRCaXQ7CisrICBpZiAoY291bnQgIT0gMCkgeworKyAgICBp ZiAod2F0Y2hlZFN0b3BzX1tjb2RlXS5kZXNjXykgeworKyAgICAgIHByaW50Zigic3RvcCAlaSAt IDB4JXg6IFx0JXMsIFx0Y291bnRlciA9ICVpLCBcdCVzXG4iLCBjb2RlLCBjb2RlLAorKyAgICAg ICAgICAgICBzdGF0ZSwgY291bnQsIHdhdGNoZWRTdG9wc19bY29kZV0uZGVzY18pOworKyAgICB9 IGVsc2UgeworKyAgICAgIHByaW50Zigic3RvcCAlaSAtIDB4JXg6IFx0JXMsIFx0Y291bnRlciA9 ICVpXG4iLCBjb2RlLCBjb2RlLCBzdGF0ZSwKKysgICAgICAgICAgICAgY291bnQpOworKyAgICB9 CisrICB9CisrfQorKworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gSW5zdHJ1Y3Rpb24g ZGVjb2RlcnMuCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysKKysvLyBDb21wdXRlIGVmZmVj dGl2ZSBhZGRyZXNzIGZvciBELWZvcm0gaW5zdHJ1Y3Rpb25zLgorKy8vIElmIFJBPT0wLCB0aGUg YmFzZSBpcyAwIChub3QgR1BSWzBdKS4KKytzdGF0aWMgaW5saW5lIGludDY0X3QgREZvcm1FQShT aW11bGF0b3IqIHNpbSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludDE2X3Qgb2Zmc2V0KSB7CisrICB1aW50MzJfdCByYSA9IGluc3RyLT5y YVZhbHVlKCk7CisrICBpbnQ2NF90IGJhc2UgPSAocmEgPT0gMCkgPyAwIDogc2ltLT5nZXRSZWdp c3RlcihyYSk7CisrICByZXR1cm4gYmFzZSArIG9mZnNldDsKKyt9CisrCisrLy8gQ29tcHV0ZSBl ZmZlY3RpdmUgYWRkcmVzcyBmb3IgRFMtZm9ybSBpbnN0cnVjdGlvbnMuCisrc3RhdGljIGlubGlu ZSBpbnQ2NF90IERTRm9ybUVBKFNpbXVsYXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3Qgb2Zmc2V0KSB7CisrICB1 aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7CisrICBpbnQ2NF90IGJhc2UgPSAocmEgPT0g MCkgPyAwIDogc2ltLT5nZXRSZWdpc3RlcihyYSk7CisrICByZXR1cm4gYmFzZSArIG9mZnNldDsK Kyt9CisrCisrLy8gQ29tcHV0ZSBlZmZlY3RpdmUgYWRkcmVzcyBmb3IgWC1mb3JtIGluZGV4ZWQg aW5zdHJ1Y3Rpb25zLgorKy8vIElmIFJBPT0wLCBiYXNlIGlzIDAgKG5vdCBHUFJbMF0pLgorK3N0 YXRpYyBpbmxpbmUgaW50NjRfdCBYRm9ybUVBKFNpbXVsYXRvciogc2ltLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpIHsKKysgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKKysgIHVpbnQz Ml90IHJiID0gaW5zdHItPnJiVmFsdWUoKTsKKysgIGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/ IDAgOiBzaW0tPmdldFJlZ2lzdGVyKHJhKTsKKysgIHJldHVybiBiYXNlICsgc2ltLT5nZXRSZWdp c3RlcihyYik7CisrfQorKworKy8vIENvbXB1dGUgZWZmZWN0aXZlIGFkZHJlc3MgZm9yIFgtZm9y bSBpbmRleGVkIHVwZGF0ZXMgKFJBICE9IDAgcmVxdWlyZWQpLgorK3N0YXRpYyBpbmxpbmUgaW50 NjRfdCBYRm9ybUVBVXBkYXRlKFNpbXVsYXRvciogc2ltLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIp IHsKKysgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKKysgIHVpbnQzMl90IHJiID0g aW5zdHItPnJiVmFsdWUoKTsKKysgIHJldHVybiBzaW0tPmdldFJlZ2lzdGVyKHJhKSArIHNpbS0+ Z2V0UmVnaXN0ZXIocmIpOworK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIGRl Y29kZURGb3JtQUxVOiBhZGRpLCBhZGRpcywgb3JpLCBvcmlzLCB4b3JpLCB4b3JpcywgYW5kaS4s IGFuZGlzLiwKKysvLyAgICAgICAgICAgICAgICAgY21waSwgY21wbGksIHN1YmZpYywgYWRkaWMs IGFkZGljLiwgbXVsbGksIHR3aQorKworK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVERm9ybUFMVShT aW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNv ZGUoKTsKKysgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKKysgIHVpbnQzMl90IHJh ID0gaW5zdHItPnJhVmFsdWUoKTsKKysgIGludDE2X3Qgc2kgPSBpbnN0ci0+aW1tMTZWYWx1ZSgp OworKyAgdWludDE2X3QgdWkgPSBpbnN0ci0+dWltbTE2VmFsdWUoKTsKKysKKysgIHN3aXRjaCAo b3Bjb2RlKSB7CisrICAgIGNhc2UgMTQ6IHsKKysgICAgICAvLyBhZGRpOiBSVCA9IChSQXwwKSAr IFNJCisrICAgICAgaW50NjRfdCBiYXNlID0gKHJhID09IDApID8gMCA6IGdldFJlZ2lzdGVyKHJh KTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgYmFzZSArIChpbnQ2NF90KXNpKTsKKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDE1OiB7CisrICAgICAgLy8gYWRkaXM6IFJUID0gKFJB fDApICsgKFNJIDw8IDE2KQorKyAgICAgIGludDY0X3QgYmFzZSA9IChyYSA9PSAwKSA/IDAgOiBn ZXRSZWdpc3RlcihyYSk7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIGJhc2UgKyAoKGludDY0X3Qp c2kgPDwgMTYpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDI0OiB7CisrICAg ICAgLy8gb3JpOiBSQSA9IFJTIHwgVUkKKysgICAgICBzZXRSZWdpc3RlcihyYSwgZ2V0UmVnaXN0 ZXIocnQpIHwgKHVpbnQ2NF90KXVpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDI1OiB7CisrICAgICAgLy8gb3JpczogUkEgPSBSUyB8IChVSSA8PCAxNikKKysgICAgICBzZXRS ZWdpc3RlcihyYSwgZ2V0UmVnaXN0ZXIocnQpIHwgKCh1aW50NjRfdCl1aSA8PCAxNikpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjY6IHsKKysgICAgICAvLyB4b3JpOiBSQSA9 IFJTIF4gVUkKKysgICAgICBzZXRSZWdpc3RlcihyYSwgZ2V0UmVnaXN0ZXIocnQpIF4gKHVpbnQ2 NF90KXVpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDI3OiB7CisrICAgICAg Ly8geG9yaXM6IFJBID0gUlMgXiAoVUkgPDwgMTYpCisrICAgICAgc2V0UmVnaXN0ZXIocmEsIGdl dFJlZ2lzdGVyKHJ0KSBeICgodWludDY0X3QpdWkgPDwgMTYpKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDI4OiB7CisrICAgICAgLy8gYW5kaS46IFJBID0gUlMgJiBVSSwgdXBk YXRlIENSMAorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocnQpICYgKHVpbnQ2 NF90KXVpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAgIHVwZGF0ZUNS MChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjk6IHsKKysgICAg ICAvLyBhbmRpcy46IFJBID0gUlMgJiAoVUkgPDwgMTYpLCB1cGRhdGUgQ1IwCisrICAgICAgaW50 NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkgJiAoKHVpbnQ2NF90KXVpIDw8IDE2KTsKKysg ICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAgICB1cGRhdGVDUjAocmVzdWx0KTsK KysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDExOiB7CisrICAgICAgLy8gY21waTog Y29tcGFyZSBSQSB3aXRoIFNJLCBzaWduZWQKKysgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5i ZlZhbHVlKCk7CisrICAgICAgYm9vbCBsID0gaW5zdHItPmxCaXQoKTsKKysgICAgICBpZiAobCkg eworKyAgICAgICAgLy8gNjQtYml0IGNvbXBhcmUKKysgICAgICAgIHNldENSRmllbGRDbXAoYmYs IGdldFJlZ2lzdGVyKHJhKSwgKGludDY0X3Qpc2kpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICAvLyAzMi1iaXQgY29tcGFyZQorKyAgICAgICAgaW50MzJfdCByYTMyID0gSTMyKGdldFJlZ2lz dGVyKHJhKSk7CisrICAgICAgICBzZXRDUkZpZWxkQ21wKGJmLCAoaW50NjRfdClyYTMyLCAoaW50 NjRfdCkoaW50MzJfdClzaSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMTA6IHsKKysgICAgICAvLyBjbXBsaTogY29tcGFyZSBSQSB3aXRoIFVJLCB1bnNpZ25l ZAorKyAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKKysgICAgICBib29sIGwg PSBpbnN0ci0+bEJpdCgpOworKyAgICAgIGlmIChsKSB7CisrICAgICAgICAvLyA2NC1iaXQgdW5z aWduZWQgY29tcGFyZQorKyAgICAgICAgc2V0Q1JGaWVsZENtcFUoYmYsIFU2NChnZXRSZWdpc3Rl cihyYSkpLCAodWludDY0X3QpdWkpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvLyAzMi1i aXQgdW5zaWduZWQgY29tcGFyZQorKyAgICAgICAgdWludDMyX3QgcmEzMiA9IFUzMihnZXRSZWdp c3RlcihyYSkpOworKyAgICAgICAgc2V0Q1JGaWVsZENtcFUoYmYsICh1aW50NjRfdClyYTMyLCAo dWludDY0X3QpdWkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDg6IHsKKysgICAgICAvLyBzdWJmaWM6IFJUID0gU0kgLSBSQSwgc2V0IENBCisrICAgICAgdWlu dDY0X3QgcmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgaW1t ID0gVTY0KChpbnQ2NF90KXNpKTsKKysgICAgICB1aW50NjRfdCByZXN1bHQgPSBpbW0gKyB+cmFf dmFsICsgMTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCkpOworKyAgICAgIC8v IENBIGlzIHNldCBpZiB0aGVyZSBpcyBhIGNhcnJ5IG91dCBvZiB0aGUgYWRkaXRpb24gKH5SQSAr IElNTSArIDEpLgorKyAgICAgIC8vIEVxdWl2YWxlbnRseSwgQ0EgPSAoSU1NID49IFJBKSBmb3Ig dW5zaWduZWQgaW50ZXJwcmV0YXRpb24gb2YgdGhlCisrICAgICAgLy8gZnVsbCA2NC1iaXQgc3Vi dHJhY3Rpb24uCisrICAgICAgYm9vbCBjYXJyeSA9IChpbW0gPj0gcmFfdmFsKSB8fCAoaW1tID09 IDAgJiYgcmFfdmFsID09IDApOworKyAgICAgIC8vIE1vcmUgcHJlY2lzZTogY2FycnkgPSAofnJh X3ZhbCArIGltbSkgd291bGQgb3ZlcmZsb3csIG9yIGFkZGluZyAxCisrICAgICAgLy8gb3ZlcmZs b3dzLgorKyAgICAgIHVpbnQ2NF90IHRtcCA9IH5yYV92YWwgKyBpbW07CisrICAgICAgY2Fycnkg PSAodG1wIDwgfnJhX3ZhbCkgfHwgKHRtcCA8IGltbSkgfHwgKHJlc3VsdCA8IHRtcCk7CisrICAg ICAgLy8gU2ltcGxpZnk6IENBIGlmIG5vIGJvcnJvdy4KKysgICAgICBjYXJyeSA9IChVNjQoKGlu dDY0X3Qpc2kpID49IHJhX3ZhbCk7CisrICAgICAgaWYgKHJhX3ZhbCA9PSAwKSBjYXJyeSA9IHRy dWU7CisrICAgICAgLy8gQWN0dWFsbHksIHN1YmZpYyBDQTogY2Fycnkgb3V0IG9mIH5SQSArIElN TSArIDEuCisrICAgICAgLy8gQ0EgPSAoSU1NID4gUkEgLSAxKSB3aGVuIFJBICE9IDAsIENBID0g MSB3aGVuIFJBID09IDAuCisrICAgICAgLy8gT3IganVzdDogdGhlIHVuc2lnbmVkIHJlc3VsdCBv ZiAoU0kgLSBSQSkgaXMgdmFsaWQgKG5vIGJvcnJvdykuCisrICAgICAgLy8gTGV0J3MgY29tcHV0 ZSBpdCBjb3JyZWN0bHk6CisrICAgICAgeworKyAgICAgICAgX191aW50MTI4X3Qgd2lkZSA9IChf X3VpbnQxMjhfdCkofnJhX3ZhbCkgKyAoX191aW50MTI4X3QpaW1tICsgMTsKKysgICAgICAgIGNh cnJ5ID0gKHdpZGUgPj4gNjQpICE9IDA7CisrICAgICAgfQorKyAgICAgIHNldFhFUkNBKGNhcnJ5 KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEyOiB7CisrICAgICAgLy8gYWRk aWM6IFJUID0gUkEgKyBTSSwgc2V0IENBCisrICAgICAgdWludDY0X3QgcmFfdmFsID0gVTY0KGdl dFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgaW1tID0gVTY0KChpbnQ2NF90KXNpKTsK KysgICAgICB1aW50NjRfdCByZXN1bHQgPSByYV92YWwgKyBpbW07CisrICAgICAgc2V0UmVnaXN0 ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICBzZXRYRVJDQShyZXN1bHQgPCByYV92YWwpOwor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTM6IHsKKysgICAgICAvLyBhZGRpYy46 IFJUID0gUkEgKyBTSSwgc2V0IENBLCB1cGRhdGUgQ1IwCisrICAgICAgdWludDY0X3QgcmFfdmFs ID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgaW1tID0gVTY0KChpbnQ2 NF90KXNpKTsKKysgICAgICB1aW50NjRfdCByZXN1bHQgPSByYV92YWwgKyBpbW07CisrICAgICAg c2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICBzZXRYRVJDQShyZXN1bHQgPCBy YV92YWwpOworKyAgICAgIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA3OiB7CisrICAgICAgLy8gbXVsbGk6IFJUID0gUkEgKiBTSSAobG93 IDY0IGJpdHMpCisrICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihyYSkgKiAoaW50 NjRfdClzaTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKKysgICAgICBicmVhazsK KysgICAgfQorKyAgICBjYXNlIDM6IHsKKysgICAgICAvLyB0d2k6IFRyYXAgV29yZCBJbW1lZGlh dGUuIFdlIGRvbid0IGltcGxlbWVudCB0cmFwcGluZyBpbiB0aGUKKysgICAgICAvLyBzaW11bGF0 b3I7IGp1c3QgY29udGludWUuCisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlREZvcm1BTFU6IHVuaGFuZGxl ZCBvcGNvZGUgJXUiLCBvcGNvZGUpOworKyAgfQorK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorKy8vIGRlY29kZURGb3JtTG9hZDogbHd6KDMyKSwgbGJ6KDM0KSwgbGh6KDQwKSwgbGhh KDQyKSwgbGZzKDQ4KSwgbGZkKDUwKQorKy8vICAgYW5kIHVwZGF0ZSB2YXJpYW50cworKworK3Zv aWQgU2ltdWxhdG9yOjpkZWNvZGVERm9ybUxvYWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Cisr ICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0ci0+b3Bjb2RlKCk7CisrICB1aW50MzJfdCBydCA9IGlu c3RyLT5ydFZhbHVlKCk7CisrICBpbnQxNl90IHNpID0gaW5zdHItPmltbTE2VmFsdWUoKTsKKysg IHVpbnQ2NF90IGVhID0gREZvcm1FQSh0aGlzLCBpbnN0ciwgc2kpOworKworKyAgc3dpdGNoIChv cGNvZGUpIHsKKysgICAgY2FzZSAzMjoKKysgICAgICAvLyBsd3oKKysgICAgICBzZXRSZWdpc3Rl cihydCwgVTY0KHJlYWRXVShlYSwgaW5zdHIpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2Ug MzM6IHsKKysgICAgICAvLyBsd3p1OiBSQSAhPSAwLCBsb2FkIGFuZCB1cGRhdGUgUkEKKysgICAg ICBzZXRSZWdpc3RlcihydCwgVTY0KHJlYWRXVShlYSwgaW5zdHIpKSk7CisrICAgICAgc2V0UmVn aXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMzQ6CisrICAgICAgLy8gbGJ6CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFk QlUoZWEpKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzU6IHsKKysgICAgICAvLyBsYnp1 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkQlUoZWEpKSk7CisrICAgICAgc2V0UmVn aXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgNDA6CisrICAgICAgLy8gbGh6CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFk SFUoZWEsIGluc3RyKSkpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDQxOiB7CisrICAgICAg Ly8gbGh6dQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQocmVhZEhVKGVhLCBpbnN0cikpKTsK KysgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7CisrICAgICAgYnJlYWs7 CisrICAgIH0KKysgICAgY2FzZSA0MjoKKysgICAgICAvLyBsaGEgKGhhbGYtd29yZCwgc2lnbi1l eHRlbmRlZCkKKysgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpcmVhZEgoZWEsIGluc3Ry KSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgNDM6IHsKKysgICAgICAvLyBsaGF1CisrICAg ICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KXJlYWRIKGVhLCBpbnN0cikpOworKyAgICAgIHNl dFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDQ4OiB7CisrICAgICAgLy8gbGZzOiBsb2FkIGZsb2F0IHNpbmdsZSwgd2lkZW4g dG8gZG91YmxlIGluIEZQUiAoTmFOLXByZXNlcnZpbmc7CisrICAgICAgLy8gbWF0Y2hlcyBQb3dl ciBJU0EgYGxmc2Agd2hpY2ggdXNlcyB4c2N2c3BkcG4gc2VtYW50aWNzKQorKyAgICAgIGlmICho YW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSBicmVhazsKKysgICAgICBmbG9hdCB2YWwgPSAqcmVp bnRlcnByZXRfY2FzdDxmbG9hdCo+KGVhKTsKKysgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShy dCwgcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTih2YWwpKTsKKysgICAgICBicmVhazsKKysgICAg fQorKyAgICBjYXNlIDQ5OiB7CisrICAgICAgLy8gbGZzdQorKyAgICAgIGlmIChoYW5kbGVXYXNt U2VnRmF1bHQoZWEsIDQpKSBicmVhazsKKysgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRf Y2FzdDxmbG9hdCo+KGVhKTsKKysgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90 ZUZsb2F0UHJlc2VydmluZ05hTih2YWwpKTsKKysgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFW YWx1ZSgpLCBlYSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1MDogeworKyAg ICAgIC8vIGxmZDogbG9hZCBmbG9hdCBkb3VibGUKKysgICAgICBkb3VibGUgdmFsID0gcmVhZEQo ZWEsIGluc3RyKTsKKysgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgdmFsKTsKKysgICAg ICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDUxOiB7CisrICAgICAgLy8gbGZkdQorKyAgICAg IGRvdWJsZSB2YWwgPSByZWFkRChlYSwgaW5zdHIpOworKyAgICAgIHNldEZwdVJlZ2lzdGVyRG91 YmxlKHJ0LCB2YWwpOworKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsK KysgICAgICBicmVhazsKKysgICAgfQorKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSF9V TlNBRkVfUFJJTlRGKCJkZWNvZGVERm9ybUxvYWQ6IHVuaGFuZGxlZCBvcGNvZGUgJXUiLCBvcGNv ZGUpOworKyAgfQorK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIGRlY29kZURG b3JtU3RvcmU6IHN0dygzNiksIHN0d3UoMzcpLCBzdGIoMzgpLCBzdGgoNDQpLCBzdGZzKDUyKSwg c3RmZCg1NCkKKysvLyAgIGFuZCB1cGRhdGUgdmFyaWFudHMKKysKKyt2b2lkIFNpbXVsYXRvcjo6 ZGVjb2RlREZvcm1TdG9yZShTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQzMl90IG9w Y29kZSA9IGluc3RyLT5vcGNvZGUoKTsKKysgIHVpbnQzMl90IHJzID0gaW5zdHItPnJzVmFsdWUo KTsKKysgIGludDE2X3Qgc2kgPSBpbnN0ci0+aW1tMTZWYWx1ZSgpOworKworKyAgLy8gRm9yIHN0 b3JlcywgdGhlIGVmZmVjdGl2ZSBhZGRyZXNzIGNhbGN1bGF0aW9uIGRpZmZlcnMgZm9yIHVwZGF0 ZSBmb3JtczoKKysgIC8vIC0gTm9uLXVwZGF0ZTogRUEgPSAoUkF8MCkgKyBECisrICAvLyAtIFVw ZGF0ZTogRUEgPSBSQSArIEQgKFJBIG11c3Qgbm90IGJlIDApCisrICBib29sIGlzVXBkYXRlID0g ZmFsc2U7CisrICBzd2l0Y2ggKG9wY29kZSkgeworKyAgICBjYXNlIDM3OiBjYXNlIDM5OiBjYXNl IDQ1OiBjYXNlIDUzOiBjYXNlIDU1OgorKyAgICAgIGlzVXBkYXRlID0gdHJ1ZTsKKysgICAgICBi cmVhazsKKysgIH0KKysKKysgIHVpbnQ2NF90IGVhOworKyAgaWYgKGlzVXBkYXRlKSB7CisrICAg IGVhID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkgKyAoaW50NjRfdClzaTsKKysgIH0g ZWxzZSB7CisrICAgIGVhID0gREZvcm1FQSh0aGlzLCBpbnN0ciwgc2kpOworKyAgfQorKworKyAg c3dpdGNoIChvcGNvZGUpIHsKKysgICAgY2FzZSAzNjoKKysgICAgICAvLyBzdHcKKysgICAgICB3 cml0ZVcoZWEsIEkzMihnZXRSZWdpc3RlcihycykpLCBpbnN0cik7CisrICAgICAgYnJlYWs7Cisr ICAgIGNhc2UgMzg6CisrICAgICAgLy8gc3RiCisrICAgICAgd3JpdGVCKGVhLCAodWludDhfdCko Z2V0UmVnaXN0ZXIocnMpICYgMHhGRikpOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDM5Ogor KyAgICAgIC8vIHN0YnUKKysgICAgICB3cml0ZUIoZWEsICh1aW50OF90KShnZXRSZWdpc3Rlcihy cykgJiAweEZGKSk7CisrICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOwor KyAgICAgIGJyZWFrOworKyAgICBjYXNlIDQ0OgorKyAgICAgIC8vIHN0aAorKyAgICAgIHdyaXRl SChlYSwgVTE2KGdldFJlZ2lzdGVyKHJzKSksIGluc3RyKTsKKysgICAgICBicmVhazsKKysgICAg Y2FzZSA0NToKKysgICAgICAvLyBzdGh1CisrICAgICAgd3JpdGVIKGVhLCBVMTYoZ2V0UmVnaXN0 ZXIocnMpKSwgaW5zdHIpOworKyAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVh KTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSA1MjogeworKyAgICAgIC8vIHN0ZnM6IGNvbnZl cnQgZG91YmxlIGluIEZQUiB0byBzaW5nbGUgYW5kIHN0b3JlIChOYU4tcHJlc2VydmluZzsKKysg ICAgICAvLyBtYXRjaGVzIFBvd2VyIElTQSBgc3Rmc2Agd2hpY2ggdXNlcyB4c2N2ZHBzcG4gc2Vt YW50aWNzKQorKyAgICAgIGRvdWJsZSBkdmFsID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnMpOwor KyAgICAgIGZsb2F0IGZ2YWwgPSBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGR2YWwpOworKyAg ICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDQpKSBicmVhazsKKysgICAgICAqcmVpbnRl cnByZXRfY2FzdDxmbG9hdCo+KGVhKSA9IGZ2YWw7CisrICAgICAgTExCaXRfID0gZmFsc2U7Cisr ICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1MzogeworKyAgICAgIC8vIHN0ZnN1Cisr ICAgICAgZG91YmxlIGR2YWwgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShycyk7CisrICAgICAgZmxv YXQgZnZhbCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZHZhbCk7CisrICAgICAgaWYgKGhh bmRsZVdhc21TZWdGYXVsdChlYSwgNCkpIGJyZWFrOworKyAgICAgICpyZWludGVycHJldF9jYXN0 PGZsb2F0Kj4oZWEpID0gZnZhbDsKKysgICAgICBMTEJpdF8gPSBmYWxzZTsKKysgICAgICBzZXRS ZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCBlYSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSA1NDoKKysgICAgICAvLyBzdGZkCisrICAgICAgd3JpdGVEKGVhLCBnZXRGcHVSZWdp c3RlckRvdWJsZShycyksIGluc3RyKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSA1NToKKysg ICAgICAvLyBzdGZkdQorKyAgICAgIHdyaXRlRChlYSwgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocnMp LCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgZWEpOworKyAg ICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRG KCJkZWNvZGVERm9ybVN0b3JlOiB1bmhhbmRsZWQgb3Bjb2RlICV1Iiwgb3Bjb2RlKTsKKysgIH0K Kyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysvLyBkZWNvZGVEU0Zvcm06IGxkKDU4 LzApLCBsd2EoNTgvMiksIHN0ZCg2Mi8wKSwgc3RkdSg2Mi8xKQorKworK3ZvaWQgU2ltdWxhdG9y OjpkZWNvZGVEU0Zvcm0oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICB1aW50MzJfdCBvcGNv ZGUgPSBpbnN0ci0+b3Bjb2RlKCk7CisrICB1aW50MzJfdCBydCA9IGluc3RyLT5ydFZhbHVlKCk7 CisrICBpbnQxNl90IGRzID0gaW5zdHItPmRzMTRWYWx1ZSgpOworKyAgdWludDMyX3QgeG8gPSBp bnN0ci0+Yml0cygxLCAwKTsKKysKKysgIGlmIChvcGNvZGUgPT0gNTgpIHsKKysgICAgdWludDY0 X3QgZWEgPSBEU0Zvcm1FQSh0aGlzLCBpbnN0ciwgZHMpOworKyAgICBzd2l0Y2ggKHhvKSB7Cisr ICAgICAgY2FzZSAwOgorKyAgICAgICAgLy8gbGQKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCBy ZWFkRFcoZWEsIGluc3RyKSk7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDE6IHsKKysg ICAgICAgIC8vIGxkdQorKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIHJlYWREVyhlYSwgaW5zdHIp KTsKKysgICAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAgICAg IGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDI6CisrICAgICAgICAvLyBsd2EgKGxvYWQg d29yZCBhbGdlYnJhaWMsIHNpZ24tZXh0ZW5kZWQgdG8gNjQpCisrICAgICAgICBzZXRSZWdpc3Rl cihydCwgKGludDY0X3QpcmVhZFcoZWEsIGluc3RyKSk7CisrICAgICAgICBicmVhazsKKysgICAg ICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZURTRm9y bTogb3Bjb2RlIDU4LCB4bz0ldSIsIHhvKTsKKysgICAgfQorKyAgfSBlbHNlIGlmIChvcGNvZGUg PT0gNjIpIHsKKysgICAgLy8gRm9yIHN0ZC9zdGR1LCBFQSB1c2VzIFJBIGRpcmVjdGx5IChubyBS QXwwIHJ1bGUpLgorKyAgICB1aW50NjRfdCBlYTsKKysgICAgaWYgKHhvID09IDEpIHsKKysgICAg ICAvLyBzdGR1OiB1cGRhdGUgZm9ybQorKyAgICAgIGVhID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJh VmFsdWUoKSkgKyAoaW50NjRfdClkczsKKysgICAgfSBlbHNlIHsKKysgICAgICBlYSA9IERTRm9y bUVBKHRoaXMsIGluc3RyLCBkcyk7CisrICAgIH0KKysgICAgc3dpdGNoICh4bykgeworKyAgICAg IGNhc2UgMDoKKysgICAgICAgIC8vIHN0ZAorKyAgICAgICAgd3JpdGVEVyhlYSwgZ2V0UmVnaXN0 ZXIocnQpLCBpbnN0cik7CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDE6CisrICAgICAg ICAvLyBzdGR1CisrICAgICAgICB3cml0ZURXKGVhLCBnZXRSZWdpc3RlcihydCksIGluc3RyKTsK KysgICAgICAgIHNldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCksIGVhKTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigi ZGVjb2RlRFNGb3JtOiBvcGNvZGUgNjIsIHhvPSV1IiwgeG8pOworKyAgICB9CisrICB9IGVsc2Ug eworKyAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlRFNGb3JtOiB1bmhhbmRsZWQg b3Bjb2RlICV1Iiwgb3Bjb2RlKTsKKysgIH0KKyt9CisrCisrLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKysvLyBkZWNvZGVYRm9ybTogTWFqb3Igb3Bjb2RlIDMxIChYLWZvcm0sIFhPLWZvcm0sIGV0 Yy4pCisrLy8gVGhpcyBpcyB0aGUgbGFyZ2VzdCBkZWNvZGVyIGNvdmVyaW5nIG1vc3QgQUxVLCBp bmRleGVkIGxvYWQvc3RvcmUsIFNQUiwKKysvLyBhbmQgYXRvbWljIGluc3RydWN0aW9ucy4KKysK Kyt2b2lkIFNpbXVsYXRvcjo6ZGVjb2RlWEZvcm0oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7Cisr ICB1aW50MzJfdCB4byA9IGluc3RyLT54b1ZhbHVlKCk7CisrICB1aW50MzJfdCBydCA9IGluc3Ry LT5ydFZhbHVlKCk7CisrICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVlKCk7CisrICB1aW50 MzJfdCByYiA9IGluc3RyLT5yYlZhbHVlKCk7CisrICBib29sIHJjID0gaW5zdHItPnJjQml0KCk7 CisrCisrICAvLyBNYW55IGluc3RydWN0aW9ucyBzaGFyZSBtYWpvciBvcGNvZGUgMzEuIFN3aXRj aCBvbiBleHRlbmRlZCBvcGNvZGUuCisrICAvLyBGb3IgWE8tZm9ybSB3aXRoIE9FPTEsIHRoZSB4 b1ZhbHVlKCkgaW5jbHVkZXMgYml0IDEwLCBzbworKyAgLy8gYWRkbyAoMjY2IHwgNTEyID0gNzc4 KSBldGMuIGFyZSBzZXBhcmF0ZSBjYXNlcy4KKysKKysgIC8vIEZpcnN0IGNoZWNrIGZvciBpc2Vs IHdoaWNoIHVzZXMgYml0cyAxLTUgPSAxNSAoWE8gPSAxNSBpbiBiaXRzIDEuLjUpLgorKyAgaWYg KCh4byAmIDB4MUYpID09IDE1KSB7CisrICAgIC8vIGlzZWw6IGlmIENSW0JDXSB0aGVuIFJUPVJB IGVsc2UgUlQ9UkIKKysgICAgLy8gQkMgaXMgaW4gYml0cyA2Li4xMCAodGhlIHJjIGZpZWxkIHBv c2l0aW9uKS4KKysgICAgdWludDMyX3QgYmMgPSBpbnN0ci0+cmNWYWx1ZSgpOworKyAgICB1aW50 MzJfdCBjckZpZWxkID0gYmMgLyA0OworKyAgICB1aW50MzJfdCBjckJpdCA9IGJjICUgNDsKKysg ICAgdWludDhfdCBjckZpZWxkVmFsID0gZ2V0Q1JGaWVsZChjckZpZWxkKTsKKysgICAgLy8gUFBD IENSIGZpZWxkIGJpdHM6IGJpdDM9TFQoOCksIGJpdDI9R1QoNCksIGJpdDE9RVEoMiksIGJpdDA9 U08oMSkKKysgICAgLy8gQml0IG51bWJlcmluZyB3aXRoaW4gZmllbGQ6IDA9TFQsIDE9R1QsIDI9 RVEsIDM9U08KKysgICAgYm9vbCBiaXRTZXQ7CisrICAgIHN3aXRjaCAoY3JCaXQpIHsKKysgICAg ICBjYXNlIDA6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRMVCkgIT0gMDsgYnJlYWs7 CisrICAgICAgY2FzZSAxOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkR1QpICE9IDA7 IGJyZWFrOworKyAgICAgIGNhc2UgMjogYml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEVR KSAhPSAwOyBicmVhazsKKysgICAgICBjYXNlIDM6IGJpdFNldCA9IChjckZpZWxkVmFsICYga0NS RmllbGRTTykgIT0gMDsgYnJlYWs7CisrICAgICAgZGVmYXVsdDogYml0U2V0ID0gZmFsc2U7IGJy ZWFrOworKyAgICB9CisrICAgIGludDY0X3QgcmFWYWwgPSAocmEgPT0gMCkgPyAwIDogZ2V0UmVn aXN0ZXIocmEpOworKyAgICBpbnQ2NF90IHJiVmFsID0gZ2V0UmVnaXN0ZXIocmIpOworKyAgICBz ZXRSZWdpc3RlcihydCwgYml0U2V0ID8gcmFWYWwgOiByYlZhbCk7CisrICAgIHJldHVybjsKKysg IH0KKysKKysgIHN3aXRjaCAoeG8pIHsKKysgICAgLy8gLS0tIEFyaXRobWV0aWMgLS0tCisrICAg IGNhc2UgMjY2OiB7CisrICAgICAgLy8gYWRkCisrICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRS ZWdpc3RlcihyYSkgKyBnZXRSZWdpc3RlcihyYik7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHJl c3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsK KysgICAgfQorKyAgICBjYXNlIDc3ODogeworKyAgICAgIC8vIGFkZG8KKysgICAgICBpbnQ2NF90 IHJhX3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJl Z2lzdGVyKHJiKTsKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIHJiX3ZhbDsKKysg ICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKKysgICAgICAvLyBPdmVyZmxvdyBpZiBzaWdu cyBvZiBpbnB1dHMgYXJlIHNhbWUgYnV0IHJlc3VsdCBzaWduIGRpZmZlcnMuCisrICAgICAgYm9v bCBvdiA9ICgocmFfdmFsIF4gcmVzdWx0KSAmIChyYl92YWwgXiByZXN1bHQpKSA8IDA7CisrICAg ICAgc2V0WEVST1Yob3YpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAg ICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMDogeworKyAgICAgIC8vIGFkZGMKKysgICAg ICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRf dCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCByZXN1bHQg PSByYV92YWwgKyByYl92YWw7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsK KysgICAgICBzZXRYRVJDQShyZXN1bHQgPCByYV92YWwpOworKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKEk2NChyZXN1bHQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEzODog eworKyAgICAgIC8vIGFkZGU6IFJUID0gUkEgKyBSQiArIENBCisrICAgICAgdWludDY0X3QgcmFf dmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgcmJfdmFsID0gVTY0 KGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgdWludDY0X3QgY2EgPSBnZXRYRVJDQSgpID8gMVVM TCA6IDBVTEw7CisrICAgICAgdWludDY0X3QgcmVzdWx0ID0gcmFfdmFsICsgcmJfdmFsICsgY2E7 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICAvLyBDYXJyeS1v dXQ6IHdoZW4gY2E9PTAsIG9ubHkgdGhlIHJhK3JiIHdyYXAgbWF0dGVyczsgd2hlbiBjYT09MSwK KysgICAgICAvLyBhbiBhZGRpdGlvbmFsIHdyYXAgb2NjdXJzIGlmZiByZXN1bHQgPD0gcmFfdmFs LgorKyAgICAgIGJvb2wgbmV3Q0EgPSBjYSA/IChyZXN1bHQgPD0gcmFfdmFsKSA6IChyZXN1bHQg PCByYV92YWwpOworKyAgICAgIHNldFhFUkNBKG5ld0NBKTsKKysgICAgICBpZiAocmMpIHVwZGF0 ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyMzQ6 IHsKKysgICAgICAvLyBhZGRtZTogUlQgPSBSQSArIENBIC0gMQorKyAgICAgIHVpbnQ2NF90IHJh X3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVpbnQ2NF90IGNhID0gZ2V0WEVS Q0EoKSA/IDFVTEwgOiAwVUxMOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGNh ICsgfjBVTEw7ICAvLyArIENBICsgKC0xKQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVz dWx0KSk7CisrICAgICAgLy8gQ0EgaWYgY2Fycnkgb3V0IG9mIChSQSArIENBICsgMHhGRkZGRkZG RkZGRkZGRkZGKQorKyAgICAgIGJvb2wgbmV3Q0EgPSAocmFfdmFsICE9IDApIHx8IChjYSAhPSAw KTsKKysgICAgICBzZXRYRVJDQShuZXdDQSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoSTY0 KHJlc3VsdCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjAyOiB7CisrICAg ICAgLy8gYWRkemU6IFJUID0gUkEgKyBDQQorKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChn ZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVpbnQ2NF90IGNhID0gZ2V0WEVSQ0EoKSA/IDFVTEwg OiAwVUxMOworKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9IHJhX3ZhbCArIGNhOworKyAgICAgIHNl dFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7CisrICAgICAgc2V0WEVSQ0EocmVzdWx0IDwgcmFf dmFsKTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChJNjQocmVzdWx0KSk7CisrICAgICAgYnJl YWs7CisrICAgIH0KKysgICAgY2FzZSA0MDogeworKyAgICAgIC8vIHN1YmY6IFJUID0gUkIgLSBS QQorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocmIpIC0gZ2V0UmVnaXN0ZXIo cmEpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBk YXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1NTI6IHsK KysgICAgICAvLyBzdWJmbzogUlQgPSBSQiAtIFJBLCBzZXQgT1YKKysgICAgICBpbnQ2NF90IHJh X3ZhbCA9IGdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBpbnQ2NF90IHJiX3ZhbCA9IGdldFJlZ2lz dGVyKHJiKTsKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IHJiX3ZhbCAtIHJhX3ZhbDsKKysgICAg ICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsKKysgICAgICBib29sIG92ID0gKChyYl92YWwgXiBy YV92YWwpICYgKHJiX3ZhbCBeIHJlc3VsdCkpIDwgMDsKKysgICAgICBzZXRYRVJPVihvdik7Cisr ICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDg6IHsKKysgICAgICAvLyBzdWJmYzogUlQgPSB+UkEgKyBSQiArIDEKKysgICAg ICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRf dCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCByZXN1bHQg PSB+cmFfdmFsICsgcmJfdmFsICsgMTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3Vs dCkpOworKyAgICAgIC8vIENBID0gbm8gYm9ycm93ID0gKFJCID49IFJBIHVuc2lnbmVkKQorKyAg ICAgIHNldFhFUkNBKHJiX3ZhbCA+PSByYV92YWwpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1Iw KEk2NChyZXN1bHQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDEzNjogewor KyAgICAgIC8vIHN1YmZlOiBSVCA9IH5SQSArIFJCICsgQ0EKKysgICAgICB1aW50NjRfdCByYV92 YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQo Z2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCBjYSA9IGdldFhFUkNBKCkgPyAxVUxM IDogMFVMTDsKKysgICAgICB1aW50NjRfdCByZXN1bHQgPSB+cmFfdmFsICsgcmJfdmFsICsgY2E7 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyZXN1bHQpKTsKKysgICAgICBfX3VpbnQxMjhf dCB3aWRlID0gKF9fdWludDEyOF90KSh+cmFfdmFsKSArIChfX3VpbnQxMjhfdClyYl92YWwgKyBj YTsKKysgICAgICBzZXRYRVJDQSgod2lkZSA+PiA2NCkgIT0gMCk7CisrICAgICAgaWYgKHJjKSB1 cGRhdGVDUjAoSTY0KHJlc3VsdCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MjMyOiB7CisrICAgICAgLy8gc3ViZnplOiBSVCA9IH5SQSArIENBCisrICAgICAgdWludDY0X3Qg cmFfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDY0X3QgY2EgPSBnZXRY RVJDQSgpID8gMVVMTCA6IDBVTEw7CisrICAgICAgdWludDY0X3QgcmVzdWx0ID0gfnJhX3ZhbCAr IGNhOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7CisrICAgICAgc2V0WEVS Q0EoY2EgPiByYV92YWwpOyAgLy8gQ0EgaWYgflJBICsgQ0Egb3ZlcmZsb3dzCisrICAgICAgaWYg KHJjKSB1cGRhdGVDUjAoSTY0KHJlc3VsdCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMTA0OiB7CisrICAgICAgLy8gbmVnOiBSVCA9IC1SQQorKyAgICAgIGludDY0X3QgcmVz dWx0ID0gLWdldFJlZ2lzdGVyKHJhKTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0KTsK KysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9 CisrCisrICAgIC8vIC0tLSBNdWx0aXBseSAtLS0KKysgICAgY2FzZSAyMzM6IHsKKysgICAgICAv LyBtdWxsZDogUlQgPSBSQSAqIFJCIChsb3cgNjQgYml0cykKKysgICAgICBpbnQ2NF90IHJlc3Vs dCA9IGdldFJlZ2lzdGVyKHJhKSAqIGdldFJlZ2lzdGVyKHJiKTsKKysgICAgICBzZXRSZWdpc3Rl cihydCwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzQ1OiB7CisrICAgICAgLy8gbXVsbGRvOiBSVCA9 IFJBICogUkIsIHNldCBPVgorKyAgICAgIGludDY0X3QgcmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEp OworKyAgICAgIGludDY0X3QgcmJfdmFsID0gZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIGludDY0 X3QgcmVzdWx0ID0gcmFfdmFsICogcmJfdmFsOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1 bHQpOworKyAgICAgIC8vIE9WIGlmIGhpZ2ggcGFydCBvZiBmdWxsIDEyOC1iaXQgcHJvZHVjdCBp cyBub3QgYWxsLXNpZ24uCisrICAgICAgaW50NjRfdCBoaSA9IE11bHRpcGx5SGlnaFNpZ25lZChy YV92YWwsIHJiX3ZhbCk7CisrICAgICAgYm9vbCBvdiA9IChoaSAhPSAocmVzdWx0ID4+IDYzKSk7 CisrICAgICAgc2V0WEVST1Yob3YpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyMzU6IHsKKysgICAgICAvLyBtdWxs dzogUlQgPSBzaWduX2V4dChSQVszMjo2M10gKiBSQlszMjo2M10pCisrICAgICAgaW50NjRfdCBy ZXN1bHQgPSAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmEpKSAqCisrICAgICAgICAgICAgICAg ICAgICAgICAoaW50NjRfdClJMzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBzZXRSZWdpc3Rl cihydCwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzQ3OiB7CisrICAgICAgLy8gbXVsbHdvCisrICAg ICAgaW50NjRfdCByYV92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBpbnQ2NF90 IHJiX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIGludDY0X3QgcmVzdWx0ID0g cmFfdmFsICogcmJfdmFsOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAg IGJvb2wgb3YgPSAocmVzdWx0ICE9IChpbnQ2NF90KUkzMihyZXN1bHQpKTsKKysgICAgICBzZXRY RVJPVihvdik7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVh azsKKysgICAgfQorKyAgICBjYXNlIDczOiB7CisrICAgICAgLy8gbXVsaGQ6IFJUID0gaGlnaCA2 NCBiaXRzIG9mIFJBICogUkIgKHNpZ25lZCkKKysgICAgICBzZXRSZWdpc3RlcihydCwgTXVsdGlw bHlIaWdoU2lnbmVkKGdldFJlZ2lzdGVyKHJhKSwgZ2V0UmVnaXN0ZXIocmIpKSk7CisrICAgICAg aWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBicmVhazsKKysgICAg fQorKyAgICBjYXNlIDk6IHsKKysgICAgICAvLyBtdWxoZHU6IFJUID0gaGlnaCA2NCBiaXRzIG9m IFJBICogUkIgKHVuc2lnbmVkKQorKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBJNjQoTXVsdGlwbHlI aWdoVW5zaWduZWQoVTY0KGdldFJlZ2lzdGVyKHJhKSksCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQoZ2V0UmVnaXN0ZXIocmIpKSkpKTsKKysgICAg ICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJyZWFrOworKyAg ICB9CisrICAgIGNhc2UgNzU6IHsKKysgICAgICAvLyBtdWxodzogUlQgPSBoaWdoIDMyIGJpdHMg b2YgKFJBWzMyOjYzXSAqIFJCWzMyOjYzXSksIHNpZ25lZAorKyAgICAgIGludDY0X3QgcmVzdWx0 ID0KKysgICAgICAgICAgKGludDY0X3QpSTMyKGdldFJlZ2lzdGVyKHJhKSkgKiAoaW50NjRfdClJ MzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgcmVzdWx0ID4+IDMy KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrICAgIGNhc2UgMTE6IHsKKysgICAgICAvLyBtdWxod3U6IFJUID0gaGln aCAzMiBiaXRzLCB1bnNpZ25lZAorKyAgICAgIHVpbnQ2NF90IHJlc3VsdCA9CisrICAgICAgICAg ICh1aW50NjRfdClVMzIoZ2V0UmVnaXN0ZXIocmEpKSAqICh1aW50NjRfdClVMzIoZ2V0UmVnaXN0 ZXIocmIpKTsKKysgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KHJlc3VsdCA+PiAzMikpOworKyAg ICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysKKysgICAgLy8gLS0tIERpdmlkZSAtLS0KKysgICAgY2FzZSA0ODk6IHsKKysgICAg ICAvLyBkaXZkOiBSVCA9IFJBIC8gUkIgKHNpZ25lZCwgNjQtYml0KQorKyAgICAgIGludDY0X3Qg cmFfdmFsID0gZ2V0UmVnaXN0ZXIocmEpOworKyAgICAgIGludDY0X3QgcmJfdmFsID0gZ2V0UmVn aXN0ZXIocmIpOworKyAgICAgIGlmIChyYl92YWwgPT0gMCB8fCAocmFfdmFsID09IElOVDY0X01J TiAmJiByYl92YWwgPT0gLTEpKSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAg ICAgfSBlbHNlIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCByYV92YWwgLyByYl92YWwpOwor KyAgICAgIH0KKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTAwMTogeworKyAgICAgIC8vIGRpdmRvCisr ICAgICAgaW50NjRfdCByYV92YWwgPSBnZXRSZWdpc3RlcihyYSk7CisrICAgICAgaW50NjRfdCBy Yl92YWwgPSBnZXRSZWdpc3RlcihyYik7CisrICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0gMCkg fHwgKHJhX3ZhbCA9PSBJTlQ2NF9NSU4gJiYgcmJfdmFsID09IC0xKTsKKysgICAgICBpZiAob3Yp IHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAg ICAgc2V0UmVnaXN0ZXIocnQsIHJhX3ZhbCAvIHJiX3ZhbCk7CisrICAgICAgfQorKyAgICAgIHNl dFhFUk9WKG92KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOwor KyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDU3OiB7CisrICAgICAgLy8gZGl2ZHU6 IHVuc2lnbmVkIDY0LWJpdCBkaXZpZGUKKysgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0 UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIo cmIpKTsKKysgICAgICBpZiAocmJfdmFsID09IDApIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0 LCAwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIEk2NChyYV92 YWwgLyByYl92YWwpKTsKKysgICAgICB9CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVn aXN0ZXIocnQpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDk2OTogeworKyAg ICAgIC8vIGRpdmR1bworKyAgICAgIHVpbnQ2NF90IHJhX3ZhbCA9IFU2NChnZXRSZWdpc3Rlcihy YSkpOworKyAgICAgIHVpbnQ2NF90IHJiX3ZhbCA9IFU2NChnZXRSZWdpc3RlcihyYikpOworKyAg ICAgIGJvb2wgb3YgPSAocmJfdmFsID09IDApOworKyAgICAgIGlmIChvdikgeworKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRSZWdpc3Rl cihydCwgSTY0KHJhX3ZhbCAvIHJiX3ZhbCkpOworKyAgICAgIH0KKysgICAgICBzZXRYRVJPVihv dik7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDQ5MTogeworKyAgICAgIC8vIGRpdnc6IHNpZ25lZCAz Mi1iaXQgZGl2aWRlCisrICAgICAgaW50MzJfdCByYV92YWwgPSBJMzIoZ2V0UmVnaXN0ZXIocmEp KTsKKysgICAgICBpbnQzMl90IHJiX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYikpOworKyAgICAg IGlmIChyYl92YWwgPT0gMCB8fCAocmFfdmFsID09IElOVDMyX01JTiAmJiByYl92YWwgPT0gLTEp KSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAgICAgfSBlbHNlIHsKKysgICAg ICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsIC8gcmJfdmFsKSk7CisrICAgICAg fQorKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgYnJl YWs7CisrICAgIH0KKysgICAgY2FzZSAxMDAzOiB7CisrICAgICAgLy8gZGl2d28KKysgICAgICBp bnQzMl90IHJhX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIGludDMyX3QgcmJf dmFsID0gSTMyKGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0g MCkgfHwgKHJhX3ZhbCA9PSBJTlQzMl9NSU4gJiYgcmJfdmFsID09IC0xKTsKKysgICAgICBpZiAo b3YpIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysgICAgICB9IGVsc2UgeworKyAg ICAgICAgc2V0UmVnaXN0ZXIocnQsIChpbnQ2NF90KShyYV92YWwgLyByYl92YWwpKTsKKysgICAg ICB9CisrICAgICAgc2V0WEVST1Yob3YpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJl Z2lzdGVyKHJ0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA0NTk6IHsKKysg ICAgICAvLyBkaXZ3dTogdW5zaWduZWQgMzItYml0IGRpdmlkZQorKyAgICAgIHVpbnQzMl90IHJh X3ZhbCA9IFUzMihnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIHVpbnQzMl90IHJiX3ZhbCA9IFUz MihnZXRSZWdpc3RlcihyYikpOworKyAgICAgIGlmIChyYl92YWwgPT0gMCkgeworKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRSZWdpc3Rl cihydCwgKGludDY0X3QpKHJhX3ZhbCAvIHJiX3ZhbCkpOworKyAgICAgIH0KKysgICAgICBpZiAo cmMpIHVwZGF0ZUNSMChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgOTcxOiB7CisrICAgICAgLy8gZGl2d3VvCisrICAgICAgdWludDMyX3QgcmFfdmFs ID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgdWludDMyX3QgcmJfdmFsID0gVTMyKGdl dFJlZ2lzdGVyKHJiKSk7CisrICAgICAgYm9vbCBvdiA9IChyYl92YWwgPT0gMCk7CisrICAgICAg aWYgKG92KSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAgICAgfSBlbHNlIHsK KysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsIC8gcmJfdmFsKSk7Cisr ICAgICAgfQorKyAgICAgIHNldFhFUk9WKG92KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChn ZXRSZWdpc3RlcihydCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vIC0tLSBQ T1dFUjkgbW9kdWxvIChJU0EgMy4wKSAtLS0KKysgICAgLy8gUmVzdWx0IG9mICJ1bmRlZmluZWQi IGRpdmlzaW9uIChyYl92YWwgPT0gMCwgb3Igc2lnbmVkIElOVF9NSU4gLyAtMSkKKysgICAgLy8g aXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwZXIgUG93ZXIgSVNBOyBtYXRjaGluZyB0aGUgZGl2 WCBiZWhhdmlvdXIKKysgICAgLy8gYWJvdmUsIHdlIHlpZWxkIDAgaW4gdGhvc2UgY2FzZXMuIFJj IGhhcyBubyBlbmNvZGluZyBmb3IgdGhlc2Ugb3BzLgorKyAgICBjYXNlIDc3OTogeworKyAgICAg IC8vIG1vZHN3OiBSVCA9IFJBICUgUkIgKHNpZ25lZCwgMzItYml0KQorKyAgICAgIGludDMyX3Qg cmFfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgaW50MzJfdCByYl92YWwgPSBJ MzIoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBpZiAocmJfdmFsID09IDAgfHwgKHJhX3ZhbCA9 PSBJTlQzMl9NSU4gJiYgcmJfdmFsID09IC0xKSkgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQs IDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgKGludDY0X3Qp KHJhX3ZhbCAlIHJiX3ZhbCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAg ICBjYXNlIDI2NzogeworKyAgICAgIC8vIG1vZHV3OiBSVCA9IFJBICUgUkIgKHVuc2lnbmVkLCAz Mi1iaXQpCisrICAgICAgdWludDMyX3QgcmFfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJhKSk7Cisr ICAgICAgdWludDMyX3QgcmJfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJiKSk7CisrICAgICAgaWYg KHJiX3ZhbCA9PSAwKSB7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgMCk7CisrICAgICAgfSBl bHNlIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkocmFfdmFsICUgcmJfdmFs KSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzc3OiB7Cisr ICAgICAgLy8gbW9kc2Q6IFJUID0gUkEgJSBSQiAoc2lnbmVkLCA2NC1iaXQpCisrICAgICAgaW50 NjRfdCByYV92YWwgPSBnZXRSZWdpc3RlcihyYSk7CisrICAgICAgaW50NjRfdCByYl92YWwgPSBn ZXRSZWdpc3RlcihyYik7CisrICAgICAgaWYgKHJiX3ZhbCA9PSAwIHx8IChyYV92YWwgPT0gSU5U NjRfTUlOICYmIHJiX3ZhbCA9PSAtMSkpIHsKKysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsK KysgICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0UmVnaXN0ZXIocnQsIHJhX3ZhbCAlIHJiX3Zh bCk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjY1OiB7Cisr ICAgICAgLy8gbW9kdWQ6IFJUID0gUkEgJSBSQiAodW5zaWduZWQsIDY0LWJpdCkKKysgICAgICB1 aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICB1aW50NjRfdCBy Yl92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBpZiAocmJfdmFsID09IDApIHsK KysgICAgICAgIHNldFJlZ2lzdGVyKHJ0LCAwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAg c2V0UmVnaXN0ZXIocnQsIEk2NChyYV92YWwgJSByYl92YWwpKTsKKysgICAgICB9CisrICAgICAg YnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gLS0tIExvZ2ljYWwgLS0tCisrICAgIGNhc2UgMjg6 IHsKKysgICAgICAvLyBhbmQ6IFJBID0gUlMgJiBSQgorKyAgICAgIGludDY0X3QgcmVzdWx0ID0g Z2V0UmVnaXN0ZXIocnQpICYgZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJh LCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJl YWs7CisrICAgIH0KKysgICAgY2FzZSA2MDogeworKyAgICAgIC8vIGFuZGM6IFJBID0gUlMgJiB+ UkIKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdldFJlZ2lzdGVyKHJ0KSAmIH5nZXRSZWdpc3Rl cihyYik7CisrICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1 cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDQ0NDog eworKyAgICAgIC8vIG9yOiBSQSA9IFJTIHwgUkIKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IGdl dFJlZ2lzdGVyKHJ0KSB8IGdldFJlZ2lzdGVyKHJiKTsKKysgICAgICBzZXRSZWdpc3RlcihyYSwg cmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFr OworKyAgICB9CisrICAgIGNhc2UgNDEyOiB7CisrICAgICAgLy8gb3JjOiBSQSA9IFJTIHwgflJC CisrICAgICAgaW50NjRfdCByZXN1bHQgPSBnZXRSZWdpc3RlcihydCkgfCB+Z2V0UmVnaXN0ZXIo cmIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBk YXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzMTY6IHsK KysgICAgICAvLyB4b3I6IFJBID0gUlMgXiBSQgorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gZ2V0 UmVnaXN0ZXIocnQpIF4gZ2V0UmVnaXN0ZXIocmIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBy ZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7 CisrICAgIH0KKysgICAgY2FzZSA0NzY6IHsKKysgICAgICAvLyBuYW5kOiBSQSA9IH4oUlMgJiBS QikKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IH4oZ2V0UmVnaXN0ZXIocnQpICYgZ2V0UmVnaXN0 ZXIocmIpKTsKKysgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBpZiAocmMp IHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTI0 OiB7CisrICAgICAgLy8gbm9yOiBSQSA9IH4oUlMgfCBSQikKKysgICAgICBpbnQ2NF90IHJlc3Vs dCA9IH4oZ2V0UmVnaXN0ZXIocnQpIHwgZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBzZXRSZWdp c3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjg0OiB7CisrICAgICAgLy8gZXF2OiBSQSA9 IH4oUlMgXiBSQikKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IH4oZ2V0UmVnaXN0ZXIocnQpIF4g Z2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICBzZXRSZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAg ICBpZiAocmMpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisr ICAgIC8vIC0tLSBTaGlmdHMgLS0tCisrICAgIGNhc2UgMjc6IHsKKysgICAgICAvLyBzbGQ6IFJB ID0gUlMgPDwgUkJbNTg6NjNdIGlmIFJCWzU3XT09MCwgZWxzZSBSQT0wCisrICAgICAgdWludDY0 X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50NjRfdCByc192YWwg PSBVNjQoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBpbnQ2NF90IHJlc3VsdDsKKysgICAgICBp ZiAoc2hpZnQgJiAweDQwKSB7CisrICAgICAgICByZXN1bHQgPSAwOworKyAgICAgIH0gZWxzZSB7 CisrICAgICAgICByZXN1bHQgPSBJNjQocnNfdmFsIDw8IChzaGlmdCAmIDB4M0YpKTsKKysgICAg ICB9CisrICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRh dGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDI0OiB7Cisr ICAgICAgLy8gc2x3OiBSQSA9IFJTWzMyOjYzXSA8PCBSQls1OTo2M10gaWYgUkJbNThdPT0wLCBl bHNlIFJBPTAgKDMyLWJpdCkKKysgICAgICB1aW50MzJfdCBzaGlmdCA9IFUzMihnZXRSZWdpc3Rl cihyYikpOworKyAgICAgIHVpbnQzMl90IHJzX3ZhbCA9IFUzMihnZXRSZWdpc3RlcihydCkpOwor KyAgICAgIHVpbnQzMl90IHJlc3VsdDsKKysgICAgICBpZiAoc2hpZnQgJiAweDIwKSB7CisrICAg ICAgICByZXN1bHQgPSAwOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXN1bHQgPSByc192 YWwgPDwgKHNoaWZ0ICYgMHgxRik7CisrICAgICAgfQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCAo aW50NjRfdCkoaW50MzJfdClyZXN1bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJl Z2lzdGVyKHJhKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1Mzk6IHsKKysg ICAgICAvLyBzcmQ6IFJBID0gUlMgPj4gUkJbNTg6NjNdIGlmIFJCWzU3XT09MCwgZWxzZSBSQT0w IChsb2dpY2FsKQorKyAgICAgIHVpbnQ2NF90IHNoaWZ0ID0gVTY0KGdldFJlZ2lzdGVyKHJiKSk7 CisrICAgICAgdWludDY0X3QgcnNfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAg aW50NjRfdCByZXN1bHQ7CisrICAgICAgaWYgKHNoaWZ0ICYgMHg0MCkgeworKyAgICAgICAgcmVz dWx0ID0gMDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVzdWx0ID0gSTY0KHJzX3ZhbCA+ PiAoc2hpZnQgJiAweDNGKSk7CisrICAgICAgfQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1 bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA1MzY6IHsKKysgICAgICAvLyBzcnc6IFJBID0gUlNbMzI6NjNdID4+ IFJCWzU5OjYzXSBsb2dpY2FsICgzMi1iaXQpCisrICAgICAgdWludDMyX3Qgc2hpZnQgPSBVMzIo Z2V0UmVnaXN0ZXIocmIpKTsKKysgICAgICB1aW50MzJfdCByc192YWwgPSBVMzIoZ2V0UmVnaXN0 ZXIocnQpKTsKKysgICAgICB1aW50MzJfdCByZXN1bHQ7CisrICAgICAgaWYgKHNoaWZ0ICYgMHgy MCkgeworKyAgICAgICAgcmVzdWx0ID0gMDsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgcmVz dWx0ID0gcnNfdmFsID4+IChzaGlmdCAmIDB4MUYpOworKyAgICAgIH0KKysgICAgICBzZXRSZWdp c3RlcihyYSwgKGludDY0X3QpKGludDMyX3QpcmVzdWx0KTsKKysgICAgICBpZiAocmMpIHVwZGF0 ZUNSMChnZXRSZWdpc3RlcihyYSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug Nzk0OiB7CisrICAgICAgLy8gc3JhZDogUkEgPSBSUyA+PiBSQls1ODo2M10gYXJpdGhtZXRpYyAo NjQtYml0KSwgc2V0IENBCisrICAgICAgdWludDY0X3Qgc2hpZnQgPSBVNjQoZ2V0UmVnaXN0ZXIo cmIpKTsKKysgICAgICBpbnQ2NF90IHJzX3ZhbCA9IGdldFJlZ2lzdGVyKHJ0KTsKKysgICAgICBp bnQ2NF90IHJlc3VsdDsKKysgICAgICBib29sIGNhcnJ5OworKyAgICAgIGlmIChzaGlmdCAmIDB4 NDApIHsKKysgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+PiA2MzsgIC8vIGFsbCBzaWduIGJpdHMK KysgICAgICAgIGNhcnJ5ID0gKHJzX3ZhbCA8IDApOworKyAgICAgIH0gZWxzZSB7CisrICAgICAg ICB1aW50MzJfdCBzaCA9IHNoaWZ0ICYgMHgzRjsKKysgICAgICAgIHJlc3VsdCA9IHJzX3ZhbCA+ PiBzaDsKKysgICAgICAgIC8vIENBID0gMSBpZiBSUyBpcyBuZWdhdGl2ZSBhbmQgYW55IDEtYml0 cyB3ZXJlIHNoaWZ0ZWQgb3V0LgorKyAgICAgICAgY2FycnkgPSAocnNfdmFsIDwgMCkgJiYgKChy c192YWwgJiAoKDFVTEwgPDwgc2gpIC0gMSkpICE9IDApOworKyAgICAgIH0KKysgICAgICBzZXRS ZWdpc3RlcihyYSwgcmVzdWx0KTsKKysgICAgICBzZXRYRVJDQShjYXJyeSk7CisrICAgICAgaWYg KHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDc5MjogeworKyAgICAgIC8vIHNyYXc6IFJBID0gUlNbMzI6NjNdID4+IFJCWzU5OjYzXSBhcml0 aG1ldGljICgzMi1iaXQpLCBzZXQgQ0EKKysgICAgICB1aW50MzJfdCBzaGlmdCA9IFUzMihnZXRS ZWdpc3RlcihyYikpOworKyAgICAgIGludDMyX3QgcnNfdmFsID0gSTMyKGdldFJlZ2lzdGVyKHJ0 KSk7CisrICAgICAgaW50MzJfdCByZXN1bHQ7CisrICAgICAgYm9vbCBjYXJyeTsKKysgICAgICBp ZiAoc2hpZnQgJiAweDIwKSB7CisrICAgICAgICByZXN1bHQgPSByc192YWwgPj4gMzE7CisrICAg ICAgICBjYXJyeSA9IChyc192YWwgPCAwKTsKKysgICAgICB9IGVsc2UgeworKyAgICAgICAgdWlu dDMyX3Qgc2ggPSBzaGlmdCAmIDB4MUY7CisrICAgICAgICByZXN1bHQgPSByc192YWwgPj4gc2g7 CisrICAgICAgICBjYXJyeSA9IChyc192YWwgPCAwKSAmJiAoKHJzX3ZhbCAmICgoMVUgPDwgc2gp IC0gMSkpICE9IDApOworKyAgICAgIH0KKysgICAgICBzZXRSZWdpc3RlcihyYSwgKGludDY0X3Qp cmVzdWx0KTsKKysgICAgICBzZXRYRVJDQShjYXJyeSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVD UjAoZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDgy NjoKKysgICAgY2FzZSA4Mjc6IHsKKysgICAgICAvLyBzcmFkaSBSQSwgUlMsIFNIOiBSQSA9IEVY VFMoUlMpID4+IHNoIGFyaXRobWV0aWMgKDY0LWJpdCksIHNldCBDQS4KKysgICAgICAvLyBYUy1m b3JtLCBYTz00MTMgKDktYml0LCBiaXRzIDIxLTI5KSwgc2hbNV0gYXQgYml0IDMwLCBSYyBhdCBi aXQgMzEuCisrICAgICAgLy8gT3VyIHhvVmFsdWUoKSBleHRyYWN0cyBiaXRzIDEwOjEgKDEwIGJp dHMpCisrICAgICAgLy8gd2hpY2ggeWllbGRzIDQxMyoyICsgc2hbNV0gPSA4MjYgKHNoWzVdPTAp IG9yIDgyNyAoc2hbNV09MSkuCisrICAgICAgLy8gc2hbMDo0XSBhdCBpbnN0cnVjdGlvbiBiaXRz IDE1OjExICg9IHJhVmFsdWUgZmllbGQgcG9zaXRpb24sIGJ1dAorKyAgICAgIC8vIGZvciB0aGlz IFhTLWZvcm0gdGhleSdyZSB0aGUgU0hbMDo0XSBzdWJmaWVsZCkuCisrICAgICAgdWludDMyX3Qg c2ggPSBpbnN0ci0+Yml0cygxNSwgMTEpIHwgKGluc3RyLT5iaXQoMSkgPDwgNSk7CisrICAgICAg aW50NjRfdCByc192YWwgPSBnZXRSZWdpc3RlcihydCk7CisrICAgICAgaW50NjRfdCByZXN1bHQg PSAoc2ggPT0gMCkgPyByc192YWwgOiAocnNfdmFsID4+IHNoKTsKKysgICAgICAvLyBDQSA6PSBy c192YWwgPCAwICYmIGFueSBiaXRzIHNoaWZ0ZWQgb3V0IGFyZSAxLgorKyAgICAgIGJvb2wgY2Fy cnkgPSAocnNfdmFsIDwgMCkgJiYgc2ggPiAwICYmCisrICAgICAgICAgICAgICAgICAgICgoVTY0 KHJzX3ZhbCkgJiAoKDFVTEwgPDwgc2gpIC0gMSkpICE9IDApOworKyAgICAgIHNldFJlZ2lzdGVy KHJhLCByZXN1bHQpOworKyAgICAgIHNldFhFUkNBKGNhcnJ5KTsKKysgICAgICBpZiAocmMpIHVw ZGF0ZUNSMChyZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODI0OiB7 CisrICAgICAgLy8gc3Jhd2k6IFJBID0gUlNbMzI6NjNdID4+IFNIIGFyaXRobWV0aWMgKDMyLWJp dCksIHNldCBDQQorKyAgICAgIHVpbnQzMl90IHNoID0gaW5zdHItPmJpdHMoMTUsIDExKTsKKysg ICAgICBpbnQzMl90IHJzX3ZhbCA9IEkzMihnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGludDMy X3QgcmVzdWx0ID0gcnNfdmFsID4+IHNoOworKyAgICAgIGJvb2wgY2FycnkgPSAocnNfdmFsIDwg MCkgJiYgc2ggPiAwICYmCisrICAgICAgICAgICAgICAgICAgICgoVTMyKHJzX3ZhbCkgJiAoKDFV IDw8IHNoKSAtIDEpKSAhPSAwKTsKKysgICAgICBzZXRSZWdpc3RlcihyYSwgKGludDY0X3QpcmVz dWx0KTsKKysgICAgICBzZXRYRVJDQShjYXJyeSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAo Z2V0UmVnaXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0g RXh0ZW5kIC8gY291bnQgLS0tCisrICAgIGNhc2UgOTU0OiB7CisrICAgICAgLy8gZXh0c2I6IFJB ID0gc2lnbl9leHQoUlNbNTY6NjNdKQorKyAgICAgIGludDY0X3QgcmVzdWx0ID0gKGludDY0X3Qp KGludDhfdCkoZ2V0UmVnaXN0ZXIocnQpICYgMHhGRik7CisrICAgICAgc2V0UmVnaXN0ZXIocmEs IHJlc3VsdCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVh azsKKysgICAgfQorKyAgICBjYXNlIDkyMjogeworKyAgICAgIC8vIGV4dHNoOiBSQSA9IHNpZ25f ZXh0KFJTWzQ4OjYzXSkKKysgICAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90KShpbnQxNl90 KShnZXRSZWdpc3RlcihydCkgJiAweEZGRkYpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCByZXN1 bHQpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA5ODY6IHsKKysgICAgICAvLyBleHRzdzogUkEgPSBzaWduX2V4dChS U1szMjo2M10pCisrICAgICAgaW50NjRfdCByZXN1bHQgPSAoaW50NjRfdCkoaW50MzJfdCkoZ2V0 UmVnaXN0ZXIocnQpICYgMHhGRkZGRkZGRik7CisrICAgICAgc2V0UmVnaXN0ZXIocmEsIHJlc3Vs dCk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDU4OiB7CisrICAgICAgLy8gY250bHpkOiBSQSA9IGNvdW50IGxlYWRp bmcgemVyb3Mgb2YgUlMgKDY0LWJpdCkKKysgICAgICBzZXRSZWdpc3RlcihyYSwgQ291bnRMZWFk aW5nWmVyb3M2NChVNjQoZ2V0UmVnaXN0ZXIocnQpKSkpOworKyAgICAgIGlmIChyYykgdXBkYXRl Q1IwKGdldFJlZ2lzdGVyKHJhKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAy NjogeworKyAgICAgIC8vIGNudGx6dzogUkEgPSBjb3VudCBsZWFkaW5nIHplcm9zIG9mIFJTWzMy OjYzXSAoMzItYml0KQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBDb3VudExlYWRpbmdaZXJvczMy KFUzMihnZXRSZWdpc3RlcihydCkpKSk7CisrICAgICAgaWYgKHJjKSB1cGRhdGVDUjAoZ2V0UmVn aXN0ZXIocmEpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDU3MDogeworKyAg ICAgIC8vIGNudHR6ZAorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBDb3VudFRyYWlsaW5nWmVyb3M2 NChVNjQoZ2V0UmVnaXN0ZXIocnQpKSkpOworKyAgICAgIGlmIChyYykgdXBkYXRlQ1IwKGdldFJl Z2lzdGVyKHJhKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA1Mzg6IHsKKysg ICAgICAvLyBjbnR0encKKysgICAgICBzZXRSZWdpc3RlcihyYSwgQ291bnRUcmFpbGluZ1plcm9z MzIoVTMyKGdldFJlZ2lzdGVyKHJ0KSkpKTsKKysgICAgICBpZiAocmMpIHVwZGF0ZUNSMChnZXRS ZWdpc3RlcihyYSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNTA2OiB7Cisr ICAgICAgLy8gcG9wY250ZAorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBQb3BDb3VudDY0KFU2NChn ZXRSZWdpc3RlcihydCkpKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzNzg6 IHsKKysgICAgICAvLyBwb3BjbnR3OiBwb3Bjb3VudCBlYWNoIDMyLWJpdCBoYWxmIGluZGVwZW5k ZW50bHksIHN1bSBpbiBlYWNoIGhhbGYKKysgICAgICB1aW50NjRfdCB2YWwgPSBVNjQoZ2V0UmVn aXN0ZXIocnQpKTsKKysgICAgICB1aW50MzJfdCBsbyA9IFBvcENvdW50MzIoVTMyKHZhbCkpOwor KyAgICAgIHVpbnQzMl90IGhpID0gUG9wQ291bnQzMihVMzIodmFsID4+IDMyKSk7CisrICAgICAg c2V0UmVnaXN0ZXIocmEsIEk2NCgoKHVpbnQ2NF90KWhpIDw8IDMyKSB8IGxvKSk7CisrICAgICAg YnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMjI6IHsKKysgICAgICAvLyBwb3BjbnRiOiBwb3Bj b3VudCBlYWNoIGJ5dGUgaW5kZXBlbmRlbnRseQorKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBJNjQo UG9wQ291bnRQZXJCeXRlKFU2NChnZXRSZWdpc3RlcihydCkpKSkpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgMTg3OiB7CisrICAgICAgLy8gYnJkIChQT1dFUjEwKTogUkEgPSBi eXRlLXJldmVyc2UoUlMpIGZ1bGwgNjQtYml0IGRvdWJsZXdvcmQuCisrICAgICAgc2V0UmVnaXN0 ZXIocmEsIEk2NChfX2J1aWx0aW5fYnN3YXA2NChVNjQoZ2V0UmVnaXN0ZXIocnQpKSkpKTsKKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDIxOTogeworKyAgICAgIC8vIGJyaCAoUE9X RVIxMCk6IGJ5dGUtcmV2ZXJzZSBlYWNoIG9mIHRoZSA0IGhhbGZ3b3JkcyBpbiBSUy4KKysgICAg ICB1aW50NjRfdCB2ID0gVTY0KGdldFJlZ2lzdGVyKHJ0KSk7CisrICAgICAgdWludDY0X3Qgb3V0 ID0gKCh2ICYgMHhGRjAwRkYwMEZGMDBGRjAwVUxMKSA+PiA4KSB8CisrICAgICAgICAgICAgICAg ICAgICAgKCh2ICYgMHgwMEZGMDBGRjAwRkYwMEZGVUxMKSA8PCA4KTsKKysgICAgICBzZXRSZWdp c3RlcihyYSwgSTY0KG91dCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTU1 OiB7CisrICAgICAgLy8gYnJ3IChQT1dFUjEwKTogYnl0ZS1yZXZlcnNlIGVhY2ggb2YgdGhlIDIg d29yZHMgaW4gUlMuCisrICAgICAgdWludDY0X3QgdiA9IFU2NChnZXRSZWdpc3RlcihydCkpOwor KyAgICAgIHVpbnQ2NF90IG91dCA9ICgodWludDY0X3QpX19idWlsdGluX2Jzd2FwMzIoKHVpbnQz Ml90KSh2ID4+IDMyKSkgPDwgMzIpIHwKKysgICAgICAgICAgICAgICAgICAgICAodWludDY0X3Qp X19idWlsdGluX2Jzd2FwMzIoKHVpbnQzMl90KXYpOworKyAgICAgIHNldFJlZ2lzdGVyKHJhLCBJ NjQob3V0KSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gLS0tIENvbXBhcmUg KFgtZm9ybSkgLS0tCisrICAgIGNhc2UgMDogeworKyAgICAgIC8vIGNtcCAoY21wdy9jbXBkKTog c2lnbmVkIGNvbXBhcmUKKysgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7Cisr ICAgICAgYm9vbCBsID0gaW5zdHItPmxCaXQoKTsKKysgICAgICBpZiAobCkgeworKyAgICAgICAg c2V0Q1JGaWVsZENtcChiZiwgZ2V0UmVnaXN0ZXIocmEpLCBnZXRSZWdpc3RlcihyYikpOworKyAg ICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRDUkZpZWxkQ21wKGJmLCAoaW50NjRfdClJMzIoZ2V0 UmVnaXN0ZXIocmEpKSwKKysgICAgICAgICAgICAgICAgICAgICAgKGludDY0X3QpSTMyKGdldFJl Z2lzdGVyKHJiKSkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDMyOiB7CisrICAgICAgLy8gY21wbCAoY21wbHcvY21wbGQpOiB1bnNpZ25lZCBjb21wYXJlCisr ICAgICAgdWludDMyX3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgpOworKyAgICAgIGJvb2wgbCA9IGlu c3RyLT5sQml0KCk7CisrICAgICAgaWYgKGwpIHsKKysgICAgICAgIHNldENSRmllbGRDbXBVKGJm LCBVNjQoZ2V0UmVnaXN0ZXIocmEpKSwgVTY0KGdldFJlZ2lzdGVyKHJiKSkpOworKyAgICAgIH0g ZWxzZSB7CisrICAgICAgICBzZXRDUkZpZWxkQ21wVShiZiwgKHVpbnQ2NF90KVUzMihnZXRSZWdp c3RlcihyYSkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVUzMihnZXRSZWdp c3RlcihyYikpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8g LS0tIFRyYXAgLS0tCisrICAgIGNhc2UgNDogeworKyAgICAgIC8vIHR3OiBUcmFwIFdvcmQuIFRo ZSBKSVQgdXNlcyB0aGlzIGZvciBkZWJ1Z2dpbmcgLyB0YWdnaW5nLgorKyAgICAgIC8vIEluIHRo ZSBzaW11bGF0b3Igd2UganVzdCB0cmVhdCBpdCBhcyBhIE5PUCAodGhlIEpJVCB1c2VzIHRhZ2dl ZAorKyAgICAgIC8vIHRyYXAgd29yZHMgdGhhdCBhcmUgbmV2ZXIgYWN0dWFsbHkgcmVhY2hlZCBk dXJpbmcgbm9ybWFsIGV4ZWN1dGlvbiwKKysgICAgICAvLyB0aGV5IHNlcnZlIGFzIG1ldGFkYXRh IGZvciB0aGUgcGF0Y2hlcikuCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gLS0t IFNQUiAtLS0KKysgICAgY2FzZSAzMzk6IHsKKysgICAgICAvLyBtZnNwcjogUlQgPSBTUFIKKysg ICAgICAvLyBTUFIgZW5jb2Rpbmc6IHNwcls0OjBdIGF0IGJpdHMgMTYuLjIwLCBzcHJbOTo1XSBh dCBiaXRzIDExLi4xNQorKyAgICAgIHVpbnQzMl90IHNwcl9sbyA9IGluc3RyLT5yYVZhbHVlKCk7 ICAvLyBiaXRzIDE2Li4yMAorKyAgICAgIHVpbnQzMl90IHNwcl9oaSA9IGluc3RyLT5yYlZhbHVl KCk7ICAvLyBiaXRzIDExLi4xNQorKyAgICAgIHVpbnQzMl90IHNwciA9IChzcHJfbG8pIHwgKHNw cl9oaSA8PCA1KTsKKysgICAgICBzd2l0Y2ggKHNwcikgeworKyAgICAgICAgY2FzZSA4OiAgLy8g TFIKKysgICAgICAgICAgc2V0UmVnaXN0ZXIocnQsIGdldExSKCkpOworKyAgICAgICAgICBicmVh azsKKysgICAgICAgIGNhc2UgOTogIC8vIENUUgorKyAgICAgICAgICBzZXRSZWdpc3RlcihydCwg Z2V0Q1RSKCkpOworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgMTogIC8vIFhFUgor KyAgICAgICAgICBzZXRSZWdpc3RlcihydCwgSTY0KGdldFhFUigpKSk7CisrICAgICAgICAgIGJy ZWFrOworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklO VEYoIm1mc3ByOiB1bmhhbmRsZWQgU1BSICV1Iiwgc3ByKTsKKysgICAgICB9CisrICAgICAgYnJl YWs7CisrICAgIH0KKysgICAgY2FzZSA0Njc6IHsKKysgICAgICAvLyBtdHNwcjogU1BSID0gUlMK KysgICAgICB1aW50MzJfdCBzcHJfbG8gPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgICAgIHVpbnQz Ml90IHNwcl9oaSA9IGluc3RyLT5yYlZhbHVlKCk7CisrICAgICAgdWludDMyX3Qgc3ByID0gKHNw cl9sbykgfCAoc3ByX2hpIDw8IDUpOworKyAgICAgIGludDY0X3QgdmFsID0gZ2V0UmVnaXN0ZXIo cnQpOworKyAgICAgIHN3aXRjaCAoc3ByKSB7CisrICAgICAgICBjYXNlIDg6ICAvLyBMUgorKyAg ICAgICAgICBzZXRMUih2YWwpOworKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgOTog IC8vIENUUgorKyAgICAgICAgICBzZXRDVFIodmFsKTsKKysgICAgICAgICAgYnJlYWs7CisrICAg ICAgICBjYXNlIDE6ICAvLyBYRVIKKysgICAgICAgICAgc2V0WEVSKFU2NCh2YWwpKTsKKysgICAg ICAgICAgYnJlYWs7CisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBNT1pfQ1JBU0hfVU5T QUZFX1BSSU5URigibXRzcHI6IHVuaGFuZGxlZCBTUFIgJXUiLCBzcHIpOworKyAgICAgIH0KKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDE5OiB7CisrICAgICAgLy8gbWZvY3JmOiBy ZWFkIG9uZSBDUiBmaWVsZCBzZWxlY3RlZCBieSB0aGUgRlhNIGJpdG1hc2sgaW50byBSVC4KKysg ICAgICAvLyAoUGxhaW4gbWZjciBzaGFyZXMgdGhpcyBYTyB3aXRoIEZYTT0wOyB3ZSBtb2RlbCBi b3RoIGJ5IHJlYWRpbmcKKysgICAgICAvLyB0aGUgZnVsbCBDUiDigJQgdGhlIEpJVCBvbmx5IGVt aXRzIG1mb2NyZiBhbmQgdGhlIGJpdHMgb3V0c2lkZSB0aGUKKysgICAgICAvLyBzZWxlY3RlZCBm aWVsZCBhcmUgc3BlYydkICJ1bmRlZmluZWQiLCBzbyByZWFkaW5nIHRoZSBmdWxsIENSIGlzCisr ICAgICAgLy8gYSB2YWxpZCBpbXBsZW1lbnRhdGlvbi4pCisrICAgICAgc2V0UmVnaXN0ZXIocnQs IChpbnQ2NF90KWdldENSKCkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMTQ0 OiB7CisrICAgICAgLy8gbXRjcmY6IG1vdmUgdG8gQ1IgZmllbGRzCisrICAgICAgLy8gRlhNIGZp ZWxkIGlzIGluIGJpdHMgMTIuLjE5LgorKyAgICAgIHVpbnQzMl90IGZ4bSA9IGluc3RyLT5iaXRz KDE5LCAxMik7CisrICAgICAgdWludDMyX3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKHJ0KSk7 CisrICAgICAgdWludDMyX3QgY3IgPSBnZXRDUigpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7CisrICAgICAgICBpZiAoZnhtICYgKDB4ODAgPj4gaSkpIHsKKysgICAgICAg ICAgdWludDMyX3Qgc2hpZnQgPSA0ICogKDcgLSBpKTsKKysgICAgICAgICAgY3IgPSAoY3IgJiB+ KDB4RnUgPDwgc2hpZnQpKSB8IChyc192YWwgJiAoMHhGdSA8PCBzaGlmdCkpOworKyAgICAgICAg fQorKyAgICAgIH0KKysgICAgICBzZXRDUihjcik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSA1NzY6IHsKKysgICAgICAvLyBtY3J4cng6IG1vdmUgWEVSW09WLE9WMzIsQ0EsQ0Ez Ml0gdG8gQ1IgZmllbGQgQkYKKysgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7 CisrICAgICAgdWludDhfdCBmaWVsZCA9IDA7CisrICAgICAgaWYgKGdldFhFUk9WKCkpIGZpZWxk IHw9IDB4ODsKKysgICAgICAvLyBPVjMyIGF0IGJpdCAxOSBvZiBYRVIKKysgICAgICBpZiAoKGdl dFhFUigpID4+IGtYRVJPVjMyQml0KSAmIDEpIGZpZWxkIHw9IDB4NDsKKysgICAgICBpZiAoZ2V0 WEVSQ0EoKSkgZmllbGQgfD0gMHgyOworKyAgICAgIGlmICgoZ2V0WEVSKCkgPj4ga1hFUkNBMzJC aXQpICYgMSkgZmllbGQgfD0gMHgxOworKyAgICAgIHNldENSRmllbGQoYmYsIGZpZWxkKTsKKysg ICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDM4NDoKKysgICAgY2FzZSA0MTY6IHsKKysg ICAgICAvLyBQT1dFUjEwIHNldGJjL3NldGJjcjogUlQgPSAoQ1JbQkldPT1OKSA/IDEgOiAwCisr ICAgICAgLy8gQkkgYXQgYml0cyAxMS4uMTU7IHhvPTM4NCAoc2V0YmMsIE49MSksIHhvPTQxNiAo c2V0YmNyLCBOPTApLgorKyAgICAgIHVpbnQzMl90IGJpID0gaW5zdHItPnJhVmFsdWUoKTsKKysg ICAgICB1aW50MzJfdCBjckZpZWxkID0gYmkgLyA0OworKyAgICAgIHVpbnQzMl90IGNyQml0ID0g YmkgJSA0OworKyAgICAgIHVpbnQ4X3QgY3JGaWVsZFZhbCA9IGdldENSRmllbGQoY3JGaWVsZCk7 CisrICAgICAgYm9vbCBiaXRTZXQ7CisrICAgICAgc3dpdGNoIChjckJpdCkgeworKyAgICAgICAg Y2FzZSAwOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkTFQpICE9IDA7IGJyZWFrOwor KyAgICAgICAgY2FzZSAxOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkR1QpICE9IDA7 IGJyZWFrOworKyAgICAgICAgY2FzZSAyOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxk RVEpICE9IDA7IGJyZWFrOworKyAgICAgICAgY2FzZSAzOiBiaXRTZXQgPSAoY3JGaWVsZFZhbCAm IGtDUkZpZWxkU08pICE9IDA7IGJyZWFrOworKyAgICAgICAgZGVmYXVsdDogYml0U2V0ID0gZmFs c2U7IGJyZWFrOworKyAgICAgIH0KKysgICAgICBib29sIHdhbnQgPSAoeG8gPT0gMzg0KSA/IGJp dFNldCA6ICFiaXRTZXQ7CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIHdhbnQgPyAxIDogMCk7Cisr ICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gLS0tIEluZGV4ZWQgbG9hZHMgLS0tCisr ICAgIGNhc2UgMjE6IHsKKysgICAgICAvLyBsZHg6IFJUID0gW1JBfDAgKyBSQl0sIDggYnl0ZXMK KysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHNldFJl Z2lzdGVyKHJ0LCByZWFkRFcoZWEsIGluc3RyKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysg ICAgY2FzZSA1MzogeworKyAgICAgIC8vIGxkdXg6IFJUID0gW1JBICsgUkJdLCB1cGRhdGUgUkEK KysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUFVcGRhdGUodGhpcywgaW5zdHIpOworKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCByZWFkRFcoZWEsIGluc3RyKSk7CisrICAgICAgc2V0UmVnaXN0ZXIo cmEsIGVhKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDIzOiB7CisrICAgICAg Ly8gbHd6eDogUlQgPSB6ZXJvX2V4dChbUkF8MCArIFJCXSwgNCBieXRlcykKKysgICAgICB1aW50 NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBV NjQocmVhZFdVKGVhLCBpbnN0cikpKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNl IDM0MTogeworKyAgICAgIC8vIGx3YXg6IFJUID0gc2lnbl9leHQoW1JBfDAgKyBSQl0sIDQgYnl0 ZXMpCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBz ZXRSZWdpc3RlcihydCwgKGludDY0X3QpcmVhZFcoZWEsIGluc3RyKSk7CisrICAgICAgYnJlYWs7 CisrICAgIH0KKysgICAgY2FzZSA4NzogeworKyAgICAgIC8vIGxiengKKysgICAgICB1aW50NjRf dCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCBVNjQo cmVhZEJVKGVhKSkpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjc5OiB7Cisr ICAgICAgLy8gbGh6eAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7 CisrICAgICAgc2V0UmVnaXN0ZXIocnQsIFU2NChyZWFkSFUoZWEsIGluc3RyKSkpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzQzOiB7CisrICAgICAgLy8gbGhheAorKyAgICAg IHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0ZXIo cnQsIChpbnQ2NF90KXJlYWRIKGVhLCBpbnN0cikpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgNTM1OiB7CisrICAgICAgLy8gbGZzeDogbG9hZCBmbG9hdCBzaW5nbGUgaW5kZXhl ZCwgd2lkZW4gdG8gZG91YmxlIChOYU4tcHJlc2VydmluZykKKysgICAgICB1aW50NjRfdCBlYSA9 IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVh LCA0KSkgeworKyAgICAgICAgZmxvYXQgdmFsID0gKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihl YSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90ZUZsb2F0UHJlc2Vy dmluZ05hTih2YWwpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA1OTk6IHsKKysgICAgICAvLyBsZmR4OiBsb2FkIGZsb2F0IGRvdWJsZSBpbmRleGVkCisrICAg ICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICBzZXRGcHVSZWdp c3RlckRvdWJsZShydCwgcmVhZEQoZWEsIGluc3RyKSk7CisrICAgICAgYnJlYWs7CisrICAgIH0K KysgICAgY2FzZSA4NTU6IHsKKysgICAgICAvLyBsZml3YXg6IGxvYWQgZmxvYXQgYXMgaW50ZWdl ciB3b3JkIGFsZ2VicmFpYworKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0 cik7CisrICAgICAgaW50MzJfdCB2YWwgPSByZWFkVyhlYSwgaW5zdHIpOworKyAgICAgIHNldEZw dVJlZ2lzdGVyKHJ0LCAoaW50NjRfdCl2YWwpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgODg3OiB7CisrICAgICAgLy8gbGZpd3p4OiBsb2FkIGZsb2F0IGFzIGludGVnZXIgd29y ZCB6ZXJvCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAg ICB1aW50MzJfdCB2YWwgPSByZWFkV1UoZWEsIGluc3RyKTsKKysgICAgICBzZXRGcHVSZWdpc3Rl cihydCwgKGludDY0X3QpKHVpbnQ2NF90KXZhbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysK KysgICAgLy8gLS0tIEluZGV4ZWQgc3RvcmVzIC0tLQorKyAgICBjYXNlIDE0OTogeworKyAgICAg IC8vIHN0ZHgKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAg ICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lzdGVyKHJ0KSwgaW5zdHIpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgMTUxOiB7CisrICAgICAgLy8gc3R3eAorKyAgICAgIHVpbnQ2NF90 IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgd3JpdGVXKGVhLCBJMzIoZ2V0UmVn aXN0ZXIocnQpKSwgaW5zdHIpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjE1 OiB7CisrICAgICAgLy8gc3RieAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBp bnN0cik7CisrICAgICAgd3JpdGVCKGVhLCAodWludDhfdCkoZ2V0UmVnaXN0ZXIocnQpICYgMHhG RikpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDA3OiB7CisrICAgICAgLy8g c3RoeAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAg d3JpdGVIKGVhLCBVMTYoZ2V0UmVnaXN0ZXIocnQpKSwgaW5zdHIpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgNjYzOiB7CisrICAgICAgLy8gc3Rmc3g6IHN0b3JlIGZsb2F0IHNp bmdsZSBpbmRleGVkIChOYU4tcHJlc2VydmluZykKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3Jt RUEodGhpcywgaW5zdHIpOworKyAgICAgIGlmICghaGFuZGxlV2FzbVNlZ0ZhdWx0KGVhLCA0KSkg eworKyAgICAgICAgZmxvYXQgZnZhbCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZ2V0RnB1 UmVnaXN0ZXJEb3VibGUocnQpKTsKKysgICAgICAgICpyZWludGVycHJldF9jYXN0PGZsb2F0Kj4o ZWEpID0gZnZhbDsKKysgICAgICAgIExMQml0XyA9IGZhbHNlOworKyAgICAgIH0KKysgICAgICBi cmVhazsKKysgICAgfQorKyAgICBjYXNlIDcyNzogeworKyAgICAgIC8vIHN0ZmR4OiBzdG9yZSBm bG9hdCBkb3VibGUgaW5kZXhlZAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBp bnN0cik7CisrICAgICAgd3JpdGVEKGVhLCBnZXRGcHVSZWdpc3RlckRvdWJsZShydCksIGluc3Ry KTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyAtLS0gQnl0ZS1yZXZlcnNlZCBz dG9yZXMgLS0tCisrICAgIGNhc2UgNjYyOiB7CisrICAgICAgLy8gc3R3YnJ4CisrICAgICAgdWlu dDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICB1aW50MzJfdCB2YWwgPSBV MzIoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICB3cml0ZVcoZWEsIChpbnQzMl90KV9fYnVpbHRp bl9ic3dhcDMyKHZhbCksIGluc3RyKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAv LyAtLS0gQXRvbWljIGxvYWQvc3RvcmUgLS0tCisrICAgIC8vCisrICAgIC8vIExvYWQtcmVzZXJ2 ZSBhbmQgc3RvcmUtY29uZGl0aW9uYWwuIFN1Yi13b3JkIHZhcmlhbnRzCisrICAgIC8vIChsYmFy eC9saGFyeC9zdGJjeC4vc3RoY3guKSB3ZXJlIGFkZGVkIGluIElTQSB2Mi4wNiAoUE9XRVI3Kyku CisrICAgIC8vIFdvcmQvZG91Ymxld29yZCB2YXJpYW50cyAobHdhcngvc3R3Y3guL2xkYXJ4L3N0 ZGN4LikgZ28gYmFjaworKyAgICAvLyB0byB0aGUgYmFzZSBJU0EuCisrICAgIGNhc2UgNTI6IHsK KysgICAgICAvLyBsYmFyeCBSVCwgUkEsIFJCLCBFSAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZv cm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgdWludDhfdCB2YWwgPSBsb2FkTGlua2VkQihlYSwg aW5zdHIpOworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCAoaW50NjRfdCl2YWwpOworKyAgICAgIGJy ZWFrOworKyAgICB9CisrICAgIGNhc2UgMTE2OiB7CisrICAgICAgLy8gbGhhcnggUlQsIFJBLCBS QiwgRUgKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIpOworKyAgICAg IHVpbnQxNl90IHZhbCA9IGxvYWRMaW5rZWRIKGVhLCBpbnN0cik7CisrICAgICAgc2V0UmVnaXN0 ZXIocnQsIChpbnQ2NF90KXZhbCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA2 OTQ6IHsKKysgICAgICAvLyBzdGJjeC4gUlMsIFJBLCBSQjogYWx3YXlzIFJjPTEuCisrICAgICAg dWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICB1aW50OF90IHZhbCA9 IHVpbnQ4X3QoZ2V0UmVnaXN0ZXIocnQpKTsKKysgICAgICBpbnQgcmVzdWx0ID0gc3RvcmVDb25k aXRpb25hbEIoZWEsIHZhbCwgaW5zdHIpOworKyAgICAgIGlmIChyZXN1bHQpIHsKKysgICAgICAg IHNldENSRmllbGQoMCwga0NSRmllbGRFUSB8IChrQ1JGaWVsZFNPICogZ2V0WEVSU08oKSkpOwor KyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRDUkZpZWxkKDAsIGtDUkZpZWxkU08gKiBnZXRY RVJTTygpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA3MjY6 IHsKKysgICAgICAvLyBzdGhjeC4gUlMsIFJBLCBSQjogYWx3YXlzIFJjPTEuCisrICAgICAgdWlu dDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKTsKKysgICAgICB1aW50MTZfdCB2YWwgPSB1 aW50MTZfdChnZXRSZWdpc3RlcihydCkpOworKyAgICAgIGludCByZXN1bHQgPSBzdG9yZUNvbmRp dGlvbmFsSChlYSwgdmFsLCBpbnN0cik7CisrICAgICAgaWYgKHJlc3VsdCkgeworKyAgICAgICAg c2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZEVRIHwgKGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKSk7Cisr ICAgICAgfSBlbHNlIHsKKysgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRTTyAqIGdldFhF UlNPKCkpOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDIwOiB7 CisrICAgICAgLy8gbHdhcngKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5z dHIpOworKyAgICAgIGludDMyX3QgdmFsID0gbG9hZExpbmtlZFcoZWEsIGluc3RyKTsKKysgICAg ICBzZXRSZWdpc3RlcihydCwgKGludDY0X3QpdmFsKTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDE1MDogeworKyAgICAgIC8vIHN0d2N4LgorKyAgICAgIHVpbnQ2NF90IGVhID0g WEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgaW50MzJfdCB2YWwgPSBJMzIoZ2V0UmVnaXN0 ZXIocnQpKTsKKysgICAgICBpbnQgcmVzdWx0ID0gc3RvcmVDb25kaXRpb25hbFcoZWEsIHZhbCwg aW5zdHIpOworKyAgICAgIC8vIHN0d2N4LiBhbHdheXMgdXBkYXRlcyBDUjA6IEVRIGlmIHN0b3Jl IHN1Y2NlZWRlZCwgZWxzZSBjbGVhci4KKysgICAgICBpZiAocmVzdWx0KSB7CisrICAgICAgICBz ZXRDUkZpZWxkKDAsIGtDUkZpZWxkRVEgfCAoa0NSRmllbGRTTyAqIGdldFhFUlNPKCkpKTsKKysg ICAgICB9IGVsc2UgeworKyAgICAgICAgc2V0Q1JGaWVsZCgwLCBrQ1JGaWVsZFNPICogZ2V0WEVS U08oKSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODQ6IHsK KysgICAgICAvLyBsZGFyeAorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0 cik7CisrICAgICAgaW50NjRfdCB2YWwgPSBsb2FkTGlua2VkRChlYSwgaW5zdHIpOworKyAgICAg IHNldFJlZ2lzdGVyKHJ0LCB2YWwpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MjE0OiB7CisrICAgICAgLy8gc3RkY3guCisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRo aXMsIGluc3RyKTsKKysgICAgICBpbnQ2NF90IHZhbCA9IGdldFJlZ2lzdGVyKHJ0KTsKKysgICAg ICBpbnQgcmVzdWx0ID0gc3RvcmVDb25kaXRpb25hbEQoZWEsIHZhbCwgaW5zdHIpOworKyAgICAg IGlmIChyZXN1bHQpIHsKKysgICAgICAgIHNldENSRmllbGQoMCwga0NSRmllbGRFUSB8IChrQ1JG aWVsZFNPICogZ2V0WEVSU08oKSkpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBzZXRDUkZp ZWxkKDAsIGtDUkZpZWxkU08gKiBnZXRYRVJTTygpKTsKKysgICAgICB9CisrICAgICAgYnJlYWs7 CisrICAgIH0KKysKKysgICAgLy8gLS0tIFN5bmNocm9uaXphdGlvbiAtLS0KKysgICAgY2FzZSA1 OTg6CisrICAgICAgLy8gc3luYyAvIGx3c3luYyAvIHB0ZXN5bmM6IG5vLW9wIGluIHNpbXVsYXRv cgorKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDg1NDoKKysgICAgICAvLyBlaWVpbzogbm8tb3Ag aW4gc2ltdWxhdG9yCisrICAgICAgYnJlYWs7CisrCisrICAgIC8vIC0tLSBHUFIgPC0+IFZTUiBt b3ZlIChtYWpvciBvcGNvZGUgMzEsIFhYMS1mb3JtKSAtLS0KKysgICAgLy8KKysgICAgLy8gVHdv IHN1Yi1lbmNvZGluZ3M6CisrICAgIC8vICAgbXR2c3IqIFhULFJBeyxSQn06IFhYMUZvcm0g4oCU IFhUIGF0IGJpdHMgMjU6MjEgKDUpICsgVFggYXQgYml0IDAgKDEpOworKyAgICAvLyAgICAgICAg ICAgICAgICAgICAgICBSQSBhdCBiaXRzIDIwOjE2OyBSQiAoaWYgYW55KSBhdCBiaXRzIDE1OjEx LgorKyAgICAvLyAgIG1mdnNyKiBSQSxYUzogICAgICBYWDFGb3JtTWZ2c3Ig4oCUIFhTIGF0IGJp dHMgMjU6MjEgKDUpICsgU1ggYXQgYml0IDAgKDEpOworKyAgICAvLyAgICAgICAgICAgICAgICAg ICAgICBSQSAoR1BSIGRlc3QpIGF0IGJpdHMgMjA6MTYuCisrICAgIC8vCisrICAgIC8vIFRoZSBv cmlnaW5hbCBkZWNvZGVyIHRyZWF0ZWQgInJzVmFsdWUoKSIgKGJpdHMgMjU6MjEgPSBWU1IgZmll bGQpIGFzIGEKKysgICAgLy8gR1BSIGluZGV4IOKAlCBkb3VibHkgd3Jvbmc6IHRoZSBHUFIgc2lk ZSBsaXZlcyBhdCBiaXRzIDIwOjE2ICg9IHJhVmFsdWUoKSkKKysgICAgLy8gYW5kIHRoZSBWU1Ig c2lkZSBpcyA2IGJpdHMgKDUtYml0IGZpZWxkICsgZXh0ZW5zaW9uIGJpdCBhdCBiaXQgMCkuIEZp eGVkCisrICAgIC8vIGhlcmUgYW5kIGV4dGVuZGVkIGZvciB0aGUgZnVsbCBWU1IgbmFtZXNwYWNl ICgwLTYzKS4KKysgICAgLy8gVGhlIElTQSBuYW1lcyBlYWNoIGZpZWxkIGluIEJFLiAiWFQuRFcw IiBpcyB0aGUgQkUgZG91Ymxld29yZCB3aGljaCBvbgorKyAgICAvLyBQUEM2NExFIHJlZ2lzdGVy IHN0b3JhZ2UgbGl2ZXMgYXQgTEUgYnl0ZXMgOC0xNSAob3VyIGJ5dGVzW10gaXMgTEUtbmF0dXJh bDoKKysgICAgLy8gYnl0ZXNbMF0gPSBsb3dlc3QgYWRkcmVzcykuIFdpdGggYG10dnNyZCAvIG1m dnNyZCAvIG10dnNyZGQgLyBtZnZzcmxkCisrICAgIC8vIC8gc3R4dnhgOiBtdHZzcmQgb2YgMHgx MTIyMzM0NDU1NjY3Nzg4IHByb2R1Y2VzIGAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMAorKyAgICAv LyA4OCA3NyA2NiA1NSA0NCAzMyAyMiAxMWAgaW4gbWVtb3J5IChMRSBieXRlcyA4LTE1IGhvbGQg dGhlIEdQUiBiaXRzIHdpdGgKKysgICAgLy8gTFNCIGF0IGJ5dGUgOCkuIE1hdGNoaW5nIHNlbWFu dGljcyBoZXJlIG1lYW5zIHRoZSBzaW0gcmVzcGVjdHMKKysgICAgLy8gdGhlIGZ1bGwgUG93ZXIg SVNBLCBub3QgYSBzZWxmLWNvbnNpc3RlbnQgTEUtcmV2ZXJzZWQKKysgICAgLy8gY29udmVudGlv bi4KKysgICAgY2FzZSA1MTogeworKyAgICAgIC8vIG1mdnNyZCBSQSwgWFM6IEdQUltSQV0gPSBY Uy5EVzAgPSBMRSBieXRlcyA4Li4xNS4KKysgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFs dWUoKSB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsgIC8vIFQgKyBTWChUWCkKKysgICAgICB1aW50 OF90IGJ5dGVzWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeHMsIGJ5dGVzKTsKKysgICAgICBpbnQ2 NF90IHZhbDsKKysgICAgICBtZW1jcHkoJnZhbCwgYnl0ZXMgKyA4LCA4KTsKKysgICAgICBzZXRS ZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCB2YWwpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr ICAgIGNhc2UgMjExOiB7CisrICAgICAgLy8gbXR2c3J3YSBYVCwgUkE6IFhULkRXMCA9IHNpZ25f ZXh0XzY0KFJBWzMyOjYzXSk7IFhULkRXMSA9IDAuCisrICAgICAgLy8gUE9XRVI4KyAoSVNBIDIu MDcpLiBDb21iaW5lcyBleHRzdyArIG10dnNyZC4gTEUgbGF5b3V0OiBieXRlcworKyAgICAgIC8v IDgtMTUg4oaQIHNpZ24tZXh0ZW5kZWQgbG93IDMyIG9mIFJBOyBieXRlcyAwLTcg4oaQIDAuCisr ICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1 KSk7CisrICAgICAgdWludDhfdCBieXRlc1sxNl07CisrICAgICAgaW50NjRfdCB2YWwgPSAoaW50 NjRfdCkoaW50MzJfdClnZXRSZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpKTsKKysgICAgICBtZW1z ZXQoYnl0ZXMsIDAsIDgpOworKyAgICAgIG1lbWNweShieXRlcyArIDgsICZ2YWwsIDgpOworKyAg ICAgIHNldFZTUjEyOCh4dCwgYnl0ZXMpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNh c2UgMTc5OiB7CisrICAgICAgLy8gbXR2c3JkIFhULCBSQTogWFQuRFcwID0gUkE7IFhULkRXMSA9 IDAuCisrICAgICAgLy8gTEUgbGF5b3V0OiBieXRlcyA4LTE1IOKGkCBSQSwgYnl0ZXMgMC03IOKG kCAwLgorKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQo MCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYnl0ZXNbMTZdOworKyAgICAgIGludDY0X3QgdmFs ID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSk7CisrICAgICAgbWVtc2V0KGJ5dGVzLCAw LCA4KTsKKysgICAgICBtZW1jcHkoYnl0ZXMgKyA4LCAmdmFsLCA4KTsKKysgICAgICBzZXRWU1Ix MjgoeHQsIGJ5dGVzKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDI0Mzogewor KyAgICAgIC8vIG10dnNyd3ogWFQsIFJBOiBYVC5EVzAgPSB6ZXJvX2V4dChSQVszMjo2M10pOyBY VC5EVzEgPSAwLgorKyAgICAgIC8vIFRoZSAzMi1iaXQgdmFsdWUgbGl2ZXMgaW4gdGhlIGxvdyAz MiBiaXRzIG9mIERXMCA9IEJFIHdvcmQgMSwKKysgICAgICAvLyB3aGljaCBvbiBMRSBzdG9yYWdl IGlzIExFIGJ5dGVzIDguLjExIChMRSB3b3JkIDIpOyBMRSBieXRlcworKyAgICAgIC8vIDEyLi4x NSA9IDAgKHVwcGVyIGhhbGYgb2YgRFcwID0gQkUgd29yZCAwID0gemVyby1leHRlbmRlZCkuCisr ICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1 KSk7CisrICAgICAgdWludDhfdCBieXRlc1sxNl07CisrICAgICAgdWludDMyX3QgbG8gPSBVMzIo Z2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSkpOworKyAgICAgIG1lbXNldChieXRlcywgMCwg MTYpOworKyAgICAgIGJ5dGVzWzhdICA9ICh1aW50OF90KShsbyk7CisrICAgICAgYnl0ZXNbOV0g ID0gKHVpbnQ4X3QpKGxvID4+IDgpOworKyAgICAgIGJ5dGVzWzEwXSA9ICh1aW50OF90KShsbyA+ PiAxNik7CisrICAgICAgYnl0ZXNbMTFdID0gKHVpbnQ4X3QpKGxvID4+IDI0KTsKKysgICAgICBz ZXRWU1IxMjgoeHQsIGJ5dGVzKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDMw NzogeworKyAgICAgIC8vIG1mdnNybGQgUkEsIFhTOiBHUFJbUkFdID0gWFMuRFcxID0gTEUgYnl0 ZXMgMC4uNy4KKysgICAgICAvLyBQT1dFUjkuCisrICAgICAgaW50IHhzID0gaW50KGluc3RyLT5y dFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDhfdCBieXRlc1sx Nl07CisrICAgICAgZ2V0VlNSMTI4KHhzLCBieXRlcyk7CisrICAgICAgaW50NjRfdCB2YWw7Cisr ICAgICAgbWVtY3B5KCZ2YWwsIGJ5dGVzLCA4KTsKKysgICAgICBzZXRSZWdpc3RlcihpbnN0ci0+ cmFWYWx1ZSgpLCB2YWwpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDAzOiB7 CisrICAgICAgLy8gbXR2c3J3cyBYVCwgUkEgKFBPV0VSOSk6IHNwbGF0IGxvdyAzMiBiaXRzIG9m IFJBIGludG8gYWxsIGZvdXIKKysgICAgICAvLyB3b3JkIGVsZW1lbnRzIG9mIFhULiBUaGUgc2Ft ZSAzMi1iaXQgdmFsdWUgYXBwZWFycyBpbiBsYW5lcyAwLi4zLAorKyAgICAgIC8vIHNvIHRoZSBi eXRlIGxheW91dCBpcyBpZGVudGljYWwgaW4gTEUgYW5kIEJFIOKAlAorKyAgICAgIC8vIGJ5dGVz IDAuLjE1ID0gbG8gfCBsbyB8IGxvIHwgbG8uCisrICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5y dFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDhfdCBieXRlc1sx Nl07CisrICAgICAgdWludDMyX3QgbG8gPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUo KSkpOworKyAgICAgIHVpbnQ2NF90IHZhbCA9ICgodWludDY0X3QpbG8gPDwgMzIpIHwgbG87Cisr ICAgICAgbWVtY3B5KGJ5dGVzLCAmdmFsLCA4KTsKKysgICAgICBtZW1jcHkoYnl0ZXMgKyA4LCAm dmFsLCA4KTsKKysgICAgICBzZXRWU1IxMjgoeHQsIGJ5dGVzKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKyAgICBjYXNlIDQzNTogeworKyAgICAgIC8vIG10dnNyZGQgWFQsIFJBLCBSQjogWFQu RFcwID0gUkE7IFhULkRXMSA9IFJCLiBQT1dFUjkuCisrICAgICAgLy8gTEU6IGJ5dGVzIDgtMTUg 4oaQIFJBLCBieXRlcyAwLTcg4oaQIFJCLgorKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRW YWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYnl0ZXNbMTZd OworKyAgICAgIGludDY0X3QgZHcwID0gZ2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSk7Cisr ICAgICAgaW50NjRfdCBkdzEgPSBnZXRSZWdpc3RlcihpbnN0ci0+cmJWYWx1ZSgpKTsKKysgICAg ICBtZW1jcHkoYnl0ZXMsICAgICAmZHcxLCA4KTsKKysgICAgICBtZW1jcHkoYnl0ZXMgKyA4LCAm ZHcwLCA4KTsKKysgICAgICBzZXRWU1IxMjgoeHQsIGJ5dGVzKTsKKysgICAgICBicmVhazsKKysg ICAgfQorKworKyAgICAvLyAtLS0gVk1YIHZlY3RvciBtZW1vcnkgKG1ham9yIG9wY29kZSAzMSkg LS0tCisrICAgIC8vCisrICAgIC8vIGx2eCAvIHN0dnggLyBsdnhsIC8gc3R2eGwuCisrICAgIC8v ICAgRUEgPSAoUkF8MCkgKyBSQjsgRUEgPSBFQSAmIH4weEYgKGFsaWdubWVudCkKKysgICAgLy8g ICBsdng6ICBWUlRbMDoxMjddIDwtIE1FTShFQSwgMTYpICAgICAgIGJ5dGVzWzBdID0gKihFQSsw KQorKyAgICAvLyAgIHN0dng6IE1FTShFQSwgMTYpIDwtIFZSU1swOjEyN10gICAgICAgKihFQSsw KSA9IGJ5dGVzWzBdCisrICAgIC8vIGx2eGwgLyBzdHZ4bCBhcmUgaWRlbnRpY2FsIGluIGVmZmVj dCB0byBsdnggLyBzdHZ4ICh0aGUgImwiIGZvcm0KKysgICAgLy8gaGludHMgImxlYXN0IHJlY2Vu dGx5IHVzZWQiOyBzZW1hbnRpY2FsbHkgaW5kaXN0aW5ndWlzaGFibGUpLgorKyAgICBjYXNlIDEw MzogeworKyAgICAgIC8vIGx2eDogVlJUID0gTUVNKEVBICYgfjB4RiwgMTYgYnl0ZXMpCisrICAg ICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKSAmIH51aW50NjRfdCgweEYpOwor KyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7CisrICAgICAgbWVt Y3B5KFZScmVnaXN0ZXJzX1tydF0sIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVhKSwg MTYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjMxOiB7CisrICAgICAgLy8g c3R2eDogTUVNKEVBICYgfjB4RiwgMTYgYnl0ZXMpID0gVlJTCisrICAgICAgdWludDY0X3QgZWEg PSBYRm9ybUVBKHRoaXMsIGluc3RyKSAmIH51aW50NjRfdCgweEYpOworKyAgICAgIGlmIChoYW5k bGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7CisrICAgICAgbWVtY3B5KHJlaW50ZXJwcmV0 X2Nhc3Q8dm9pZCo+KGVhKSwgVlJyZWdpc3RlcnNfW3J0XSwgMTYpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrICAgIGNhc2UgMzU5OiB7CisrICAgICAgLy8gbHZ4bDogc2VtYW50aWNhbGx5IGlk ZW50aWNhbCB0byBsdngKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5zdHIp ICYgfnVpbnQ2NF90KDB4Rik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYp KSBicmVhazsKKysgICAgICBtZW1jcHkoVlJyZWdpc3RlcnNfW3J0XSwgcmVpbnRlcnByZXRfY2Fz dDxjb25zdCB2b2lkKj4oZWEpLCAxNik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA0ODc6IHsKKysgICAgICAvLyBzdHZ4bDogc2VtYW50aWNhbGx5IGlkZW50aWNhbCB0byBzdHZ4 CisrICAgICAgdWludDY0X3QgZWEgPSBYRm9ybUVBKHRoaXMsIGluc3RyKSAmIH51aW50NjRfdCgw eEYpOworKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7CisrICAg ICAgbWVtY3B5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVhKSwgVlJyZWdpc3RlcnNfW3J0XSwg MTYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vIC0tLSBWU1ggdmVjdG9yIG1l bW9yeSBpbmRleGVkIChtYWpvciBvcGNvZGUgMzEpIC0tLQorKyAgICAvLworKyAgICAvLyBUaGVz ZSBvcHMgdGFrZSBhIDYtYml0IFZTUiByZWdpc3RlciwKKysgICAgLy8gZW5jb2RlZCBhcyA1LWJp dCBUL1MgKyAxLWJpdCBUWC9TWCBleHRlbnNpb24gYXQgaW5zdHJ1Y3Rpb24gTFNCCisrICAgIC8v IGJpdCAwICg9IG91ciBpbnN0ci0+Yml0KDApKS4gRUEgPSAoUkF8MCkgKyBSQi4gMTYtYnl0ZSBh Y2Nlc3MsCisrICAgIC8vIG5vdCBmb3JjZWQtYWxpZ25lZCAoaGFyZHdhcmUgbWF5IGhhbmRsZSBt aXNhbGlnbmVkIHZpYSBzdWItYWNjZXNzCisrICAgIC8vIG9yIGFsaWdubWVudCBpbnRlcnJ1cHQg cGVyIGltcGwpLgorKyAgICAvLworKyAgICAvLyBCeXRlLW9yZGVyIG5vdGU6IGx4dngvc3R4dngg cGVyZm9ybSBhIG5hdHVyYWwgMTYtYnl0ZSBMRQorKyAgICAvLyBtZW1jcHkuIGx4dmQyeC9zdHh2 ZDJ4IG9uIHJlYWwgUFBDNjQgTEUgaGFyZHdhcmUgbG9hZC9zdG9yZQorKyAgICAvLyBkb3VibGV3 b3JkcyBpbiBCRS1wYWlyIG9yZGVyIOKAlCBpLmUuIGx4dmQyeCBwbGFjZXMgbWVtb3J5IGJ5dGVz CisrICAgIC8vIDAtNyBpbiB0aGUgcmVnaXN0ZXIncyBCRS1EVzAgKD0gTEUgYnl0ZXMgOC0xNSkg YW5kIGJ5dGVzIDgtMTUKKysgICAgLy8gaW4gQkUtRFcxICg9IExFIGJ5dGVzIDAtNykuIFRoZSBK SVQgYnJhY2tldHMgZXZlcnkgd2FzbSBTSU1ECisrICAgIC8vIGxvYWQvc3RvcmUgd2l0aCBhIGNv bXBlbnNhdGluZyB4eHBlcm1kaSBETT0yIHNvIHRoZSBuZXQgZWZmZWN0CisrICAgIC8vIGlzIGEg bmF0dXJhbCBMRSBieXRlIG9yZGVyLiBUaGUgY29uc3RhbnQgcG9vbCBlbWl0cyB0aGUgc2FtZQor KyAgICAvLyBseHZkMnggKyB4eHBlcm1kaSBzZXF1ZW5jZSAocGVyIFBhdGNoQ29uc3RhbnRQb29s TG9hZCkgYnV0CisrICAgIC8vIGFzc3VtZXMgdGhlIGhhcmR3YXJlIHNlbWFudGljcywgbm90IGEg cGxhaW4gbWVtY3B5LiBTbyB0aGUgc2ltCisrICAgIC8vIG11c3QgbWF0Y2ggcmVhbC1oYXJkd2Fy ZSBseHZkMngvc3R4dmQyeCBzZW1hbnRpY3MgaW5jbHVkaW5nIHRoZQorKyAgICAvLyBCRS1EVyBi eXRlIG9yZGVyIOKAlCBvdGhlcndpc2UgdGhlIHBvc3QtbG9hZCB4eHBlcm1kaSB1bnN3YXBzCisr ICAgIC8vIGJ5dGVzIHRoYXQgd2VyZSBuZXZlciBzd2FwcGVkLCBhbmQgY29uc3RhbnQtcG9vbCBT aW1kMTI4IGxvYWRzCisrICAgIC8vIChlLmcuIHNodWZmbGUgbWFza3MpIGNvbWUgb3V0IHdpdGgg aGFsdmVzIHRyYW5zcG9zZWQuCisrICAgIGNhc2UgMjY4OiB7CisrICAgICAgLy8gbHh2eDogWFQg PSBNRU0oKFJBfDApK1JCLCAxNikKKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywg aW5zdHIpOworKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7Cisr ICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1 KSk7CisrICAgICAgdWludDhfdCBidWZbMTZdOworKyAgICAgIG1lbWNweShidWYsIHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVhKSwgMTYpOworKyAgICAgIHNldFZTUjEyOCh4dCwgYnVm KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDM5NjogeworKyAgICAgIC8vIHN0 eHZ4OiBNRU0oKFJBfDApK1JCLCAxNikgPSBYUworKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1F QSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBi cmVhazsKKysgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IGJ1ZlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhz LCBidWYpOworKyAgICAgIG1lbWNweShyZWludGVycHJldF9jYXN0PHZvaWQqPihlYSksIGJ1Ziwg MTYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgODEzOiB7CisrICAgICAgLy8g bHhzaWh6eCBYVCwgUkEsIFJCOiBQOSAoSVNBIDMuMCkuIExvYWQgaGFsZndvcmQgdG8gVlNSICYg emVybywKKysgICAgICAvLyBpbmRleGVkLiBNRU0oRUEsIDIpIChMRS1uYXR1cmFsIGhhbGZ3b3Jk KSBpcyBwbGFjZWQgaW4gZHdbMF0KKysgICAgICAvLyBsb3cgMTYgYml0czsgdGhlIHJlc3Qgb2Yg dGhlIFZTUiBpcyB6ZXJvZWQuIEluIHNpbSBMRS1ieXRlCisrICAgICAgLy8gc3RvcmFnZSwgdGhh dCBpcyBieXRlc1s4Li45XSAobG93IGJ5dGUgYXQgYnl0ZXNbOF0pLgorKyAgICAgIHVpbnQ2NF90 IGVhID0gWEZvcm1FQSh0aGlzLCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVs dChlYSwgMikpIGJyZWFrOworKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwg KGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQxNl90IGhhbGZ3b3JkID0gcmVhZEgo ZWEsIGluc3RyKTsKKysgICAgICB1aW50OF90IGJ1ZlsxNl07CisrICAgICAgbWVtc2V0KGJ1Ziwg MCwgMTYpOworKyAgICAgIGJ1Zls4XSA9ICh1aW50OF90KShoYWxmd29yZCAmIDB4RkYpOworKyAg ICAgIGJ1Zls5XSA9ICh1aW50OF90KSgoaGFsZndvcmQgPj4gOCkgJiAweEZGKTsKKysgICAgICBz ZXRWU1IxMjgoeHQsIGJ1Zik7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSA5NDE6 IHsKKysgICAgICAvLyBzdHhzaWh4IFhTLCBSQSwgUkI6IFA5IChJU0EgMy4wKS4gU3RvcmUgaGFs ZndvcmQgZnJvbSBWU1IsCisrICAgICAgLy8gaW5kZXhlZC4gZHdbMF0gbG93IDE2IGJpdHMgKHNp bSBieXRlc1s4Li45XSBpbiBob3N0LUxFIG9yZGVyKQorKyAgICAgIC8vIGFyZSB3cml0dGVuIGFz IGEgaGFsZndvcmQgYXQgTUVNKEVBLCAyKS4KKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEo dGhpcywgaW5zdHIpOworKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDIpKSBicmVh azsKKysgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDAp IDw8IDUpKTsKKysgICAgICB1aW50OF90IGJ1ZlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhzLCBi dWYpOworKyAgICAgIHVpbnQxNl90IGhhbGZ3b3JkID0KKysgICAgICAgICAgKHVpbnQxNl90KWJ1 Zls4XSB8ICgodWludDE2X3QpYnVmWzldIDw8IDgpOworKyAgICAgIHdyaXRlSChlYSwgaGFsZndv cmQsIGluc3RyKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDg0NDogeworKyAg ICAgIC8vIGx4dmQyeDogWFQgPSBNRU0oKFJBfDApK1JCLCAxNikgd2l0aCBCRS1EVyBieXRlIG9y ZGVyaW5nLgorKyAgICAgIC8vIE1lbW9yeSBieXRlcyAwLTcgbGFuZCBpbiBCRS1EVzAgKD0gTEUg Ynl0ZXMgOC0xNSk7IG1lbW9yeQorKyAgICAgIC8vIGJ5dGVzIDgtMTUgbGFuZCBpbiBCRS1EVzEg KD0gTEUgYnl0ZXMgMC03KS4KKysgICAgICB1aW50NjRfdCBlYSA9IFhGb3JtRUEodGhpcywgaW5z dHIpOworKyAgICAgIGlmIChoYW5kbGVXYXNtU2VnRmF1bHQoZWEsIDE2KSkgYnJlYWs7CisrICAg ICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7 CisrICAgICAgdWludDhfdCBtZW1bMTZdLCBidWZbMTZdOworKyAgICAgIG1lbWNweShtZW0sIHJl aW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVhKSwgMTYpOworKyAgICAgIG1lbWNweShidWYs IG1lbSArIDgsIDgpOworKyAgICAgIG1lbWNweShidWYgKyA4LCBtZW0sIDgpOworKyAgICAgIHNl dFZTUjEyOCh4dCwgYnVmKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDk3Mjog eworKyAgICAgIC8vIHN0eHZkMng6IE1FTSgoUkF8MCkrUkIsIDE2KSA9IFhTIHdpdGggQkUtRFcg Ynl0ZSBvcmRlcmluZy4KKysgICAgICAvLyBJbnZlcnNlIG9mIGx4dmQyeDogcmVnaXN0ZXIgTEUg Ynl0ZXMgMC03IOKGkiBtZW1vcnkgYnl0ZXMgOC0xNTsKKysgICAgICAvLyBMRSBieXRlcyA4LTE1 IOKGkiBtZW1vcnkgYnl0ZXMgMC03LgorKyAgICAgIHVpbnQ2NF90IGVhID0gWEZvcm1FQSh0aGlz LCBpbnN0cik7CisrICAgICAgaWYgKGhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSBicmVhazsK KysgICAgICBpbnQgeHMgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0KDApIDw8 IDUpKTsKKysgICAgICB1aW50OF90IGJ1ZlsxNl0sIG1lbVsxNl07CisrICAgICAgZ2V0VlNSMTI4 KHhzLCBidWYpOworKyAgICAgIG1lbWNweShtZW0sIGJ1ZiArIDgsIDgpOworKyAgICAgIG1lbWNw eShtZW0gKyA4LCBidWYsIDgpOworKyAgICAgIG1lbWNweShyZWludGVycHJldF9jYXN0PHZvaWQq PihlYSksIG1lbSwgMTYpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIGRlZmF1bHQ6 CisrICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoCisrICAgICAgICAgICJkZWNvZGVYRm9y bTogdW5pbXBsZW1lbnRlZCBYTz0ldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhvLAorKyAgICAg ICAgICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOworKyAgfQorK30KKysKKysvLyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorKy8vIGRlY29kZVJvdGF0ZU1hc2s6IHJsd2lubSgyMSksIHJsd25tKDIz KSwgcmx3aW1pKDIwKSwKKysvLyAgIHJsZGljbCgzMCksIHJsZGljcigzMCksIHJsZGljKDMwKSwg cmxkaW1pKDMwKSwgcmxkY2woMzApLCBybGRjcigzMCkKKysKKyt2b2lkIFNpbXVsYXRvcjo6ZGVj b2RlUm90YXRlTWFzayhTaW1JbnN0cnVjdGlvbiogaW5zdHIpIHsKKysgIHVpbnQzMl90IG9wY29k ZSA9IGluc3RyLT5vcGNvZGUoKTsKKysKKysgIGlmIChvcGNvZGUgPT0gMjEpIHsKKysgICAgLy8g cmx3aW5tOiBSQSA9IFJPVEwzMihSUyxTSCkgJiBNQVNLKE1CLE1FKSwgUmMKKysgICAgdWludDMy X3QgcnNfdmFsID0gVTMyKGdldFJlZ2lzdGVyKGluc3RyLT5yc1ZhbHVlKCkpKTsKKysgICAgdWlu dDMyX3Qgc2ggPSBpbnN0ci0+bVNIVmFsdWUoKTsKKysgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+ bU1CVmFsdWUoKTsKKysgICAgdWludDMyX3QgbWUgPSBpbnN0ci0+bU1FVmFsdWUoKTsKKysgICAg dWludDMyX3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQzMihyc192YWwsIHNoKTsKKysgICAgdWludDMy X3QgbWFzayA9IE1BU0szMihtYiwgbWUpOworKyAgICBpbnQ2NF90IHJlc3VsdCA9IChpbnQ2NF90 KSh1aW50NjRfdCkocm90YXRlZCAmIG1hc2spOworKyAgICBzZXRSZWdpc3RlcihpbnN0ci0+cmFW YWx1ZSgpLCByZXN1bHQpOworKyAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1 bHQpOworKyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gMjMpIHsKKysgICAgLy8gcmx3bm06IFJBID0g Uk9UTDMyKFJTLFJCWzI3OjMxXSkgJiBNQVNLKE1CLE1FKSwgUmMKKysgICAgdWludDMyX3QgcnNf dmFsID0gVTMyKGdldFJlZ2lzdGVyKGluc3RyLT5yc1ZhbHVlKCkpKTsKKysgICAgdWludDMyX3Qg c2ggPSBVMzIoZ2V0UmVnaXN0ZXIoaW5zdHItPnJiVmFsdWUoKSkpICYgMHgxRjsKKysgICAgdWlu dDMyX3QgbWIgPSBpbnN0ci0+bU1CVmFsdWUoKTsKKysgICAgdWludDMyX3QgbWUgPSBpbnN0ci0+ bU1FVmFsdWUoKTsKKysgICAgdWludDMyX3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQzMihyc192YWws IHNoKTsKKysgICAgdWludDMyX3QgbWFzayA9IE1BU0szMihtYiwgbWUpOworKyAgICBpbnQ2NF90 IHJlc3VsdCA9IChpbnQ2NF90KSh1aW50NjRfdCkocm90YXRlZCAmIG1hc2spOworKyAgICBzZXRS ZWdpc3RlcihpbnN0ci0+cmFWYWx1ZSgpLCByZXN1bHQpOworKyAgICBpZiAoaW5zdHItPnJjQml0 KCkpIHVwZGF0ZUNSMChyZXN1bHQpOworKyAgfSBlbHNlIGlmIChvcGNvZGUgPT0gMjApIHsKKysg ICAgLy8gcmx3aW1pOiBSQSA9IChST1RMMzIoUlMsU0gpICYgTUFTSykgfCAoUkEgJiB+TUFTSyks IFJjCisrICAgIHVpbnQzMl90IHJzX3ZhbCA9IFUzMihnZXRSZWdpc3RlcihpbnN0ci0+cnNWYWx1 ZSgpKSk7CisrICAgIHVpbnQzMl90IHNoID0gaW5zdHItPm1TSFZhbHVlKCk7CisrICAgIHVpbnQz Ml90IG1iID0gaW5zdHItPm1NQlZhbHVlKCk7CisrICAgIHVpbnQzMl90IG1lID0gaW5zdHItPm1N RVZhbHVlKCk7CisrICAgIHVpbnQzMl90IHJvdGF0ZWQgPSBSb3RhdGVMZWZ0MzIocnNfdmFsLCBz aCk7CisrICAgIHVpbnQzMl90IG1hc2sgPSBNQVNLMzIobWIsIG1lKTsKKysgICAgdWludDMyX3Qg cmFfdmFsID0gVTMyKGdldFJlZ2lzdGVyKGluc3RyLT5yYVZhbHVlKCkpKTsKKysgICAgaW50NjRf dCByZXN1bHQgPSAoaW50NjRfdCkodWludDY0X3QpKChyb3RhdGVkICYgbWFzaykgfCAocmFfdmFs ICYgfm1hc2spKTsKKysgICAgc2V0UmVnaXN0ZXIoaW5zdHItPnJhVmFsdWUoKSwgcmVzdWx0KTsK KysgICAgaWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgIH0gZWxzZSBp ZiAob3Bjb2RlID09IDMwKSB7CisrICAgIC8vIE1ELWZvcm0gLyBNRFMtZm9ybTogNjQtYml0IHJv dGF0ZS9tYXNrCisrICAgIHVpbnQzMl90IHJzID0gaW5zdHItPnJzVmFsdWUoKTsKKysgICAgdWlu dDY0X3QgcnNfdmFsID0gVTY0KGdldFJlZ2lzdGVyKHJzKSk7CisrICAgIHVpbnQzMl90IHJhX3Jl ZyA9IGluc3RyLT5yYVZhbHVlKCk7CisrCisrICAgIC8vIERldGVybWluZSB3aGljaCBzdWItb3Bj b2RlOiBiaXRzIDIuLjQgZm9yIE1ELWZvcm0sIGJpdCA0IGZvciBNRFMuCisrICAgIC8vIE1EOiBi aXRzIDIuLjQKKysgICAgLy8gTURTOiBiaXQgNCAocmxkY2wgaGFzIGJpdDQ9MCwgYml0My4uMj0w MCB3aXRoIGJpdDE9MTsgcmxkY3IgaGFzCisrICAgIC8vICAgICAgYml0ND0wLCBiaXQzLi4yPTAx IHdpdGggYml0MT0xKS4gQWN0dWFsbHk6CisrICAgIC8vICAgcmxkaWNsOiAgMzAgfCBNRC1YTz0w IChiaXRzIDIuLjQgPSAwMDApLCBiaXQxPTAKKysgICAgLy8gICBybGRpY3I6ICAzMCB8IE1ELVhP PTEgKGJpdHMgMi4uNCA9IDAwMSksIGJpdDE9MAorKyAgICAvLyAgIHJsZGljOiAgIDMwIHwgTUQt WE89MiAoYml0cyAyLi40ID0gMDEwKSwgYml0MT0wCisrICAgIC8vICAgcmxkaW1pOiAgMzAgfCBN RC1YTz0zIChiaXRzIDIuLjQgPSAwMTEpLCBiaXQxPTAKKysgICAgLy8gICBybGRjbDogICAzMCB8 IE1EUywgYml0ND0wLCBiaXQzLi4xPTAwMCwgYml0MD1SYyA9PiBiaXRzIDEuLjQ9MTAwMAorKyAg ICAvLyAgICAgICAgICAgIEFjdHVhbGx5IHJsZGNsOiBiaXRzIDEuLjQgPSAxMDAwLCBpLmUuIGJp dCg0KT0xLGJpdCgzKT0wLAorKyAgICAvLyAgICAgICAgICAgIGJpdCgyKT0wLGJpdCgxKT0wCisr ICAgIC8vICAgcmxkY3I6ICAgMzAgfCBNRFMsIGJpdHMgMS4uNCA9IDEwMDEKKysgICAgLy8KKysg ICAgLy8gTGV0J3MgY2hlY2sgYml0IDQgZmlyc3Q6IGlmIGJpdCg0KT09MSwgaXQncyBNRFMtZm9y bSAocmxkY2wvcmxkY3IpLgorKyAgICBpZiAoaW5zdHItPmJpdCg0KSkgeworKyAgICAgIC8vIE1E Uy1mb3JtOiBzaGlmdCBhbW91bnQgZnJvbSBSQiByZWdpc3RlcgorKyAgICAgIHVpbnQzMl90IHNo ID0gVTMyKGdldFJlZ2lzdGVyKGluc3RyLT5yYlZhbHVlKCkpKSAmIDB4M0Y7CisrICAgICAgdWlu dDY0X3Qgcm90YXRlZCA9IFJvdGF0ZUxlZnQ2NChyc192YWwsIHNoKTsKKysgICAgICB1aW50MzJf dCBtYiA9IGluc3RyLT5tZHNNQlZhbHVlKCk7CisrCisrICAgICAgaWYgKCFpbnN0ci0+Yml0KDEp KSB7CisrICAgICAgICAvLyBybGRjbDogUkEgPSBST1RMNjQoUlMsIFJCWzU4OjYzXSkgJiBNQVNL KG1iLCA2MykKKysgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQobWIsIDYzKTsKKysgICAg ICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsKKysgICAgICAgIHNldFJl Z2lzdGVyKHJhX3JlZywgcmVzdWx0KTsKKysgICAgICAgIGlmIChpbnN0ci0+cmNCaXQoKSkgdXBk YXRlQ1IwKHJlc3VsdCk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIC8vIHJsZGNyOiBSQSA9 IFJPVEw2NChSUywgUkJbNTg6NjNdKSAmIE1BU0soMCwgbWUpCisrICAgICAgICB1aW50MzJfdCBt ZSA9IGluc3RyLT5tZHNNQlZhbHVlKCk7CisrICAgICAgICB1aW50NjRfdCBtYXNrID0gTUFTSzY0 KDAsIG1lKTsKKysgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KHJvdGF0ZWQgJiBtYXNrKTsK KysgICAgICAgIHNldFJlZ2lzdGVyKHJhX3JlZywgcmVzdWx0KTsKKysgICAgICAgIGlmIChpbnN0 ci0+cmNCaXQoKSkgdXBkYXRlQ1IwKHJlc3VsdCk7CisrICAgICAgfQorKyAgICB9IGVsc2Ugewor KyAgICAgIC8vIE1ELWZvcm0KKysgICAgICB1aW50MzJfdCBzaCA9IGluc3RyLT5tZFNIVmFsdWUo KTsKKysgICAgICB1aW50NjRfdCByb3RhdGVkID0gUm90YXRlTGVmdDY0KHJzX3ZhbCwgc2gpOwor KyAgICAgIHVpbnQzMl90IHhvX21kID0gaW5zdHItPmJpdHMoMywgMik7CisrCisrICAgICAgc3dp dGNoICh4b19tZCkgeworKyAgICAgICAgY2FzZSAwOiB7CisrICAgICAgICAgIC8vIHJsZGljbDog UkEgPSBST1RMNjQoUlMsIFNIKSAmIE1BU0sobWIsIDYzKQorKyAgICAgICAgICB1aW50MzJfdCBt YiA9IGluc3RyLT5tZE1CVmFsdWUoKTsKKysgICAgICAgICAgdWludDY0X3QgbWFzayA9IE1BU0s2 NChtYiwgNjMpOworKyAgICAgICAgICBpbnQ2NF90IHJlc3VsdCA9IEk2NChyb3RhdGVkICYgbWFz ayk7CisrICAgICAgICAgIHNldFJlZ2lzdGVyKHJhX3JlZywgcmVzdWx0KTsKKysgICAgICAgICAg aWYgKGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICAgICAgYnJlYWs7 CisrICAgICAgICB9CisrICAgICAgICBjYXNlIDE6IHsKKysgICAgICAgICAgLy8gcmxkaWNyOiBS QSA9IFJPVEw2NChSUywgU0gpICYgTUFTSygwLCBtZSkKKysgICAgICAgICAgdWludDMyX3QgbWUg PSBpbnN0ci0+bWRNRVZhbHVlKCk7CisrICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQo MCwgbWUpOworKyAgICAgICAgICBpbnQ2NF90IHJlc3VsdCA9IEk2NChyb3RhdGVkICYgbWFzayk7 CisrICAgICAgICAgIHNldFJlZ2lzdGVyKHJhX3JlZywgcmVzdWx0KTsKKysgICAgICAgICAgaWYg KGluc3RyLT5yY0JpdCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICAgICAgYnJlYWs7Cisr ICAgICAgICB9CisrICAgICAgICBjYXNlIDI6IHsKKysgICAgICAgICAgLy8gcmxkaWM6IFJBID0g Uk9UTDY0KFJTLCBTSCkgJiBNQVNLKG1iLCB+U0gpCisrICAgICAgICAgIC8vIEFjdHVhbGx5OiBN QVNLKG1iLCA2My1TSCkKKysgICAgICAgICAgdWludDMyX3QgbWIgPSBpbnN0ci0+bWRNQlZhbHVl KCk7CisrICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQobWIsIDYzIC0gc2gpOworKyAg ICAgICAgICBpbnQ2NF90IHJlc3VsdCA9IEk2NChyb3RhdGVkICYgbWFzayk7CisrICAgICAgICAg IHNldFJlZ2lzdGVyKHJhX3JlZywgcmVzdWx0KTsKKysgICAgICAgICAgaWYgKGluc3RyLT5yY0Jp dCgpKSB1cGRhdGVDUjAocmVzdWx0KTsKKysgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9Cisr ICAgICAgICBjYXNlIDM6IHsKKysgICAgICAgICAgLy8gcmxkaW1pOiBSQSA9IChST1RMNjQoUlMs U0gpICYgTUFTSykgfCAoUkEgJiB+TUFTSykKKysgICAgICAgICAgdWludDMyX3QgbWIgPSBpbnN0 ci0+bWRNQlZhbHVlKCk7CisrICAgICAgICAgIHVpbnQ2NF90IG1hc2sgPSBNQVNLNjQobWIsIDYz IC0gc2gpOworKyAgICAgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0UmVnaXN0ZXIocmFf cmVnKSk7CisrICAgICAgICAgIGludDY0X3QgcmVzdWx0ID0gSTY0KChyb3RhdGVkICYgbWFzaykg fCAocmFfdmFsICYgfm1hc2spKTsKKysgICAgICAgICAgc2V0UmVnaXN0ZXIocmFfcmVnLCByZXN1 bHQpOworKyAgICAgICAgICBpZiAoaW5zdHItPnJjQml0KCkpIHVwZGF0ZUNSMChyZXN1bHQpOwor KyAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAg ICAgIE1PWl9DUkFTSF9VTlNBRkVfUFJJTlRGKCJkZWNvZGVSb3RhdGVNYXNrOiBNRCB4bz0ldSIs IHhvX21kKTsKKysgICAgICB9CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIE1PWl9DUkFTSF9V TlNBRkVfUFJJTlRGKCJkZWNvZGVSb3RhdGVNYXNrOiBvcGNvZGU9JXUiLCBvcGNvZGUpOworKyAg fQorK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKy8vIENSLWJpdCBhY2Nlc3NvcnMg dXNlZCBieSB0aGUgWEwtZm9ybSBDUi1sb2dpYyBvcHMgKGNyYW5kLCBjcmFuZGMsIGNyb3IsCisr Ly8gY3JvcmMsIGNyeG9yLCBjcmVxdikuIEJpdCBpbmRleCBpcyBpbiBCSUYqNCt4IGZvcm06IGZp ZWxkPWIvNCwgYml0PWIlNAorKy8vIHdoZXJlIDA9TFQsIDE9R1QsIDI9RVEsIDM9U08uCisrc3Rh dGljIGlubGluZSB1aW50OF90IENSQml0TWFzayh1aW50MzJfdCBiaXRJbkZpZWxkKSB7CisrICBz d2l0Y2ggKGJpdEluRmllbGQpIHsKKysgICAgY2FzZSAwOiByZXR1cm4ga0NSRmllbGRMVDsKKysg ICAgY2FzZSAxOiByZXR1cm4ga0NSRmllbGRHVDsKKysgICAgY2FzZSAyOiByZXR1cm4ga0NSRmll bGRFUTsKKysgICAgY2FzZSAzOiByZXR1cm4ga0NSRmllbGRTTzsKKysgIH0KKysgIHJldHVybiAw OworK30KKysKKytzdGF0aWMgaW5saW5lIGJvb2wgR2V0Q1JCaXQoU2ltdWxhdG9yJiBzLCB1aW50 MzJfdCBiKSB7CisrICByZXR1cm4gKHMuZ2V0Q1JGaWVsZChiIC8gNCkgJiBDUkJpdE1hc2soYiAl IDQpKSAhPSAwOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgU2V0Q1JCaXQoU2ltdWxhdG9y JiBzLCB1aW50MzJfdCBiLCBib29sIHZhbCkgeworKyAgdWludDhfdCBmdiA9IHMuZ2V0Q1JGaWVs ZChiIC8gNCk7CisrICB1aW50OF90IG1hc2sgPSBDUkJpdE1hc2soYiAlIDQpOworKyAgcy5zZXRD UkZpZWxkKGIgLyA0LCB2YWwgPyAoZnYgfCBtYXNrKSA6IChmdiAmIH5tYXNrKSk7CisrfQorKwor Ky8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gZGVjb2RlQnJhbmNoOiBiKDE4KSwgYmMoMTYp LCBYTC1mb3JtKDE5KQorKworK3ZvaWQgU2ltdWxhdG9yOjpkZWNvZGVCcmFuY2goU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKSB7CisrICB1aW50MzJfdCBvcGNvZGUgPSBpbnN0ci0+b3Bjb2RlKCk7Cisr CisrICBpZiAob3Bjb2RlID09IDE4KSB7CisrICAgIC8vIGIgLyBibDogSS1mb3JtIHVuY29uZGl0 aW9uYWwgYnJhbmNoCisrICAgIGludDMyX3Qgb2Zmc2V0ID0gaW5zdHItPmxpMjZWYWx1ZSgpOwor KyAgICBib29sIGxrID0gaW5zdHItPmxrQml0KCk7CisrICAgIGJvb2wgYWEgPSBpbnN0ci0+YWFC aXQoKTsKKysKKysgICAgaW50NjRfdCB0YXJnZXQ7CisrICAgIGlmIChhYSkgeworKyAgICAgIHRh cmdldCA9IChpbnQ2NF90KW9mZnNldDsKKysgICAgfSBlbHNlIHsKKysgICAgICB0YXJnZXQgPSBn ZXRfcGMoKSArIChpbnQ2NF90KW9mZnNldDsKKysgICAgfQorKworKyAgICBpZiAobGspIHsKKysg ICAgICBzZXRMUihnZXRfcGMoKSArIFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAg fQorKworKyAgICBzZXRfcGModGFyZ2V0KTsKKysgICAgcmV0dXJuOworKyAgfQorKworKyAgaWYg KG9wY29kZSA9PSAxNikgeworKyAgICAvLyBiYyAvIGJjbDogQi1mb3JtIGNvbmRpdGlvbmFsIGJy YW5jaAorKyAgICB1aW50MzJfdCBibyA9IGluc3RyLT5ib1ZhbHVlKCk7CisrICAgIHVpbnQzMl90 IGJpID0gaW5zdHItPmJpVmFsdWUoKTsKKysgICAgaW50MzJfdCBiZCA9IGluc3RyLT5iZDE2VmFs dWUoKTsKKysgICAgYm9vbCBsayA9IGluc3RyLT5sa0JpdCgpOworKyAgICBib29sIGFhID0gaW5z dHItPmFhQml0KCk7CisrCisrICAgIC8vIERlY3JlbWVudCBDVFIgaWYgQk9bMl0gKGJpdCAyIG9m IEJPLCB3aGljaCBpcyBibyAmIDB4MDQpIGlzIGNsZWFyLgorKyAgICBpZiAoIShibyAmIDB4MDQp KSB7CisrICAgICAgc2V0Q1RSKGdldENUUigpIC0gMSk7CisrICAgIH0KKysKKysgICAgLy8gRXZh bHVhdGUgQ1RSIGNvbmRpdGlvbi4KKysgICAgYm9vbCBjdHJfb2sgPSAoYm8gJiAweDA0KSB8fAor KyAgICAgICAgICAgICAgICAgICgoZ2V0Q1RSKCkgIT0gMCkgXiAoKGJvICYgMHgwMikgIT0gMCkp OworKworKyAgICAvLyBFdmFsdWF0ZSBDUiBjb25kaXRpb24uCisrICAgIHVpbnQzMl90IGNyRmll bGQgPSBiaSAvIDQ7CisrICAgIHVpbnQzMl90IGNyQml0ID0gYmkgJSA0OworKyAgICB1aW50OF90 IGNyRmllbGRWYWwgPSBnZXRDUkZpZWxkKGNyRmllbGQpOworKyAgICBib29sIGNyQml0U2V0Owor KyAgICBzd2l0Y2ggKGNyQml0KSB7CisrICAgICAgY2FzZSAwOiBjckJpdFNldCA9IChjckZpZWxk VmFsICYga0NSRmllbGRMVCkgIT0gMDsgYnJlYWs7CisrICAgICAgY2FzZSAxOiBjckJpdFNldCA9 IChjckZpZWxkVmFsICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7CisrICAgICAgY2FzZSAyOiBj ckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRFUSkgIT0gMDsgYnJlYWs7CisrICAgICAg Y2FzZSAzOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRTTykgIT0gMDsgYnJlYWs7 CisrICAgICAgZGVmYXVsdDogY3JCaXRTZXQgPSBmYWxzZTsgYnJlYWs7CisrICAgIH0KKysgICAg Ym9vbCBjb25kX29rID0gKGJvICYgMHgxMCkgfHwgKGNyQml0U2V0ID09ICgoYm8gJiAweDA4KSAh PSAwKSk7CisrCisrICAgIGlmIChjdHJfb2sgJiYgY29uZF9vaykgeworKyAgICAgIGludDY0X3Qg dGFyZ2V0OworKyAgICAgIGlmIChhYSkgeworKyAgICAgICAgdGFyZ2V0ID0gKGludDY0X3QpYmQ7 CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHRhcmdldCA9IGdldF9wYygpICsgKGludDY0X3Qp YmQ7CisrICAgICAgfQorKyAgICAgIGlmIChsaykgeworKyAgICAgICAgc2V0TFIoZ2V0X3BjKCkg KyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgfQorKyAgICAgIHNldF9wYyh0 YXJnZXQpOworKyAgICB9IGVsc2UgeworKyAgICAgIC8vIEJyYW5jaCBub3QgdGFrZW4uCisrICAg ICAgc2V0X3BjKGdldF9wYygpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICB9 CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIGlmIChvcGNvZGUgPT0gMTkpIHsKKysgICAgLy8g WEwtZm9ybTogYmNsciwgYmNjdHIsIGNyYW5kLCBjcmFuZGMsIGNyb3IsIGNyb3JjLCBjcnhvciwg Y3JlcXYsCisrICAgIC8vICAgICAgICAgIG1jcmYsIGlzeW5jCisrICAgIHVpbnQzMl90IHhsID0g aW5zdHItPnhsVmFsdWUoKTsKKysKKysgICAgc3dpdGNoICh4bCkgeworKyAgICAgIGNhc2UgMTY6 IHsKKysgICAgICAgIC8vIGJjbHI6IGNvbmRpdGlvbmFsIGJyYW5jaCB0byBMUgorKyAgICAgICAg dWludDMyX3QgYm8gPSBpbnN0ci0+Ym9WYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmkgPSBp bnN0ci0+YmlWYWx1ZSgpOworKyAgICAgICAgYm9vbCBsayA9IGluc3RyLT5sa0JpdCgpOworKwor KyAgICAgICAgaWYgKCEoYm8gJiAweDA0KSkgeworKyAgICAgICAgICBzZXRDVFIoZ2V0Q1RSKCkg LSAxKTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGJvb2wgY3RyX29rID0gKGJvICYgMHgwNCkg fHwKKysgICAgICAgICAgICAgICAgICAgICAgKChnZXRDVFIoKSAhPSAwKSBeICgoYm8gJiAweDAy KSAhPSAwKSk7CisrCisrICAgICAgICB1aW50MzJfdCBjckZpZWxkID0gYmkgLyA0OworKyAgICAg ICAgdWludDMyX3QgY3JCaXQgPSBiaSAlIDQ7CisrICAgICAgICB1aW50OF90IGNyRmllbGRWYWwg PSBnZXRDUkZpZWxkKGNyRmllbGQpOworKyAgICAgICAgYm9vbCBjckJpdFNldDsKKysgICAgICAg IHN3aXRjaCAoY3JCaXQpIHsKKysgICAgICAgICAgY2FzZSAwOiBjckJpdFNldCA9IChjckZpZWxk VmFsICYga0NSRmllbGRMVCkgIT0gMDsgYnJlYWs7CisrICAgICAgICAgIGNhc2UgMTogY3JCaXRT ZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkR1QpICE9IDA7IGJyZWFrOworKyAgICAgICAgICBj YXNlIDI6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JGaWVsZEVRKSAhPSAwOyBicmVhazsK KysgICAgICAgICAgY2FzZSAzOiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRTTykg IT0gMDsgYnJlYWs7CisrICAgICAgICAgIGRlZmF1bHQ6IGNyQml0U2V0ID0gZmFsc2U7IGJyZWFr OworKyAgICAgICAgfQorKyAgICAgICAgYm9vbCBjb25kX29rID0gKGJvICYgMHgxMCkgfHwgKGNy Qml0U2V0ID09ICgoYm8gJiAweDA4KSAhPSAwKSk7CisrCisrICAgICAgICBpZiAoY3RyX29rICYm IGNvbmRfb2spIHsKKysgICAgICAgICAgaW50NjRfdCB0YXJnZXQgPSBnZXRMUigpICYgfjNMTDsK KysgICAgICAgICAgaWYgKGxrKSB7CisrICAgICAgICAgICAgc2V0TFIoZ2V0X3BjKCkgKyBTaW1J bnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgc2V0X3Bj KHRhcmdldCk7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBzZXRfcGMoZ2V0X3BjKCkg KyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICAgICAgICB9CisrICAgICAgICBicmVh azsKKysgICAgICB9CisrICAgICAgY2FzZSA1Mjg6IHsKKysgICAgICAgIC8vIGJjY3RyOiBjb25k aXRpb25hbCBicmFuY2ggdG8gQ1RSCisrICAgICAgICB1aW50MzJfdCBibyA9IGluc3RyLT5ib1Zh bHVlKCk7CisrICAgICAgICB1aW50MzJfdCBiaSA9IGluc3RyLT5iaVZhbHVlKCk7CisrICAgICAg ICBib29sIGxrID0gaW5zdHItPmxrQml0KCk7CisrCisrICAgICAgICAvLyBDVFIgaXMgbm90IGRl Y3JlbWVudGVkIGZvciBiY2N0ci4KKysgICAgICAgIHVpbnQzMl90IGNyRmllbGQgPSBiaSAvIDQ7 CisrICAgICAgICB1aW50MzJfdCBjckJpdCA9IGJpICUgNDsKKysgICAgICAgIHVpbnQ4X3QgY3JG aWVsZFZhbCA9IGdldENSRmllbGQoY3JGaWVsZCk7CisrICAgICAgICBib29sIGNyQml0U2V0Owor KyAgICAgICAgc3dpdGNoIChjckJpdCkgeworKyAgICAgICAgICBjYXNlIDA6IGNyQml0U2V0ID0g KGNyRmllbGRWYWwgJiBrQ1JGaWVsZExUKSAhPSAwOyBicmVhazsKKysgICAgICAgICAgY2FzZSAx OiBjckJpdFNldCA9IChjckZpZWxkVmFsICYga0NSRmllbGRHVCkgIT0gMDsgYnJlYWs7CisrICAg ICAgICAgIGNhc2UgMjogY3JCaXRTZXQgPSAoY3JGaWVsZFZhbCAmIGtDUkZpZWxkRVEpICE9IDA7 IGJyZWFrOworKyAgICAgICAgICBjYXNlIDM6IGNyQml0U2V0ID0gKGNyRmllbGRWYWwgJiBrQ1JG aWVsZFNPKSAhPSAwOyBicmVhazsKKysgICAgICAgICAgZGVmYXVsdDogY3JCaXRTZXQgPSBmYWxz ZTsgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBib29sIGNvbmRfb2sgPSAoYm8gJiAweDEw KSB8fCAoY3JCaXRTZXQgPT0gKChibyAmIDB4MDgpICE9IDApKTsKKysKKysgICAgICAgIGlmIChj b25kX29rKSB7CisrICAgICAgICAgIGludDY0X3QgdGFyZ2V0ID0gZ2V0Q1RSKCkgJiB+M0xMOwor KyAgICAgICAgICBpZiAobGspIHsKKysgICAgICAgICAgICBzZXRMUihnZXRfcGMoKSArIFNpbUlu c3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBzZXRfcGMo dGFyZ2V0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHNldF9wYyhnZXRfcGMoKSAr IFNpbUluc3RydWN0aW9uOjprSW5zdHJTaXplKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFr OworKyAgICAgIH0KKysgICAgICBjYXNlIDI1NzogeworKyAgICAgICAgLy8gY3JhbmQ6IENSW0JU XSA9IENSW0JBXSAmIENSW0JCXQorKyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1 ZSgpOworKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgICAgICAg dWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMs IGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpICYmIEdldENSQml0KCp0aGlzLCBiYikpOworKyAgICAg ICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgMTI5OiB7CisrICAgICAgICAvLyBjcmFu ZGM6IENSW0JUXSA9IENSW0JBXSAmIH5DUltCQl0KKysgICAgICAgIHVpbnQzMl90IGJ0ID0gaW5z dHItPnJ0VmFsdWUoKTsKKysgICAgICAgIHVpbnQzMl90IGJhID0gaW5zdHItPnJhVmFsdWUoKTsK KysgICAgICAgIHVpbnQzMl90IGJiID0gaW5zdHItPnJiVmFsdWUoKTsKKysgICAgICAgIFNldENS Qml0KCp0aGlzLCBidCwgR2V0Q1JCaXQoKnRoaXMsIGJhKSAmJiAhR2V0Q1JCaXQoKnRoaXMsIGJi KSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSA0NDk6IHsKKysgICAg ICAgIC8vIGNyb3I6IENSW0JUXSA9IENSW0JBXSB8IENSW0JCXQorKyAgICAgICAgdWludDMyX3Qg YnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmEgPSBpbnN0ci0+cmFW YWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKyAgICAg ICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpIHx8IEdldENSQml0KCp0 aGlzLCBiYikpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgNDE3OiB7 CisrICAgICAgICAvLyBjcm9yYzogQ1JbQlRdID0gQ1JbQkFdIHwgfkNSW0JCXQorKyAgICAgICAg dWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmEgPSBp bnN0ci0+cmFWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+cmJWYWx1ZSgp OworKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywgYmEpIHx8ICFH ZXRDUkJpdCgqdGhpcywgYmIpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBj YXNlIDE5MzogeworKyAgICAgICAgLy8gY3J4b3I6IENSW0JUXSA9IENSW0JBXSBeIENSW0JCXQor KyAgICAgICAgdWludDMyX3QgYnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgICAgICAgdWludDMy X3QgYmEgPSBpbnN0ci0+cmFWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmIgPSBpbnN0ci0+ cmJWYWx1ZSgpOworKyAgICAgICAgU2V0Q1JCaXQoKnRoaXMsIGJ0LCBHZXRDUkJpdCgqdGhpcywg YmEpIF4gR2V0Q1JCaXQoKnRoaXMsIGJiKSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9Cisr ICAgICAgY2FzZSAyODk6IHsKKysgICAgICAgIC8vIGNyZXF2OiBDUltCVF0gPSB+KENSW0JBXSBe IENSW0JCXSkKKysgICAgICAgIHVpbnQzMl90IGJ0ID0gaW5zdHItPnJ0VmFsdWUoKTsKKysgICAg ICAgIHVpbnQzMl90IGJhID0gaW5zdHItPnJhVmFsdWUoKTsKKysgICAgICAgIHVpbnQzMl90IGJi ID0gaW5zdHItPnJiVmFsdWUoKTsKKysgICAgICAgIFNldENSQml0KCp0aGlzLCBidCwgIShHZXRD UkJpdCgqdGhpcywgYmEpIF4gR2V0Q1JCaXQoKnRoaXMsIGJiKSkpOworKyAgICAgICAgYnJlYWs7 CisrICAgICAgfQorKyAgICAgIGNhc2UgMTUwOiB7CisrICAgICAgICAvLyBpc3luYzogbm8tb3Ag aW4gc2ltdWxhdG9yCisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAzNzA6 IHsKKysgICAgICAgIC8vIFBQQ19zdG9wICgweDRDMDAwMkU0KSBkZWNvZGVkIGFzIFhMLWZvcm0g b3Bjb2RlIDE5LCBYTD0zNzAuCisrICAgICAgICAvLyBUaGlzIGlzIG91ciBrQ2FsbFJlZGlySW5z dHIuIEhhbmRsZSB2aWEgc29mdHdhcmVJbnRlcnJ1cHQuCisrICAgICAgICBzb2Z0d2FyZUludGVy cnVwdChpbnN0cik7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAyOiB7 CisrICAgICAgICAvLyBQT1dFUjkgYWRkcGNpcyByVCwgRCAoRFgtZm9ybSkuIENvbXB1dGVzIHJU ID0gKENJQSArIDQpICsKKysgICAgICAgIC8vIChzZXh0MTYoRCkgPDwgMTYpLiBUaGUgMTYtYml0 IHNpZ25lZCBkaXNwbGFjZW1lbnQgRCBpcyBzcGxpdAorKyAgICAgICAgLy8gYWNyb3NzIHRocmVl IHN1Yi1maWVsZHM6CisrICAgICAgICAvLyAgIGQwID0gYml0cyBMRSA2Li4xNSAoMTAgYml0cykg 4oCUIERbMTU6Nl0KKysgICAgICAgIC8vICAgZDEgPSBiaXRzIExFIDE2Li4yMCAoNSBiaXRzKSAg 4oCUIERbNToxXQorKyAgICAgICAgLy8gICBkMiA9IGJpdCAgTEUgMCAgICAgICgxIGJpdCkgICDi gJQgRFswXQorKyAgICAgICAgLy8gKE1pcnJvcnMgdGhlIGVuY29kZXIgaW4gQXNzZW1ibGVyLXBw YzY0LmNwcDphc19hZGRwY2lzLikKKysgICAgICAgIHVpbnQzMl90IHJ0ID0gaW5zdHItPnJ0VmFs dWUoKTsKKysgICAgICAgIHVpbnQzMl90IGQwID0gaW5zdHItPmJpdHMoMTUsIDYpOworKyAgICAg ICAgdWludDMyX3QgZDEgPSBpbnN0ci0+Yml0cygyMCwgMTYpOworKyAgICAgICAgdWludDMyX3Qg ZDIgPSBpbnN0ci0+Yml0KDApOworKyAgICAgICAgaW50MTZfdCBEID0gKGludDE2X3QpKChkMCA8 PCA2KSB8IChkMSA8PCAxKSB8IGQyKTsKKysgICAgICAgIGludDY0X3QgY2lhID0gcmVpbnRlcnBy ZXRfY2FzdDxpbnQ2NF90PihpbnN0cik7CisrICAgICAgICBzZXRSZWdpc3RlcihydCwgY2lhICsg U2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUgKworKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoc3RhdGljX2Nhc3Q8aW50NjRfdD4oRCkgPDwgMTYpKTsKKysgICAgICAgIGJyZWFrOworKyAg ICAgIH0KKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYo ImRlY29kZUJyYW5jaDogWEwgb3Bjb2RlIDE5LCB4bD0ldSIsIHhsKTsKKysgICAgfQorKyAgICBy ZXR1cm47CisrICB9CisrCisrICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlQnJhbmNo OiBvcGNvZGU9JXUiLCBvcGNvZGUpOworK30KKysKKysvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor Ky8vIGRlY29kZUZQOiBNYWpvciBvcGNvZGVzIDU5IChBLWZvcm0gc2luZ2xlKSBhbmQgNjMgKFgt Zm9ybSAvIEEtZm9ybSBkb3VibGUpCisrCisrdm9pZCBTaW11bGF0b3I6OmRlY29kZUZQKFNpbUlu c3RydWN0aW9uKiBpbnN0cikgeworKyAgdWludDMyX3Qgb3Bjb2RlID0gaW5zdHItPm9wY29kZSgp OworKyAgdWludDMyX3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOyAgLy8gRlJUCisrICB1aW50MzJf dCByYSA9IGluc3RyLT5yYVZhbHVlKCk7ICAvLyBGUkEKKysgIHVpbnQzMl90IHJiID0gaW5zdHIt PnJiVmFsdWUoKTsgIC8vIEZSQgorKyAgdWludDMyX3QgcmNfcmVnID0gaW5zdHItPnJjVmFsdWUo KTsgIC8vIEZSQyAoQS1mb3JtKQorKworKyAgaWYgKG9wY29kZSA9PSA2MykgeworKyAgICAvLyBY LWZvcm0gYW5kIEEtZm9ybSBkb3VibGUtcHJlY2lzaW9uIGluc3RydWN0aW9ucy4KKysgICAgLy8g Rm9yIEEtZm9ybSwgdGhlIHN1Yi1vcGNvZGUgaXMgaW4gYml0cyAxLi41LgorKyAgICAvLyBGb3Ig WC1mb3JtLCB0aGUgc3ViLW9wY29kZSBpcyBpbiBiaXRzIDEuLjEwLgorKyAgICB1aW50MzJfdCB4 b19hID0gaW5zdHItPmJpdHMoNSwgMSk7ICAvLyBBLWZvcm0gc3ViLW9wY29kZQorKyAgICB1aW50 MzJfdCB4b194ID0gaW5zdHItPmJpdHMoMTAsIDEpOyAvLyBYLWZvcm0gc3ViLW9wY29kZQorKwor KyAgICAvLyBUcnkgQS1mb3JtIGZpcnN0ICg1LWJpdCBzdWItb3Bjb2RlIGluIGJpdHMgMS4uNSku CisrICAgIHN3aXRjaCAoeG9fYSkgeworKyAgICAgIGNhc2UgMjE6IHsKKysgICAgICAgIC8vIGZh ZGQKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkgKyBn ZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShy dCwgcmVzdWx0KTsKKysgICAgICAgIHJldHVybjsKKysgICAgICB9CisrICAgICAgY2FzZSAyMDog eworKyAgICAgICAgLy8gZnN1YgorKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IGdldEZwdVJlZ2lz dGVyRG91YmxlKHJhKSAtIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIHNldEZw dVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0K KysgICAgICBjYXNlIDI1OiB7CisrICAgICAgICAvLyBmbXVsOiBGUlQgPSBGUkEgKiBGUkMgKG5v dGU6IEZSQywgbm90IEZSQiEpCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gZ2V0RnB1UmVnaXN0 ZXJEb3VibGUocmEpICogZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKTsKKysgICAgICAgIHNl dEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgcmV0dXJuOworKyAgICAg IH0KKysgICAgICBjYXNlIDE4OiB7CisrICAgICAgICAvLyBmZGl2CisrICAgICAgICBkb3VibGUg cmVzdWx0ID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpIC8gZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmIpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAg ICByZXR1cm47CisrICAgICAgfQorKyAgICAgIGNhc2UgMjI6IHsKKysgICAgICAgIC8vIGZzcXJ0 CisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3FydChnZXRGcHVSZWdpc3RlckRvdWJsZShyYikp OworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBy ZXR1cm47CisrICAgICAgfQorKyAgICAgIGNhc2UgMjk6IHsKKysgICAgICAgIC8vIGZtYWRkOiBG UlQgPSBGUkEgKiBGUkMgKyBGUkIKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSBzdGQ6OmZtYShn ZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOworKyAgICAgICAgc2V0RnB1UmVn aXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAg ICAgIGNhc2UgMzA6IHsKKysgICAgICAgIC8vIGZubXN1YjogRlJUID0gLShGUkEgKiBGUkMgLSBG UkIpCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gLShzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRv dWJsZShyYSksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LWdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3Vi bGUocnQsIHJlc3VsdCk7CisrICAgICAgICByZXR1cm47CisrICAgICAgfQorKyAgICAgIGNhc2Ug Mjg6IHsKKysgICAgICAgIC8vIGZtc3ViOiBGUlQgPSBGUkEgKiBGUkMgLSBGUkIKKysgICAgICAg IGRvdWJsZSByZXN1bHQgPSBzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVn KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmIpKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAg ICAgICAgcmV0dXJuOworKyAgICAgIH0KKysgICAgICBjYXNlIDMxOiB7CisrICAgICAgICAvLyBm bm1hZGQ6IEZSVCA9IC0oRlJBICogRlJDICsgRlJCKQorKyAgICAgICAgZG91YmxlIHJlc3VsdCA9 IC0oc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwor KyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICByZXR1 cm47CisrICAgICAgfQorKyAgICAgIGNhc2UgMjM6IHsKKysgICAgICAgIC8vIGZzZWw6IEZSVCA9 IChGUkEgPj0gMCkgPyBGUkMgOiBGUkIKKysgICAgICAgIGRvdWJsZSBmcmEgPSBnZXRGcHVSZWdp c3RlckRvdWJsZShyYSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgKGZyYSA+ PSAwLjApID8gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKQorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGcHVSZWdpc3RlckRvdWJsZShyYikp OworKyAgICAgICAgcmV0dXJuOworKyAgICAgIH0KKysgICAgICBjYXNlIDI2OiB7CisrICAgICAg ICAvLyBmcnNxcnRlOiBGUlQgPSAxLjAgLyBzcXJ0KEZSQikgKGVzdGltYXRlKQorKyAgICAgICAg ZG91YmxlIHJlc3VsdCA9IDEuMCAvIHNxcnQoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKTsKKysg ICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgcmV0dXJu OworKyAgICAgIH0KKysgICAgfQorKworKyAgICAvLyBYLWZvcm0gKDEwLWJpdCBzdWItb3Bjb2Rl KS4KKysgICAgc3dpdGNoICh4b194KSB7CisrICAgICAgY2FzZSA3MjogeworKyAgICAgICAgLy8g Zm1yOiBGUlQgPSBGUkIKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBnZXRGcHVS ZWdpc3RlckRvdWJsZShyYikpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNh c2UgNDA6IHsKKysgICAgICAgIC8vIGZuZWc6IEZSVCA9IC1GUkIKKysgICAgICAgIHNldEZwdVJl Z2lzdGVyRG91YmxlKHJ0LCAtZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDI2NDogeworKyAgICAgICAgLy8gZmFiczogRlJU ID0gfEZSQnwKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBmYWJzKGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKSkpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNh c2UgMTM2OiB7CisrICAgICAgICAvLyBmbmFiczogRlJUID0gLXxGUkJ8CisrICAgICAgICBzZXRG cHVSZWdpc3RlckRvdWJsZShydCwgLWZhYnMoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7Cisr ICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSA4OiB7CisrICAgICAgICAvLyBm Y3BzZ246IEZSVCA9IHNpZ24oRlJBKSB8fCBtYWduaXR1ZGUoRlJCKQorKyAgICAgICAgZG91Ymxl IGZyYSA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKTsKKysgICAgICAgIGRvdWJsZSBmcmIgPSBn ZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShy dCwgc3RkOjpjb3B5c2lnbihmcmIsIGZyYSkpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQor KyAgICAgIGNhc2UgMDogeworKyAgICAgICAgLy8gZmNtcHU6IGNvbXBhcmUgRlJBLCBGUkIgdW5v cmRlcmVkCisrICAgICAgICB1aW50MzJfdCBiZiA9IGluc3RyLT5iZlZhbHVlKCk7CisrICAgICAg ICBkb3VibGUgZnJhID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpOworKyAgICAgICAgZG91Ymxl IGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIHVpbnQ4X3QgZmllbGQg PSAwOworKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZnJhKSB8fCBzdGQ6OmlzbmFuKGZyYikpIHsK KysgICAgICAgICAgZmllbGQgPSBrQ1JGaWVsZFNPOworKyAgICAgICAgfSBlbHNlIGlmIChmcmEg PCBmcmIpIHsKKysgICAgICAgICAgZmllbGQgPSBrQ1JGaWVsZExUOworKyAgICAgICAgfSBlbHNl IGlmIChmcmEgPiBmcmIpIHsKKysgICAgICAgICAgZmllbGQgPSBrQ1JGaWVsZEdUOworKyAgICAg ICAgfSBlbHNlIHsKKysgICAgICAgICAgZmllbGQgPSBrQ1JGaWVsZEVROworKyAgICAgICAgfQor KyAgICAgICAgc2V0Q1JGaWVsZChiZiwgZmllbGQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAg fQorKyAgICAgIGNhc2UgMzI6IHsKKysgICAgICAgIC8vIGZjbXBvOiBjb21wYXJlIEZSQSwgRlJC IG9yZGVyZWQKKysgICAgICAgIHVpbnQzMl90IGJmID0gaW5zdHItPmJmVmFsdWUoKTsKKysgICAg ICAgIGRvdWJsZSBmcmEgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYSk7CisrICAgICAgICBkb3Vi bGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgdWludDhfdCBmaWVs ZCA9IDA7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmEpIHx8IHN0ZDo6aXNuYW4oZnJiKSkg eworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkU087CisrICAgICAgICB9IGVsc2UgaWYgKGZy YSA8IGZyYikgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkTFQ7CisrICAgICAgICB9IGVs c2UgaWYgKGZyYSA+IGZyYikgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkR1Q7CisrICAg ICAgICB9IGVsc2UgeworKyAgICAgICAgICBmaWVsZCA9IGtDUkZpZWxkRVE7CisrICAgICAgICB9 CisrICAgICAgICBzZXRDUkZpZWxkKGJmLCBmaWVsZCk7CisrICAgICAgICBicmVhazsKKysgICAg ICB9CisrICAgICAgLy8gRm9yIGZjdGlkKiBhbmQgZmN0aXcqIHRoZSBJU0Egc3BlY2lmaWVzIHRo YXQgYml0IDIzIG9mIEZQU0NSIChWWENWSSwKKysgICAgICAvLyAiaW52YWxpZCBvcCBmb3IgaW50 ZWdlciBjb252ZXJ0IikgaXMgc2V0IHdoZW4gdGhlIHNvdXJjZSBpcyBOYU4sICtJbmYsCisrICAg ICAgLy8gLUluZiwgb3Igb3V0IG9mIHRoZSBkZXN0aW5hdGlvbidzIHJhbmdlLiBXYXNtJ3Mgb3V0 LW9mLXJhbmdlIHRyYXAKKysgICAgICAvLyBzZXF1ZW5jZSBpcyBgbXRmc2IwIDIzOyBmY3RpZHo7 IG1mdnNyZDsgbWNyZnMgY3IwLDU7IGJ0IFNPQml0LHRyYXBgLAorKyAgICAgIC8vIHNvIHRoZSBz aW11bGF0b3IgTVVTVCB1cGRhdGUgVlhDVkkgaGVyZSBmb3IgdGhlIHRyYXAgdG8gZmlyZS4gV2l0 aAorKyAgICAgIC8vIEZQU0NSXyBpbiB0aGUgbG93LWhhbGYgUFBDIGxheW91dCAoUFBDIGJpdCBO IOKGkiBpbnQ2NCBiaXQgKDMxLU4pKSwKKysgICAgICAvLyBWWENWSSBsaXZlcyBhdCBpbnQ2NCBi aXQgKDMxLTIzKSA9IDguCisrICAgICAgY2FzZSA4MTQ6IHsKKysgICAgICAgIC8vIGZjdGlkOiBj b252ZXJ0IGRvdWJsZSB0byBpbnQ2NCAoY3VycmVudCByb3VuZGluZykKKysgICAgICAgIGRvdWJs ZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAgICAgICBpbnQ2NF90IHJlc3Vs dDsKKysgICAgICAgIGJvb2wgaW52YWxpZCA9IGZhbHNlOworKyAgICAgICAgaWYgKHN0ZDo6aXNu YW4oZnJiKSkgeworKyAgICAgICAgICByZXN1bHQgPSBJTlQ2NF9NSU47CisrICAgICAgICAgIGlu dmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIGlmIChmcmIgPj0gLShkb3VibGUpSU5UNjRf TUlOIHx8IGZyYiA8IChkb3VibGUpSU5UNjRfTUlOKSB7CisrICAgICAgICAgIHJlc3VsdCA9IChm cmIgPCAwKSA/IElOVDY0X01JTiA6IElOVDY0X01BWDsKKysgICAgICAgICAgaW52YWxpZCA9IHRy dWU7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBzd2l0Y2ggKEZQU0NSXyAmIGtGUFND UlJOTWFzaykgeworKyAgICAgICAgICAgIGNhc2UgUk46IHJlc3VsdCA9IChpbnQ2NF90KWxscmlu dChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJaOiByZXN1bHQgPSAoaW50NjRfdClm cmI7IGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgUlA6IHJlc3VsdCA9IChpbnQ2NF90KWNlaWwo ZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSTTogcmVzdWx0ID0gKGludDY0X3QpZmxv b3IoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0ID0gKGludDY0X3Qp ZnJiOyBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgaWYgKGludmFs aWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMgYml0IDIzIGluIGxvdy1o YWxmIGxheW91dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIHJlc3VsdCk7CisrICAg ICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSA4MTU6IHsKKysgICAgICAgIC8vIGZj dGlkejogY29udmVydCBkb3VibGUgdG8gaW50NjQgKHJvdW5kIHRvd2FyZCB6ZXJvKQorKyAgICAg ICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIGludDY0 X3QgcmVzdWx0OworKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7CisrICAgICAgICBpZiAo c3RkOjppc25hbihmcmIpKSB7CisrICAgICAgICAgIHJlc3VsdCA9IElOVDY0X01JTjsKKysgICAg ICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICB9IGVsc2UgaWYgKGZyYiA+PSAtKGRvdWJs ZSlJTlQ2NF9NSU4pIHsKKysgICAgICAgICAgcmVzdWx0ID0gSU5UNjRfTUFYOworKyAgICAgICAg ICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSBpZiAoZnJiIDwgKGRvdWJsZSlJTlQ2 NF9NSU4pIHsKKysgICAgICAgICAgcmVzdWx0ID0gSU5UNjRfTUlOOworKyAgICAgICAgICBpbnZh bGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIHJlc3VsdCA9IChpbnQ2 NF90KWZyYjsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFV TEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KKysg ICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgfQorKyAgICAgIGNhc2UgOTQyOiB7CisrICAgICAgICAvLyBmY3RpZHU6IGNvbnZlcnQgZG91 YmxlIHRvIHVpbnQ2NCAoY3VycmVudCByb3VuZGluZykuCisrICAgICAgICAvLyBWWENWSSBpcyBz aWduYWxlZCB3aGVuIHNvdXJjZSBpcyBOYU4sIMKxSW5mLCBvciB0aGUgcm91bmRlZCB2YWx1ZQor KyAgICAgICAgLy8gaXMgb3V0c2lkZSBbMCwgMl42NC0xXS4gTm90YWJseSwKKysgICAgICAgIC8v IGEgbmVnYXRpdmUgc291cmNlIHdob3NlIHJvdW5kZWQgdmFsdWUgaXMgMCAoZS5nLiAtMC40IGlu IFJOLCBvcgorKyAgICAgICAgLy8gYW55IHZhbHVlIGluICgtMSwgMCkgaW4gUlopIGlzIE5PVCBp bnZhbGlkLgorKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKTsK KysgICAgICAgIHVpbnQ2NF90IHJlc3VsdDsKKysgICAgICAgIGJvb2wgaW52YWxpZCA9IGZhbHNl OworKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZnJiKSkgeworKyAgICAgICAgICByZXN1bHQgPSAw OworKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSBpZiAoZnJiID49 IC0yLjAgKiAoZG91YmxlKUlOVDY0X01JTiAvKiAyXjY0ICovKSB7CisrICAgICAgICAgIHJlc3Vs dCA9IFVJTlQ2NF9NQVg7CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBl bHNlIHsKKysgICAgICAgICAgZG91YmxlIHJvdW5kZWQ7CisrICAgICAgICAgIHN3aXRjaCAoRlBT Q1JfICYga0ZQU0NSUk5NYXNrKSB7CisrICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9IG5l YXJieWludChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0gdHJ1 bmMoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwoZnJi KTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7IGJy ZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVhazsK KysgICAgICAgICAgfQorKyAgICAgICAgICBpZiAocm91bmRlZCA8IDAuMCkgeworKyAgICAgICAg ICAgIHJlc3VsdCA9IDA7CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAg IH0gZWxzZSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gKHVpbnQ2NF90KXJvdW5kZWQ7CisrICAg ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmIChpbnZhbGlkKSBGUFNDUl8gfD0gKDFV TEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlvdXQgKi8KKysg ICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCBJNjQocmVzdWx0KSk7CisrICAgICAgICBicmVhazsK KysgICAgICB9CisrICAgICAgY2FzZSA5NDM6IHsKKysgICAgICAgIC8vIGZjdGlkdXo6IGNvbnZl cnQgZG91YmxlIHRvIHVpbnQ2NCAocm91bmQgdG93YXJkIHplcm8pLgorKyAgICAgICAgLy8gU2Ft ZSBWWENWSSBydWxlIGFzIGZjdGlkdSBidXQgcm91bmRpbmcgaXMgZml4ZWQgdG8gdHJ1bmNhdGUK KysgICAgICAgIC8vIHRvd2FyZCB6ZXJvLiBTb3VyY2UgaW4gKC0xLCAwKSB0cnVuY2F0ZXMgdG8g MCDigJQgVkFMSUQuCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUo cmIpOworKyAgICAgICAgdWludDY0X3QgcmVzdWx0OworKyAgICAgICAgYm9vbCBpbnZhbGlkID0g ZmFsc2U7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7CisrICAgICAgICAgIHJlc3Vs dCA9IDA7CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIGlmIChm cmIgPj0gLTIuMCAqIChkb3VibGUpSU5UNjRfTUlOIC8qIDJeNjQgKi8pIHsKKysgICAgICAgICAg cmVzdWx0ID0gVUlOVDY0X01BWDsKKysgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAg ICB9IGVsc2UgaWYgKGZyYiA8PSAtMS4wKSB7CisrICAgICAgICAgIC8vIFRydW5jYXRlZCB2YWx1 ZSBpcyBuZWdhdGl2ZSDigJQgaW52YWxpZCBmb3IgdW5zaWduZWQuCisrICAgICAgICAgIHJlc3Vs dCA9IDA7CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIHsKKysg ICAgICAgICAgLy8gU291cmNlIGlzIGluICgtMSwgMl42NCk7IHRydW5jYXRpb24gdG93YXJkIHpl cm8geWllbGRzIGEgdmFsdWUKKysgICAgICAgICAgLy8gaW4gWzAsIDJeNjQpLgorKyAgICAgICAg ICByZXN1bHQgPSAodWludDY0X3QpdHJ1bmMoZnJiKTsKKysgICAgICAgIH0KKysgICAgICAgIGlm IChpbnZhbGlkKSBGUFNDUl8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBp biBsb3ctaGFsZiBsYXlvdXQgKi8KKysgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCBJNjQocmVz dWx0KSk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAxNDogeworKyAg ICAgICAgLy8gZmN0aXc6IGNvbnZlcnQgZG91YmxlIHRvIGludDMyIChjdXJyZW50IHJvdW5kaW5n KS4KKysgICAgICAgIC8vIEludmFsaWQgcmFuZ2U6IHJvdW5kZWQgdmFsdWUgPCBJTlQzMl9NSU4g b3IgPiBJTlQzMl9NQVguIFRoZQorKyAgICAgICAgLy8gZG91YmxlLXByZWNpc2lvbiBib3VuZGFy eSBvbiB0aGUgbmVnYXRpdmUgc2lkZSBpcyBJTlQzMl9NSU4tMSA9CisrICAgICAgICAvLyAtMl4z MS0xID0gLTIxNDc0ODM2NDkuMCAoZXhhY3RseSByZXByZXNlbnRhYmxlOyBkb3VibGVzIGluCisr ICAgICAgICAvLyAoLTJeMzEtMSwgLTJeMzEpIGFsbCByb3VuZC10by1uZWFyZXN0IHRvIC0yXjMx IHdoaWNoIGlzIHZhbGlkKS4KKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRv dWJsZShyYik7CisrICAgICAgICBpbnQzMl90IHJlc3VsdDsKKysgICAgICAgIGJvb2wgaW52YWxp ZCA9IGZhbHNlOworKyAgICAgICAgaWYgKHN0ZDo6aXNuYW4oZnJiKSkgeworKyAgICAgICAgICBy ZXN1bHQgPSBJTlQzMl9NSU47CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAg fSBlbHNlIHsKKysgICAgICAgICAgZG91YmxlIHJvdW5kZWQ7CisrICAgICAgICAgIHN3aXRjaCAo RlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7CisrICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9 IG5lYXJieWludChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0g dHJ1bmMoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwo ZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7 IGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVh azsKKysgICAgICAgICAgfQorKyAgICAgICAgICBpZiAocm91bmRlZCA+IChkb3VibGUpSU5UMzJf TUFYKSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gSU5UMzJfTUFYOworKyAgICAgICAgICAgIGlu dmFsaWQgPSB0cnVlOworKyAgICAgICAgICB9IGVsc2UgaWYgKHJvdW5kZWQgPCAoZG91YmxlKUlO VDMyX01JTikgeworKyAgICAgICAgICAgIHJlc3VsdCA9IElOVDMyX01JTjsKKysgICAgICAgICAg ICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICByZXN1 bHQgPSAoaW50MzJfdClyb3VuZGVkOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg ICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgxVUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQg MjMgaW4gbG93LWhhbGYgbGF5b3V0ICovCisrICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgKGlu dDY0X3QpcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDE1 OiB7CisrICAgICAgICAvLyBmY3Rpd3o6IGNvbnZlcnQgZG91YmxlIHRvIGludDMyIChyb3VuZCB0 b3dhcmQgemVybykuCisrICAgICAgICAvLyBUcnVuY2F0aW9uIG9mIGEgdmFsdWUgaW4gKC0yXjMx LTEsIElOVDMyX01JTikgdG93YXJkIHplcm8gZ2l2ZXMKKysgICAgICAgIC8vIElOVDMyX01JTiDi gJQgdmFsaWQuIE9ubHkgYGZyYiA8PSAtMl4zMS0xYCAoaS5lLiBgZnJiIDwgSU5UMzJfTUlOLTEr MWAKKysgICAgICAgIC8vID0gYGZyYiA8IC0yMTQ3NDgzNjQ4YCAuLi4gd2FpdCwgc2ltcGxlc3Q6 IGNoZWNrIHRydW5jYXRlZCB2YWx1ZSBpbgorKyAgICAgICAgLy8gcmFuZ2UgQUZURVIgdHJ1bmNh dGlvbi4pCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwor KyAgICAgICAgaW50MzJfdCByZXN1bHQ7CisrICAgICAgICBib29sIGludmFsaWQgPSBmYWxzZTsK KysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGZyYikpIHsKKysgICAgICAgICAgcmVzdWx0ID0gSU5U MzJfTUlOOworKyAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTsKKysgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgIGRvdWJsZSB0cnVuY2F0ZWQgPSB0cnVuYyhmcmIpOworKyAgICAgICAgICBpZiAo dHJ1bmNhdGVkID4gKGRvdWJsZSlJTlQzMl9NQVgpIHsKKysgICAgICAgICAgICByZXN1bHQgPSBJ TlQzMl9NQVg7CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAgIH0gZWxz ZSBpZiAodHJ1bmNhdGVkIDwgKGRvdWJsZSlJTlQzMl9NSU4pIHsKKysgICAgICAgICAgICByZXN1 bHQgPSBJTlQzMl9NSU47CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAg IH0gZWxzZSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gKGludDMyX3QpdHJ1bmNhdGVkOworKyAg ICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBpZiAoaW52YWxpZCkgRlBTQ1JfIHw9ICgx VUxMIDw8IDgpOyAgLyogVlhDVkk6IFBQQyBiaXQgMjMgaW4gbG93LWhhbGYgbGF5b3V0ICovCisr ICAgICAgICBzZXRGcHVSZWdpc3RlcihydCwgKGludDY0X3QpcmVzdWx0KTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDE0MjogeworKyAgICAgICAgLy8gZmN0aXd1OiBj b252ZXJ0IGRvdWJsZSB0byB1aW50MzIgKGN1cnJlbnQgcm91bmRpbmcpLiBUaGUgY2hlY2sgaXMK KysgICAgICAgIC8vIG9uIHRoZSBST1VOREVEIHZhbHVlOiBWWENWSSBpZmYgcm91bmRlZCA8IDAg b3Igcm91bmRlZCA+IFVJTlQzMl9NQVguCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVn aXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgdWludDMyX3QgcmVzdWx0OworKyAgICAgICAgYm9v bCBpbnZhbGlkID0gZmFsc2U7CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7CisrICAg ICAgICAgIHJlc3VsdCA9IDA7CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAg fSBlbHNlIHsKKysgICAgICAgICAgZG91YmxlIHJvdW5kZWQ7CisrICAgICAgICAgIHN3aXRjaCAo RlBTQ1JfICYga0ZQU0NSUk5NYXNrKSB7CisrICAgICAgICAgICAgY2FzZSBSTjogcm91bmRlZCA9 IG5lYXJieWludChmcmIpOyBicmVhazsKKysgICAgICAgICAgICBjYXNlIFJaOiByb3VuZGVkID0g dHJ1bmMoZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSUDogcm91bmRlZCA9IGNlaWwo ZnJiKTsgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSBSTTogcm91bmRlZCA9IGZsb29yKGZyYik7 IGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6IHJvdW5kZWQgPSB0cnVuYyhmcmIpOyBicmVh azsKKysgICAgICAgICAgfQorKyAgICAgICAgICBpZiAocm91bmRlZCA8IDAuMCkgeworKyAgICAg ICAgICAgIHJlc3VsdCA9IDA7CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7CisrICAgICAg ICAgIH0gZWxzZSBpZiAocm91bmRlZCA+IChkb3VibGUpVUlOVDMyX01BWCkgeworKyAgICAgICAg ICAgIHJlc3VsdCA9IFVJTlQzMl9NQVg7CisrICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7Cisr ICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcmVzdWx0ID0gKHVpbnQzMl90KXJvdW5k ZWQ7CisrICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGlmIChpbnZhbGlkKSBGUFND Ul8gfD0gKDFVTEwgPDwgOCk7ICAvKiBWWENWSTogUFBDIGJpdCAyMyBpbiBsb3ctaGFsZiBsYXlv dXQgKi8KKysgICAgICAgIHNldEZwdVJlZ2lzdGVyKHJ0LCAoaW50NjRfdCkodWludDY0X3QpcmVz dWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDE0MzogeworKyAg ICAgICAgLy8gZmN0aXd1ejogY29udmVydCBkb3VibGUgdG8gdWludDMyIChyb3VuZCB0b3dhcmQg emVybykuCisrICAgICAgICAvLyBTb3VyY2UgaW4gKC0xLCAwKSB0cnVuY2F0ZXMgdG8gMCDigJQg VkFMSUQuCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOwor KyAgICAgICAgdWludDMyX3QgcmVzdWx0OworKyAgICAgICAgYm9vbCBpbnZhbGlkID0gZmFsc2U7 CisrICAgICAgICBpZiAoc3RkOjppc25hbihmcmIpKSB7CisrICAgICAgICAgIHJlc3VsdCA9IDA7 CisrICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAg ICAgZG91YmxlIHRydW5jYXRlZCA9IHRydW5jKGZyYik7CisrICAgICAgICAgIGlmICh0cnVuY2F0 ZWQgPiAoZG91YmxlKVVJTlQzMl9NQVgpIHsKKysgICAgICAgICAgICByZXN1bHQgPSBVSU5UMzJf TUFYOworKyAgICAgICAgICAgIGludmFsaWQgPSB0cnVlOworKyAgICAgICAgICB9IGVsc2UgaWYg KHRydW5jYXRlZCA8IDAuMCkgeworKyAgICAgICAgICAgIHJlc3VsdCA9IDA7CisrICAgICAgICAg ICAgaW52YWxpZCA9IHRydWU7CisrICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcmVz dWx0ID0gKHVpbnQzMl90KXRydW5jYXRlZDsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAg ICAgICAgaWYgKGludmFsaWQpIEZQU0NSXyB8PSAoMVVMTCA8PCA4KTsgIC8qIFZYQ1ZJOiBQUEMg Yml0IDIzIGluIGxvdy1oYWxmIGxheW91dCAqLworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQs IChpbnQ2NF90KSh1aW50NjRfdClyZXN1bHQpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQor KyAgICAgIGNhc2UgODQ2OiB7CisrICAgICAgICAvLyBmY2ZpZDogY29udmVydCBpbnQ2NCBpbiBG UFIgdG8gZG91YmxlCisrICAgICAgICBpbnQ2NF90IHZhbCA9IGdldEZwdVJlZ2lzdGVyKHJiKTsK KysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAoZG91YmxlKXZhbCk7CisrICAgICAg ICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSA5NzQ6IHsKKysgICAgICAgIC8vIGZjZmlk dTogY29udmVydCB1aW50NjQgaW4gRlBSIHRvIGRvdWJsZQorKyAgICAgICAgdWludDY0X3QgdmFs ID0gVTY0KGdldEZwdVJlZ2lzdGVyKHJiKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJs ZShydCwgKGRvdWJsZSl2YWwpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNh c2UgMTI6IHsKKysgICAgICAgIC8vIGZyc3A6IHJvdW5kIGRvdWJsZSB0byBzaW5nbGUgcHJlY2lz aW9uICh0aGVuIHJlLWV4dGVuZCBpbiBGUFIpLgorKyAgICAgICAgLy8gc05hTiBpbnB1dHMgYXJl IHF1aWV0ZWQgKHRoZSByZXN1bHQgcGF5bG9hZCBNU0IgaXMgc2V0KS4KKysgICAgICAgIC8vIHdh c20gZjMyLmRlbW90ZV9mNjQgbG93ZXJzIHRvIHRoaXMgb3Agd2hlbgorKyAgICAgICAgLy8gbm90 IHVzaW5nIHhzY3ZkcHNwIGRpcmVjdGx5LgorKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZwdVJl Z2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIGZsb2F0IHJlc3VsdCA9IGRlbW90ZURvdWJsZVBy ZXNlcnZpbmdOYU4oZnJiKTsKKysgICAgICAgIHVpbnQzMl90IGZiaXRzOworKyAgICAgICAgbWVt Y3B5KCZmYml0cywgJnJlc3VsdCwgc2l6ZW9mKGZiaXRzKSk7CisrICAgICAgICBpZiAoKGZiaXRz ICYgMHg3RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmCisrICAgICAgICAgICAgKGZiaXRzICYg MHgwMDdGRkZGRnUpICE9IDApIHsKKysgICAgICAgICAgZmJpdHMgfD0gMHgwMDQwMDAwMHU7Cisr ICAgICAgICAgIG1lbWNweSgmcmVzdWx0LCAmZmJpdHMsIHNpemVvZihyZXN1bHQpKTsKKysgICAg ICAgIH0KKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCBwcm9tb3RlRmxvYXRQcmVz ZXJ2aW5nTmFOKHJlc3VsdCkpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNh c2UgMzkyOiB7CisrICAgICAgICAvLyBmcmluOiByb3VuZCB0byBuZWFyZXN0IGludGVnZXIgKHRp ZXMgYXdheSBmcm9tIHplcm8pCisrICAgICAgICBkb3VibGUgZnJiID0gZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmIpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJvdW5kKGZyYikp OworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2UgNDI0OiB7CisrICAgICAg ICAvLyBmcml6OiByb3VuZCB0b3dhcmQgemVybworKyAgICAgICAgZG91YmxlIGZyYiA9IGdldEZw dVJlZ2lzdGVyRG91YmxlKHJiKTsKKysgICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCB0 cnVuYyhmcmIpKTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDQ1Njog eworKyAgICAgICAgLy8gZnJpcDogcm91bmQgdG93YXJkICtpbmZpbml0eSAoY2VpbCkuIFhPPTQ1 Ni4KKysgICAgICAgIGRvdWJsZSBmcmIgPSBnZXRGcHVSZWdpc3RlckRvdWJsZShyYik7CisrICAg ICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgY2VpbChmcmIpKTsKKysgICAgICAgIGJyZWFr OworKyAgICAgIH0KKysgICAgICBjYXNlIDQ4ODogeworKyAgICAgICAgLy8gZnJpbTogcm91bmQg dG93YXJkIC1pbmZpbml0eSAoZmxvb3IpLiBYTz00ODguCisrICAgICAgICBkb3VibGUgZnJiID0g Z2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUo cnQsIGZsb29yKGZyYikpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAgIGNhc2Ug NTgzOiB7CisrICAgICAgICAvLyBtZmZzOiBGUlQgPSBGUFNDUiAoYXMgZG91YmxlIGJpdCBwYXR0 ZXJuKQorKyAgICAgICAgc2V0RnB1UmVnaXN0ZXIocnQsIEk2NChGUFNDUl8pKTsKKysgICAgICAg IGJyZWFrOworKyAgICAgIH0KKysgICAgICAvLyBGUFNDUiBpcyB0cmVhdGVkIGFzIGEgMzItYml0 IHJlZ2lzdGVyIHN0b3JlZCBpbiB0aGUgbG93IDMyIGJpdHMgb2YKKysgICAgICAvLyBGUFNDUl8g KHVpbnQ2NF90KSwgd2l0aCBQUEMgYml0IG51bWJlcmluZzogUFBDIGJpdCBOICh3aGVyZSBiaXQg MCBpcworKyAgICAgIC8vIHRoZSBNU0IpIGxpdmVzIGF0IGludDY0IGJpdCAoMzEtTikuIEZpZWxk IEYgKDQgYml0cykgY292ZXJzIFBQQyBiaXRzCisrICAgICAgLy8gNEYuLjRGKzMg4oaSIGludDY0 IGJpdC1MU0IgKDI4LTRGKSB0byBiaXQtTVNCICgzMS00RikuIFRoaXMgbWF0Y2hlcworKyAgICAg IC8vIG1jcmZzLCBtdGZzZmksIGtGUFNDUlJOTWFzayAod2hpY2ggY2hlY2tzIGJpdHMgMzAtMzEg UFBDID0gaW50NjQgYml0cworKyAgICAgIC8vIDAtMSksIGFuZCBtZmZzICh3aGljaCBjb3BpZXMg RlBTQ1IgaW50byBGUFIgYml0cyAzMi4uNjMgUFBDID0gaW50NjQKKysgICAgICAvLyBiaXRzIDAu LjMxKS4gRWFybGllciBtdGZzYjAvbXRmc2IxIHVzZWQgKDYzLWJ0KSB3aGljaCBwbGFjZWQgYml0 cyBpbgorKyAgICAgIC8vIHRoZSBoaWdoIGhhbGYgb2YgRlBTQ1JfIHdoZXJlIG1jcmZzIGV0Yy4g d291bGQgbmV2ZXIgc2VlIHRoZW0g4oCUIHNvCisrICAgICAgLy8gdGhlIHdhc20gdHJhcCBzZXF1 ZW5jZSBgbXRmc2IwIDIzOyBmY3RpZHo7IG1jcmZzIGNyMCw1OyBidCBTTyxvb2xFbnRyeWAKKysg ICAgICAvLyBjb3VsZCBub3QgZGV0ZWN0IFZYQ1ZJLgorKyAgICAgIGNhc2UgNzA6IHsKKysgICAg ICAgIC8vIG10ZnNiMDogY2xlYXIgRlBTQ1IgYml0LiBYTz03MC4KKysgICAgICAgIC8vIChDYXNl cyAzOCBhbmQgNzAgaGFkIHRoZSBsYWJlbHMgc3dhcHBlZCwgc28gd2FzbSdzCisrICAgICAgICAv LyBgbXRmc2IwIDIzOyBmY3RpZHo7IG1jcmZzIGNyMCw1OyBidCBTTyx0cmFwYCBzZXF1ZW5jZSBh Y2NpZGVudGFsbHkKKysgICAgICAgIC8vIFNFVCBWWENWSSBiZWZvcmUgdGhlIGNvbnZlcnQgcmFu LCBjYXVzaW5nIGV2ZXJ5IGZjdGlkKiB0byB0cmFwLikKKysgICAgICAgIHVpbnQzMl90IGJ0ID0g aW5zdHItPnJ0VmFsdWUoKTsKKysgICAgICAgIEZQU0NSXyAmPSB+KDFVTEwgPDwgKDMxIC0gYnQp KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDY0OiB7CisrICAgICAg ICAvLyBtY3JmczogY29weSBGUFNDUiBmaWVsZCB0byBDUiBmaWVsZAorKyAgICAgICAgdWludDMy X3QgYmYgPSBpbnN0ci0+YmZWYWx1ZSgpOworKyAgICAgICAgdWludDMyX3QgYmZhID0gaW5zdHIt PmJpdHMoMjAsIDE4KTsKKysgICAgICAgIHVpbnQzMl90IHNoaWZ0ID0gNCAqICg3IC0gYmZhKTsK KysgICAgICAgIHVpbnQ4X3QgdmFsID0gKEZQU0NSXyA+PiBzaGlmdCkgJiAweEY7CisrICAgICAg ICBzZXRDUkZpZWxkKGJmLCB2YWwpOworKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICAg IGRlZmF1bHQ6CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICAg ICAiZGVjb2RlRlA6IG9wY29kZSA2MywgeG9feD0ldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhv X3gsCisrICAgICAgICAgICAgaW5zdHItPmluc3RydWN0aW9uQml0cygpKTsKKysgICAgfQorKyAg fSBlbHNlIGlmIChvcGNvZGUgPT0gNTkpIHsKKysgICAgLy8gQS1mb3JtIHNpbmdsZS1wcmVjaXNp b24gaW5zdHJ1Y3Rpb25zLgorKyAgICB1aW50MzJfdCB4b19hID0gaW5zdHItPmJpdHMoNSwgMSk7 CisrCisrICAgIHN3aXRjaCAoeG9fYSkgeworKyAgICAgIGNhc2UgMjE6IHsKKysgICAgICAgIC8v IGZhZGRzCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KShnZXRGcHVS ZWdpc3RlckRvdWJsZShyYSkgKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3Rl ckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBj YXNlIDIwOiB7CisrICAgICAgICAvLyBmc3VicworKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IChk b3VibGUpKChmbG9hdCkoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpIC0KKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOwor KyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBicmVh azsKKysgICAgICB9CisrICAgICAgY2FzZSAyNTogeworKyAgICAgICAgLy8gZm11bHM6IEZSVCA9 IChmbG9hdCkoRlJBICogRlJDKQorKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IChkb3VibGUpKChm bG9hdCkoZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmEpICoKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJjX3JlZykpKTsKKysgICAg ICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCByZXN1bHQpOworKyAgICAgICAgYnJlYWs7Cisr ICAgICAgfQorKyAgICAgIGNhc2UgMTg6IHsKKysgICAgICAgIC8vIGZkaXZzCisrICAgICAgICBk b3VibGUgcmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSkg LworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0 ZXJEb3VibGUocmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcmVzdWx0 KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBjYXNlIDIyOiB7CisrICAgICAg ICAvLyBmc3FydHMKKysgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoZG91YmxlKXNxcnRmKChmbG9h dClnZXRGcHVSZWdpc3RlckRvdWJsZShyYikpOworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3Vi bGUocnQsIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9CisrICAgICAgY2FzZSAy OTogeworKyAgICAgICAgLy8gZm1hZGRzCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0gKGRvdWJs ZSkoKGZsb2F0KXN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJhKSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3Vi bGUocmNfcmVnKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmIpKSk7CisrICAgICAgICBzZXRGcHVSZWdpc3Rl ckRvdWJsZShydCwgcmVzdWx0KTsKKysgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICAgICBj YXNlIDMwOiB7CisrICAgICAgICAvLyBmbm1zdWJzCisrICAgICAgICBkb3VibGUgcmVzdWx0ID0g KGRvdWJsZSkoLShmbG9hdClzdGQ6OmZtYShnZXRGcHVSZWdpc3RlckRvdWJsZShyYSksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGcHVSZWdp c3RlckRvdWJsZShyY19yZWcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLWdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOworKyAgICAgICAgc2V0 RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysgICAgICB9 CisrICAgICAgY2FzZSAyODogeworKyAgICAgICAgLy8gZm1zdWJzCisrICAgICAgICBkb3VibGUg cmVzdWx0ID0gKGRvdWJsZSkoKGZsb2F0KXN0ZDo6Zm1hKGdldEZwdVJlZ2lzdGVyRG91YmxlKHJh KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0 RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLWdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkpOworKyAgICAg ICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBicmVhazsKKysg ICAgICB9CisrICAgICAgY2FzZSAzMTogeworKyAgICAgICAgLy8gZm5tYWRkcworKyAgICAgICAg ZG91YmxlIHJlc3VsdCA9IChkb3VibGUpKC0oZmxvYXQpc3RkOjpmbWEoZ2V0RnB1UmVnaXN0ZXJE b3VibGUocmEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2V0RnB1UmVnaXN0ZXJEb3VibGUocmNfcmVnKSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJiKSkp OworKyAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlc3VsdCk7CisrICAgICAgICBi cmVhazsKKysgICAgICB9CisrICAgICAgZGVmYXVsdDogeworKyAgICAgICAgLy8gVHJ5IFgtZm9y bSBzdWItb3Bjb2RlcyBmb3Igb3Bjb2RlIDU5IChlLmcuLCBmY2ZpZHMsIGZjZmlkdXMpLgorKyAg ICAgICAgdWludDMyX3QgeG9feCA9IGluc3RyLT5iaXRzKDEwLCAxKTsKKysgICAgICAgIHN3aXRj aCAoeG9feCkgeworKyAgICAgICAgICBjYXNlIDg0NjogeworKyAgICAgICAgICAgIC8vIGZjZmlk czogY29udmVydCBpbnQ2NCB0byBmbG9hdCBzaW5nbGUgKHJlc3VsdCBzdG9yZWQgYXMgZG91Ymxl KQorKyAgICAgICAgICAgIGludDY0X3QgdmFsID0gZ2V0RnB1UmVnaXN0ZXIocmIpOworKyAgICAg ICAgICAgIHNldEZwdVJlZ2lzdGVyRG91YmxlKHJ0LCAoZG91YmxlKShmbG9hdCl2YWwpOworKyAg ICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrICAgICAgICAgIGNhc2UgOTc0OiB7Cisr ICAgICAgICAgICAgLy8gZmNmaWR1czogY29udmVydCB1aW50NjQgdG8gZmxvYXQgc2luZ2xlCisr ICAgICAgICAgICAgdWludDY0X3QgdmFsID0gVTY0KGdldEZwdVJlZ2lzdGVyKHJiKSk7CisrICAg ICAgICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIChkb3VibGUpKGZsb2F0KXZhbCk7Cisr ICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIH0KKysgICAgICAgICAgZGVmYXVsdDoKKysg ICAgICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICAgICAgICAgImRl Y29kZUZQOiBvcGNvZGUgNTksIHhvX2E9JXUgeG9feD0ldSIsIHhvX2EsIHhvX3gpOworKyAgICAg ICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgfQorKyAgICB9CisrICB9IGVsc2UgeworKyAg ICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlRlA6IG9wY29kZT0ldSIsIG9wY29kZSk7 CisrICB9CisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrLy8gZGVjb2RlVk1YOiBN YWpvciBvcGNvZGUgNCAoQWx0aVZlYy9WTVggdmVjdG9yIG9wcyBvbiBWUjAtVlIzMSkuCisrLy8K KysvLyBWUi1mb3JtIChWWC1mb3JtKTogYml0cyAwLTUgPSBwcmltYXJ5IG9wY29kZSAoNCksIGJp dHMgNi0xMCA9IFZSVCwKKysvLyBiaXRzIDExLTE1ID0gVlJBLCBiaXRzIDE2LTIwID0gVlJCLCBi aXRzIDIxLTMxID0gWE8gKDExIGJpdHMpLgorKy8vIFhPIGV4dHJhY3RlZCB2aWEgYGluc3RydWN0 aW9uQml0cygpICYgMHg3RkZgLgorKy8vCisrLy8gSGVscGVycyBiZWxvdyBwYWNrL3VucGFjayBl YWNoIFZSIHZpYSB0aGUgVlJyZWdpc3RlcnNfIGJ5dGUgc3RvcmFnZQorKy8vICgxNiBieXRlcywg YmlnLWVuZGlhbiBQUEMgbnVtYmVyaW5nOiBieXRlc1swXSBpcyB0aGUgbW9zdC1zaWduaWZpY2Fu dAorKy8vIGJ5dGUgb2YgdGhlIGFyY2hpdGVjdHVyYWwgcmVnaXN0ZXIsIGJ1dCBvbiBQUEM2NCBM RSB3YXNtIHRoZSBsYW5lCisrLy8gb3JkZXJpbmcgaXMgd2hhdCB0aGUgSklUIGV4cGVjdHMpLiBB bGwgb3BzIGhlcmUgdXNlIGJ5dGUtbGV2ZWwKKysvLyBhY2Nlc3NvcnMgZm9yIGNvbnNpc3RlbmN5 IHdpdGggdGhlIGV4aXN0aW5nIFZNWCBtZW1vcnkgb3BzLgorKworK3ZvaWQgU2ltdWxhdG9yOjpk ZWNvZGVWTVgoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICB1aW50MzJfdCB4byA9IGluc3Ry LT5pbnN0cnVjdGlvbkJpdHMoKSAmIDB4N0ZGdTsKKysgIHVpbnQzMl90IHZydCA9IGluc3RyLT5y dFZhbHVlKCk7ICAgLy8gYml0cyA2Li4xMAorKyAgdWludDMyX3QgdnJhID0gaW5zdHItPnJhVmFs dWUoKTsgICAvLyBiaXRzIDExLi4xNQorKyAgdWludDMyX3QgdnJiID0gaW5zdHItPnJiVmFsdWUo KTsgICAvLyBiaXRzIDE2Li4yMAorKyAgdWludDMyX3QgdWltbSA9IGluc3RyLT5yYVZhbHVlKCk7 ICAvLyBWQS1mb3JtOiA1LWJpdCBpbW1lZGlhdGUgYXQgYml0cyAxMS4uMTUKKysKKysgIHVpbnQ4 X3QgYVsxNl0sIGJbMTZdLCByWzE2XTsKKysgIGdldFZSQnl0ZXModnJhLCBhKTsKKysgIGdldFZS Qnl0ZXModnJiLCBiKTsKKysKKysgIC8vIEhlbHBlcnMgZm9yIHRyZWF0aW5nIHRoZSBieXRlIHN0 b3JhZ2UgYXMgdHlwZWQgbGFuZSBhcnJheXMuCisrICAvLyBUaGUgUFBDNjRMRSB3YXNtIFNJTUQg bG93ZXJpbmcgc3RvcmVzIGVhY2ggbGFuZSdzIGJ5dGVzIGluCisrICAvLyBsaXR0bGUtZW5kaWFu IG9yZGVyLCBzbyBsYW5lIGkgb2YgYW4gTi1ieXRlIGVsZW1lbnQgb2NjdXBpZXMgYnl0ZXMKKysg IC8vIChpKk4pIC4uIChpKk4gKyBOIC0gMSkgd2l0aCB0aGUgTFNCIGF0IGJ5dGUgKGkqTikuIEZv ciBleGFtcGxlLAorKyAgLy8gYSB2MTI4LmNvbnN0IGkzMng0IDB4MTIzNDU2NzggaGFzIGJ5dGVz IFs3OCA1NiAzNCAxMiDigKZdLgorKyAgI2RlZmluZSBMQU5FX1U4KGJ1ZiwgaSkgICgodWludDhf dCkoYnVmKVsoaSldKQorKyAgI2RlZmluZSBMQU5FX1M4KGJ1ZiwgaSkgICgoaW50OF90KShidWYp WyhpKV0pCisrICAjZGVmaW5lIExBTkVfVTE2KGJ1ZiwgaSkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorKyAgICAoKHVpbnQxNl90KSgodWludDE2X3QpKGJ1ZilbKGkpICog Ml0gfCAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQxNl90KShi dWYpWyhpKSAqIDIgKyAxXSA8PCA4KSkpCisrICAjZGVmaW5lIExBTkVfUzE2KGJ1ZiwgaSkgKChp bnQxNl90KUxBTkVfVTE2KGJ1ZiwgaSkpCisrICAjZGVmaW5lIExBTkVfVTMyKGJ1ZiwgaSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAoKHVpbnQzMl90KSgodWlu dDMyX3QpKGJ1ZilbKGkpICogNF0gfCAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAg ICAgICAoKHVpbnQzMl90KShidWYpWyhpKSAqIDQgKyAxXSA8PCA4KSB8ICAgICAgICAgXAorKyAg ICAgICAgICAgICAgICAoKHVpbnQzMl90KShidWYpWyhpKSAqIDQgKyAyXSA8PCAxNikgfCAgICAg ICAgXAorKyAgICAgICAgICAgICAgICAoKHVpbnQzMl90KShidWYpWyhpKSAqIDQgKyAzXSA8PCAy NCkpKQorKyAgI2RlZmluZSBMQU5FX1MzMihidWYsIGkpICgoaW50MzJfdClMQU5FX1UzMihidWYs IGkpKQorKyAgI2RlZmluZSBMQU5FX1U2NChidWYsIGkpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgKCh1aW50NjRfdCkoKHVpbnQ2NF90KShidWYpWyhpKSAqIDhd IHwgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVm KVsoaSkgKiA4ICsgMV0gPDwgOCkgfCAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKCh1aW50 NjRfdCkoYnVmKVsoaSkgKiA4ICsgMl0gPDwgMTYpIHwgICAgICAgIFwKKysgICAgICAgICAgICAg ICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgM10gPDwgMjQpIHwgICAgICAgIFwKKysgICAg ICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgNF0gPDwgMzIpIHwgICAgICAg IFwKKysgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsgNV0gPDwgNDAp IHwgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVsoaSkgKiA4ICsg Nl0gPDwgNDgpIHwgICAgICAgIFwKKysgICAgICAgICAgICAgICAgKCh1aW50NjRfdCkoYnVmKVso aSkgKiA4ICsgN10gPDwgNTYpKSkKKysgICNkZWZpbmUgTEFORV9TNjQoYnVmLCBpKSAoKGludDY0 X3QpTEFORV9VNjQoYnVmLCBpKSkKKysgICNkZWZpbmUgU0VUX0xBTkVfVTgoYnVmLCBpLCB2KSAg ZG8geyAoYnVmKVsoaSldID0gKHVpbnQ4X3QpKHYpOyB9IHdoaWxlICgwKQorKyAgI2RlZmluZSBT RVRfTEFORV9VMTYoYnVmLCBpLCB2KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorKyAgICAgIChidWYpWyhpKSAqIDJdICAgICA9ICh1aW50OF90KSgodWludDE2 X3QpKHYpICYgMHhGRik7ICAgICAgICAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogMiAr IDFdID0gKHVpbnQ4X3QpKCgodWludDE2X3QpKHYpID4+IDgpICYgMHhGRik7ICAgICAgICAgIFwK KysgICAgfSB3aGlsZSAoMCkKKysgICNkZWZpbmUgU0VUX0xBTkVfVTMyKGJ1ZiwgaSwgdikgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoYnVmKVso aSkgKiA0XSAgICAgPSAodWludDhfdCkoKHVpbnQzMl90KSh2KSAmIDB4RkYpOyAgICAgICAgICAg ICAgICAgXAorKyAgICAgIChidWYpWyhpKSAqIDQgKyAxXSA9ICh1aW50OF90KSgoKHVpbnQzMl90 KSh2KSA+PiA4KSAmIDB4RkYpOyAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogNCArIDJd ID0gKHVpbnQ4X3QpKCgodWludDMyX3QpKHYpID4+IDE2KSAmIDB4RkYpOyAgICAgICAgIFwKKysg ICAgICAoYnVmKVsoaSkgKiA0ICsgM10gPSAodWludDhfdCkoKCh1aW50MzJfdCkodikgPj4gMjQp ICYgMHhGRik7ICAgICAgICAgXAorKyAgICB9IHdoaWxlICgwKQorKyAgI2RlZmluZSBTRVRfTEFO RV9VNjQoYnVmLCBpLCB2KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorKyAgICAgIChidWYpWyhpKSAqIDhdICAgICA9ICh1aW50OF90KSgodWludDY0X3QpKHYp ICYgMHhGRik7ICAgICAgICAgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkpICogOCArIDFdID0g KHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDgpICYgMHhGRik7ICAgICAgICAgIFwKKysgICAg ICAoYnVmKVsoaSkgKiA4ICsgMl0gPSAodWludDhfdCkoKCh1aW50NjRfdCkodikgPj4gMTYpICYg MHhGRik7ICAgICAgICAgXAorKyAgICAgIChidWYpWyhpKSAqIDggKyAzXSA9ICh1aW50OF90KSgo KHVpbnQ2NF90KSh2KSA+PiAyNCkgJiAweEZGKTsgICAgICAgICBcCisrICAgICAgKGJ1ZilbKGkp ICogOCArIDRdID0gKHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDMyKSAmIDB4RkYpOyAgICAg ICAgIFwKKysgICAgICAoYnVmKVsoaSkgKiA4ICsgNV0gPSAodWludDhfdCkoKCh1aW50NjRfdCko dikgPj4gNDApICYgMHhGRik7ICAgICAgICAgXAorKyAgICAgIChidWYpWyhpKSAqIDggKyA2XSA9 ICh1aW50OF90KSgoKHVpbnQ2NF90KSh2KSA+PiA0OCkgJiAweEZGKTsgICAgICAgICBcCisrICAg ICAgKGJ1ZilbKGkpICogOCArIDddID0gKHVpbnQ4X3QpKCgodWludDY0X3QpKHYpID4+IDU2KSAm IDB4RkYpOyAgICAgICAgIFwKKysgICAgfSB3aGlsZSAoMCkKKysKKysgIC8vIC0tLSBWQS1mb3Jt IHByZS1kaXNwYXRjaCAtLS0KKysgIC8vCisrICAvLyBWQS1mb3JtIGhhcyBhIDYtYml0IFhPIGF0 IGJpdHMgMjYtMzEgYW5kIGEgNS1iaXQgVlJDIGF0IGJpdHMgMjEtMjUuCisrICAvLyBkZWNvZGVW TVgncyAxMS1iaXQgWE8gbWFzayBjb25mbGF0ZXMgVlJDIHdpdGgKKysgIC8vIFhPLCBzbyBhIHBs YWluIGBzd2l0Y2ggKHhvKWAgb3ZlciAxMS1iaXQgdmFsdWVzIG9ubHkgbWF0Y2hlcyB3aGVuCisr ICAvLyBWUkMgPT0gMC4gUGVlbCBvZmYgdGhlIHRocmVlIFZBLWZvcm0gb3BzIGFjdHVhbGx5IHVz ZWQgYnkgdGhlIEpJVAorKyAgLy8gKHZtbGFkZHVobSwgdnNlbCwgdnBlcm0pIGJlZm9yZSB0aGUg bWFpbiBzd2l0Y2ggc28gYW55IFZSQyB2YWx1ZQorKyAgLy8gd29ya3MuIHZzbGRvaSAoWE89NDQp IGlzIFZYLWZvcm0gd2l0aCBTSCBhdCBiaXRzIDIyLTI1LCBub3QgVkEg4oCUCisrICAvLyBoYW5k bGVkIGluIHRoZSBzd2l0Y2ggYmVsb3cuCisrICB7CisrICAgIHVpbnQzMl90IHZhX3hvID0geG8g JiAweDNGdTsKKysgICAgaWYgKHZhX3hvID09IDMyIHx8IHZhX3hvID09IDMzIHx8IHZhX3hvID09 IDM0IHx8IHZhX3hvID09IDM4IHx8CisrICAgICAgICB2YV94byA9PSA0MCB8fCB2YV94byA9PSA0 MiB8fCB2YV94byA9PSA0MykgeworKyAgICAgIHVpbnQzMl90IHZyYyA9IChpbnN0ci0+aW5zdHJ1 Y3Rpb25CaXRzKCkgPj4gNikgJiAweDFGOworKyAgICAgIHVpbnQ4X3QgY3ZbMTZdOworKyAgICAg IGdldFZSQnl0ZXModnJjLCBjdik7CisrICAgICAgaWYgKHZhX3hvID09IDMyKSB7CisrICAgICAg ICAvLyB2bWhhZGRzaHMgVlQsVkEsVkIsVkMgOiBWVFtpXSA9IHNhdF9zMTYoCisrICAgICAgICAv LyAgIChzMzIpVkEuaFtpXSAqIChzMzIpVkIuaFtpXSA+PiAxNSArIChzMzIpVkMuaFtpXSkKKysg ICAgICAgIC8vIChubyByb3VuZGluZyB0ZXJtIOKAlCB1c2Ugdm1ocmFkZHNocyBmb3IgdGhlIHJv dW5kZWQgZm9ybSkuCisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAg ICAgICAgICBpbnQzMl90IHByb2QgPSAoaW50MzJfdClMQU5FX1MxNihhLCBpKSAqIChpbnQzMl90 KUxBTkVfUzE2KGIsIGkpOworKyAgICAgICAgICBpbnQzMl90IHN1bSA9IChwcm9kID4+IDE1KSAr IChpbnQzMl90KUxBTkVfUzE2KGN2LCBpKTsKKysgICAgICAgICAgaWYgKHN1bSA+IElOVDE2X01B WCkgc3VtID0gSU5UMTZfTUFYOworKyAgICAgICAgICBpZiAoc3VtIDwgSU5UMTZfTUlOKSBzdW0g PSBJTlQxNl9NSU47CisrICAgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3QpKGlu dDE2X3Qpc3VtKTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgaWYgKHZhX3hvID09IDMzKSB7 CisrICAgICAgICAvLyB2bWhyYWRkc2hzIFZULFZBLFZCLFZDIDogcm91bmRlZCBRMTUgbXVsdGlw bHktYWRkLXNhdHVyYXRlLgorKyAgICAgICAgLy8gICBWVFtpXSA9IHNhdF9zMTYoKChzMzIpVkEu aFtpXSAqIChzMzIpVkIuaFtpXSArIDB4NDAwMCkKKysgICAgICAgIC8vICAgICAgICAgICAgICAg ICAgID4+IDE1ICsgKHMzMilWQy5oW2ldKQorKyAgICAgICAgLy8gVXNlZCBieSB3YXNtIGkxNng4 LnExNW11bHJfc2F0X3MgKFZDIGlzIHplcm8pLgorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA4OyBpKyspIHsKKysgICAgICAgICAgaW50MzJfdCBwcm9kID0gKGludDMyX3QpTEFORV9TMTYo YSwgaSkgKiAoaW50MzJfdClMQU5FX1MxNihiLCBpKTsKKysgICAgICAgICAgaW50MzJfdCBzdW0g PSAoKHByb2QgKyAweDQwMDApID4+IDE1KSArIChpbnQzMl90KUxBTkVfUzE2KGN2LCBpKTsKKysg ICAgICAgICAgaWYgKHN1bSA+IElOVDE2X01BWCkgc3VtID0gSU5UMTZfTUFYOworKyAgICAgICAg ICBpZiAoc3VtIDwgSU5UMTZfTUlOKSBzdW0gPSBJTlQxNl9NSU47CisrICAgICAgICAgIFNFVF9M QU5FX1UxNihyLCBpLCAodWludDE2X3QpKGludDE2X3Qpc3VtKTsKKysgICAgICAgIH0KKysgICAg ICB9IGVsc2UgaWYgKHZhX3hvID09IDM0KSB7CisrICAgICAgICAvLyB2bWxhZGR1aG0gVlQsVkEs VkIsVkMgOiBWVCA9IGxvdzE2KFZBKlZCICsgVkMpCisrICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDg7IGkrKykgeworKyAgICAgICAgICB1aW50MTZfdCBwcm9kID0gTEFORV9VMTYoYSwgaSkg KiBMQU5FX1UxNihiLCBpKTsKKysgICAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHByb2QgKyBM QU5FX1UxNihjdiwgaSkpOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSBpZiAodmFfeG8gPT0g NDApIHsKKysgICAgICAgIC8vIHZtc3Vtc2htIFZULFZBLFZCLFZDIDogcGFpcndpc2UgbXVsdGlw bHktc3VtIG9mIHNpZ25lZCBoYWxmd29yZHMKKysgICAgICAgIC8vIGludG8gaTMyIGxhbmVzLCBt b2R1bG8gaTMyIHdyYXAuCisrICAgICAgICAvLyAgIFZULmkzMltrXSA9IFZDLmkzMltrXSArIFZB LmkxNlsya10qVkIuaTE2WzJrXQorKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg KyBWQS5pMTZbMmsrMV0qVkIuaTE2WzJrKzFdCisrICAgICAgICAvLyBVc2VkIGJ5IHdhc20gaTMy eDQuZG90X2kxNng4X3Mgd2l0aCBWQyA9IDAsIGFuZCBieQorKyAgICAgICAgLy8gaTMyeDQuZXh0 YWRkX3BhaXJ3aXNlX2kxNng4X3Mgd2l0aCBWQiA9IHNwbGF0KDEpIGFuZCBWQyA9IDAuCisrICAg ICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykgeworKyAgICAgICAgICBpbnQzMl90IGEw ID0gKGludDMyX3QpTEFORV9TMTYoYSwgMiAqIGspOworKyAgICAgICAgICBpbnQzMl90IGExID0g KGludDMyX3QpTEFORV9TMTYoYSwgMiAqIGsgKyAxKTsKKysgICAgICAgICAgaW50MzJfdCBiMCA9 IChpbnQzMl90KUxBTkVfUzE2KGIsIDIgKiBrKTsKKysgICAgICAgICAgaW50MzJfdCBiMSA9IChp bnQzMl90KUxBTkVfUzE2KGIsIDIgKiBrICsgMSk7CisrICAgICAgICAgIGludDMyX3QgYyAgPSBM QU5FX1MzMihjdiwgayk7CisrICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gKGludDMyX3QpKCh1 aW50MzJfdCljICsgKHVpbnQzMl90KShhMCAqIGIwKSArCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdCkoYTEgKiBiMSkpOworKyAgICAgICAgICBTRVRfTEFO RV9VMzIociwgaywgKHVpbnQzMl90KXJlc3VsdCk7CisrICAgICAgICB9CisrICAgICAgfSBlbHNl IGlmICh2YV94byA9PSAzOCkgeworKyAgICAgICAgLy8gdm1zdW11aG0gVlQsVkEsVkIsVkMgOiBz YW1lIGFzIHZtc3Vtc2htIGJ1dCB1bnNpZ25lZCBoYWxmd29yZHMuCisrICAgICAgICAvLyAgIFZU LnUzMltrXSA9IFZDLnUzMltrXSArIFZBLnUxNlsya10qVkIudTE2WzJrXQorKyAgICAgICAgLy8g ICAgICAgICAgICAgICAgICAgICAgICAgKyBWQS51MTZbMmsrMV0qVkIudTE2WzJrKzFdCisrICAg ICAgICAvLyBVc2VkIGJ5IHdhc20gaTMyeDQuZXh0YWRkX3BhaXJ3aXNlX2kxNng4X3Ugd2l0aCBW QiA9IHNwbGF0KDEpCisrICAgICAgICAvLyBhbmQgVkMgPSAwLgorKyAgICAgICAgZm9yIChpbnQg ayA9IDA7IGsgPCA0OyBrKyspIHsKKysgICAgICAgICAgdWludDMyX3QgYTAgPSAodWludDMyX3Qp TEFORV9VMTYoYSwgMiAqIGspOworKyAgICAgICAgICB1aW50MzJfdCBhMSA9ICh1aW50MzJfdClM QU5FX1UxNihhLCAyICogayArIDEpOworKyAgICAgICAgICB1aW50MzJfdCBiMCA9ICh1aW50MzJf dClMQU5FX1UxNihiLCAyICogayk7CisrICAgICAgICAgIHVpbnQzMl90IGIxID0gKHVpbnQzMl90 KUxBTkVfVTE2KGIsIDIgKiBrICsgMSk7CisrICAgICAgICAgIHVpbnQzMl90IGMgID0gTEFORV9V MzIoY3YsIGspOworKyAgICAgICAgICB1aW50MzJfdCByZXN1bHQgPSBjICsgYTAgKiBiMCArIGEx ICogYjE7CisrICAgICAgICAgIFNFVF9MQU5FX1UzMihyLCBrLCByZXN1bHQpOworKyAgICAgICAg fQorKyAgICAgIH0gZWxzZSBpZiAodmFfeG8gPT0gNDIpIHsKKysgICAgICAgIC8vIHZzZWwgVlQs VkEsVkIsVkMgOiBWVFtpXSA9IChWQ1tpXSAmIFZCW2ldKSB8ICh+VkNbaV0gJiBWQVtpXSkKKysg ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgICByW2ldID0g KHVpbnQ4X3QpKChjdltpXSAmIGJbaV0pIHwgKH5jdltpXSAmIGFbaV0pKTsKKysgICAgICAgIH0K KysgICAgICB9IGVsc2UgeworKyAgICAgICAgLy8gdnBlcm0gVlQsVkEsVkIsVkM7IGVtcGlyaWNh bCBMRToKKysgICAgICAgIC8vICAgcltMRV9pXSA9IChWQ1tMRV9pXSA8IDE2KSA/IFZBW0xFXygx NS1WQ1tpXSldCisrICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWQltM RV8oMzEtVkNbaV0pXQorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7Cisr ICAgICAgICAgIHVpbnQ4X3QgaWR4ID0gY3ZbaV0gJiAweDFGOworKyAgICAgICAgICByW2ldID0g KGlkeCA8IDE2KSA/IGFbMTUgLSBpZHhdIDogYlszMSAtIGlkeF07CisrICAgICAgICB9CisrICAg ICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsKKysgICAgICBnb3RvIHZteF9kb25lOwor KyAgICB9CisrICB9CisrCisrICBzd2l0Y2ggKHhvKSB7CisrICAgIC8vID09PSBJbnRlZ2VyIGFk ZCAobW9kdWxvKSA9PT0KKysgICAgY2FzZSAwOiAgICAvLyB2YWRkdWJtCisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5F X1U4KGEsIGkpICsgTEFORV9VOChiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNjQ6ICAgLy8gdmFkZHVobQorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFO RV9VMTYoYSwgaSkgKyBMQU5FX1UxNihiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0 ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMTI4OiAgLy8gdmFkZHV3bQorKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwg TEFORV9VMzIoYSwgaSkgKyBMQU5FX1UzMihiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMTkyOiAgLy8gdmFkZHVkbQorKyAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwg aSwgTEFORV9VNjQoYSwgaSkgKyBMQU5FX1U2NChiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBJbnRlZ2VyIHN1YiAobW9k dWxvKSA9PT0KKysgICAgY2FzZSAxMDI0OiAvLyB2c3VidWJtCisrICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VOChyLCBpLCBMQU5FX1U4KGEs IGkpIC0gTEFORV9VOChiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCBy KTsgYnJlYWs7CisrICAgIGNhc2UgMTA4ODogLy8gdnN1YnVobQorKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYo YSwgaSkgLSBMQU5FX1UxNihiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMTE1MjogLy8gdnN1YnV3bQorKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgTEFORV9V MzIoYSwgaSkgLSBMQU5FX1UzMihiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgMTIxNjogLy8gdnN1YnVkbQorKyAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgTEFO RV9VNjQoYSwgaSkgLSBMQU5FX1U2NChiLCBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0 ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBJbnRlZ2VyIGFkZCAoc2F0dXJhdGlu Zywgc2lnbmVkKSA9PT0KKysgICAgY2FzZSA3Njg6ICAvLyB2YWRkc2JzCisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9TOChh LCBpKSArIChpbnQpTEFORV9TOChiLCBpKTsKKysgICAgICAgIGlmIChzID4gSU5UOF9NQVgpIHMg PSBJTlQ4X01BWDsKKysgICAgICAgIGlmIChzIDwgSU5UOF9NSU4pIHMgPSBJTlQ4X01JTjsKKysg ICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KXMpOworKyAgICAgIH0KKysgICAgICBz ZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDgzMjogIC8vIHZhZGRzaHMKKysg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgaW50IHMgPSAoaW50 KUxBTkVfUzE2KGEsIGkpICsgKGludClMQU5FX1MxNihiLCBpKTsKKysgICAgICAgIGlmIChzID4g SU5UMTZfTUFYKSBzID0gSU5UMTZfTUFYOworKyAgICAgICAgaWYgKHMgPCBJTlQxNl9NSU4pIHMg PSBJTlQxNl9NSU47CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQxNl90KXMpOwor KyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDg5 NjogIC8vIHZhZGRzd3MKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAg ICAgICAgaW50NjRfdCBzID0gKGludDY0X3QpTEFORV9TMzIoYSwgaSkgKyAoaW50NjRfdClMQU5F X1MzMihiLCBpKTsKKysgICAgICAgIGlmIChzID4gSU5UMzJfTUFYKSBzID0gSU5UMzJfTUFYOwor KyAgICAgICAgaWYgKHMgPCBJTlQzMl9NSU4pIHMgPSBJTlQzMl9NSU47CisrICAgICAgICBTRVRf TEFORV9VMzIociwgaSwgKHVpbnQzMl90KXMpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVz KHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0gSW50ZWdlciBhZGQgKHNhdHVyYXRpbmcs IHVuc2lnbmVkKSA9PT0KKysgICAgY2FzZSA1MTI6ICAvLyB2YWRkdWJzCisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICB1bnNpZ25lZCBzID0gKHVuc2lnbmVk KUxBTkVfVTgoYSwgaSkgKyAodW5zaWduZWQpTEFORV9VOChiLCBpKTsKKysgICAgICAgIGlmIChz ID4gVUlOVDhfTUFYKSBzID0gVUlOVDhfTUFYOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwg KHVpbnQ4X3Qpcyk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 CisrICAgIGNhc2UgNTc2OiAgLy8gdmFkZHVocworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ODsgaSsrKSB7CisrICAgICAgICB1bnNpZ25lZCBzID0gKHVuc2lnbmVkKUxBTkVfVTE2KGEsIGkp ICsgKHVuc2lnbmVkKUxBTkVfVTE2KGIsIGkpOworKyAgICAgICAgaWYgKHMgPiBVSU5UMTZfTUFY KSBzID0gVUlOVDE2X01BWDsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWludDE2X3Qp cyk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNh c2UgNjQwOiAgLy8gdmFkZHV3cworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7 CisrICAgICAgICB1aW50NjRfdCBzID0gKHVpbnQ2NF90KUxBTkVfVTMyKGEsIGkpICsgKHVpbnQ2 NF90KUxBTkVfVTMyKGIsIGkpOworKyAgICAgICAgaWYgKHMgPiBVSU5UMzJfTUFYKSBzID0gVUlO VDMyX01BWDsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCAodWludDMyX3Qpcyk7CisrICAg ICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBJ bnRlZ2VyIHN1YiAoc2F0dXJhdGluZywgc2lnbmVkKSA9PT0KKysgICAgY2FzZSAxNzkyOiAvLyB2 c3Vic2JzCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBp bnQgcyA9IChpbnQpTEFORV9TOChhLCBpKSAtIChpbnQpTEFORV9TOChiLCBpKTsKKysgICAgICAg IGlmIChzID4gSU5UOF9NQVgpIHMgPSBJTlQ4X01BWDsKKysgICAgICAgIGlmIChzIDwgSU5UOF9N SU4pIHMgPSBJTlQ4X01JTjsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KXMp OworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNl IDE4NTY6IC8vIHZzdWJzaHMKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewor KyAgICAgICAgaW50IHMgPSAoaW50KUxBTkVfUzE2KGEsIGkpIC0gKGludClMQU5FX1MxNihiLCBp KTsKKysgICAgICAgIGlmIChzID4gSU5UMTZfTUFYKSBzID0gSU5UMTZfTUFYOworKyAgICAgICAg aWYgKHMgPCBJTlQxNl9NSU4pIHMgPSBJTlQxNl9NSU47CisrICAgICAgICBTRVRfTEFORV9VMTYo ciwgaSwgKHVpbnQxNl90KXMpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7 IGJyZWFrOworKworKyAgICAvLyA9PT0gSW50ZWdlciBzdWIgKHNhdHVyYXRpbmcsIHVuc2lnbmVk KSA9PT0KKysgICAgY2FzZSAxNTM2OiAvLyB2c3VidWJzCisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBpbnQgcyA9IChpbnQpTEFORV9VOChhLCBpKSAtIChp bnQpTEFORV9VOChiLCBpKTsKKysgICAgICAgIGlmIChzIDwgMCkgcyA9IDA7CisrICAgICAgICBT RVRfTEFORV9VOChyLCBpLCAodWludDhfdClzKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxNjAwOiAvLyB2c3VidWhzCisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIGludCBzID0gKGludClMQU5FX1Ux NihhLCBpKSAtIChpbnQpTEFORV9VMTYoYiwgaSk7CisrICAgICAgICBpZiAocyA8IDApIHMgPSAw OworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdClzKTsKKysgICAgICB9Cisr ICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IEF2ZXJhZ2Ug dW5zaWduZWQgKHJvdW5kZWQ6IChhK2IrMSk+PjEpID09PQorKyAgICBjYXNlIDEwMjY6IC8vIHZh dmd1YgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VU X0xBTkVfVTgociwgaSwKKysgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQpTEFORV9VOChh LCBpKSArIExBTkVfVTgoYiwgaSkgKyAxKSA+PiAxKTsKKysgICAgICB9CisrICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMDkwOiAvLyB2YXZndWgKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGks CisrICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZClMQU5FX1UxNihhLCBpKSArIExBTkVf VTE2KGIsIGkpICsgMSkgPj4gMSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCBy KTsgYnJlYWs7CisrCisrICAgIC8vID09PSBWZWN0b3IgbXVsdGlwbHkgcGVyLWxhbmUgKGkzMng0 Lm11bCkgPT09CisrICAgIGNhc2UgMTM3OiB7IC8vIHZtdWx1d206IHBlci1sYW5lIGkzMiBtdWx0 aXBseSAobG93IDMyIGJpdHMpCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsK KysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1UzMihhLCBpKSAqIExBTkVfVTMyKGIs IGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAg fQorKworKyAgICAvLyA9PT0gUE9XRVIxMCB2bXVsbGQ6IHBlci1sYW5lIGk2NCBtdWx0aXBseSAo bG93IDY0IGJpdHMpID09PQorKyAgICBjYXNlIDQ1NzogeworKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMjsgaSsrKSB7CisrICAgICAgICB1aW50NjRfdCBhdiA9IDAsIGJ2ID0gMDsKKysgICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisrICAgICAgICAgIGF2IHw9ICgodWlu dDY0X3QpYVtpICogOCArIGpdKSA8PCAoaiAqIDgpOworKyAgICAgICAgICBidiB8PSAoKHVpbnQ2 NF90KWJbaSAqIDggKyBqXSkgPDwgKGogKiA4KTsKKysgICAgICAgIH0KKysgICAgICAgIHVpbnQ2 NF90IHByb2QgPSBhdiAqIGJ2OyAgLy8gbG93IDY0IGJpdHMsIG1vZHVsbyB3cmFwCisrICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IDg7IGorKykgeworKyAgICAgICAgICByW2kgKiA4ICsgal0g PSAodWludDhfdCkocHJvZCA+PiAoaiAqIDgpKTsKKysgICAgICAgIH0KKysgICAgICB9CisrICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gdm11 bGUvdm11bG8qIChtdWx0aXBseSBldmVuL29kZCBsYW5lcywgd2lkZW5pbmcpID09PQorKyAgICAv LworKyAgICAvLyBBbGwgWE8gdmFsdWVzIGJlbG93IHdlcmUgdmVyaWZpZWQgYnkgZGlzYXNzZW1i bGluZyB0aGUKKysgICAgLy8gUFBDX3ZtdWxlKi9QUENfdm11bG8qIGNvbnN0YW50cyBmcm9tIEFz c2VtYmxlci1wcGM2NC5oIHdpdGgKKysgICAgLy8gYGFzIC1tcHBjNjQgLW1saXR0bGVgICsgYG9i amR1bXAgLU1wb3dlcjkgLWRgLiBUaGUgcHJldmlvdXMKKysgICAgLy8gdmVyc2lvbiBoYWQgYWxs IDEyIFhPIGxhYmVscyBzd2FwcGVkIHdpdGggZWFjaCBvdGhlcidzIHNlbWFudGljCisrICAgIC8v IHBhaXIgKHNvIHRoZSBKSVQncyB2bXVsZXNiIHdhcyBkZWNvZGVkIGFzIHZtdWxvc2IgYW5kIHZp Y2UKKysgICAgLy8gdmVyc2EpLCBjYXVzaW5nIGk4eDE24oaSaTE2eDggZXh0bXVsIHRvIHByb2R1 Y2Ugd3JvbmcgaGFsZndvcmRzLgorKyAgICAvLworKyAgICAvLyAgIFBQQ192bXVsb3ViID0gMHgx MDAwMDAwOCDihpIgWE89OCAgICAgdm11bG91YiAoTEUgZXZlbi1ieXRlIHBhaXJzKQorKyAgICAv LyAgIFBQQ192bXVsb3VoID0gMHgxMDAwMDA0OCDihpIgWE89NzIgICAgdm11bG91aAorKyAgICAv LyAgIFBQQ192bXVsb3V3ID0gMHgxMDAwMDA4OCDihpIgWE89MTM2ICAgdm11bG91dworKyAgICAv LyAgIFBQQ192bXVsb3NiID0gMHgxMDAwMDEwOCDihpIgWE89MjY0ICAgdm11bG9zYgorKyAgICAv LyAgIFBQQ192bXVsb3NoID0gMHgxMDAwMDE0OCDihpIgWE89MzI4ICAgdm11bG9zaAorKyAgICAv LyAgIFBQQ192bXVsb3N3ID0gMHgxMDAwMDE4OCDihpIgWE89MzkyICAgdm11bG9zdworKyAgICAv LyAgIFBQQ192bXVsZXViID0gMHgxMDAwMDIwOCDihpIgWE89NTIwICAgdm11bGV1YiAoTEUgb2Rk LWJ5dGUgcGFpcnMpCisrICAgIC8vICAgUFBDX3ZtdWxldWggPSAweDEwMDAwMjQ4IOKGkiBYTz01 ODQgICB2bXVsZXVoCisrICAgIC8vICAgUFBDX3ZtdWxldXcgPSAweDEwMDAwMjg4IOKGkiBYTz02 NDggICB2bXVsZXV3CisrICAgIC8vICAgUFBDX3ZtdWxlc2IgPSAweDEwMDAwMzA4IOKGkiBYTz03 NzYgICB2bXVsZXNiCisrICAgIC8vICAgUFBDX3ZtdWxlc2ggPSAweDEwMDAwMzQ4IOKGkiBYTz04 NDAgICB2bXVsZXNoCisrICAgIC8vICAgUFBDX3ZtdWxlc3cgPSAweDEwMDAwMzg4IOKGkiBYTz05 MDQgICB2bXVsZXN3CisrICAgIC8vCisrICAgIC8vIExhbmUgaW5kZXhpbmcgb24gTEUgc3RvcmFn ZTogIkJFLWV2ZW4gYnl0ZSBpIiBpcyBzdG9yZWQgYXQgTEUKKysgICAgLy8gYnl0ZSBpbmRleCAo MTUgLSAyaSk7IHNpbmNlIG91ciBMQU5FX1M4IHVzZXMgTEUgYnl0ZSBpbmRleCwgdGhlCisrICAg IC8vICJCRS1ldmVuIiA9ICJMRS1vZGQiIG1hcHBpbmcgZ2l2ZXMgYDIqaSArIDFgIGZvciB2bXVs ZSwgYDIqaWAKKysgICAgLy8gZm9yIHZtdWxvLiBUaGUgSklUJ3MgZXh0bXVsIGhlbHBlcnMgZW1p dCBgdm11bGVzYiArIHZtdWxvc2IgKworKyAgICAvLyB2bXJnbGhgIHRvIHBhY2sgYm90aCBoYWx2 ZXM7IGdldHRpbmcgdGhlIHNlbWFudGljcyBzd2FwcGVkIGhlcmUKKysgICAgLy8gcHJvZHVjZXMg dGhlIHJpZ2h0IHJlc3VsdCByZWdpc3RlciBidXQgd2l0aCB0aGUgaGFsdmVzIGluIHRoZQorKyAg ICAvLyB3cm9uZyBtZXJnZSBvcmRlciwgYnJlYWtpbmcgZXh0bXVsLgorKyAgICBjYXNlIDc3Njog eyAvLyB2bXVsZXNiOiBzaWduZWQgQkUtZXZlbiBieXRlIOKGkiBoYWxmd29yZCAoOCByZXN1bHRz KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFO RV9VMTYociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAoaW50MTZfdClMQU5FX1M4KGEsIDIg KiBpICsgMSkgKgorKyAgICAgICAgICAgICAgICAgICAgIChpbnQxNl90KUxBTkVfUzgoYiwgMiAq IGkgKyAxKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7Cisr ICAgIH0KKysgICAgY2FzZSA1MjA6IHsgLy8gdm11bGV1YjogdW5zaWduZWQgQkUtZXZlbiBieXRl IOKGkiBoYWxmd29yZAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAg ICAgICBTRVRfTEFORV9VMTYociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAodWludDE2X3Qp TEFORV9VOChhLCAyICogaSArIDEpICoKKysgICAgICAgICAgICAgICAgICAgICAodWludDE2X3Qp TEFORV9VOChiLCAyICogaSArIDEpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQs IHIpOyBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDg0MDogeyAvLyB2bXVsZXNoOiBzaWduZWQg QkUtZXZlbiBoYWxmd29yZCDihpIgd29yZAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg aSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKKysgICAgICAgICAgICAgICAgICAg ICAoaW50MzJfdClMQU5FX1MxNihhLCAyICogaSArIDEpICoKKysgICAgICAgICAgICAgICAgICAg ICAoaW50MzJfdClMQU5FX1MxNihiLCAyICogaSArIDEpKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDU4NDogeyAvLyB2bXVs ZXVoOiB1bnNpZ25lZCBCRS1ldmVuIGhhbGZ3b3JkIOKGkiB3b3JkCisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAorKyAgICAg ICAgICAgICAgICAgICAgICh1aW50MzJfdClMQU5FX1UxNihhLCAyICogaSArIDEpICoKKysgICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QpTEFORV9VMTYoYiwgMiAqIGkgKyAxKSk7CisrICAg ICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2Fz ZSA5MDQ6IHsgLy8gdm11bGVzdzogc2lnbmVkIEJFLWV2ZW4gd29yZCDihpIgZHdvcmQgKFBPV0VS OCkKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xB TkVfVTY0KHIsIGksCisrICAgICAgICAgICAgICAgICAgICAgKGludDY0X3QpTEFORV9TMzIoYSwg MiAqIGkgKyAxKSAqCisrICAgICAgICAgICAgICAgICAgICAgKGludDY0X3QpTEFORV9TMzIoYiwg MiAqIGkgKyAxKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 CisrICAgIH0KKysgICAgY2FzZSA2NDg6IHsgLy8gdm11bGV1dzogdW5zaWduZWQgQkUtZXZlbiB3 b3JkIOKGkiBkd29yZCAoUE9XRVI4KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAo dWludDY0X3QpTEFORV9VMzIoYSwgMiAqIGkgKyAxKSAqCisrICAgICAgICAgICAgICAgICAgICAg KHVpbnQ2NF90KUxBTkVfVTMyKGIsIDIgKiBpICsgMSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMjY0OiB7IC8vIHZtdWxv c2I6IHNpZ25lZCBCRS1vZGQgYnl0ZSDihpIgaGFsZndvcmQKKysgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksCisrICAgICAgICAg ICAgICAgICAgICAgKGludDE2X3QpTEFORV9TOChhLCAyICogaSkgKgorKyAgICAgICAgICAgICAg ICAgICAgIChpbnQxNl90KUxBTkVfUzgoYiwgMiAqIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDg6IHsgLy8gdm11bG91 YjogdW5zaWduZWQgQkUtb2RkIGJ5dGUKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkr KykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksCisrICAgICAgICAgICAgICAgICAgICAg KHVpbnQxNl90KUxBTkVfVTgoYSwgMiAqIGkpICoKKysgICAgICAgICAgICAgICAgICAgICAodWlu dDE2X3QpTEFORV9VOChiLCAyICogaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzI4OiB7IC8vIHZtdWxvc2g6IHNpZ25l ZCBCRS1vZGQgaGFsZndvcmQg4oaSIHdvcmQKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksCisrICAgICAgICAgICAgICAgICAg ICAgKGludDMyX3QpTEFORV9TMTYoYSwgMiAqIGkpICoKKysgICAgICAgICAgICAgICAgICAgICAo aW50MzJfdClMQU5FX1MxNihiLCAyICogaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVz KHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNzI6IHsgLy8gdm11bG91aDogdW5z aWduZWQgQkUtb2RkIGhhbGZ3b3JkIOKGkiB3b3JkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAorKyAgICAgICAgICAgICAg ICAgICAgICh1aW50MzJfdClMQU5FX1UxNihhLCAyICogaSkgKgorKyAgICAgICAgICAgICAgICAg ICAgICh1aW50MzJfdClMQU5FX1UxNihiLCAyICogaSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgMzkyOiB7IC8vIHZtdWxv c3c6IHNpZ25lZCBCRS1vZGQgd29yZAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsr KSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAgICAgICAgICAgICAgICAo aW50NjRfdClMQU5FX1MzMihhLCAyICogaSkgKgorKyAgICAgICAgICAgICAgICAgICAgIChpbnQ2 NF90KUxBTkVfUzMyKGIsIDIgKiBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0 LCByKTsgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAxMzY6IHsgLy8gdm11bG91dzogdW5zaWdu ZWQgQkUtb2RkIHdvcmQKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAg ICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90 KUxBTkVfVTMyKGEsIDIgKiBpKSAqCisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KUxB TkVfVTMyKGIsIDIgKiBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFBlci1sYW5lIHJvdGF0ZSBsZWZ0ICh2cmx7 YixoLHcsZH0pID09PQorKyAgICBjYXNlIDQ6ICAgIC8vIHZybGIKKysgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIHVpbnQ4X3QgdiA9IExBTkVfVTgoYSwgaSk7 CisrICAgICAgICB1aW50MzJfdCBzID0gTEFORV9VOChiLCBpKSAmIDc7CisrICAgICAgICBTRVRf TEFORV9VOChyLCBpLCAodWludDhfdCkoKHYgPDwgcykgfCAodiA+PiAoKDggLSBzKSAmIDcpKSkp OworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNl IDY4OiAgIC8vIHZybGgKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAg ICAgICAgdWludDE2X3QgdiA9IExBTkVfVTE2KGEsIGkpOworKyAgICAgICAgdWludDMyX3QgcyA9 IExBTkVfVTE2KGIsIGkpICYgMTU7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgKHVpbnQx Nl90KSgodiA8PCBzKSB8ICh2ID4+ICgoMTYgLSBzKSAmIDE1KSkpKTsKKysgICAgICB9CisrICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxMzI6ICAvLyB2cmx3Cisr ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIHVpbnQzMl90IHYg PSBMQU5FX1UzMihhLCBpKTsKKysgICAgICAgIHVpbnQzMl90IHMgPSBMQU5FX1UzMihiLCBpKSAm IDMxOworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksICh2IDw8IHMpIHwgKHYgPj4gKCgzMiAt IHMpICYgMzEpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7 CisrICAgIGNhc2UgMTk2OiAgLy8gdnJsZAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsg aSsrKSB7CisrICAgICAgICB1aW50NjRfdCB2ID0gTEFORV9VNjQoYSwgaSk7CisrICAgICAgICB1 aW50MzJfdCBzID0gTEFORV9VNjQoYiwgaSkgJiA2MzsKKysgICAgICAgIFNFVF9MQU5FX1U2NChy LCBpLCAodiA8PCBzKSB8ICh2ID4+ICgoNjQgLSBzKSAmIDYzKSkpOworKyAgICAgIH0KKysgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0gTWluIC8gTWF4IHNp Z25lZCA9PT0KKysgICAgY2FzZSAyNTg6ICAvLyB2bWF4c2IKKysgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0ZDo6bWF4KExB TkVfUzgoYSwgaSksIExBTkVfUzgoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRl cyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAzMjI6ICAvLyB2bWF4c2gKKysgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0 ZDo6bWF4KExBTkVfUzE2KGEsIGkpLCBMQU5FX1MxNihiLCBpKSkpOworKyAgICAgIH0KKysgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDM4NjogIC8vIHZtYXhzdwor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9V MzIociwgaSwgc3RkOjptYXgoTEFORV9TMzIoYSwgaSksIExBTkVfUzMyKGIsIGkpKSk7CisrICAg ICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNDUwOiAg Ly8gdm1heHNkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAg IFNFVF9MQU5FX1U2NChyLCBpLCBzdGQ6Om1heChMQU5FX1M2NChhLCBpKSwgTEFORV9TNjQoYiwg aSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAg Y2FzZSA3NzA6ICAvLyB2bWluc2IKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp IHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0ZDo6bWluKExBTkVfUzgoYSwgaSksIExB TkVfUzgoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKKysgICAgY2FzZSA4MzQ6ICAvLyB2bWluc2gKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0ZDo6bWluKExBTkVfUzE2 KGEsIGkpLCBMQU5FX1MxNihiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZy dCwgcik7IGJyZWFrOworKyAgICBjYXNlIDg5ODogIC8vIHZtaW5zdworKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgc3RkOjpt aW4oTEFORV9TMzIoYSwgaSksIExBTkVfUzMyKGIsIGkpKSk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgOTYyOiAgLy8gdm1pbnNkCisrICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChy LCBpLCBzdGQ6Om1pbihMQU5FX1M2NChhLCBpKSwgTEFORV9TNjQoYiwgaSkpKTsKKysgICAgICB9 CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IE1pbiAv IE1heCB1bnNpZ25lZCA9PT0KKysgICAgY2FzZSAyOiAgICAvLyB2bWF4dWIKKysgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0 ZDo6bWF4KExBTkVfVTgoYSwgaSksIExBTkVfVTgoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAg c2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA2NjogICAvLyB2bWF4dWgKKysg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2 KHIsIGksIHN0ZDo6bWF4KExBTkVfVTE2KGEsIGkpLCBMQU5FX1UxNihiLCBpKSkpOworKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDEzMDogIC8v IHZtYXh1dworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBT RVRfTEFORV9VMzIociwgaSwgc3RkOjptYXgoTEFORV9VMzIoYSwgaSksIExBTkVfVTMyKGIsIGkp KSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNh c2UgMTk0OiAgLy8gdm1heHVkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK KysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLCBzdGQ6Om1heChMQU5FX1U2NChhLCBpKSwgTEFO RV9VNjQoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKKysgICAgY2FzZSA1MTQ6ICAvLyB2bWludWIKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIHN0ZDo6bWluKExBTkVfVTgo YSwgaSksIExBTkVfVTgoYiwgaSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQs IHIpOyBicmVhazsKKysgICAgY2FzZSA1Nzg6ICAvLyB2bWludWgKKysgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIHN0ZDo6bWlu KExBTkVfVTE2KGEsIGkpLCBMQU5FX1UxNihiLCBpKSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDY0MjogIC8vIHZtaW51dworKyAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwg aSwgc3RkOjptaW4oTEFORV9VMzIoYSwgaSksIExBTkVfVTMyKGIsIGkpKSk7CisrICAgICAgfQor KyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNzA2OiAgLy8gdm1p bnVkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9M QU5FX1U2NChyLCBpLCBzdGQ6Om1pbihMQU5FX1U2NChhLCBpKSwgTEFORV9VNjQoYiwgaSkpKTsK KysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8g PT09IFZlY3RvciBjb21wYXJlIChlcSwgZ3Qgc2lnbmVkLCBndCB1bnNpZ25lZCwgbmUgUE9XRVI5 KSA9PT0KKysgICAgLy8KKysgICAgLy8gQWxsIHZjbXAqIG9wcyBzZXQgcGVyLWxhbmUgYWxsLTFz IG9uIHRydWUsIGFsbC0wcyBvbiBmYWxzZS4gVGhlCisrICAgIC8vIHJlY29yZCBmb3JtIChSYz0x LCBYTyBNU0IgYml0IHNldDsgWE9fcmVjID0gWE9fYmFzZSArIDEwMjQpIG11c3QKKysgICAgLy8g YWRkaXRpb25hbGx5IHdyaXRlIENSNjoKKysgICAgLy8gICBDUjYuTFQgPSAxIGlmZiBBTEwgbGFu ZXMgYXJlIHRydWU7CisrICAgIC8vICAgQ1I2LkdUID0gMCAoYWx3YXlzKTsKKysgICAgLy8gICBD UjYuRVEgPSAxIGlmZiBOTyBsYW5lIGlzIHRydWU7CisrICAgIC8vICAgQ1I2LlNPID0gMCAoYWx3 YXlzKS4KKysgICAgLy8gYGk4eDE2LmFsbF90cnVlYCBldGMuIGluIHdhc20gcmVseSBvbiBDUjYu RVEgdmlhIGBtZm9jcmYgY3I2YDsgdGhlCisrICAgIC8vIHByZXZpb3VzIHNpbXVsYXRvciBpbXBs ZW1lbnRhdGlvbiBsZWZ0IENSNiB1bnRvdWNoZWQsIHNvIHRoZQorKyAgICAvLyBwcmVkaWNhdGUg d2FzIGFsd2F5cyB3cm9uZy4KKysgICAgLy8KKysgICAgLy8gSGVscGVyOiBjb3VudCB0cnVlIGxh bmVzIGJ5IGxvb2tpbmcgYXQgYnl0ZSAwIG9mIGVhY2ggbGFuZSAoYWxsCisrICAgIC8vIGJ5dGVz IHdpdGhpbiBhICJ0cnVlIiBsYW5lIGFyZSAweEZGIHNvIGJ5dGUgMCBpcyBhIHNvdW5kIHByb3h5 KS4KKysgICAgI2RlZmluZSBWQ01QX0RPTkUobGFuZXNfLCBsYW5lX2J5dGVzXykgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisrICAgICAgICBpZiAoeG8gPj0gMTAyNCkgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBpbnQgbnVtVHJ1ZV8g PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgZm9yIChpbnQgaV8gPSAwOyBpXyA8IChsYW5lc18pOyBpXysrKSB7ICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgaWYgKHJbaV8gKiAobGFuZV9ieXRlc18p XSA9PSAweEZGKSBudW1UcnVlXysrOyAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICB9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKysgICAgICAgICAgdWludDhfdCBmaWVsZF8gPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGlmIChudW1UcnVlXyA9PSAo bGFuZXNfKSkgZmllbGRfIHw9IGtDUkZpZWxkTFQ7ICAgICAgICAgICAgICAgICAgXAorKyAgICAg ICAgICBpZiAobnVtVHJ1ZV8gPT0gMCkgZmllbGRfIHw9IGtDUkZpZWxkRVE7ICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgc2V0Q1JGaWVsZCg2LCBmaWVsZF8pOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKyAgICAgIH0gd2hpbGUgKDApCisrCisrICAgIGNhc2UgNjogICAgLy8gdmNtcGVxdWIgKFJj PTApCisrICAgIGNhc2UgMTAzMDogLy8gdmNtcGVxdWIuIChyZWNvcmQsIENSNiB1cGRhdGVkKQor KyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVf VTgociwgaSwgTEFORV9VOChhLCBpKSA9PSBMQU5FX1U4KGIsIGkpID8gMHhGRiA6IDApOworKyAg ICAgIH0KKysgICAgICBWQ01QX0RPTkUoMTYsIDEpOyBicmVhazsKKysgICAgY2FzZSA3MDogICAv LyB2Y21wZXF1aAorKyAgICBjYXNlIDEwOTQ6IC8vIHZjbXBlcXVoLgorKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9V MTYoYSwgaSkgPT0gTEFORV9VMTYoYiwgaSkgPyAweEZGRkYgOiAwKTsKKysgICAgICB9CisrICAg ICAgVkNNUF9ET05FKDgsIDIpOyBicmVhazsKKysgICAgY2FzZSAxMzQ6ICAvLyB2Y21wZXF1dwor KyAgICBjYXNlIDExNTg6IC8vIHZjbXBlcXV3LgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwKKysgICAgICAgICAgICAgICAg ICAgICBMQU5FX1UzMihhLCBpKSA9PSBMQU5FX1UzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7 CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSg0LCA0KTsgYnJlYWs7CisrICAgIGNhc2UgMTk5 OiAgLy8gdmNtcGVxdWQKKysgICAgY2FzZSAxMjIzOiAvLyB2Y21wZXF1ZC4KKysgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCisr ICAgICAgICAgICAgICAgICAgICAgTEFORV9VNjQoYSwgaSkgPT0gTEFORV9VNjQoYiwgaSkKKysg ICAgICAgICAgICAgICAgICAgICAgICAgPyBVSU5UNjRfTUFYCisrICAgICAgICAgICAgICAgICAg ICAgICAgIDogMCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSgyLCA4KTsgYnJlYWs7Cisr CisrICAgIC8vID09PSBDb21wYXJlIGdyZWF0ZXItdGhhbiBzaWduZWQgPT09CisrICAgIGNhc2Ug Nzc0OiAgLy8gdmNtcGd0c2IKKysgICAgY2FzZSAxNzk4OiAvLyB2Y21wZ3RzYi4KKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGks IExBTkVfUzgoYSwgaSkgPiBMQU5FX1M4KGIsIGkpID8gMHhGRiA6IDApOworKyAgICAgIH0KKysg ICAgICBWQ01QX0RPTkUoMTYsIDEpOyBicmVhazsKKysgICAgY2FzZSA4Mzg6ICAvLyB2Y21wZ3Rz aAorKyAgICBjYXNlIDE4NjI6IC8vIHZjbXBndHNoLgorKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9TMTYoYSwgaSkg PiBMQU5FX1MxNihiLCBpKSA/IDB4RkZGRiA6IDApOworKyAgICAgIH0KKysgICAgICBWQ01QX0RP TkUoOCwgMik7IGJyZWFrOworKyAgICBjYXNlIDkwMjogIC8vIHZjbXBndHN3CisrICAgIGNhc2Ug MTkyNjogLy8gdmNtcGd0c3cuCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsK KysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgIExBTkVf UzMyKGEsIGkpID4gTEFORV9TMzIoYiwgaSkgPyAweEZGRkZGRkZGdSA6IDApOworKyAgICAgIH0K KysgICAgICBWQ01QX0RPTkUoNCwgNCk7IGJyZWFrOworKyAgICBjYXNlIDk2NzogIC8vIHZjbXBn dHNkCisrICAgIGNhc2UgMTk5MTogLy8gdmNtcGd0c2QuCisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCAyOyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U2NChyLCBpLAorKyAgICAgICAgICAg ICAgICAgICAgIExBTkVfUzY0KGEsIGkpID4gTEFORV9TNjQoYiwgaSkgPyBVSU5UNjRfTUFYIDog MCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSgyLCA4KTsgYnJlYWs7CisrCisrICAgIC8v ID09PSBDb21wYXJlIGdyZWF0ZXItdGhhbiB1bnNpZ25lZCA9PT0KKysgICAgY2FzZSA1MTg6ICAv LyB2Y21wZ3R1YgorKyAgICBjYXNlIDE1NDI6IC8vIHZjbXBndHViLgorKyAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwgaSwgTEFORV9V OChhLCBpKSA+IExBTkVfVTgoYiwgaSkgPyAweEZGIDogMCk7CisrICAgICAgfQorKyAgICAgIFZD TVBfRE9ORSgxNiwgMSk7IGJyZWFrOworKyAgICBjYXNlIDU4MjogIC8vIHZjbXBndHVoCisrICAg IGNhc2UgMTYwNjogLy8gdmNtcGd0dWguCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBp KyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSA+IExBTkVf VTE2KGIsIGkpID8gMHhGRkZGIDogMCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSg4LCAy KTsgYnJlYWs7CisrICAgIGNhc2UgNjQ2OiAgLy8gdmNtcGd0dXcKKysgICAgY2FzZSAxNjcwOiAv LyB2Y21wZ3R1dy4KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAg ICAgU0VUX0xBTkVfVTMyKHIsIGksCisrICAgICAgICAgICAgICAgICAgICAgTEFORV9VMzIoYSwg aSkgPiBMQU5FX1UzMihiLCBpKSA/IDB4RkZGRkZGRkZ1IDogMCk7CisrICAgICAgfQorKyAgICAg IFZDTVBfRE9ORSg0LCA0KTsgYnJlYWs7CisrICAgIGNhc2UgNzExOiAgLy8gdmNtcGd0dWQKKysg ICAgY2FzZSAxNzM1OiAvLyB2Y21wZ3R1ZC4KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGksCisrICAgICAgICAgICAgICAgICAg ICAgTEFORV9VNjQoYSwgaSkgPiBMQU5FX1U2NChiLCBpKSA/IFVJTlQ2NF9NQVggOiAwKTsKKysg ICAgICB9CisrICAgICAgVkNNUF9ET05FKDIsIDgpOyBicmVhazsKKysKKysgICAgLy8gPT09IFNw bGF0IGZyb20gaW1tZWRpYXRlICg1LWJpdCBzaWduZWQgc3BsYXQgaW50byBhbGwgbGFuZXMpID09 PQorKyAgICAvLyBJU0EgZGVmaW5lcyBVSU0gaW4gQkUgZWxlbWVudCBudW1iZXJpbmcuIEZvciBM RSBzdG9yYWdlLCBCRSBlbGVtZW50IGkgPSBMRSBlbGVtZW50IChOLTEtaSkuCisrICAgIGNhc2Ug NTI0OiAgLy8gdnNwbHRiOiBWUlRbKl0gPSBWUkJbQkUtYnl0ZS1VSU1dOyB1aW1tIGZyb20gVlJB IGZpZWxkIChiaXRzIDExLi4xNSkKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp IHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYiwgMTUgLSAodWltbSAmIDB4 RikpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAg Y2FzZSA1ODg6ICAvLyB2c3BsdGgKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykg eworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksIExBTkVfVTE2KGIsIDcgLSAodWltbSAmIDB4 NykpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAg Y2FzZSA2NTI6ICAvLyB2c3BsdHcKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykg eworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIsIGksIExBTkVfVTMyKGIsIDMgLSAodWltbSAmIDB4 MykpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysKKysg ICAgLy8gPT09IFNwbGF0IDUtYml0IHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIGJ5dGUgbGFuZXMg PT09CisrICAgIGNhc2UgNzgwOiB7ICAvLyB2c3BsdGlzYiBWUlQsIFNJTU01CisrICAgICAgaW50 MzJfdCBzaW1tNSA9IChpbnQzMl90KSgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAm IDB4MUYpOworKyAgICAgIGlmIChzaW1tNSAmIDB4MTApIHNpbW01IHw9IH4weDFGOworKyAgICAg IHVpbnQ4X3QgYiA9ICh1aW50OF90KShpbnQ4X3Qpc2ltbTU7CisrICAgICAgbWVtc2V0KHIsIGIs IDE2KTsKKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrCisrICAg IC8vID09PSBTcGxhdCA1LWJpdCBzaWduZWQgaW1tZWRpYXRlIHRvIGFsbCBoYWxmd29yZCBsYW5l cyA9PT0KKysgICAgY2FzZSA4NDQ6IHsgIC8vIHZzcGx0aXNoIFZSVCwgU0lNTTUKKysgICAgICAv LyBTSU1NNSBvY2N1cGllcyBiaXRzIDExLi4xNSBvZiB0aGUgaW5zdHJ1Y3Rpb24gKFZSQSBmaWVs ZCkuIEl0CisrICAgICAgLy8gaXMgc2lnbi1leHRlbmRlZCB0byAxNiBiaXRzIGFuZCByZXBsaWNh dGVkIGFjcm9zcyBhbGwgOCBoYWxmd29yZAorKyAgICAgIC8vIGxhbmVzIG9mIFZSVC4gUmFuZ2U6 IFstMTYsIDE1XS4KKysgICAgICBpbnQzMl90IHNpbW01ID0gKGludDMyX3QpKChpbnN0ci0+aW5z dHJ1Y3Rpb25CaXRzKCkgPj4gMTYpICYgMHgxRik7CisrICAgICAgaWYgKHNpbW01ICYgMHgxMCkg c2ltbTUgfD0gfjB4MUY7ICAvLyBzaWduLWV4dGVuZCBiaXQgNAorKyAgICAgIGludDE2X3QgaHcg PSAoaW50MTZfdClzaW1tNTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewor KyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdClodyk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFNw bGF0IDUtYml0IHNpZ25lZCBpbW1lZGlhdGUgdG8gYWxsIHdvcmQgbGFuZXMgPT09CisrICAgIGNh c2UgOTA4OiB7ICAvLyB2c3BsdGlzdyBWUlQsIFNJTU01CisrICAgICAgaW50MzJfdCBzaW1tNSA9 IChpbnQzMl90KSgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4MUYpOworKyAg ICAgIGlmIChzaW1tNSAmIDB4MTApIHNpbW01IHw9IH4weDFGOworKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90 KXNpbW01KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysg ICAgfQorKworKyAgICAvLyA9PT0gTWVyZ2UgKGludGVybGVhdmUpID09PQorKyAgICAvLworKyAg ICAvLyBUaGUgSVNBIGRlZmluZXMgdm1yZ2gqIC8gdm1yZ2wqIGluIEJFIG51bWJlcmluZzsgdGhl CisrICAgIC8vIGVtcGlyaWNhbCBMRSBzdG9yYWdlIGJlaGF2aW91ciBpczoKKysgICAgLy8gICB2 bXJnaCogVlQsVkEsVkI6IGZvciBpIGluIDAuLk4vMi0xLAorKyAgICAvLyAgICAgVlQubGFuZV9M RVsyaV0gICA9IFZCLmxhbmVfTEVbKE4vMikgKyBpXQorKyAgICAvLyAgICAgVlQubGFuZV9MRVsy aSsxXSA9IFZBLmxhbmVfTEVbKE4vMikgKyBpXQorKyAgICAvLyAgIHZtcmdsKiBWVCxWQSxWQjog Zm9yIGkgaW4gMC4uTi8yLTEsCisrICAgIC8vICAgICBWVC5sYW5lX0xFWzJpXSAgID0gVkIubGFu ZV9MRVtpXQorKyAgICAvLyAgICAgVlQubGFuZV9MRVsyaSsxXSA9IFZBLmxhbmVfTEVbaV0KKysg ICAgLy8gaS5lLiB0aGUgVkIgb3BlcmFuZCBnb2VzIHRvIHRoZSBldmVuIHJlc3VsdCBwb3NpdGlv bnMgKHJldmVyc2VkCisrICAgIC8vIGZyb20gd2hhdCBhIG5hw692ZSBCRSByZWFkaW5nIHdvdWxk IHN1Z2dlc3QpIGFuZCB0aGUgImhpZ2giIGZvcm0KKysgICAgLy8gc2VsZWN0cyB0aGUgdXBwZXIt aGFsZiBvZiBMRSBzdG9yYWdlLgorKyAgICAvLworKyAgICAvLyBQcmV2aW91cyBpbXBsZW1lbnRh dGlvbiBoYWQgYm90aCB0aGUgb3BlcmFuZCBvcmRlciBzd2FwcGVkIEFORAorKyAgICAvLyB0aGUg aGlnaC9sb3cgaGFsdmVzIHN3YXBwZWQgKGNvbnNpc3RlbnQgd2l0aCBlYWNoIG90aGVyLCBzbwor KyAgICAvLyBKSVQtb25seS12aXNpYmxlIG9wcyB0aGF0IHJvdW5kLXRyaXBwZWQgdGhyb3VnaCB2 bXJnKiBoYXBwZW5lZAorKyAgICAvLyB0byBwcm9kdWNlIHRoZSByaWdodCBhbnN3ZXIsIGJ1dCB3 YXNtLXZpc2libGUgZXh0bXVsIGV4cG9zZWQKKysgICAgLy8gdGhlIGJ1ZykuCisrICAgIGNhc2Ug MTI6ICAgLy8gdm1yZ2hiCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysg ICAgICAgIFNFVF9MQU5FX1U4KHIsIDIgKiBpLCBMQU5FX1U4KGIsIDggKyBpKSk7CisrICAgICAg ICBTRVRfTEFORV9VOChyLCAyICogaSArIDEsIExBTkVfVTgoYSwgOCArIGkpKTsKKysgICAgICB9 CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSA3NjogICAvLyB2 bXJnaGgKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VU X0xBTkVfVTE2KHIsIDIgKiBpLCBMQU5FX1UxNihiLCA0ICsgaSkpOworKyAgICAgICAgU0VUX0xB TkVfVTE2KHIsIDIgKiBpICsgMSwgTEFORV9VMTYoYSwgNCArIGkpKTsKKysgICAgICB9CisrICAg ICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxNDA6ICAvLyB2bXJnaHcK KysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVf VTMyKHIsIDIgKiBpLCBMQU5FX1UzMihiLCAyICsgaSkpOworKyAgICAgICAgU0VUX0xBTkVfVTMy KHIsIDIgKiBpICsgMSwgTEFORV9VMzIoYSwgMiArIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0 VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAyNjg6ICAvLyB2bXJnbGIKKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTgociwg MiAqIGksIExBTkVfVTgoYiwgaSkpOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgMiAqIGkgKyAx LCBMQU5FX1U4KGEsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBi cmVhazsKKysgICAgY2FzZSAzMzI6ICAvLyB2bXJnbGgKKysgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIDIgKiBpLCBMQU5FX1UxNihi LCBpKSk7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgMiAqIGkgKyAxLCBMQU5FX1UxNihhLCBp KSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNh c2UgMzk2OiAgLy8gdm1yZ2x3CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsK KysgICAgICAgIFNFVF9MQU5FX1UzMihyLCAyICogaSwgTEFORV9VMzIoYiwgaSkpOworKyAgICAg ICAgU0VUX0xBTkVfVTMyKHIsIDIgKiBpICsgMSwgTEFORV9VMzIoYSwgaSkpOworKyAgICAgIH0K KysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0gUGVyLWxh bmUgc2hpZnQgbGVmdCAoY291bnQgZnJvbSBWUkIsIGxvdyBOIGJpdHMgcGVyIGVsZW1lbnQpID09 PQorKyAgICBjYXNlIDI2MDogIC8vIHZzbGIKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2 OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkgPDwgKExB TkVfVTgoYiwgaSkgJiA3KSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7CisrICAgIGNhc2UgMzI0OiAgLy8gdnNsaAorKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgaSwgTEFORV9VMTYoYSwgaSkg PDwgKExBTkVfVTE2KGIsIGkpICYgMTUpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAzODg6ICAvLyB2c2x3CisrICAgICAgZm9yIChpbnQg aSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UzMihyLCBpLCBMQU5FX1Uz MihhLCBpKSA8PCAoTEFORV9VMzIoYiwgaSkgJiAzMSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDE0NzY6IC8vIHZzbGQKKysgICAgICBm b3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTY0KHIsIGks IExBTkVfVTY0KGEsIGkpIDw8IChMQU5FX1U2NChiLCBpKSAmIDYzKSk7CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrCisrICAgIC8vID09PSBQZXItbGFuZSBz aGlmdCByaWdodCB1bnNpZ25lZCA9PT0KKysgICAgY2FzZSA1MTY6ICAvLyB2c3JiCisrICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VOChyLCBp LCBMQU5FX1U4KGEsIGkpID4+IChMQU5FX1U4KGIsIGkpICYgNykpOworKyAgICAgIH0KKysgICAg ICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDU4MDogIC8vIHZzcmgKKysg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2 KHIsIGksIExBTkVfVTE2KGEsIGkpID4+IChMQU5FX1UxNihiLCBpKSAmIDE1KSk7CisrICAgICAg fQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgNjQ0OiAgLy8g dnNydworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRf TEFORV9VMzIociwgaSwgTEFORV9VMzIoYSwgaSkgPj4gKExBTkVfVTMyKGIsIGkpICYgMzEpKTsK KysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAx NzMyOiAvLyB2c3JkCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAg ICAgIFNFVF9MQU5FX1U2NChyLCBpLCBMQU5FX1U2NChhLCBpKSA+PiAoTEFORV9VNjQoYiwgaSkg JiA2MykpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKwor KyAgICAvLyA9PT0gUGVyLWxhbmUgc2hpZnQgcmlnaHQgYWxnZWJyYWljIChzaWduZWQpID09PQor KyAgICBjYXNlIDc3MjogIC8vIHZzcmFiCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsg aSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VOChyLCBpLAorKyAgICAgICAgICAgICAgICAgICAg KHVpbnQ4X3QpKExBTkVfUzgoYSwgaSkgPj4gKExBTkVfVTgoYiwgaSkgJiA3KSkpOworKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDgzNjogIC8v IHZzcmFoCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNF VF9MQU5FX1UxNihyLCBpLAorKyAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkoTEFORV9T MTYoYSwgaSkgPj4gKExBTkVfVTE2KGIsIGkpICYgMTUpKSk7CisrICAgICAgfQorKyAgICAgIHNl dFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIGNhc2UgOTAwOiAgLy8gdnNyYXcKKysgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTMyKHIs IGksCisrICAgICAgICAgICAgICAgICAgICAgKHVpbnQzMl90KShMQU5FX1MzMihhLCBpKSA+PiAo TEFORV9VMzIoYiwgaSkgJiAzMSkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQs IHIpOyBicmVhazsKKysgICAgY2FzZSA5NjQ6ICAvLyB2c3JhZAorKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwKKysgICAgICAg ICAgICAgICAgICAgICAodWludDY0X3QpKExBTkVfUzY0KGEsIGkpID4+IChMQU5FX1U2NChiLCBp KSAmIDYzKSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOwor KworKyAgICAvLyA9PT0gUE9XRVI5IHBlci1sYW5lIGludGVnZXIgbmVnYXRlIChzdWJvcCBpbiBW UkEgZmllbGQpID09PQorKyAgICAvLyBQUENfdm5lZ3cgPSAweDEwMDYwNjAyIOKGkiBYTz0weDYw Mj0xNTM4LCBWUkE9NgorKyAgICAvLyBQUENfdm5lZ2QgPSAweDEwMDcwNjAyIOKGkiBYTz0weDYw Mj0xNTM4LCBWUkE9NworKyAgICBjYXNlIDE1Mzg6CisrICAgICAgaWYgKHZyYSA9PSA2KSB7ICAv LyB2bmVndworKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAg ICAgU0VUX0xBTkVfVTMyKHIsIGksICh1aW50MzJfdCkoLUxBTkVfUzMyKGIsIGkpKSk7CisrICAg ICAgICB9CisrICAgICAgfSBlbHNlIGlmICh2cmEgPT0gNykgeyAgLy8gdm5lZ2QKKysgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICAgIFNFVF9MQU5FX1U2NChy LCBpLCAodWludDY0X3QpKC1MQU5FX1M2NChiLCBpKSkpOworKyAgICAgICAgfQorKyAgICAgIH0g ZWxzZSB7CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigiZGVjb2RlVk1YIFhPPTE1 Mzg6IHVua25vd24gc3Vib3AgJXUiLCB2cmEpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVz KHZydCwgcik7IGJyZWFrOworKworKyAgICAvLyA9PT0gUE9XRVIxMCB2ZXh0cmFjdHtiLGgsdyxk fW0gKFhPPTE2MDI9MHg2NDIpID09PQorKyAgICAvLyBSVCAoR1BSKSBnZXRzIHRoZSB3YXNtLXNw ZWMgYml0bWFzayBpbiBsb3cgMTYvOC80LzIgYml0cy4gVUlNIGF0CisrICAgIC8vIGJpdHMgMTEu LjE1ICg9IHNpbSBgdnJhYCkgc2VsZWN0cyBsYW5lIHdpZHRoOiA4PWJ5dGUsIDk9aGFsZndvcmQs CisrICAgIC8vIDEwPXdvcmQsIDExPWRvdWJsZXdvcmQuCisrICAgIGNhc2UgMTYwMjogeworKyAg ICAgIHVpbnQ2NF90IHJlc3VsdCA9IDA7CisrICAgICAgc3dpdGNoICh2cmEpIHsKKysgICAgICAg IGNhc2UgODogIC8vIHZleHRyYWN0Ym06IDE2IGJ5dGUgbGFuZXMKKysgICAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAgICAgICAgaWYgKGJbaV0gJiAweDgwKSBy ZXN1bHQgfD0gKDFVTEwgPDwgaSk7CisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7Cisr ICAgICAgICBjYXNlIDk6ICAvLyB2ZXh0cmFjdGhtOiA4IGhhbGZ3b3JkIGxhbmVzOyBNU0IgbGl2 ZXMgYXQgYnl0ZSAyaSsxCisrICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7 CisrICAgICAgICAgICAgaWYgKGJbMiAqIGkgKyAxXSAmIDB4ODApIHJlc3VsdCB8PSAoMVVMTCA8 PCBpKTsKKysgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgIGNhc2UgMTA6 ICAvLyB2ZXh0cmFjdHdtOiA0IHdvcmQgbGFuZXM7IE1TQiBhdCBieXRlIDRpKzMKKysgICAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgICAgICBpZiAoYls0ICog aSArIDNdICYgMHg4MCkgcmVzdWx0IHw9ICgxVUxMIDw8IGkpOworKyAgICAgICAgICB9CisrICAg ICAgICAgIGJyZWFrOworKyAgICAgICAgY2FzZSAxMTogIC8vIHZleHRyYWN0ZG06IDIgZHdvcmQg bGFuZXM7IE1TQiBhdCBieXRlIDhpKzcKKysgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsKKysgICAgICAgICAgICBpZiAoYls4ICogaSArIDddICYgMHg4MCkgcmVzdWx0IHw9 ICgxVUxMIDw8IGkpOworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAg ZGVmYXVsdDoKKysgICAgICAgICAgTU9aX0NSQVNIX1VOU0FGRV9QUklOVEYoImRlY29kZVZNWCBY Tz0xNjAyOiB1bmtub3duIFVJTSAldSIsIHZyYSk7CisrICAgICAgfQorKyAgICAgIC8vIHZydCBp cyB0aGUgR1BSIHRhcmdldCAoUlQgZmllbGQgYXQgYml0cyA2Li4xMCkuCisrICAgICAgc2V0UmVn aXN0ZXIoaW50KHZydCksIGludDY0X3QocmVzdWx0KSk7CisrICAgICAgZ290byB2bXhfZG9uZTsg IC8vIFNraXAgdGhlIHRyYWlsaW5nIHNldFZSQnl0ZXMgdXNlZCBieSBWUi10YXJnZXRpbmcgb3Bz LgorKyAgICB9CisrCisrICAgIC8vID09PSBQT1dFUjkgdmluc2VydGIgKFhPPTc4MSkgLyB2aW5z ZXJ0aCAoWE89ODQ1KSA9PT0KKysgICAgLy8gSW5zZXJ0IGJ5dGUvaGFsZndvcmQgZnJvbSBhIFZS IChOT1QgYSBHUFIpIGF0IGFuIGltbWVkaWF0ZSBieXRlCisrICAgIC8vIHBvc2l0aW9uIFVJTSAo QkUpLgorKyAgICAvLyAgIHZpbnNlcnRiOiBWUlQuYnl0ZVtVSU1dICAgKEJFKSDihpAgVlJCLmJ5 dGVbN10gKEJFKQorKyAgICAvLyAgIHZpbnNlcnRoOiBWUlQuYnl0ZVtVSU1dICAgKEJFKSDihpAg VlJCLmJ5dGVbNl0gKEJFKQorKyAgICAvLyAgICAgICAgICAgICBWUlQuYnl0ZVtVSU0rMV0gKEJF KSDihpAgVlJCLmJ5dGVbN10gKEJFKQorKyAgICAvLyBCRSBieXRlIGkg4oaUIExFIGJ5dGUgKDE1 LWkpLiBTbyBWUkIuYnl0ZVs2XSAoQkUpID0gTEUgYnl0ZSA5IG9mCisrICAgIC8vIFZSQiwgVlJC LmJ5dGVbN10gKEJFKSA9IExFIGJ5dGUgOC4gKEJ5dGUtcGFpciBvcmRlciBtYXR0ZXJzLikKKysg ICAgY2FzZSA3ODE6ICAgIC8vIHZpbnNlcnRiCisrICAgIGNhc2UgODQ1OiB7ICAvLyB2aW5zZXJ0 aAorKyAgICAgIGdldFZSQnl0ZXModnJ0LCByKTsgIC8vIHN0YXJ0IGZyb20gY3VycmVudCBWUlQK KysgICAgICBpZiAoeG8gPT0gODQ1KSB7CisrICAgICAgICAvLyB2aW5zZXJ0aDogY29weSAyLWJ5 dGUgaGFsZndvcmQgKEJFIGJ5dGVzIDYuLjcgb2YgVlJCKS4KKysgICAgICAgIHJbMTUgLSB1aW1t XSAgICAgPSBiWzldOyAgLy8gQkUgYnl0ZSBVSU0gICDihpAgVlJCIEJFIGJ5dGUgNgorKyAgICAg ICAgclsxNCAtIHVpbW1dICAgICA9IGJbOF07ICAvLyBCRSBieXRlIFVJTSsxIOKGkCBWUkIgQkUg Ynl0ZSA3CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIC8vIHZpbnNlcnRiOiBjb3B5IGEgc2lu Z2xlIGJ5dGUgKEJFIGJ5dGUgNyBvZiBWUkIpLgorKyAgICAgICAgclsxNSAtIHVpbW1dICAgICA9 IGJbOF07ICAvLyBCRSBieXRlIFVJTSAgIOKGkCBWUkIgQkUgYnl0ZSA3CisrICAgICAgfQorKyAg ICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFBP V0VSOSB2ZXh0cmFjdHViIChYTz01MjUpIC8gdmV4dHJhY3R1aCAoWE89NTg5KSA9PT0KKysgICAg Ly8gRXh0cmFjdCBvbmUgYnl0ZS9oYWxmd29yZCBmcm9tIFZSQiBhdCBpbW1lZGlhdGUgQkUgcG9z aXRpb24gVUlNCisrICAgIC8vIGFuZCBwbGFjZSBpdCBhdCBCRSBieXRlIDcgb2YgVlJULCB3aXRo IGFsbCBvdGhlciBieXRlcyBvZiBWUlQKKysgICAgLy8gemVyb2VkLiBDb21wYW5pb24gdG8gdmlu c2VydGIvaDsgY2hvb3NlcyBhbiBpbW1lZGlhdGUgQkUgcG9zaXRpb24KKysgICAgLy8gYW5kIGxh bmRzIHRoZSByZXN1bHQgYXQgdGhlIGxvdyBieXRlIG9mIFZSVCAoPSBsb3cgYnl0ZSBvZiBtZnZz cmQpLgorKyAgICAvLyAgIHZleHRyYWN0dWI6IFZSVC5ieXRlWzddIChCRSkg4oaQIFZSQi5ieXRl W1VJTV0gKEJFKSwgcmVzdCA9IDAKKysgICAgLy8gICB2ZXh0cmFjdHVoOiBWUlQuYnl0ZVs2XSAo QkUpIOKGkCBWUkIuYnl0ZVtVSU1dICAgKEJFKQorKyAgICAvLyAgICAgICAgICAgICAgIFZSVC5i eXRlWzddIChCRSkg4oaQIFZSQi5ieXRlW1VJTSsxXSAoQkUpLCByZXN0ID0gMAorKyAgICBjYXNl IDUyNTogICAgLy8gdmV4dHJhY3R1YgorKyAgICBjYXNlIDU4OTogeyAgLy8gdmV4dHJhY3R1aAor KyAgICAgIG1lbXNldChyLCAwLCBzaXplb2YocikpOworKyAgICAgIGlmICh4byA9PSA1ODkpIHsK KysgICAgICAgIHJbOV0gPSBiWzE1IC0gdWltbV07ICAvLyBWUlQgQkUgYnl0ZSA2IOKGkCBWUkIg QkUgYnl0ZSBVSU0KKysgICAgICAgIHJbOF0gPSBiWzE0IC0gdWltbV07ICAvLyBWUlQgQkUgYnl0 ZSA3IOKGkCBWUkIgQkUgYnl0ZSBVSU0rMQorKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByWzhd ID0gYlsxNSAtIHVpbW1dOyAgLy8gVlJUIEJFIGJ5dGUgNyDihpAgVlJCIEJFIGJ5dGUgVUlNCisr ICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysKKysg ICAgLy8gPT09IFBPV0VSMTAgdmluc2JyeCAoWE89NzgzKSAvIHZpbnNocnggKFhPPTg0NykgPT09 CisrICAgIC8vIFJpZ2h0LWluZGV4ZWQgKExFLW5hdHVyYWwpIGJ5dGUvaGFsZndvcmQgaW5zZXJ0 IGZyb20gR1BSLiBSQSdzCisrICAgIC8vIGxvdyA0IGJpdHMgc3VwcGx5IHRoZSBieXRlIHBvc2l0 aW9uIChtb2QgMTYpOyBmb3Igdmluc2hyeCB0aGUKKysgICAgLy8gcG9zaXRpb24gaXMgYWxzbyBt YXNrZWQgdG8gZXZlbiAoJiAweEUpIHNvIHRoZSBoYWxmd29yZCBpcworKyAgICAvLyAyLWJ5dGUg YWxpZ25lZC4gUkIncyBsb3cgOCAvIDE2IGJpdHMgYXJlIGluc2VydGVkOyBvdGhlciBieXRlcwor KyAgICAvLyBvZiBWUlQgYXJlIHVuY2hhbmdlZC4gUkEgYW5kIFJCIGFyZSBHUFJzIChOT1QgVlJz KSDigJQgc2ltJ3MKKysgICAgLy8gcHJlLWZldGNoZWQgYGFgIGFuZCBgYmAgZnJvbSBnZXRWUkJ5 dGVzIGFyZSB1bnVzZWQgaGVyZS4KKysgICAgY2FzZSA3ODM6ICAgIC8vIHZpbnNicngKKysgICAg Y2FzZSA4NDc6IHsgIC8vIHZpbnNocngKKysgICAgICB1aW50NjRfdCByYV92YWwgPSBVNjQoZ2V0 UmVnaXN0ZXIoaW50KHZyYSkpKTsKKysgICAgICB1aW50NjRfdCByYl92YWwgPSBVNjQoZ2V0UmVn aXN0ZXIoaW50KHZyYikpKTsKKysgICAgICBnZXRWUkJ5dGVzKHZydCwgcik7ICAvLyBzdGFydCBm cm9tIGN1cnJlbnQgVlJUCisrICAgICAgY29uc3QgYm9vbCBpc0hhbGYgPSAoeG8gPT0gODQ3KTsK KysgICAgICBjb25zdCB1aW50MzJfdCBwb3MgPSBpc0hhbGYgPyB1aW50MzJfdChyYV92YWwgJiAw eEVVTEwpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdWludDMyX3QocmFf dmFsICYgMHhGVUxMKTsKKysgICAgICByW3Bvc10gPSAodWludDhfdCkocmJfdmFsICYgMHhGRlVM TCk7CisrICAgICAgaWYgKGlzSGFsZikgeworKyAgICAgICAgcltwb3MgKyAxXSA9ICh1aW50OF90 KSgocmJfdmFsID4+IDgpICYgMHhGRlVMTCk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXMo dnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFBPV0VSMTAgdmluc3cgKFhP PTIwNykgLyB2aW5zZCAoWE89NDYzKSA9PT0KKysgICAgLy8gVlJUW1VJTSo4OlVJTSo4K04tMV0g KEJFIGJpdHMpIOKGkCBSQiBsb3cgTiBiaXRzLCB3aGVyZSBOID0gMzIgb3IgNjQuCisrICAgIC8v IFJCIGlzIGEgR1BSICh0aGUgYHZyYmAgZmllbGQgYXQgc2ltIGJpdHMgMTUuLjExKS4gVUlNIGlz IGF0IHNpbQorKyAgICAvLyBiaXRzIDIwLi4xNiAoPSB0aGUgYHVpbW1gIC8gYHZyYWAgZGVjb2Rl KS4gT3RoZXIgYnl0ZXMgb2YgVlJUIGFyZQorKyAgICAvLyB1bmNoYW5nZWQsIHNvIHdlIHJlYWQg VlJUIGZpcnN0IHRoZW4gcGF0Y2ggVUlNLi5VSU0rKE4vOC0xKS4KKysgICAgY2FzZSAyMDc6ICAg IC8vIHZpbnN3CisrICAgIGNhc2UgNDYzOiB7ICAvLyB2aW5zZAorKyAgICAgIHVpbnQ2NF90IHJi X3ZhbCA9IFU2NChnZXRSZWdpc3RlcihpbnQodnJiKSkpOworKyAgICAgIGdldFZSQnl0ZXModnJ0 LCByKTsgIC8vIHN0YXJ0IGZyb20gY3VycmVudCBWUlQKKysgICAgICBjb25zdCBpbnQgd2lkdGgg PSAoeG8gPT0gNDYzKSA/IDggOiA0OyAgLy8gYnl0ZXMKKysgICAgICAvLyBCRSBieXRlIFVJTStp IG9mIFZSVCA9IExFIGJ5dGUgKDE1IC0gVUlNIC0gaSkuCisrICAgICAgLy8gRm9yIHZpbnNkLCBS Qi5kd29yZFswXSAoQkUpID0gYml0cyA1Ni4uNjMgb2YgcmJfdmFsIChob3N0IExTQiBlbmQKKysg ICAgICAvLyBvZiB0aGUgR1BSIOKAlCByZWNhbGwgVTY0KCkgcHV0cyB0aGUgY2Fub25pY2FsIDY0 LWJpdCB2YWx1ZSBpbiBhCisrICAgICAgLy8gaG9zdCB1aW50NjRfdCB3aXRoIGJpdCA2MyA9IE1T QikuCisrICAgICAgLy8gRm9yIHZpbnN3LCBzb3VyY2UgaXMgUkJbMzI6NjNdID0gbG93IDMyIGJp dHMgb2YgcmJfdmFsLgorKyAgICAgIHVpbnQ2NF90IHNyYyA9ICh3aWR0aCA9PSA4KSA/IHJiX3Zh bCA6IChyYl92YWwgJiAweEZGRkZGRkZGVUxMKTsKKysgICAgICBjb25zdCBpbnQgc3JjTXNiU2hp ZnQgPSAod2lkdGggKiA4KSAtIDg7ICAvLyA1NiBvciAyNAorKyAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgd2lkdGg7IGkrKykgeworKyAgICAgICAgclsxNSAtIHVpbW0gLSBpXSA9ICh1aW50OF90 KShzcmMgPj4gKHNyY01zYlNoaWZ0IC0gOCAqIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJC eXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gUE9XRVI4KyB2YnBl cm1xIChYTz0xMzU2PTB4NTRDKTogcGVyLWJ5dGUgYml0IHBlcm11dGUgPT09CisrICAgIC8vIEZv ciBlYWNoIGkgaW4gMC4uMTUsIHRha2UgVlJCIEJFLWJ5dGUgaSAoPSBzaW0gYlsxNS1pXSk7IGlm IGl0cworKyAgICAvLyBoaWdoIGJpdCBpcyBzZXQsIHBlcm1baV09MDsgZWxzZSBwZXJtW2ldID0g Yml0IGF0IEJFIHBvc2l0aW9uCisrICAgIC8vIChsb3cgNyBiaXRzKSBvZiBWUkEuIElTQSBzYXlz IHBlcm1bMC4uMTVdIGdvIGludG8gVlJULmR3WzFdIGxvdworKyAgICAvLyAxNiBiaXRzLCBidXQg b24gcmVhbCBMRSBzaWxpY29uIHRoZSBiaXRtYXAgaXMgb2JzZXJ2YWJsZSBpbiBkd1swXQorKyAg ICAvLyBsb3cgMTYgYml0cyDigJQgaS5lLiwgcmVjb3ZlcmFibGUgdmlhIG1mdnNyZC4gTWF0Y2gg dGhhdCBvYnNlcnZhYmxlCisrICAgIC8vIGJlaGF2aW91cjogd3JpdGUgdGhlIGJpdG1hcCBpbnRv IHNpbSBieXRlc1s4Li45XSAod2hlcmUgbWZ2c3JkCisrICAgIC8vIHJlYWRzIGR3WzBdIGZyb20p LCB6ZXJvIHRoZSByZXN0LgorKyAgICBjYXNlIDEzNTY6IHsKKysgICAgICB1aW50OF90IHBlcm1b MTZdOworKyAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgMTY7IGsrKykgeworKyAgICAgICAgdWlu dDhfdCBjdGwgPSBiWzE1IC0ga107CisrICAgICAgICBpZiAoY3RsICYgMHg4MCkgeworKyAgICAg ICAgICBwZXJtW2tdID0gMDsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIGludCBwID0g Y3RsICYgMHg3RjsKKysgICAgICAgICAgaW50IGxlX2lkeCA9IDE1IC0gKHAgLyA4KTsKKysgICAg ICAgICAgaW50IGJpdF9pbl9ieXRlID0gNyAtIChwICUgOCk7CisrICAgICAgICAgIHBlcm1ba10g PSAoYVtsZV9pZHhdID4+IGJpdF9pbl9ieXRlKSAmIDE7CisrICAgICAgICB9CisrICAgICAgfQor KyAgICAgIHVpbnQ4X3QgbG8gPSAwLCBoaSA9IDA7CisrICAgICAgZm9yIChpbnQgayA9IDA7IGsg PCA4OyBrKyspIGhpID0gKGhpIDw8IDEpIHwgcGVybVtrXTsKKysgICAgICBmb3IgKGludCBrID0g ODsgayA8IDE2OyBrKyspIGxvID0gKGxvIDw8IDEpIHwgcGVybVtrXTsKKysgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSAwOworKyAgICAgIHJbOF0gPSBsbzsKKysgICAg ICByWzldID0gaGk7CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQor KworKyAgICAvLyBWQS1mb3JtIG9wcyB2bWxhZGR1aG0gKFhPPTM0KSwgdnNlbCAoWE89NDIpLCB2 cGVybSAoWE89NDMpIGFyZQorKyAgICAvLyBwZWVsZWQgb2ZmIGluIHRoZSBwcmUtZGlzcGF0Y2gg YWJvdmUgKHNlZSAiVkEtZm9ybSBwcmUtZGlzcGF0Y2giCisrICAgIC8vIGNvbW1lbnQgbmVhciB0 aGUgdG9wIG9mIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSB0aGUgMTEtYml0IFhPCisrICAgIC8vIG1h c2sgY29uZmxhdGVzIFZSQyBpbnRvIHRoZSBjYXNlIGxhYmVsLgorKworKyAgICAvLyA9PT0gVW5w YWNrIGhpZ2ggc2lnbmVkIChCRS1udW1iZXJpbmcgPSBMRSBpbmRpY2VzIDguLjE1KSA9PT0KKysg ICAgLy8gdnVwa2hzYjogVlJUW2ldID0gc2lnbl9leHRlbmRfdG9fMTYoVlJBW2krMC4uN10pLiBP biBMRSBzdG9yYWdlIHdpdGgKKysgICAgLy8gQkUtbmFtZWQgImhpZ2giIGJlaW5nIHRoZSBsb3ct aW5kZXhlZCBieXRlcywgdnVwa2hzYiBzaWduLWV4dGVuZHMgdGhlCisrICAgIC8vIGxvdyA4IGJ5 dGVzIG9mIFZSQSBpbnRvIDggaGFsZndvcmRzLiBQUEM2NExFIHdhc20gY2FsbHMgdGhlc2UgdGhl CisrICAgIC8vICJoaWdoIiBsYW5lcyBwZXIgUFBDIGNvbnZlbnRpb247IHRoZSBKSVQgY29tcGVu c2F0ZXMgaW50ZXJuYWxseSB2aWEKKysgICAgLy8gdGhlIHZ1cGtsc2IvdnVwa2hzYiBzd2FwIGRv Y3VtZW50ZWQgaW4gTWFjcm9Bc3NlbWJsZXItcHBjNjQtaW5sLmguCisrICAgIGNhc2UgNTI2OiAg Ly8gdnVwa2hzYiAoaGlnaCBzaWduZWQgYnl0ZSDihpIgaGFsZndvcmQpCisrICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1UxNihyLCBpLCAodWlu dDE2X3QpKGludDE2X3QpTEFORV9TOChiLCA4ICsgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRW UkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICBjYXNlIDU5MDogIC8vIHZ1cGtoc2ggKGhpZ2gg c2lnbmVkIGhhbGZ3b3JkIOKGkiB3b3JkKQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg aSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwgKHVpbnQzMl90KShpbnQzMl90KUxB TkVfUzE2KGIsIDQgKyBpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsg YnJlYWs7CisrICAgIGNhc2UgMTYxNDogLy8gdnVwa2hzdyAoaGlnaCBzaWduZWQgd29yZCDihpIg ZHdvcmQpIFBPV0VSOCsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworKyAg ICAgICAgU0VUX0xBTkVfVTY0KHIsIGksICh1aW50NjRfdCkoaW50NjRfdClMQU5FX1MzMihiLCAy ICsgaSkpOworKyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAg ICBjYXNlIDY1NDogIC8vIHZ1cGtsc2IgKGxvdyBzaWduZWQgYnl0ZSDihpIgaGFsZndvcmQpIOKA lCBQUEMgTEU6IHRha2VzIGhpZ2ggbGFuZXMKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7 IGkrKykgeworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdClM QU5FX1M4KGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVh azsKKysgICAgY2FzZSA3MTg6ICAvLyB2dXBrbHNoIChsb3cgc2lnbmVkIGhhbGZ3b3JkIOKGkiB3 b3JkKQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRf TEFORV9VMzIociwgaSwgKHVpbnQzMl90KShpbnQzMl90KUxBTkVfUzE2KGIsIGkpKTsKKysgICAg ICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgY2FzZSAxNzQyOiAv LyB2dXBrbHN3IChsb3cgc2lnbmVkIHdvcmQg4oaSIGR3b3JkKQorKyAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VNjQociwgaSwgKHVpbnQ2NF90 KShpbnQ2NF90KUxBTkVfUzMyKGIsIGkpKTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2 cnQsIHIpOyBicmVhazsKKysKKysgICAgLy8gPT09IFBhY2sgKHNhdHVyYXRlIG9yIG1vZHVsbykg PT09CisrICAgIC8vCisrICAgIC8vIHZwayogZGVmaW5pdGlvbnMgYXJlIEJFLXNwZWNpZmllZDoK KysgICAgLy8gVlQuYnl0ZVswLi43XSA9IHNhdHVyYXRlKFZBLmhhbGZ3b3JkWzAuLjddKSwgVlQu Ynl0ZVs4Li4xNV0gPQorKyAgICAvLyBzYXR1cmF0ZShWQi5oYWxmd29yZFswLi43XSkgKEJFLW51 bWJlcmVkIHRocm91Z2hvdXQpLiBPbgorKyAgICAvLyBQUEM2NExFIHJlZ2lzdGVyIHN0b3JhZ2Ug dGhhdCBpbnZlcnRzIHRvOiBMRSBieXRlcyAwLTcgPSBWQidzCisrICAgIC8vIHNhdHVyYXRlZCBo YWxmd29yZHMsIExFIGJ5dGVzIDgtMTUgPSBWQSdzLgorKyAgICAvLworKyAgICAvLyAgIHZwa3No dXMgPSBYTyAyNzAgICAoczE2IOKGkiB1OCBzYXQpCisrICAgIC8vICAgdnBrc2hzcyA9IFhPIDM5 OCAgIChzMTYg4oaSIHM4IHNhdCkKKysgICAgLy8gICB2cGtzd3VzID0gWE8gMzM0ICAgKHMzMiDi hpIgdTE2IHNhdCkKKysgICAgLy8gICB2cGtzd3NzID0gWE8gNDYyICAgKHMzMiDihpIgczE2IHNh dCkKKysgICAgLy8gVGhlIHNpbSBwcmV2aW91c2x5IGhhZCB0aHJlZSBvZiB0aGVzZSBmb3VyIGxh YmVscyByb3RhdGVkCisrICAgIC8vICgyNzA9dnBrc2hzcywgMzM0PXZwa3NodXMsIDM5OD12cGtz d3VzKSBzbyBldmVyeSBpOHgxNi9pMTZ4OAorKyAgICAvLyBuYXJyb3dfKiBjYWxsIHNpbGVudGx5 IHVzZWQgdGhlIHdyb25nIHNhdHVyYXRpb24ga2luZCBvcgorKyAgICAvLyBsYW5lIHdpZHRoIOKA lCB2cGtzaHNzIHdhcyBjb21wbGV0ZWx5IGFic2VudC4KKysgICAgY2FzZSAzOTg6IHsgLy8gdnBr c2hzcyAoc2lnbmVkIGhhbGZ3b3JkIOKGkiBzaWduZWQgYnl0ZSkKKysgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgaW50IHYgPSBMQU5FX1MxNihiLCBpKTsKKysg ICAgICAgIGlmICh2ID4gSU5UOF9NQVgpIHYgPSBJTlQ4X01BWDsKKysgICAgICAgIGlmICh2IDwg SU5UOF9NSU4pIHYgPSBJTlQ4X01JTjsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50 OF90KShpbnQ4X3Qpdik7CisrICAgICAgfQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsg aSsrKSB7CisrICAgICAgICBpbnQgdiA9IExBTkVfUzE2KGEsIGkpOworKyAgICAgICAgaWYgKHYg PiBJTlQ4X01BWCkgdiA9IElOVDhfTUFYOworKyAgICAgICAgaWYgKHYgPCBJTlQ4X01JTikgdiA9 IElOVDhfTUlOOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgOCArIGksICh1aW50OF90KShpbnQ4 X3Qpdik7CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAg IH0KKysgICAgY2FzZSA0NjI6IHsgLy8gdnBrc3dzcyAoc2lnbmVkIHdvcmQg4oaSIHNpZ25lZCBo YWxmd29yZCkKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworKyAgICAgICAg aW50NjRfdCB2ID0gTEFORV9TMzIoYiwgaSk7CisrICAgICAgICBpZiAodiA+IElOVDE2X01BWCkg diA9IElOVDE2X01BWDsKKysgICAgICAgIGlmICh2IDwgSU5UMTZfTUlOKSB2ID0gSU5UMTZfTUlO OworKyAgICAgICAgU0VUX0xBTkVfVTE2KHIsIGksICh1aW50MTZfdCkoaW50MTZfdCl2KTsKKysg ICAgICB9CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysgICAgICAgIGlu dDY0X3QgdiA9IExBTkVfUzMyKGEsIGkpOworKyAgICAgICAgaWYgKHYgPiBJTlQxNl9NQVgpIHYg PSBJTlQxNl9NQVg7CisrICAgICAgICBpZiAodiA8IElOVDE2X01JTikgdiA9IElOVDE2X01JTjsK KysgICAgICAgIFNFVF9MQU5FX1UxNihyLCA0ICsgaSwgKHVpbnQxNl90KShpbnQxNl90KXYpOwor KyAgICAgIH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgMjcwOiB7IC8vIHZwa3NodXMgKHNpZ25lZCBoYWxmd29yZCDihpIgdW5zaWduZWQgYnl0 ZSwgc2F0KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisrICAgICAgICBp bnQgdiA9IExBTkVfUzE2KGIsIGkpOworKyAgICAgICAgaWYgKHYgPiBVSU5UOF9NQVgpIHYgPSBV SU5UOF9NQVg7CisrICAgICAgICBpZiAodiA8IDApIHYgPSAwOworKyAgICAgICAgU0VUX0xBTkVf VTgociwgaSwgKHVpbnQ4X3Qpdik7CisrICAgICAgfQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgODsgaSsrKSB7CisrICAgICAgICBpbnQgdiA9IExBTkVfUzE2KGEsIGkpOworKyAgICAgICAg aWYgKHYgPiBVSU5UOF9NQVgpIHYgPSBVSU5UOF9NQVg7CisrICAgICAgICBpZiAodiA8IDApIHYg PSAwOworKyAgICAgICAgU0VUX0xBTkVfVTgociwgOCArIGksICh1aW50OF90KXYpOworKyAgICAg IH0KKysgICAgICBzZXRWUkJ5dGVzKHZydCwgcik7IGJyZWFrOworKyAgICB9CisrICAgIGNhc2Ug MzM0OiB7IC8vIHZwa3N3dXMgKHNpZ25lZCB3b3JkIOKGkiB1bnNpZ25lZCBoYWxmd29yZCwgc2F0 KQorKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBpbnQ2NF90 IHYgPSBMQU5FX1MzMihiLCBpKTsKKysgICAgICAgIGlmICh2ID4gVUlOVDE2X01BWCkgdiA9IFVJ TlQxNl9NQVg7CisrICAgICAgICBpZiAodiA8IDApIHYgPSAwOworKyAgICAgICAgU0VUX0xBTkVf VTE2KHIsIGksICh1aW50MTZfdCl2KTsKKysgICAgICB9CisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA0OyBpKyspIHsKKysgICAgICAgIGludDY0X3QgdiA9IExBTkVfUzMyKGEsIGkpOworKyAg ICAgICAgaWYgKHYgPiBVSU5UMTZfTUFYKSB2ID0gVUlOVDE2X01BWDsKKysgICAgICAgIGlmICh2 IDwgMCkgdiA9IDA7CisrICAgICAgICBTRVRfTEFORV9VMTYociwgNCArIGksICh1aW50MTZfdCl2 KTsKKysgICAgICB9CisrICAgICAgc2V0VlJCeXRlcyh2cnQsIHIpOyBicmVhazsKKysgICAgfQor KworKyAgICAvLyA9PT0gUE9XRVI5IGNvbXBhcmUgbm90LWVxdWFsICh2Y21wbmV7YixoLHd9KSDi gJQgUmM9MCBhbmQgUmM9MSA9PT0KKysgICAgY2FzZSA3OiAgICAvLyB2Y21wbmViCisrICAgIGNh c2UgMTAzMTogLy8gdmNtcG5lYi4KKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpKysp IHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksIExBTkVfVTgoYSwgaSkgIT0gTEFORV9VOChi LCBpKSA/IDB4RkYgOiAwKTsKKysgICAgICB9CisrICAgICAgVkNNUF9ET05FKDE2LCAxKTsgYnJl YWs7CisrICAgIGNhc2UgNzE6ICAgLy8gdmNtcG5laAorKyAgICBjYXNlIDEwOTU6IC8vIHZjbXBu ZWguCisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgIFNFVF9M QU5FX1UxNihyLCBpLCBMQU5FX1UxNihhLCBpKSAhPSBMQU5FX1UxNihiLCBpKSA/IDB4RkZGRiA6 IDApOworKyAgICAgIH0KKysgICAgICBWQ01QX0RPTkUoOCwgMik7IGJyZWFrOworKyAgICBjYXNl IDEzNTogIC8vIHZjbXBuZXcKKysgICAgY2FzZSAxMTU5OiAvLyB2Y21wbmV3LgorKyAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisrICAgICAgICBTRVRfTEFORV9VMzIociwgaSwK KysgICAgICAgICAgICAgICAgICAgICBMQU5FX1UzMihhLCBpKSAhPSBMQU5FX1UzMihiLCBpKSA/ IDB4RkZGRkZGRkZ1IDogMCk7CisrICAgICAgfQorKyAgICAgIFZDTVBfRE9ORSg0LCA0KTsgYnJl YWs7CisrICAgICN1bmRlZiBWQ01QX0RPTkUKKysKKysgICAgLy8gPT09IFBvcHVsYXRpb24gY291 bnQgcGVyIGJ5dGUgKFBPV0VSOCkgPT09CisrICAgIGNhc2UgMTc5NTogeyAvLyB2cG9wY250YiAo WE8gMHg3MDMgPSAxNzk1KS4gVlJBIGZpZWxkIHVudXNlZC4KKysgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDE2OyBpKyspIHsKKysgICAgICAgIFNFVF9MQU5FX1U4KHIsIGksICh1aW50OF90KV9f YnVpbHRpbl9wb3Bjb3VudChMQU5FX1U4KGIsIGkpKSk7CisrICAgICAgfQorKyAgICAgIHNldFZS Qnl0ZXModnJ0LCByKTsgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IHZzbGRvaTogVlJU ID0gKFZSQSB8fCBWUkIpIHNoaWZ0ZWQgbGVmdCBieSBTSCBieXRlcyAoU0ggYXQgYml0cyAyMi4u MjUpID09PQorKyAgICBjYXNlIDQ0OiBjYXNlIDQ1OiBjYXNlIDQ2OiBjYXNlIDQ3OiB7CisrICAg ICAgLy8gU0ggaXMgYXQgYml0cyAyMi4uMjUgKFBQQykg4oaSIExTQiBiaXRzIDYuLjkgb2YgdGhl IGluc3RydWN0aW9uIOKGkgorKyAgICAgIC8vIChpbnN0cnVjdGlvbkJpdHMgPj4gNikgJiAweEYu IE91ciBYTyBtYXNrIGFscmVhZHkgYm90dG9tcy1vdXQgYXQKKysgICAgICAvLyBiaXQgMCwgc28g ZXh0cmFjdCBmcm9tIHRoZSByYXcgaW5zdHJ1Y3Rpb24uCisrICAgICAgdWludDMyX3Qgc2ggPSAo aW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDYpICYgMHhGOworKyAgICAgIHVpbnQ4X3QgY2F0 WzMyXTsKKysgICAgICBtZW1jcHkoY2F0LCBhLCAxNik7CisrICAgICAgbWVtY3B5KGNhdCArIDE2 LCBiLCAxNik7CisrICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisrICAgICAg ICByW2ldID0gY2F0W3NoICsgaV07CisrICAgICAgfQorKyAgICAgIHNldFZSQnl0ZXModnJ0LCBy KTsgYnJlYWs7CisrICAgIH0KKysKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0hf VU5TQUZFX1BSSU5URigKKysgICAgICAgICAgImRlY29kZVZNWDogdW5pbXBsZW1lbnRlZCBYTz0l dSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhvLAorKyAgICAgICAgICBpbnN0ci0+aW5zdHJ1Y3Rp b25CaXRzKCkpOworKyAgfQorKworK3ZteF9kb25lOgorKyAgI3VuZGVmIExBTkVfVTgKKysgICN1 bmRlZiBMQU5FX1M4CisrICAjdW5kZWYgTEFORV9VMTYKKysgICN1bmRlZiBMQU5FX1MxNgorKyAg I3VuZGVmIExBTkVfVTMyCisrICAjdW5kZWYgTEFORV9TMzIKKysgICN1bmRlZiBMQU5FX1U2NAor KyAgI3VuZGVmIExBTkVfUzY0CisrICAjdW5kZWYgU0VUX0xBTkVfVTgKKysgICN1bmRlZiBTRVRf TEFORV9VMTYKKysgICN1bmRlZiBTRVRfTEFORV9VMzIKKysgICN1bmRlZiBTRVRfTEFORV9VNjQK KysgIDsgIC8vIGVtcHR5IHN0bXQgZm9yIGxhYmVsCisrfQorKworKy8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisrLy8gZGVjb2RlVlNYOiBNYWpvciBvcGNvZGUgNjAgKFhYMS1mb3JtLCBYWDItZm9y bSkKKysvLyBtZnZzcmQsIG10dnNyZCwgbXR2c3J3eiwgbXR2c3J3cywgeHNjdmRwc3AsIHhzY3Zk cHNwbiwgeHNjdnNwZHAsCisrLy8geHNjdnNwZHBuLCB4eGJyZAorKworK3ZvaWQgU2ltdWxhdG9y OjpkZWNvZGVWU1goU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKSB7CisrICAvLyBWU1ggbWFqb3Igb3Bj b2RlIDYwIGNvdmVycyBYWDEvWFgyL1hYMy9YWDQgZm9ybXMuIFdlIGRpc3BhdGNoIFhYNAorKyAg Ly8gKHh4c2VsKSBmaXJzdCBiZWNhdXNlIGl0cyBYTyBpcyBvbmx5IDIgYml0cyAoYXQgSVNBIDI2 LTI3ID0gc2ltCisrICAvLyBiaXRzIDUtNCksIGFuZCB0aGUgWEMgcmVnaXN0ZXIgZmllbGQgYXQg SVNBIDIxLTI1IHdvdWxkIG90aGVyd2lzZQorKyAgLy8gcHJvZHVjZSAzMiBkaWZmZXJlbnQgOS1i aXQgWE8gdmFsdWVzIHRvIGVudW1lcmF0ZSBpbiB0aGUgc3dpdGNoLgorKyAgLy8gUGVlbCBvZmYg YW55IGluc3RydWN0aW9uIHdpdGggWFg0IFhPPTMgKHh4c2VsKS4gTm8gWFgyL1hYMyBvcCBjdXJy ZW50bHkKKysgIC8vIGVtaXR0ZWQgYnkgdGhlIEpJVCBoYXMgc2ltIGJpdHMgKDUsNCkgPT0gMy4K KysgIGlmIChpbnN0ci0+Yml0cyg1LCA0KSA9PSAzKSB7CisrICAgIC8vIHh4c2VsIFhULFhBLFhC LFhDICAoVkEtbGlrZSBYWDQtZm9ybSkuCisrICAgIC8vICAgWFRbaV0gPSAoWEFbaV0gJiB+WENb aV0pIHwgKFhCW2ldICYgWENbaV0pCisrICAgIC8vIFJlZ2lzdGVyIGZpZWxkczogWEEvWEIvWFQg cGVyLWJ5dGU7IFhDIGF0IElTQSBiaXRzIDIxLTI1IChzaW0KKysgICAgLy8gYml0cyAxMC02KSB3 aXRoIENYIGV4dGVuc2lvbiBhdCBJU0EgYml0IDI4IChzaW0gYml0IDMpLgorKyAgICBpbnQgeGEg PSBpbnQoaW5zdHItPnJhVmFsdWUoKSB8IChpbnN0ci0+Yml0KDIpIDw8IDUpKTsKKysgICAgaW50 IHhiID0gaW50KGluc3RyLT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1KSk7CisrICAg IGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwor KyAgICBpbnQgeGMgPSBpbnQoaW5zdHItPmJpdHMoMTAsIDYpIHwgKGluc3RyLT5iaXQoMykgPDwg NSkpOworKyAgICB1aW50OF90IGFiWzE2XSwgYmJbMTZdLCBjYlsxNl0sIHJlc3VsdFsxNl07Cisr ICAgIGdldFZTUjEyOCh4YSwgYWIpOworKyAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgZ2V0 VlNSMTI4KHhjLCBjYik7CisrICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAg ICAgIHJlc3VsdFtpXSA9ICh1aW50OF90KSgoYWJbaV0gJiB+Y2JbaV0pIHwgKGJiW2ldICYgY2Jb aV0pKTsKKysgICAgfQorKyAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7CisrICAgIHJldHVybjsK KysgIH0KKysKKysgIC8vIFRoZSByZW1haW5pbmcgZm9ybXMgKFhYMS9YWDIvWFgzKSBzaGFyZSBh IDktYml0IFhPIGF0IElTQSBiaXRzCisrICAvLyAyMS0yOSAoc2ltIGJpdHMgMTAtMikuIEZvciBY WDMgdGhpcyBpcyAoOC1iaXQgWE8gPDwgMSkgfCBBWDsgZm9yCisrICAvLyBYWDIgdGhlIGZ1bGwg OSBiaXRzIGFyZSB0aGUgWE8gKG5vIEFYIGZpZWxkKS4KKysgIHVpbnQzMl90IHhvID0gaW5zdHIt PmJpdHMoMTAsIDIpOworKyAgdWludDMyX3QgcnQgPSBpbnN0ci0+cnRWYWx1ZSgpOworKyAgdWlu dDMyX3QgcmIgPSBpbnN0ci0+cmJWYWx1ZSgpOworKworKyAgc3dpdGNoICh4bykgeworKyAgICAv LyB4c2N2ZHBzcCAvIHhzY3ZkcHNwbiAvIHhzY3ZzcGRwIC8geHNjdnNwZHBuIC8geHhicmQgYXJl CisrICAgIC8vIFhYMi1mb3JtOiBYVC9YQiBhcmUgZWFjaCA2LWJpdCAoNS1iaXQgZmllbGQgKyBU WC9CWCBleHRlbnNpb24gYXQKKysgICAgLy8gc2ltIGJpdHMgMC8xKS4gUG9zdC1QaGFzZS0yIHRo ZSBKSVQgZW1pdHMgdGhlc2Ugd2l0aCBTaW1kMTI4CisrICAgIC8vIHRhcmdldHMgKGVuY29kaW5n IDMyLTYzKSwgd2hpY2ggcmVxdWlyZSB0aGUgZXh0ZW5zaW9uIGJpdCB0bworKyAgICAvLyBzZWxl Y3QgVlItc3BhY2UgaW5zdGVhZCBvZiBGUFItc3BhY2UuIFRoZSBwcmV2aW91cyBjb2RlIHVzZWQK KysgICAgLy8gb25seSB0aGUgNS1iaXQgZmllbGQsIHNvIGFueSBWUi1zcGFjZSB0YXJnZXQgc2ls ZW50bHkgY2xvYmJlcmVkCisrICAgIC8vIEZQUiAwLi4zMSBhbmQgdGhlIHBvc3Qtc3BsYXQgZmJp dHMgaW4gc3BsYXRYNCBuZXZlciByZWFjaGVkIHRoZQorKyAgICAvLyB2ZWN0b3IgbGFuZXMuCisr ICAgIGNhc2UgMjY1OiB7CisrICAgICAgLy8geHNjdmRwc3A6IGRvdWJsZeKGknNpbmdsZSB3aXRo IHNOYU4gcXVpZXRpbmcuIFRoZSBJU0Egc2F5cworKyAgICAgIC8vIHJlc3VsdCBsYW5kcyBhdCBY VFswOjMxXSAoQkUgd29yZCAwID0gTEUgYnl0ZXMgMTIuLjE1KSBhbmQKKysgICAgICAvLyBYVFsz MjoxMjddIGlzICJ1bmRlZmluZWQiLiBSZWFsIFBPV0VSOSBzaWxpY29uIGFjdHVhbGx5CisrICAg ICAgLy8gZHVwbGljYXRlcyB0aGUgcmVzdWx0IGludG8gQkUgd29yZCAxIGFzIHdlbGwsIHNvIHRo ZSBieXRlcworKyAgICAgIC8vIGF0IExFIDguLjExIGhvbGQgdGhlIHNhbWUgc2luZ2xlLiBUaGUg SklUJ3MKKysgICAgICAvLyByZXBsYWNlTGFuZUZsb2F0MzJ4NCBsb3dlcmluZyBkZXBlbmRzIG9u IHRoaXM6IGl0IGZvbGxvd3MKKysgICAgICAvLyB4c2N2ZHBzcG4gd2l0aCBgeHhpbnNlcnR3IOKA piwgMTJgLCB3aGljaCByZWFkcyBYQi53b3JkWzFdCisrICAgICAgLy8gKExFIGJ5dGVzIDguLjEx KS4gWmVyb2luZyB0aG9zZSBieXRlcyBoZXJlIHdvdWxkIHNpbGVudGx5CisrICAgICAgLy8gbG9z ZSB0aGUgc2luZ2xlIHVuZGVyIHNpbS4gTWlycm9yIEhXLgorKyAgICAgIGludCB4dCA9IGludChy dCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGlu c3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3Qg YmJbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAgIC8vIFNvdXJjZSBkb3Vi bGUgYXQgQkUgRFcwID0gTEUgYnl0ZXMgOC4uMTUgb2YgeGIuCisrICAgICAgdWludDY0X3QgZGJp dHMgPSAwOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBkYml0cyB8PSAoKHVp bnQ2NF90KWJiWzggKyBpXSkgPDwgKGkgKiA4KTsKKysgICAgICBkb3VibGUgZnJiOworKyAgICAg IG1lbWNweSgmZnJiLCAmZGJpdHMsIHNpemVvZihmcmIpKTsKKysgICAgICBmbG9hdCByZXN1bHQg PSBkZW1vdGVEb3VibGVQcmVzZXJ2aW5nTmFOKGZyYik7CisrICAgICAgdWludDMyX3QgZmJpdHM7 CisrICAgICAgbWVtY3B5KCZmYml0cywgJnJlc3VsdCwgc2l6ZW9mKGZiaXRzKSk7CisrICAgICAg aWYgKChmYml0cyAmIDB4N0Y4MDAwMDB1KSA9PSAweDdGODAwMDAwdSAmJiAoZmJpdHMgJiAweDAw N0ZGRkZGdSkgIT0gMCkgeworKyAgICAgICAgZmJpdHMgfD0gMHgwMDQwMDAwMHU7CisrICAgICAg fQorKyAgICAgIHVpbnQ4X3Qgb3V0WzE2XTsKKysgICAgICBtZW1zZXQob3V0LCAwLCA4KTsKKysg ICAgICAvLyBCRSB3b3JkIDEgKExFIDguLjExKSBhbmQgQkUgd29yZCAwIChMRSAxMi4uMTUpIGJv dGggPSBmYml0cy4KKysgICAgICBmb3IgKGludCBvZmYgOiB7OCwgMTJ9KSB7CisrICAgICAgICBv dXRbb2ZmXSAgICAgPSAodWludDhfdCkoZmJpdHMpOworKyAgICAgICAgb3V0W29mZiArIDFdID0g KHVpbnQ4X3QpKGZiaXRzID4+IDgpOworKyAgICAgICAgb3V0W29mZiArIDJdID0gKHVpbnQ4X3Qp KGZiaXRzID4+IDE2KTsKKysgICAgICAgIG91dFtvZmYgKyAzXSA9ICh1aW50OF90KShmYml0cyA+ PiAyNCk7CisrICAgICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKKysgICAgICBicmVh azsKKysgICAgfQorKyAgICBjYXNlIDI2NzogeworKyAgICAgIC8vIHhzY3ZkcHNwbjogc2FtZSBh cyB4c2N2ZHBzcCBidXQgbm9uLXNpZ25hbGluZy4gU2FtZSBIVy1vYnNlcnZlZAorKyAgICAgIC8v IHdvcmQtMSBkdXBsaWNhdGlvbiAoc2VlIHhzY3ZkcHNwIGNvbW1lbnQgYWJvdmUpLgorKyAgICAg IGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBpbnQgeGIg PSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOwor KyAgICAgIHVpbnQ4X3QgYmJbMTZdOworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAg IHVpbnQ2NF90IGRiaXRzID0gMDsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykg ZGJpdHMgfD0gKCh1aW50NjRfdCliYls4ICsgaV0pIDw8IChpICogOCk7CisrICAgICAgZG91Ymxl IGZyYjsKKysgICAgICBtZW1jcHkoJmZyYiwgJmRiaXRzLCBzaXplb2YoZnJiKSk7CisrICAgICAg ZmxvYXQgcmVzdWx0ID0gZGVtb3RlRG91YmxlUHJlc2VydmluZ05hTihmcmIpOworKyAgICAgIHVp bnQzMl90IGZiaXRzOworKyAgICAgIG1lbWNweSgmZmJpdHMsICZyZXN1bHQsIHNpemVvZihmYml0 cykpOworKyAgICAgIHVpbnQ4X3Qgb3V0WzE2XTsKKysgICAgICBtZW1zZXQob3V0LCAwLCA4KTsK KysgICAgICBmb3IgKGludCBvZmYgOiB7OCwgMTJ9KSB7CisrICAgICAgICBvdXRbb2ZmXSAgICAg PSAodWludDhfdCkoZmJpdHMpOworKyAgICAgICAgb3V0W29mZiArIDFdID0gKHVpbnQ4X3QpKGZi aXRzID4+IDgpOworKyAgICAgICAgb3V0W29mZiArIDJdID0gKHVpbnQ4X3QpKGZiaXRzID4+IDE2 KTsKKysgICAgICAgIG91dFtvZmYgKyAzXSA9ICh1aW50OF90KShmYml0cyA+PiAyNCk7CisrICAg ICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKKysgICAgICBicmVhazsKKysgICAgfQor KyAgICBjYXNlIDM5MzogeworKyAgICAgIC8vIHh2Y3ZkcHNwOiBjb252ZXJ0IHR3byBkb3VibGVz IHRvIHR3byBzaW5nbGVzLCByZXBsaWNhdGluZyBlYWNoCisrICAgICAgLy8gcmVzdWx0IGFjcm9z cyBpdHMgZHdvcmQuIEJFIHdvcmRzID0gW3MoQkVfZHcwKSwgcyhCRV9kdzApLAorKyAgICAgIC8v IHMoQkVfZHcxKSwgcyhCRV9kdzEpXS4gU0lHTkFMSU5HIGZvcm0gcGVyIElTQTogc05hTiBpbnB1 dHMgYXJlCisrICAgICAgLy8gcXVpZXRlZCAoaGlnaC1vcmRlciBmcmFjdGlvbiBiaXQgc2V0IGlu IHJlc3VsdCkuCisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkp OworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+ IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl0sIG91dFsxNl07CisrICAgICAg Z2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgdWludDMyX3QgZmJpdHNbMl07CisrICAgICAgLy8g QkVfZHcwID0gTEUgYnl0ZXMgOC4uMTUsIEJFX2R3MSA9IExFIGJ5dGVzIDAuLjcuCisrICAgICAg Zm9yIChpbnQgZHcgPSAwOyBkdyA8IDI7IGR3KyspIHsKKysgICAgICAgIGludCBsZU9mZiA9IChk dyA9PSAwKSA/IDggOiAwOworKyAgICAgICAgdWludDY0X3QgZGJpdHMgPSAwOworKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgICAgZGJpdHMgfD0gKCh1aW50 NjRfdCliYltsZU9mZiArIGldKSA8PCAoaSAqIDgpOworKyAgICAgICAgfQorKyAgICAgICAgZG91 YmxlIGZyYjsKKysgICAgICAgIG1lbWNweSgmZnJiLCAmZGJpdHMsIHNpemVvZihmcmIpKTsKKysg ICAgICAgIGZsb2F0IHJlc3VsdCA9IGRlbW90ZURvdWJsZVByZXNlcnZpbmdOYU4oZnJiKTsKKysg ICAgICAgIG1lbWNweSgmZmJpdHNbZHddLCAmcmVzdWx0LCBzaXplb2YodWludDMyX3QpKTsKKysg ICAgICAgIGlmICgoZmJpdHNbZHddICYgMHg3RjgwMDAwMHUpID09IDB4N0Y4MDAwMDB1ICYmCisr ICAgICAgICAgICAgKGZiaXRzW2R3XSAmIDB4MDA3RkZGRkZ1KSAhPSAwKSB7CisrICAgICAgICAg IGZiaXRzW2R3XSB8PSAweDAwNDAwMDAwdTsgIC8vIHF1aWV0IHNOYU4gcmVzdWx0CisrICAgICAg ICB9CisrICAgICAgfQorKyAgICAgIC8vIExFIHdvcmRzOiBbcyhkdzEpLCBzKGR3MSksIHMoZHcw KSwgcyhkdzApXQorKyAgICAgIC8vIChMRSB3b3JkIDAgPSBCRSB3b3JkIDMgPSBzKGR3MSk7IExF IHdvcmQgMyA9IEJFIHdvcmQgMCA9IHMoZHcwKSkuCisrICAgICAgdWludDMyX3QgbGVXb3Jkc1s0 XSA9IHtmYml0c1sxXSwgZmJpdHNbMV0sIGZiaXRzWzBdLCBmYml0c1swXX07CisrICAgICAgZm9y IChpbnQgdyA9IDA7IHcgPCA0OyB3KyspIHsKKysgICAgICAgIG91dFt3ICogNF0gICAgID0gKHVp bnQ4X3QpbGVXb3Jkc1t3XTsKKysgICAgICAgIG91dFt3ICogNCArIDFdID0gKHVpbnQ4X3QpKGxl V29yZHNbd10gPj4gOCk7CisrICAgICAgICBvdXRbdyAqIDQgKyAyXSA9ICh1aW50OF90KShsZVdv cmRzW3ddID4+IDE2KTsKKysgICAgICAgIG91dFt3ICogNCArIDNdID0gKHVpbnQ4X3QpKGxlV29y ZHNbd10gPj4gMjQpOworKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIG91dCk7CisrICAg ICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAyMTY6ICAgIC8vIHh2Y3ZkcHN4d3M6IGRvdWJs ZSDihpIgc2lnbmVkIHdvcmQsIHNhdHVyYXRpbmcsIFJUWiAodmVjdG9yKQorKyAgICBjYXNlIDIw MDogeyAgLy8geHZjdmRwdXh3czogZG91YmxlIOKGkiB1bnNpZ25lZCB3b3JkLCBzYXR1cmF0aW5n LCBSVFogKHZlY3RvcikKKysgICAgICAvLyAgIHNyYzEgOj0gWEIuZHdvcmRfQkVbMF07IHNyYzIg Oj0gWEIuZHdvcmRfQkVbMV0KKysgICAgICAvLyAgIHIxIDo9IENvbnZlcnREUHRvU2F0KHNyYzEp OyByMiA6PSBDb252ZXJ0RFB0b1NhdChzcmMyKQorKyAgICAgIC8vICAgWFQud29yZF9CRVswXSA6 PSByMTsgWFQud29yZF9CRVsxXSA6PSByMSAocmVwbGljYXRlZCkKKysgICAgICAvLyAgIFhULndv cmRfQkVbMl0gOj0gcjI7IFhULndvcmRfQkVbM10gOj0gcjIgKHJlcGxpY2F0ZWQpCisrICAgICAg Ly8gU2F0dXJhdGlvbjogc2lnbmVkIGNsYW1wcyB0byBbSU5UMzJfTUlOLCBJTlQzMl9NQVhdIHdp dGggTmFO4oaSSU5UMzJfTUlOOworKyAgICAgIC8vICAgICAgICAgICAgIHVuc2lnbmVkIGNsYW1w cyB0byBbMCwgVUlOVDMyX01BWF0gd2l0aCBOYU7ihpIwIGFuZCBuZWfihpIwLgorKyAgICAgIC8v IEJFX2R3MCA9IExFIGJ5dGVzIDguLjE1OyBCRV9kdzEgPSBMRSBieXRlcyAwLi43LgorKyAgICAg IGJvb2wgaXNTaWduZWQgPSAoeG8gPT0gMjE2KTsKKysgICAgICBpbnQgeHQgPSBpbnQocnQgfCAo aW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+ aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50OF90IGJiWzE2 XSwgb3V0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICBjb25zdCBpbnQg c3JjT2Zmc2V0c1syXSA9IHs4LCAwfTsgICAvLyBCRV9kdzAgKExFIDguLjE1KSwgQkVfZHcxIChM RSAwLi43KQorKyAgICAgIHVpbnQzMl90IHJlc3VsdHNbMl07CisrICAgICAgZm9yIChpbnQgbGFu ZSA9IDA7IGxhbmUgPCAyOyBsYW5lKyspIHsKKysgICAgICAgIHVpbnQ2NF90IGRiaXRzID0gMDsK KysgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgODsgaisrKSB7CisrICAgICAgICAgIGRiaXRz IHw9ICgodWludDY0X3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIGpdKSA8PCAoaiAqIDgpOworKyAg ICAgICAgfQorKyAgICAgICAgZG91YmxlIGR2YWw7CisrICAgICAgICBtZW1jcHkoJmR2YWwsICZk Yml0cywgc2l6ZW9mKGR2YWwpKTsKKysgICAgICAgIGlmIChzdGQ6OmlzbmFuKGR2YWwpKSB7Cisr ICAgICAgICAgIHJlc3VsdHNbbGFuZV0gPSBpc1NpZ25lZCA/IDB4ODAwMDAwMDB1IDogMHU7Cisr ICAgICAgICB9IGVsc2UgaWYgKGlzU2lnbmVkKSB7CisrICAgICAgICAgIGlmIChkdmFsID49IDIx NDc0ODM2NDcuMCkgeworKyAgICAgICAgICAgIHJlc3VsdHNbbGFuZV0gPSAweDdGRkZGRkZGdTsK KysgICAgICAgICAgfSBlbHNlIGlmIChkdmFsIDw9IC0yMTQ3NDgzNjQ4LjApIHsKKysgICAgICAg ICAgICByZXN1bHRzW2xhbmVdID0gMHg4MDAwMDAwMHU7CisrICAgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgICAgcmVzdWx0c1tsYW5lXSA9ICh1aW50MzJfdCkoaW50MzJfdClkdmFsOyAgLy8g UlRaCisrICAgICAgICAgIH0KKysgICAgICAgIH0gZWxzZSB7ICAvLyB1bnNpZ25lZAorKyAgICAg ICAgICBpZiAoZHZhbCA8PSAwLjApIHsKKysgICAgICAgICAgICByZXN1bHRzW2xhbmVdID0gMHU7 CisrICAgICAgICAgIH0gZWxzZSBpZiAoZHZhbCA+PSA0Mjk0OTY3Mjk1LjApIHsKKysgICAgICAg ICAgICByZXN1bHRzW2xhbmVdID0gMHhGRkZGRkZGRnU7CisrICAgICAgICAgIH0gZWxzZSB7Cisr ICAgICAgICAgICAgcmVzdWx0c1tsYW5lXSA9ICh1aW50MzJfdClkdmFsOyAgLy8gUlRaCisrICAg ICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICB9CisrICAgICAgLy8gUmVwbGljYXRlZCBsYXlv dXQ6IEJFIHdvcmRzIFtyMSwgcjEsIHIyLCByMl07IGluIExFIGJ5dGVzCisrICAgICAgLy8gW3Iy LCByMiwgcjEsIHIxXSAoTEUgd29yZCAwID0gQkUgd29yZCAzID0gcjIsIExFIHdvcmQgMyA9IEJF IHdvcmQgMCA9IHIxKS4KKysgICAgICB1aW50MzJfdCBsZVdvcmRzWzRdID0ge3Jlc3VsdHNbMV0s IHJlc3VsdHNbMV0sIHJlc3VsdHNbMF0sIHJlc3VsdHNbMF19OworKyAgICAgIGZvciAoaW50IHcg PSAwOyB3IDwgNDsgdysrKSB7CisrICAgICAgICBvdXRbdyAqIDRdICAgICA9ICh1aW50OF90KWxl V29yZHNbd107CisrICAgICAgICBvdXRbdyAqIDQgKyAxXSA9ICh1aW50OF90KShsZVdvcmRzW3dd ID4+IDgpOworKyAgICAgICAgb3V0W3cgKiA0ICsgMl0gPSAodWludDhfdCkobGVXb3Jkc1t3XSA+ PiAxNik7CisrICAgICAgICBvdXRbdyAqIDQgKyAzXSA9ICh1aW50OF90KShsZVdvcmRzW3ddID4+ IDI0KTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAgIGJyZWFr OworKyAgICB9CisrICAgIGNhc2UgMjQ4OiAgICAvLyB4dmN2c3h3ZHA6IHNpZ25lZCB3b3JkIOKG kiBkb3VibGUgKHZlY3RvcikKKysgICAgY2FzZSAyMzI6IHsgIC8vIHh2Y3Z1eHdkcDogdW5zaWdu ZWQgd29yZCDihpIgZG91YmxlICh2ZWN0b3IpCisrICAgICAgLy8gICBzcmMxIDo9IFhCLndvcmRf QkVbMF07IHNyYzIgOj0gWEIud29yZF9CRVsyXQorKyAgICAgIC8vICAgWFQuZHdvcmRfQkVbMF0g Oj0gQ29udmVydChzcmMxKTsgWFQuZHdvcmRfQkVbMV0gOj0gQ29udmVydChzcmMyKQorKyAgICAg IC8vIEJFIHdvcmQgMCA9IExFIGJ5dGVzIDEyLi4xNTsgQkUgd29yZCAyID0gTEUgYnl0ZXMgNC4u Ny4KKysgICAgICAvLyBPdXRwdXQgQkUgZHdvcmQgMCA9IExFIGJ5dGVzIDguLjE1OyBCRSBkd29y ZCAxID0gTEUgYnl0ZXMgMC4uNy4KKysgICAgICAvLyBObyBOYU4gaGFuZGxpbmcgbmVlZGVkIChp bnRlZ2VyIHNvdXJjZSkuCisrICAgICAgYm9vbCBpc1NpZ25lZCA9ICh4byA9PSAyNDgpOworKyAg ICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICBpbnQg eGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUp OworKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZdOworKyAgICAgIGdldFZTUjEyOCh4Yiwg YmIpOworKyAgICAgIGNvbnN0IGludCBzcmNPZmZzZXRzWzJdID0gezEyLCA0fTsKKysgICAgICBj b25zdCBpbnQgZHN0T2Zmc2V0c1syXSA9IHs4LCAwfTsKKysgICAgICBmb3IgKGludCBsYW5lID0g MDsgbGFuZSA8IDI7IGxhbmUrKykgeworKyAgICAgICAgdWludDMyX3QgYml0cyA9ICh1aW50MzJf dCliYltzcmNPZmZzZXRzW2xhbmVdXSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50 MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgMV0gPDwgOCkgfAorKyAgICAgICAgICAgICAgICAg ICAgICAgICgodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSArIDJdIDw8IDE2KSB8CisrICAg ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltzcmNPZmZzZXRzW2xhbmVdICsgM10g PDwgMjQpOworKyAgICAgICAgZG91YmxlIGR2YWwgPSBpc1NpZ25lZCA/IChkb3VibGUpKGludDMy X3QpYml0cyA6IChkb3VibGUpYml0czsKKysgICAgICAgIHVpbnQ2NF90IGRiaXRzOworKyAgICAg ICAgbWVtY3B5KCZkYml0cywgJmR2YWwsIHNpemVvZihkYml0cykpOworKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKysgICAgICAgICAgb3V0W2RzdE9mZnNldHNbbGFuZV0g KyBpXSA9ICh1aW50OF90KShkYml0cyA+PiAoaSAqIDgpKTsKKysgICAgICAgIH0KKysgICAgICB9 CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAg IGNhc2UgNDU3OiB7CisrICAgICAgLy8geHZjdnNwZHA6IGNvbnZlcnQgdHdvIHNpbmdsZXMgdG8g dHdvIGRvdWJsZXMuIFNJR05BTElORyBmb3JtCisrICAgICAgLy8gcGVyIElTQTogc05hTiBpbnB1 dHMgYXJlIHF1aWV0ZWQgaW4gdGhlIHJlc3VsdCAoYml0IDUxIHNldCkuCisrICAgICAgLy8gICBz cmMxIDo9IFhCLndvcmRfQkVbMF07IHNyYzIgOj0gWEIud29yZF9CRVsyXQorKyAgICAgIC8vICAg WFQuZHdvcmRfQkVbMF0gOj0gQ29udmVydFNQdG9EUChzcmMxKQorKyAgICAgIC8vICAgWFQuZHdv cmRfQkVbMV0gOj0gQ29udmVydFNQdG9EUChzcmMyKQorKyAgICAgIC8vIEJFIHdvcmQgMCA9IExF IGJ5dGVzIDEyLi4xNTsgQkUgd29yZCAyID0gTEUgYnl0ZXMgNC4uNy4KKysgICAgICAvLyBPdXRw dXQgQkUgZHdvcmQgMCA9IExFIGJ5dGVzIDguLjE1OyBCRSBkd29yZCAxID0gTEUgYnl0ZXMgMC4u Ny4KKysgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAg ICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAx KSA8PCA1KTsKKysgICAgICB1aW50OF90IGJiWzE2XSwgb3V0WzE2XTsKKysgICAgICBnZXRWU1Ix MjgoeGIsIGJiKTsKKysgICAgICAvLyBzcmMxIGZyb20gQkUgd29yZCAwIChMRSAxMi4uMTUpLCBv dXRwdXQgZHdvcmQgYXQgTEUgOC4uMTUuCisrICAgICAgLy8gc3JjMiBmcm9tIEJFIHdvcmQgMiAo TEUgNC4uNyksICAgb3V0cHV0IGR3b3JkIGF0IExFIDAuLjcuCisrICAgICAgY29uc3QgaW50IHNy Y09mZnNldHNbMl0gPSB7MTIsIDR9OyAgIC8vIExFIGJ5dGUgb2Zmc2V0cyBvZiB3b3JkX0JFWzBd LCB3b3JkX0JFWzJdCisrICAgICAgY29uc3QgaW50IGRzdE9mZnNldHNbMl0gPSB7OCwgMH07ICAg IC8vIExFIGJ5dGUgb2Zmc2V0cyBvZiBkd29yZF9CRVswXSwgZHdvcmRfQkVbMV0KKysgICAgICBm b3IgKGludCBsYW5lID0gMDsgbGFuZSA8IDI7IGxhbmUrKykgeworKyAgICAgICAgdWludDMyX3Qg ZmJpdHMgPSAodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXV0gfAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAoKHVpbnQzMl90KWJiW3NyY09mZnNldHNbbGFuZV0gKyAxXSA8PCA4KSB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbc3JjT2Zmc2V0c1tsYW5lXSAr IDJdIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbc3Jj T2Zmc2V0c1tsYW5lXSArIDNdIDw8IDI0KTsKKysgICAgICAgIGZsb2F0IGZ2YWw7CisrICAgICAg ICBtZW1jcHkoJmZ2YWwsICZmYml0cywgc2l6ZW9mKGZ2YWwpKTsKKysgICAgICAgIGRvdWJsZSBk dmFsID0gcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTihmdmFsKTsKKysgICAgICAgIHVpbnQ2NF90 IGRiaXRzOworKyAgICAgICAgbWVtY3B5KCZkYml0cywgJmR2YWwsIHNpemVvZihkYml0cykpOwor KyAgICAgICAgaWYgKChkYml0cyAmIDB4N0ZGMDAwMDAwMDAwMDAwMFVMTCkgPT0gMHg3RkYwMDAw MDAwMDAwMDAwVUxMICYmCisrICAgICAgICAgICAgKGRiaXRzICYgMHgwMDBGRkZGRkZGRkZGRkZG VUxMKSAhPSAwKSB7CisrICAgICAgICAgIGRiaXRzIHw9IDB4MDAwODAwMDAwMDAwMDAwMFVMTDsg IC8vIHF1aWV0IHNOYU4gcmVzdWx0CisrICAgICAgICB9CisrICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IDg7IGkrKykgeworKyAgICAgICAgICBvdXRbZHN0T2Zmc2V0c1tsYW5lXSArIGldID0g KHVpbnQ4X3QpKGRiaXRzID4+IChpICogOCkpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAg ICBzZXRWU1IxMjgoeHQsIG91dCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAz Mjk6IHsKKysgICAgICAvLyB4c2N2c3BkcDogc2luZ2xl4oaSZG91YmxlIGZyb20gQkUgd29yZCAw IG9mIFhCLiBTSUdOQUxJTkcgZm9ybTsKKysgICAgICAvLyBhbiBzTmFOIGlucHV0IHlpZWxkcyBh IHFOYU4gcmVzdWx0IHdpdGggdGhlIGhpZ2gtb3JkZXIKKysgICAgICAvLyBmcmFjdGlvbiBiaXQg KHF1aWV0IGJpdCkgc2V0LgorKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0KDAp IDw8IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJp dHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3QgYmJbMTZdOworKyAgICAgIGdl dFZTUjEyOCh4YiwgYmIpOworKyAgICAgIC8vIEJFIHdvcmQgMCA9IExFIGJ5dGVzIDEyLi4xNSBv ZiB4Yi4KKysgICAgICB1aW50MzJfdCBmYml0cyA9ICh1aW50MzJfdCliYlsxMl0gfAorKyAgICAg ICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxM10gPDwgOCkgfAorKyAgICAgICAgICAg ICAgICAgICAgICAgKCh1aW50MzJfdCliYlsxNF0gPDwgMTYpIHwKKysgICAgICAgICAgICAgICAg ICAgICAgICgodWludDMyX3QpYmJbMTVdIDw8IDI0KTsKKysgICAgICBmbG9hdCBmdmFsOworKyAg ICAgIG1lbWNweSgmZnZhbCwgJmZiaXRzLCBzaXplb2YoZnZhbCkpOworKyAgICAgIGRvdWJsZSBk dmFsID0gcHJvbW90ZUZsb2F0UHJlc2VydmluZ05hTihmdmFsKTsKKysgICAgICB1aW50NjRfdCBk Yml0czsKKysgICAgICBtZW1jcHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7CisrICAg ICAgLy8gUXVpZXQgYW55IE5hTiByZXN1bHQgKHNpZ25hbGluZyBmb3JtKTogc2V0IGJpdCA1MSBv ZiBtYW50aXNzYS4KKysgICAgICBpZiAoKGRiaXRzICYgMHg3RkYwMDAwMDAwMDAwMDAwVUxMKSA9 PSAweDdGRjAwMDAwMDAwMDAwMDBVTEwgJiYKKysgICAgICAgICAgKGRiaXRzICYgMHgwMDBGRkZG RkZGRkZGRkZGVUxMKSAhPSAwKSB7CisrICAgICAgICBkYml0cyB8PSAweDAwMDgwMDAwMDAwMDAw MDBVTEw7CisrICAgICAgfQorKyAgICAgIHVpbnQ4X3Qgb3V0WzE2XTsKKysgICAgICBtZW1zZXQo b3V0LCAwLCA4KTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgb3V0WzggKyBp XSA9ICh1aW50OF90KShkYml0cyA+PiAoaSAqIDgpKTsKKysgICAgICBzZXRWU1IxMjgoeHQsIG91 dCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgY2FzZSAzMzE6IHsKKysgICAgICAvLyB4 c2N2c3BkcG46IG5vbi1zaWduYWxpbmcgdmFyaWFudCBvZiB4c2N2c3BkcC4KKysgICAgICBpbnQg eHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0gaW50 KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAg ICB1aW50OF90IGJiWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICB1aW50 MzJfdCBmYml0cyA9ICh1aW50MzJfdCliYlsxMl0gfAorKyAgICAgICAgICAgICAgICAgICAgICAg KCh1aW50MzJfdCliYlsxM10gPDwgOCkgfAorKyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50 MzJfdCliYlsxNF0gPDwgMTYpIHwKKysgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3Qp YmJbMTVdIDw8IDI0KTsKKysgICAgICBmbG9hdCBmdmFsOworKyAgICAgIG1lbWNweSgmZnZhbCwg JmZiaXRzLCBzaXplb2YoZnZhbCkpOworKyAgICAgIGRvdWJsZSBkdmFsID0gcHJvbW90ZUZsb2F0 UHJlc2VydmluZ05hTihmdmFsKTsKKysgICAgICB1aW50NjRfdCBkYml0czsKKysgICAgICBtZW1j cHkoJmRiaXRzLCAmZHZhbCwgc2l6ZW9mKGRiaXRzKSk7CisrICAgICAgdWludDhfdCBvdXRbMTZd OworKyAgICAgIG1lbXNldChvdXQsIDAsIDgpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg ODsgaSsrKSBvdXRbOCArIGldID0gKHVpbnQ4X3QpKGRiaXRzID4+IChpICogOCkpOworKyAgICAg IHNldFZTUjEyOCh4dCwgb3V0KTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDM0 NzogeworKyAgICAgIC8vIFBPV0VSOSBYWDItZm9ybSBvcHMgc2hhcmluZyBYTz0zNDc7IGRpc2Ft YmlndWF0ZWQgYnkgdGhlIDUtYml0CisrICAgICAgLy8gQSBpbW1lZGlhdGUgKHNpbSBiaXRzIDIw Li4xNik6CisrICAgICAgLy8gICBBPTAgIC0+IHhzeGV4cGRwICAoZXh0cmFjdCBiaWFzZWQgZXhw b25lbnQgaW50byAxMSBMU0JzIG9mIFhULmR3MCkKKysgICAgICAvLyAgIEE9MTYgLT4geHNjdmhw ZHAgIChGUDE2IC0+IEZQNjQpCisrICAgICAgLy8gICBBPTE3IC0+IHhzY3ZkcGhwICAoRlA2NCAt PiBGUDE2KQorKyAgICAgIC8vIEhhbGYgcGxhY2VtZW50OiB0aGUgRlAxNiB2YWx1ZSBsaXZlcyBh dCBMRSBieXRlcyA4Li45IG9mCisrICAgICAgLy8gdGhlIFZTUiAoPSBCRSBiaXRzIDQ4Li42MyBv ZgorKyAgICAgIC8vIGR3b3JkWzBdKSwgd2l0aCB0aGUgcmVzdCBvZiBkd29yZFswXSB6ZXJvZWQu IFRoaXMgbWF0Y2hlcyB0aGUKKysgICAgICAvLyBseHNpaHp4IGxheW91dCBhbHJlYWR5IHVzZWQg YnkgdGhlIEpJVC4KKysgICAgICB1aW50MzJfdCBhSW1tID0gKGluc3RyLT5pbnN0cnVjdGlvbkJp dHMoKSA+PiAxNikgJiAweDFGOworKyAgICAgIGludCB4dCA9IGludChydCB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0cnVjdGlv bkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCBvdXRbMTZd OworKyAgICAgIGdldFZTUjEyOCh4YiwgYmIpOworKyAgICAgIG1lbXNldChvdXQsIDAsIDE2KTsK KysgICAgICBpZiAoYUltbSA9PSAxNykgeworKyAgICAgICAgLy8geHNjdmRwaHA6IHJlYWQgRlA2 NCBmcm9tIEJFIDAuLjYzIG9mIFhCIChMRSBieXRlcyA4Li4xNSksCisrICAgICAgICAvLyBjb252 ZXJ0IHRvIEZQMTYsIHBsYWNlIGF0IExFIGJ5dGVzIDguLjkgb2YgWFQuCisrICAgICAgICBkb3Vi bGUgZDsKKysgICAgICAgIG1lbWNweSgmZCwgYmIgKyA4LCA4KTsKKysgICAgICAgIHVpbnQxNl90 IGggPSBqczo6ZmxvYXQxNihkKS50b1Jhd0JpdHMoKTsKKysgICAgICAgIG91dFs4XSA9ICh1aW50 OF90KShoICYgMHhGRik7CisrICAgICAgICBvdXRbOV0gPSAodWludDhfdCkoKGggPj4gOCkgJiAw eEZGKTsKKysgICAgICB9IGVsc2UgaWYgKGFJbW0gPT0gMTYpIHsKKysgICAgICAgIC8vIHhzY3Zo cGRwOiByZWFkIEZQMTYgZnJvbSBMRSBieXRlcyA4Li45IG9mIFhCLCBjb252ZXJ0IHRvIEZQNjQs CisrICAgICAgICAvLyBwbGFjZSBhdCBMRSBieXRlcyA4Li4xNSBvZiBYVC4KKysgICAgICAgIHVp bnQxNl90IGggPSAodWludDE2X3QpYmJbOF0gfCAoKHVpbnQxNl90KWJiWzldIDw8IDgpOworKyAg ICAgICAgZG91YmxlIGQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGpzOjpmbG9hdDE2Ojpmcm9tUmF3 Qml0cyhoKSk7CisrICAgICAgICBtZW1jcHkob3V0ICsgOCwgJmQsIDgpOworKyAgICAgIH0gZWxz ZSBpZiAoYUltbSA9PSAwKSB7CisrICAgICAgICAvLyB4c3hleHBkcDogcmVhZCBGUDY0IGZyb20g TEUgYnl0ZXMgOC4uMTUgb2YgWEIsIGV4dHJhY3QgYmlhc2VkCisrICAgICAgICAvLyBleHBvbmVu dCAoYml0cyAxLi4xMSBvZiB0aGUgSUVFRS03NTQgZG91YmxlID0gYml0cyA1Mi4uNjIgb2YKKysg ICAgICAgIC8vIHRoZSA2NC1iaXQgcGF0dGVybiksIHBsYWNlIGludG8gWFQuZHcwIHdpdGggcmVz dCB6ZXJvZWQuCisrICAgICAgICB1aW50NjRfdCBiaXRzID0gMDsKKysgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgODsgaSsrKSBiaXRzIHw9IHVpbnQ2NF90KGJiWzggKyBpXSkgPDwgKGkgKiA4 KTsKKysgICAgICAgIHVpbnQ2NF90IGV4cCA9IChiaXRzID4+IDUyKSAmIDB4N0ZGOworKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIG91dFs4ICsgaV0gPSAodWludDhfdCkoZXhw ID4+IChpICogOCkpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBNT1pfQ1JBU0hfVU5TQUZF X1BSSU5URigKKysgICAgICAgICAgICAiZGVjb2RlVlNYIFhPPTM0NyB3aXRoIHVuZXhwZWN0ZWQg QT0ldSAoaW5zdHIgMHglMDh4KSIsCisrICAgICAgICAgICAgYUltbSwgaW5zdHItPmluc3RydWN0 aW9uQml0cygpKTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCBvdXQpOworKyAgICAg IGJyZWFrOworKyAgICB9CisrICAgIGNhc2UgNDc1OiB7CisrICAgICAgLy8geHhicmQ6IGJ5dGUt cmV2ZXJzZSBlYWNoIGRvdWJsZXdvcmQuCisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3Ry LT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3Ry dWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsxNl0sIG91 dFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCA4OyBpKyspIG91dFtpXSA9IGJiWzcgLSBpXTsKKysgICAgICBmb3IgKGludCBpID0gMDsg aSA8IDg7IGkrKykgb3V0WzggKyBpXSA9IGJiWzE1IC0gaV07CisrICAgICAgc2V0VlNSMTI4KHh0 LCBvdXQpOworKyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vID09PSBYWDMtZm9ybSBz Y2FsYXI6IHhzbWF4amRwIC8geHNtaW5qZHAgKFBPV0VSOSkgPT09CisrICAgIC8vCisrICAgIC8v IHhze21heCxtaW59amRwIFhULCBYQSwgWEIuIFNjYWxhciBpbnB1dHMgYXQgQkUgYml0cyAwLi42 MyBvZgorKyAgICAvLyBYQSAvIFhCICg9IExFIGJ5dGVzIDguLjE1KTsgcmVzdWx0IGxhbmRzIGF0 IEJFIDAuLjYzIG9mIFhUCisrICAgIC8vICh1cHBlciBiaXRzICJ1bmRlZmluZWQiIHBlciBJU0Ep LgorKyAgICAvLworKyAgICAvLyBTZW1hbnRpY3MgbWF0Y2ggRUNNQS0yNjIgTWF0aC57bWF4LG1p bn0gLyB3YXNtIGY2NC57bWF4LG1pbn06CisrICAgIC8vICAgLSBOYU46IGlmIEEgaXMgTmFOIHJl dHVybiBBOyBlbHNlIGlmIEIgaXMgTmFOIHJldHVybiBCLiBzTmFOCisrICAgIC8vICAgICBwYXls b2FkIHByZXNlcnZlZCBiaXQtZm9yLWJpdCAoTk9UIHF1aWV0ZWQpLgorKyAgICAvLyAgIC0gwrEw IHRpZTogc2lnbmVkLXplcm8gb3JkZXJpbmcuIHhzbWF4amRwIHJldHVybnMgKzAgZm9yIGFueQor KyAgICAvLyAgICAgbWl4IG9mICgtMCwgKzApOyB4c21pbmpkcCByZXR1cm5zIC0wLgorKyAgICAv LyAgIC0gT3RoZXJ3aXNlOiBzdGFuZGFyZCBJRUVFIG1heCAvIG1pbi4KKysgICAgY2FzZSAyODg6 IGNhc2UgMjg5OiAgICAvLyB4c21heGpkcCAgKFhPOD0xNDQg4oaSIDktYml0IDI4OC8yODkpCisr ICAgIGNhc2UgMzA0OiBjYXNlIDMwNTogeyAgLy8geHNtaW5qZHAgIChYTzg9MTUyIOKGkiA5LWJp dCAzMDQvMzA1KQorKyAgICAgIGludCB4YSA9IGludChpbnN0ci0+cmFWYWx1ZSgpIHwgKGluc3Ry LT5iaXQoMikgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChpbnN0ci0+cmJWYWx1ZSgpIHwg KGluc3RyLT5iaXQoMSkgPDwgNSkpOworKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1 ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3QgYWJbMTZdLCBiYlsx Nl0sIG91dFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhhLCBhYik7CisrICAgICAgZ2V0VlNSMTI4 KHhiLCBiYik7CisrICAgICAgZG91YmxlIGEsIGI7CisrICAgICAgbWVtY3B5KCZhLCBhYiArIDgs IDgpOworKyAgICAgIG1lbWNweSgmYiwgYmIgKyA4LCA4KTsKKysgICAgICBib29sIGlzTWF4ID0g KHhvID4+IDEpID09IDE0NDsKKysgICAgICBkb3VibGUgcjsKKysgICAgICBpZiAoc3RkOjppc25h bihhKSkgeworKyAgICAgICAgciA9IGE7CisrICAgICAgfSBlbHNlIGlmIChzdGQ6OmlzbmFuKGIp KSB7CisrICAgICAgICByID0gYjsKKysgICAgICB9IGVsc2UgaWYgKGEgPT0gMC4wICYmIGIgPT0g MC4wKSB7CisrICAgICAgICAvLyBTaWduZWQtemVybyBvcmRlcmluZzogbWF4IHBpY2tzICswLCBt aW4gcGlja3MgLTAuCisrICAgICAgICBpZiAoaXNNYXgpIHsKKysgICAgICAgICAgciA9IHN0ZDo6 c2lnbmJpdChhKSA/IGIgOiBhOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgciA9IHN0 ZDo6c2lnbmJpdChhKSA/IGEgOiBiOworKyAgICAgICAgfQorKyAgICAgIH0gZWxzZSB7CisrICAg ICAgICByID0gaXNNYXggPyBzdGQ6Om1heChhLCBiKSA6IHN0ZDo6bWluKGEsIGIpOworKyAgICAg IH0KKysgICAgICBtZW1zZXQob3V0LCAwLCA4KTsKKysgICAgICBtZW1jcHkob3V0ICsgOCwgJnIs IDgpOworKyAgICAgIHNldFZTUjEyOCh4dCwgb3V0KTsKKysgICAgICBicmVhazsKKysgICAgfQor KworKyAgICAvLyAtLS0gVlNYIFhYMy1mb3JtOiB4eHBlcm1kaSAtLS0KKysgICAgLy8KKysgICAg Ly8geHhwZXJtZGkgWFQsIFhBLCBYQiwgRE06CisrICAgIC8vICAgWFQuRFcwID0gWEEuRFcoRE1b MF0pCisrICAgIC8vICAgWFQuRFcxID0gWEIuRFcoRE1bMV0pCisrICAgIC8vIEluIEJFLCBEVzAg aXMgTVNCLXNpZGUsIERXMSBpcyBMU0Itc2lkZS4gT24gUFBDNjRMRSByZWdpc3RlcgorKyAgICAv LyBzdG9yYWdlLCBEVzAgPSBMRSBieXRlcyA4LTE1IGFuZCBEVzEgPSBMRSBieXRlcyAwLTcuIFRo ZSBzaW0ncworKyAgICAvLyBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB1c2VkIHRoZSByZXZlcnNl ZCAiRFcwID0gTEUgMC03IgorKyAgICAvLyBjb252ZW50aW9uIHdoaWNoIGNhbmNlbGxlZCBmb3Ig c2VsZi1zd2FwIHJvdW5kLXRyaXBzIGJ1dAorKyAgICAvLyBwcm9kdWNlZCB3cm9uZyBoYWx2ZXMg d2hlbiBjaGFpbmVkIHdpdGggSVNBLWNvcnJlY3Qgb3BzCisrICAgIC8vIChtdHZzcmQsIHh4c3Bs dHcsIG1mdnNyZCkuCisrICAgIGNhc2UgMjA6IGNhc2UgMjE6ICAgICAgIC8vIHh4cGVybWRpIERN PTAKKysgICAgY2FzZSA4NDogY2FzZSA4NTogICAgICAgLy8geHhwZXJtZGkgRE09MQorKyAgICBj YXNlIDE0ODogY2FzZSAxNDk6ICAgICAvLyB4eHBlcm1kaSBETT0yICg9IHh4c3dhcGQgd2hlbiBY QT09WEIpCisrICAgIGNhc2UgMjEyOiBjYXNlIDIxMzogeyAgIC8vIHh4cGVybWRpIERNPTMKKysg ICAgICB1aW50OF90IGRtX2hpID0gKHhvID4+IDcpICYgMTsgIC8vIERNWzBdCisrICAgICAgdWlu dDhfdCBkbV9sbyA9ICh4byA+PiA2KSAmIDE7ICAvLyBETVsxXQorKyAgICAgIGludCB4YSA9IGlu dChpbnN0ci0+cmFWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMikgPDwgNSkpOworKyAgICAgIGludCB4 YiA9IGludChpbnN0ci0+cmJWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMSkgPDwgNSkpOworKyAgICAg IGludCB4dCA9IGludChpbnN0ci0+cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOwor KyAgICAgIHVpbnQ4X3QgeGFfYnl0ZXNbMTZdLCB4Yl9ieXRlc1sxNl0sIHJlc3VsdFsxNl07Cisr ICAgICAgZ2V0VlNSMTI4KHhhLCB4YV9ieXRlcyk7CisrICAgICAgZ2V0VlNSMTI4KHhiLCB4Yl9i eXRlcyk7CisrICAgICAgLy8gRFcwIGluIExFIHN0b3JhZ2UgaXMgYnl0ZXMgOC0xNTsgRFcxIGlz IGJ5dGVzIDAtNy4KKysgICAgICAvLyAgIFhULkRXMCAocmVzdWx0WzguLjE1XSkgPSBYQS5EVyhk bV9oaSkKKysgICAgICAvLyAgIFhULkRXMSAocmVzdWx0WzAuLjddKSAgPSBYQi5EVyhkbV9sbykK KysgICAgICAvLyBEVygwKSBpcyBhdCBMRSA4LCBEVygxKSBpcyBhdCBMRSAwLgorKyAgICAgIG1l bWNweShyZXN1bHQgKyA4LCB4YV9ieXRlcyArIChkbV9oaSA/IDAgOiA4KSwgOCk7CisrICAgICAg bWVtY3B5KHJlc3VsdCwgICAgIHhiX2J5dGVzICsgKGRtX2xvID8gMCA6IDgpLCA4KTsKKysgICAg ICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAg Ly8gLS0tIFZTWCBsb2dpY2FsIChYWDMtZm9ybSwgcHJpbWFyeSBvcGNvZGUgNjApIC0tLQorKyAg ICAvLworKyAgICAvLyBFYWNoIHRha2VzIHR3byA2LWJpdCBWU1Igc291cmNlcyBYQS9YQiBhbmQg d3JpdGVzIDYtYml0IFZTUgorKyAgICAvLyBkZXN0aW5hdGlvbiBYVC4gOC1iaXQgSVNBIFhPIGF0 IGJpdHMgMjEtMjg7IG91cgorKyAgICAvLyA5LWJpdCBYTyBleHRyYWN0aW9uIChiaXRzIDEwOjIp IGluY2x1ZGVzIHRoZSBBWCBiaXQgYXQgcG9zaXRpb24gMCwKKysgICAgLy8gc28gZWFjaCBvcCBh cHBlYXJzIGFzIHR3byBjb25zZWN1dGl2ZSB2YWx1ZXMgKEFYPTAgYW5kIEFYPTEpLgorKyAgICAv LworKyAgICAvLyAgIHh4bGFuZCBYVCxYQSxYQiAgICAgWE89MTMwICAoOS1iaXQ6IDI2MCwgMjYx KSAgWFQgPSBYQSAmIFhCCisrICAgIC8vICAgeHhsYW5kYyBYVCxYQSxYQiAgICBYTz0xMzggICgy NzYsIDI3NykgICAgICAgICBYVCA9IFhBICYgflhCCisrICAgIC8vICAgeHhsb3IgWFQsWEEsWEIg ICAgICBYTz0xNDYgICgyOTIsIDI5MykgICAgICAgICBYVCA9IFhBIHwgWEIKKysgICAgLy8gICB4 eGx4b3IgWFQsWEEsWEIgICAgIFhPPTE1NCAgKDMwOCwgMzA5KSAgICAgICAgIFhUID0gWEEgXiBY QgorKyAgICAvLyAgIHh4bG5vciBYVCxYQSxYQiAgICAgWE89MTYyICAoMzI0LCAzMjUpICAgICAg ICAgWFQgPSB+KFhBIHwgWEIpCisrICAgIC8vICAgeHhsb3JjIFhULFhBLFhCICAgICBYTz0xNzAg ICgzNDAsIDM0MSkgICAgICAgICBYVCA9IFhBIHwgflhCCisrICAgIC8vICAgeHhsbmFuZCBYVCxY QSxYQiAgICBYTz0xNzggICgzNTYsIDM1NykgICAgICAgICBYVCA9IH4oWEEgJiBYQikKKysgICAg Ly8gICB4eGxlcXYgWFQsWEEsWEIgICAgIFhPPTE4NiAgKDM3MiwgMzczKSAgICAgICAgIFhUID0g fihYQSBeIFhCKQorKyAgICAvLworKyAgICAvLyBUaGUgZW5jb2RpbmcgY29uc3RhbnRzIGluIEFz c2VtYmxlci1wcGM2NC5oIG1hdGNoOiBQUENfeHhsb3I9MHhGMDAwMDQ5MAorKyAgICAvLyBoYXMg Yml0cyA0LDcsMTAgc2V0IGluIGl0cyBiYXNlIChYTz0xNDYgaW4gdGhlIDgtYml0IGZpZWxkKSwg d2hpY2gKKysgICAgLy8gdW5kZXIgdGhlIHNpbXVsYXRvcidzIDktYml0IGV4dHJhY3Rpb24gZ2l2 ZXMgMioxNDY9MjkyIChBWD0wIGRlZmF1bHQpLgorKyAgICBjYXNlIDI2MDogY2FzZSAyNjE6ICAv LyB4eGxhbmQKKysgICAgY2FzZSAyNzY6IGNhc2UgMjc3OiAgLy8geHhsYW5kYworKyAgICBjYXNl IDI5MjogY2FzZSAyOTM6ICAvLyB4eGxvcgorKyAgICBjYXNlIDMwODogY2FzZSAzMDk6ICAvLyB4 eGx4b3IKKysgICAgY2FzZSAzMjQ6IGNhc2UgMzI1OiAgLy8geHhsbm9yCisrICAgIGNhc2UgMzQw OiBjYXNlIDM0MTogIC8vIHh4bG9yYworKyAgICBjYXNlIDM1NjogY2FzZSAzNTc6ICAvLyB4eGxu YW5kCisrICAgIGNhc2UgMzcyOiBjYXNlIDM3MzogIC8vIHh4bGVxdgorKyAgICB7CisrICAgICAg aW50IHhhID0gaW50KGluc3RyLT5yYVZhbHVlKCkgfCAoaW5zdHItPmJpdCgyKSA8PCA1KSk7Cisr ICAgICAgaW50IHhiID0gaW50KGluc3RyLT5yYlZhbHVlKCkgfCAoaW5zdHItPmJpdCgxKSA8PCA1 KSk7CisrICAgICAgaW50IHh0ID0gaW50KGluc3RyLT5ydFZhbHVlKCkgfCAoaW5zdHItPmJpdCgw KSA8PCA1KSk7CisrICAgICAgdWludDhfdCBhX2J5dGVzWzE2XSwgYl9ieXRlc1sxNl0sIHJlc3Vs dFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhhLCBhX2J5dGVzKTsKKysgICAgICBnZXRWU1IxMjgo eGIsIGJfYnl0ZXMpOworKyAgICAgIC8vIERpc3BhdGNoIG9uIHRoZSA4LWJpdCBJU0EgWE8gKGln bm9yaW5nIEFYIGJpdCBhdCBwb3NpdGlvbiAwKS4KKysgICAgICB1aW50MzJfdCB4bzggPSB4byA+ PiAxOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkrKykgeworKyAgICAgICAgdWlu dDhfdCBhID0gYV9ieXRlc1tpXSwgYiA9IGJfYnl0ZXNbaV07CisrICAgICAgICBzd2l0Y2ggKHhv OCkgeworKyAgICAgICAgICBjYXNlIDEzMDogcmVzdWx0W2ldID0gYSAmIGI7ICAgICAgICBicmVh azsgIC8vIHh4bGFuZAorKyAgICAgICAgICBjYXNlIDEzODogcmVzdWx0W2ldID0gYSAmIH5iOyAg ICAgICBicmVhazsgIC8vIHh4bGFuZGMKKysgICAgICAgICAgY2FzZSAxNDY6IHJlc3VsdFtpXSA9 IGEgfCBiOyAgICAgICAgYnJlYWs7ICAvLyB4eGxvcgorKyAgICAgICAgICBjYXNlIDE1NDogcmVz dWx0W2ldID0gYSBeIGI7ICAgICAgICBicmVhazsgIC8vIHh4bHhvcgorKyAgICAgICAgICBjYXNl IDE2MjogcmVzdWx0W2ldID0gKHVpbnQ4X3QpfihhIHwgYik7ICBicmVhazsgIC8vIHh4bG5vcgor KyAgICAgICAgICBjYXNlIDE3MDogcmVzdWx0W2ldID0gYSB8ICh1aW50OF90KX5iOyAgICBicmVh azsgIC8vIHh4bG9yYworKyAgICAgICAgICBjYXNlIDE3ODogcmVzdWx0W2ldID0gKHVpbnQ4X3Qp fihhICYgYik7ICBicmVhazsgIC8vIHh4bG5hbmQKKysgICAgICAgICAgY2FzZSAxODY6IHJlc3Vs dFtpXSA9ICh1aW50OF90KX4oYSBeIGIpOyAgYnJlYWs7ICAvLyB4eGxlcXYKKysgICAgICAgIH0K KysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOworKyAgICAgIGJyZWFrOwor KyAgICB9CisrCisrICAgIC8vID09PSBYWDItZm9ybTogeHhzcGx0dyAoc3BsYXQgd29yZCBmcm9t IFZSQltVSU1dIHRvIGFsbCA0IGxhbmVzKSA9PT0KKysgICAgLy8KKysgICAgLy8geHhzcGx0dzog VUlNIHNlbGVjdHMgb25lIG9mIGZvdXIgd29yZHMgaW4gQkUgbnVtYmVyaW5nLiBVSU09MAorKyAg ICAvLyDihpIgQkUgd29yZCAwIChNU0Igc2lkZSBvZiB0aGUgMTI4IGJpdHMpLiBPbiBQUEM2NExF IHJlZ2lzdGVyCisrICAgIC8vIHN0b3JhZ2UgdGhhdCBtYXBzIHRvIExFIHdvcmQgKDMgLSBVSU0p LiBXaXRoIHRoZSBpbnB1dAorKyAgICAvLyB7MHgxMTExMTExMSwgMHgyMjIyMjIyMiwgMHgzMzMz MzMzMywgMHg0NDQ0NDQ0NH06IFVJTT0wCisrICAgIC8vIHNwbGF0cyAweDQ0NDQ0NDQ0ICg9IExF IHdvcmQgMyksIFVJTT0zIHNwbGF0cyAweDExMTExMTExCisrICAgIC8vICg9IExFIHdvcmQgMCku IFRoZSBKSVQgZW1pdHMgeHhzcGx0dyBVSU09MSBhZnRlciBtdHZzcmQgb24gdGhlCisrICAgIC8v IFBPV0VSOCBzcGxhdFg0IHBhdGgg4oCUIG10dnNyZCBwdXRzIHRoZSBHUFIncyBsb3cgMzIgYml0 cyBpbiBCRQorKyAgICAvLyB3b3JkIDEgKD0gTEUgd29yZCAyIG9uIEhXKSwgc28geHhzcGx0dyBV SU09MSBwaWNrcyB1cCBleGFjdGx5CisrICAgIC8vIHRoYXQgd29yZCBhbmQgc3BsYXRzIGl0IHRv IGV2ZXJ5IGxhbmUuCisrICAgIGNhc2UgMTY0OiB7ICAvLyB4eHNwbHR3CisrICAgICAgaW50IHh0 ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChy YiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAg dWludDMyX3QgdWltID0gKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAxNikgJiAweDM7Cisr ICAgICAgdWludDMyX3QgbGVJZHggPSAzIC0gdWltOyAgLy8gQkUgd29yZCBVSU0g4oaSIExFIHdv cmQgKDMtVUlNKQorKyAgICAgIHVpbnQ4X3QgYmJbMTZdLCByZXN1bHRbMTZdOworKyAgICAgIGdl dFZTUjEyOCh4YiwgYmIpOworKyAgICAgIHVpbnQzMl90IHdvcmQgPSAodWludDMyX3QpYmJbbGVJ ZHggKiA0XSB8CisrICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbbGVJZHggKiA0 ICsgMV0gPDwgOCkgfAorKyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJiW2xlSWR4 ICogNCArIDJdIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJb bGVJZHggKiA0ICsgM10gPDwgMjQpOworKyAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KSB7CisrICAgICAgICByZXN1bHRbaSAqIDRdICAgICA9ICh1aW50OF90KSh3b3JkICYgMHhGRik7 CisrICAgICAgICByZXN1bHRbaSAqIDQgKyAxXSA9ICh1aW50OF90KSgod29yZCA+PiA4KSAmIDB4 RkYpOworKyAgICAgICAgcmVzdWx0W2kgKiA0ICsgMl0gPSAodWludDhfdCkoKHdvcmQgPj4gMTYp ICYgMHhGRik7CisrICAgICAgICByZXN1bHRbaSAqIDQgKyAzXSA9ICh1aW50OF90KSgod29yZCA+ PiAyNCkgJiAweEZGKTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOwor KyAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIC8vID09PSBYWDItZm9ybTogeHhleHRyYWN0 dXcgKGV4dHJhY3Qgd29yZCBhdCBCRSBieXRlIFVJTSwgcGxhY2UgYXQgQkUgd29yZCAxKSA9PT0K KysgICAgLy8KKysgICAgLy8geHhleHRyYWN0dXcgWFQsIFhCLCBVSU06CisrICAgIC8vICAgQnl0 ZXMgWzQ6N10gb2YgWFQgcmVjZWl2ZSBieXRlcyBbVUlNOlVJTSszXSBvZiBYQi4gQnl0ZXMgWzA6 M10KKysgICAgLy8gICBhbmQgWzg6MTVdIG9mIFhUIGFyZSBzZXQgdG8gemVyby4KKysgICAgLy8g VUlNIOKIiCB7MCwgNCwgOCwgMTJ9IChjYWxsZXIgcmVzcG9uc2libGUgZm9yIGFsaWdubWVudCku CisrICAgIC8vIEJFIGJ5dGUgaSDihpQgTEUgYnl0ZSAoMTUtaSksIHNvIHRoZSB3b3JkIGF0IFhC IEJFIGJ5dGVzIFVJTS4uVUlNKzMKKysgICAgLy8gc2l0cyBhdCBYQiBMRSBieXRlcyAoMTItVUlN KS4uKDE1LVVJTSksIGFuZCBsYW5kcyBhdCBYVCBMRSBieXRlcworKyAgICAvLyA4Li4xMSAoPSBY VCBCRSB3b3JkIDEpLgorKyAgICBjYXNlIDE2NTogeyAgLy8geHhleHRyYWN0dXcKKysgICAgICBp bnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgaW50IHhiID0g aW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysg ICAgICB1aW50MzJfdCB1aW0gPSAoaW5zdHItPmluc3RydWN0aW9uQml0cygpID4+IDE2KSAmIDB4 RjsKKysgICAgICB1aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsKKysgICAgICBnZXRWU1IxMjgo eGIsIGJiKTsKKysgICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisrICAg ICAgLy8gcmVzdWx0LkxFWzguLjExXSA9IFhCLkxFWygxMi1VSU0pLi4oMTUtVUlNKV0gKHByZXNl cnZlcyBieXRlIG9yZGVyKS4KKysgICAgICBtZW1jcHkocmVzdWx0ICsgOCwgYmIgKyAoMTIgLSB1 aW0pLCA0KTsKKysgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7Cisr ICAgIH0KKysKKysgICAgY2FzZSAxODA6IHsKKysgICAgICAvLyB4eHNwbHRpYiBYVCwgSU1NOCAo UE9XRVI5LCBJU0EgMy4wKTogc3BsYXQgOC1iaXQgaW1tZWRpYXRlIHRvCisrICAgICAgLy8gYWxs IDE2IGJ5dGVzIG9mIFhULiBUaGUgZW5jb2RlciB3cml0ZXMgYGltbTggPDwgMTFgLCBzbyBJTU04 CisrICAgICAgLy8gb2NjdXBpZXMgTEUgYml0cyAxMS4uMTg7IFRYIGJpdCBhdCBMRSBiaXQgMCBz ZWxlY3RzIHVwcGVyIFZTUi4KKysgICAgICB1aW50MzJfdCBpbW04ID0gaW5zdHItPmJpdHMoMTgs IDExKTsKKysgICAgICBpbnQgeHQgPSBpbnQoaW5zdHItPnJ0VmFsdWUoKSB8IChpbnN0ci0+Yml0 KDApIDw8IDUpKTsKKysgICAgICB1aW50OF90IHh0X2J5dGVzWzE2XTsKKysgICAgICBtZW1zZXQo eHRfYnl0ZXMsICh1aW50OF90KWltbTgsIDE2KTsKKysgICAgICBzZXRWU1IxMjgoeHQsIHh0X2J5 dGVzKTsKKysgICAgICBicmVhazsKKysgICAgfQorKyAgICBjYXNlIDE4MTogeworKyAgICAgIC8v IHh4aW5zZXJ0dyBYVCwgWEIsIFVJTSAoUE9XRVI5LCBJU0EgMy4wKTogY29weSBYQlszMi4uNjNd ICh0aGUKKysgICAgICAvLyBsb3cgMzIgYml0cyBvZiBYQidzIEJFIGRvdWJsZXdvcmQgMCwgd2hp Y2ggbGl2ZXMgYXQgTEUgYnl0ZXMKKysgICAgICAvLyA4LTExIG9mIFhCKSBpbnRvIFhUIGF0IEJF IGJ5dGUgcG9zaXRpb24gVUlNLiBVSU0g4oiIIHswLDQsOCwxMn07CisrICAgICAgLy8gZGVzdCBv Y2N1cGllcyBYVCBMRSBieXRlcyAoMTItVUlNKS4uKDE1LVVJTSkuIE90aGVyIGJ5dGVzIG9mCisr ICAgICAgLy8gWFQgYXJlIHByZXNlcnZlZC4gVUlNIGF0IFBQQyBiaXRzIDExLTE1ID0gTEUgYml0 cyAxNi0yMDsgVFgvQlgKKysgICAgICAvLyBhdCBMRSBiaXRzIDAvMS4KKysgICAgICB1aW50MzJf dCB1aW0gPSBpbnN0ci0+Yml0cygyMCwgMTYpOworKyAgICAgIGludCB4dCA9IGludChpbnN0ci0+ cnRWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChp bnN0ci0+cmJWYWx1ZSgpIHwgKGluc3RyLT5iaXQoMSkgPDwgNSkpOworKyAgICAgIHVpbnQ4X3Qg eGJfYnl0ZXNbMTZdLCB4dF9ieXRlc1sxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCB4Yl9ieXRl cyk7CisrICAgICAgZ2V0VlNSMTI4KHh0LCB4dF9ieXRlcyk7CisrICAgICAgbWVtY3B5KHh0X2J5 dGVzICsgKDEyIC0gdWltKSwgeGJfYnl0ZXMgKyA4LCA0KTsKKysgICAgICBzZXRWU1IxMjgoeHQs IHh0X2J5dGVzKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgICAvLyA9PT0gWFgyLWZv cm06IHh2YWJzc3AgLyB4dmFic2RwICh2ZWN0b3IgYWJzb2x1dGUgdmFsdWUpID09PQorKyAgICBj YXNlIDQwODogY2FzZSA0MDk6IGNhc2UgNDEwOiBjYXNlIDQxMTogeyAgLy8geHZhYnNzcCArIEFY L0JYIGJpdHMKKysgICAgICBpbnQgeHQgPSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7 CisrICAgICAgaW50IHhiID0gaW50KHJiIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4g MSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50OF90IGJiWzE2XSwgcmVzdWx0WzE2XTsKKysgICAg ICBnZXRWU1IxMjgoeGIsIGJiKTsKKysgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykg eworKyAgICAgICAgdWludDMyX3QgYml0cyA9ICh1aW50MzJfdCliYltpICogNF0gfAorKyAgICAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbaSAqIDQgKyAxXSA8PCA4KSB8CisrICAg ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDJdIDw8IDE2KSB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDNdIDw8IDI0KTsK KysgICAgICAgIGJpdHMgJj0gMHg3RkZGRkZGRnU7ICAvLyBjbGVhciBzaWduIGJpdAorKyAgICAg ICAgcmVzdWx0W2kgKiA0XSAgICAgPSAodWludDhfdCkoYml0cyAmIDB4RkYpOworKyAgICAgICAg cmVzdWx0W2kgKiA0ICsgMV0gPSAodWludDhfdCkoKGJpdHMgPj4gOCkgJiAweEZGKTsKKysgICAg ICAgIHJlc3VsdFtpICogNCArIDJdID0gKHVpbnQ4X3QpKChiaXRzID4+IDE2KSAmIDB4RkYpOwor KyAgICAgICAgcmVzdWx0W2kgKiA0ICsgM10gPSAodWludDhfdCkoKGJpdHMgPj4gMjQpICYgMHhG Rik7CisrICAgICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAgICBicmVh azsKKysgICAgfQorKyAgICBjYXNlIDQ3MjogY2FzZSA0NzM6IGNhc2UgNDc0OiB7ICAgICAgICAg ICAgLy8geHZhYnNkcCAoNDc1IHVzZWQgYnkgeHhicmQpCisrICAgICAgaW50IHh0ID0gaW50KHJ0 IHwgKGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5z dHItPmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBi YlsxNl0sIHJlc3VsdFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgIHVpbnQ2NF90IGJpdHMgPSAwOwor KyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIGJpdHMgfD0gKCh1aW50NjRfdCli YltpICogOCArIGtdKSA8PCAoayAqIDgpOworKyAgICAgICAgYml0cyAmPSAweDdGRkZGRkZGRkZG RkZGRkZVTEw7CisrICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgcmVzdWx0W2kg KiA4ICsga10gPSAodWludDhfdCkoKGJpdHMgPj4gKGsgKiA4KSkgJiAweEZGKTsKKysgICAgICB9 CisrICAgICAgc2V0VlNSMTI4KHh0LCByZXN1bHQpOworKyAgICAgIGJyZWFrOworKyAgICB9Cisr CisrICAgIC8vID09PSBYWDItZm9ybSB1bmFyeSB2ZWN0b3IgZmxvYXQgb3BzIChzaW5nbGUgWEIg b3BlcmFuZCwgbm8gQVgpID09PQorKyAgICAvLworKyAgICAvLyBFbmNvZGluZzogb3Bjb2RlIDYw LCBiaXRzIDYtMTA9WFQsIDExLTE1IHJlc2VydmVkLCAxNi0yMD1YQiwKKysgICAgLy8gMjEtMjkg PSA5LWJpdCBYTyAoZnVsbCBmaWVsZCksIDMwPUJYLCAzMT1UWC4gRXh0cmFjdGlvbiBnaXZlcyB1 cworKyAgICAvLyB4byA9IFhPOSBkaXJlY3RseSAobm8gQVggYml0KS4gRXZlcnkgb3AgYmVsb3cg aGFzIGEgdW5pcXVlIFhPOS4KKysgICAgLy8KKysgICAgLy8gICB4dnNxcnRzcCAgWE85PTEzOSAg UFBDX3h2c3FydHNwPTB4RjAwMDAyMkMKKysgICAgLy8gICB4dnNxcnRkcCAgWE85PTIwMyAgUFBD X3h2c3FydGRwPTB4RjAwMDAzMkMKKysgICAgLy8gICB4dm5lZ3NwICAgWE85PTQ0MSAgUFBDX3h2 bmVnc3A9MHhGMDAwMDZFNAorKyAgICAvLyAgIHh2bmVnZHAgICBYTzk9NTA1ICBQUENfeHZuZWdk cD0weEYwMDAwN0U0CisrICAgIC8vICAgeHZyc3BpcCAgIFhPOT0xNjkgIFBQQ194dnJzcGlwPTB4 RjAwMDAyQTQgICAocm91bmQgK2luZiA9IGNlaWwpCisrICAgIC8vICAgeHZyc3BpeiAgIFhPOT0x NTMgIFBQQ194dnJzcGl6PTB4RjAwMDAyNjQgICAocm91bmQgdG93YXJkIDAgPSB0cnVuYykKKysg ICAgLy8gICB4dnJzcGltICAgWE85PTE4NSAgUFBDX3h2cnNwaW09MHhGMDAwMDJFNCAgIChyb3Vu ZCAtaW5mID0gZmxvb3IpCisrICAgIC8vICAgeHZyc3BpYyAgIFhPOT0xNzEgIFBQQ194dnJzcGlj PTB4RjAwMDAyQUMgICAocm91bmQgcGVyIEZQU0NSKQorKyAgICAvLyAgIHh2cmRwaXAgICBYTzk9 MjMzICBQUENfeHZyZHBpcD0weEYwMDAwM0E0CisrICAgIC8vICAgeHZyZHBpeiAgIFhPOT0yMTcg IFBQQ194dnJkcGl6PTB4RjAwMDAzNjQKKysgICAgLy8gICB4dnJkcGltICAgWE85PTI0OSAgUFBD X3h2cmRwaW09MHhGMDAwMDNFNAorKyAgICAvLyAgIHh2cmRwaWMgICBYTzk9MjM1ICBQUENfeHZy ZHBpYz0weEYwMDAwM0FDCisrICAgIC8vICAgeHZjdnNwc3h3cyBYTzk9MTUyIFBQQ194dmN2c3Bz eHdzPTB4RjAwMDAyNjAgIChmMzIg4oaSIHMzMiwgc2F0KQorKyAgICAvLyAgIHh2Y3ZzcHV4d3Mg WE85PTEzNiBQUENfeHZjdnNwdXh3cz0weEYwMDAwMjIwICAoZjMyIOKGkiB1MzIsIHNhdCkKKysg ICAgLy8gICB4dmN2c3h3c3AgWE85PTE4NCAgUFBDX3h2Y3ZzeHdzcD0weEYwMDAwMkUwICAgKHMz MiDihpIgZjMyKQorKyAgICAvLyAgIHh2Y3Z1eHdzcCBYTzk9MTY4ICBQUENfeHZjdnV4d3NwPTB4 RjAwMDAyQTAgICAodTMyIOKGkiBmMzIpCisrICAgIGNhc2UgMTM5OiBjYXNlIDIwMzogICAgIC8v IHh2c3FydHNwIC8geHZzcXJ0ZHAKKysgICAgY2FzZSA0NDE6IGNhc2UgNTA1OiAgICAgLy8geHZu ZWdzcCAvIHh2bmVnZHAKKysgICAgY2FzZSAxNjk6IGNhc2UgMjMzOiAgICAgLy8geHZyc3BpcCAv IHh2cmRwaXAgKGNlaWwpCisrICAgIGNhc2UgMTUzOiBjYXNlIDIxNzogICAgIC8vIHh2cnNwaXog LyB4dnJkcGl6ICh0cnVuYykKKysgICAgY2FzZSAxODU6IGNhc2UgMjQ5OiAgICAgLy8geHZyc3Bp bSAvIHh2cmRwaW0gKGZsb29yKQorKyAgICBjYXNlIDE3MTogY2FzZSAyMzU6ICAgICAvLyB4dnJz cGljIC8geHZyZHBpYyAocm91bmQtdG8tbmVhcmVzdCkKKysgICAgY2FzZSAxMzY6IGNhc2UgMTUy OiAgICAgLy8geHZjdnNwdXh3cyAvIHh2Y3ZzcHN4d3MKKysgICAgY2FzZSAxNjg6IGNhc2UgMTg0 OiB7ICAgLy8geHZjdnV4d3NwIC8geHZjdnN4d3NwCisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwg KGluc3RyLT5iaXQoMCkgPDwgNSkpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHIt Pmluc3RydWN0aW9uQml0cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBiYlsx Nl0sIHJlc3VsdFsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgYm9vbCBp c1NwID0gKHhvID09IDEzOSB8fCB4byA9PSA0NDEgfHwgeG8gPT0gMTY5IHx8IHhvID09IDE1MyB8 fAorKyAgICAgICAgICAgICAgICAgICB4byA9PSAxODUgfHwgeG8gPT0gMTcxIHx8IHhvID09IDEz NiB8fCB4byA9PSAxNTIgfHwKKysgICAgICAgICAgICAgICAgICAgeG8gPT0gMTY4IHx8IHhvID09 IDE4NCk7CisrICAgICAgYXV0byBnZXRGMzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpKSAtPiBm bG9hdCB7CisrICAgICAgICB1aW50MzJfdCBiID0gKHVpbnQzMl90KWJ1ZltpICogNF0gfAorKyAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgMV0gPDwgOCkgfAorKyAg ICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgMl0gPDwgMTYpIHwKKysg ICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KWJ1ZltpICogNCArIDNdIDw8IDI0KTsKKysg ICAgICAgIGZsb2F0IGY7IG1lbWNweSgmZiwgJmIsIHNpemVvZihmKSk7IHJldHVybiBmOworKyAg ICAgIH07CisrICAgICAgYXV0byBzZXRGMzIgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBmbG9h dCBmKSB7CisrICAgICAgICB1aW50MzJfdCBiOyBtZW1jcHkoJmIsICZmLCBzaXplb2YoYikpOwor KyAgICAgICAgYnVmW2kqNF09KHVpbnQ4X3QpYjsgYnVmW2kqNCsxXT0odWludDhfdCkoYj4+OCk7 CisrICAgICAgICBidWZbaSo0KzJdPSh1aW50OF90KShiPj4xNik7IGJ1ZltpKjQrM109KHVpbnQ4 X3QpKGI+PjI0KTsKKysgICAgICB9OworKyAgICAgIGF1dG8gZ2V0RjY0ID0gW10odWludDhfdCog YnVmLCBpbnQgaSkgLT4gZG91YmxlIHsKKysgICAgICAgIHVpbnQ2NF90IGIgPSAwOworKyAgICAg ICAgZm9yIChpbnQgaz0wO2s8ODtrKyspIGIgfD0gKCh1aW50NjRfdClidWZbaSo4K2tdKTw8KGsq OCk7CisrICAgICAgICBkb3VibGUgZDsgbWVtY3B5KCZkLCAmYiwgc2l6ZW9mKGQpKTsgcmV0dXJu IGQ7CisrICAgICAgfTsKKysgICAgICBhdXRvIHNldEY2NCA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50 IGksIGRvdWJsZSBkKSB7CisrICAgICAgICB1aW50NjRfdCBiOyBtZW1jcHkoJmIsICZkLCBzaXpl b2YoYikpOworKyAgICAgICAgZm9yIChpbnQgaz0wO2s8ODtrKyspIGJ1ZltpKjgra109KHVpbnQ4 X3QpKGI+PihrKjgpKTsKKysgICAgICB9OworKyAgICAgIC8vIEludGVnZXIgbGFuZSByZWFkL3dy aXRlICh1c2VkIGJ5IGNvbnZlcnNpb24gb3BzKS4KKysgICAgICBhdXRvIHNldFUzMiA9IFtdKHVp bnQ4X3QqIGJ1ZiwgaW50IGksIHVpbnQzMl90IHYpIHsKKysgICAgICAgIGJ1ZltpKjRdPSh1aW50 OF90KXY7IGJ1ZltpKjQrMV09KHVpbnQ4X3QpKHY+PjgpOworKyAgICAgICAgYnVmW2kqNCsyXT0o dWludDhfdCkodj4+MTYpOyBidWZbaSo0KzNdPSh1aW50OF90KSh2Pj4yNCk7CisrICAgICAgfTsK KysgICAgICAvLyBTYXR1cmF0ZWQgZmxvYXTihpJpbnQgY29udmVyc2lvbiBwZXIgUG93ZXIgSVNB IHYzLjBCOiBpbnB1dCBOYU4gbWFwcworKyAgICAgIC8vIHRvIDA7IG91dC1vZi1yYW5nZSBzYXR1 cmF0ZXMgdG8gdGhlIGV4dHJlbWUgb2YgdGhlIGRlc3RpbmF0aW9uIHR5cGUuCisrICAgICAgYXV0 byBmcDJzeHcgPSBbXShkb3VibGUgZikgLT4gdWludDMyX3QgeworKyAgICAgICAgaWYgKHN0ZDo6 aXNuYW4oZikpIHJldHVybiAwOworKyAgICAgICAgaWYgKGYgPj0gKGRvdWJsZSlJTlQzMl9NQVgp IHJldHVybiAodWludDMyX3QpSU5UMzJfTUFYOworKyAgICAgICAgaWYgKGYgPD0gKGRvdWJsZSlJ TlQzMl9NSU4pIHJldHVybiAodWludDMyX3QpSU5UMzJfTUlOOworKyAgICAgICAgcmV0dXJuICh1 aW50MzJfdCkoaW50MzJfdClzdGQ6OnRydW5jKGYpOworKyAgICAgIH07CisrICAgICAgYXV0byBm cDJ1eHcgPSBbXShkb3VibGUgZikgLT4gdWludDMyX3QgeworKyAgICAgICAgaWYgKHN0ZDo6aXNu YW4oZikpIHJldHVybiAwOworKyAgICAgICAgaWYgKGYgPj0gKGRvdWJsZSlVSU5UMzJfTUFYKSBy ZXR1cm4gVUlOVDMyX01BWDsKKysgICAgICAgIGlmIChmIDw9IDAuMCkgcmV0dXJuIDA7CisrICAg ICAgICByZXR1cm4gKHVpbnQzMl90KXN0ZDo6dHJ1bmMoZik7CisrICAgICAgfTsKKysKKysgICAg ICBpZiAoaXNTcCkgeworKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKKysg ICAgICAgICAgZmxvYXQgdiA9IGdldEYzMihiYiwgaSk7CisrICAgICAgICAgIGZsb2F0IG91dCA9 IDAuMGY7CisrICAgICAgICAgIHVpbnQzMl90IGlvdXQgPSAwOworKyAgICAgICAgICBib29sIGlz SW50ID0gZmFsc2U7CisrICAgICAgICAgIHN3aXRjaCAoeG8pIHsKKysgICAgICAgICAgICBjYXNl IDEzOTogb3V0ID0gc3RkOjpzcXJ0KHYpOyBicmVhazsgICAgICAgICAgICAgICAgLy8geHZzcXJ0 c3AKKysgICAgICAgICAgICBjYXNlIDQ0MTogb3V0ID0gLXY7IGJyZWFrOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8geHZuZWdzcAorKyAgICAgICAgICAgIGNhc2UgMTY5OiBvdXQgPSBzdGQ6 OmNlaWwodik7IGJyZWFrOyAgICAgICAgICAgICAgICAvLyB4dnJzcGlwCisrICAgICAgICAgICAg Y2FzZSAxNTM6IG91dCA9IHN0ZDo6dHJ1bmModik7IGJyZWFrOyAgICAgICAgICAgICAgIC8vIHh2 cnNwaXoKKysgICAgICAgICAgICBjYXNlIDE4NTogb3V0ID0gc3RkOjpmbG9vcih2KTsgYnJlYWs7 ICAgICAgICAgICAgICAgLy8geHZyc3BpbQorKyAgICAgICAgICAgIGNhc2UgMTcxOiBvdXQgPSBz dGQ6Om5lYXJieWludCh2KTsgYnJlYWs7ICAgICAgICAgICAvLyB4dnJzcGljCisrICAgICAgICAg ICAgY2FzZSAxNTI6IGlvdXQgPSBmcDJzeHcodik7IGlzSW50ID0gdHJ1ZTsgYnJlYWs7ICAgIC8v IHh2Y3ZzcHN4d3MKKysgICAgICAgICAgICBjYXNlIDEzNjogaW91dCA9IGZwMnV4dyh2KTsgaXNJ bnQgPSB0cnVlOyBicmVhazsgICAgLy8geHZjdnNwdXh3cworKyAgICAgICAgICAgIGNhc2UgMTg0 OiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geHZjdnN4d3Nw CisrICAgICAgICAgICAgICB1aW50MzJfdCBiaXRzID0gKHVpbnQzMl90KWJiW2kqNF0gfAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbaSo0KzFdPDw4KSB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrMl08PDE2KSB8 CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrM108PDI0 KTsKKysgICAgICAgICAgICAgIG91dCA9IChmbG9hdCkoaW50MzJfdCliaXRzOworKyAgICAgICAg ICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGNhc2UgMTY4OiB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8geHZjdnV4d3NwCisrICAg ICAgICAgICAgICB1aW50MzJfdCBiaXRzID0gKHVpbnQzMl90KWJiW2kqNF0gfAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYmJbaSo0KzFdPDw4KSB8CisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrMl08PDE2KSB8CisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCliYltpKjQrM108PDI0KTsKKysg ICAgICAgICAgICAgIG91dCA9IChmbG9hdCkodWludDMyX3QpYml0czsKKysgICAgICAgICAgICAg IGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgfQorKyAgICAgICAgICBpZiAoaXNJ bnQpIHNldFUzMihyZXN1bHQsIGksIGlvdXQpOworKyAgICAgICAgICBlbHNlIHNldEYzMihyZXN1 bHQsIGksIG91dCk7CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICAgIGRvdWJsZSB2ID0gZ2V0RjY0KGJi LCBpKTsKKysgICAgICAgICAgZG91YmxlIG91dCA9IDAuMDsKKysgICAgICAgICAgc3dpdGNoICh4 bykgeworKyAgICAgICAgICAgIGNhc2UgMjAzOiBvdXQgPSBzdGQ6OnNxcnQodik7IGJyZWFrOyAg ICAgICAgICAgICAgICAvLyB4dnNxcnRkcAorKyAgICAgICAgICAgIGNhc2UgNTA1OiBvdXQgPSAt djsgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB4dm5lZ2RwCisrICAgICAgICAg ICAgY2FzZSAyMzM6IG91dCA9IHN0ZDo6Y2VpbCh2KTsgYnJlYWs7ICAgICAgICAgICAgICAgIC8v IHh2cmRwaXAKKysgICAgICAgICAgICBjYXNlIDIxNzogb3V0ID0gc3RkOjp0cnVuYyh2KTsgYnJl YWs7ICAgICAgICAgICAgICAgLy8geHZyZHBpegorKyAgICAgICAgICAgIGNhc2UgMjQ5OiBvdXQg PSBzdGQ6OmZsb29yKHYpOyBicmVhazsgICAgICAgICAgICAgICAvLyB4dnJkcGltCisrICAgICAg ICAgICAgY2FzZSAyMzU6IG91dCA9IHN0ZDo6bmVhcmJ5aW50KHYpOyBicmVhazsgICAgICAgICAg IC8vIHh2cmRwaWMKKysgICAgICAgICAgfQorKyAgICAgICAgICBzZXRGNjQocmVzdWx0LCBpLCBv dXQpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBzZXRWU1IxMjgoeHQsIHJlc3VsdCk7 CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFhYMy1mb3JtIHZlY3RvciBm bG9hdCBjb21wYXJlIChlcSwgZ3QsIGdlKSA9PT0KKysgICAgLy8gVGhlIHdhc20gU0lNRCBjb21w YXJlcyBlbWl0IHRoZXNlIGFuZCB1c2UgdGhlIHJlc3VsdCBhcyBhIGJpdG1hc2suCisrICAgIC8v IFBlciBQb3dlciBJU0E6IHJlc3VsdCBpcyBhbGwtMXMgZm9yIHRydWUgbGFuZXMsIGFsbC0wcyBm b3IgZmFsc2UKKysgICAgLy8gKGZvciB0aGUgbm9uLXJlY29yZGluZyBmb3JtOyBiaXQgMCBvZiBY TyBzZWxlY3RzIHJlY29yZCBmb3JtIHdoaWNoCisrICAgIC8vIHdlIGRvbid0IG1vZGVsIOKAlCB3 YXNtIGRvZXNuJ3QgcmVhZCBDUjYgaGVyZSkuCisrICAgIC8vIEVuY29kaW5nczoKKysgICAgLy8g ICAweEYwMDAwMjE4IHh2Y21wZXFzcCAoWE84PTY3KSDihpIgWE85ID0gMTM0LzEzNSAoK0FYKS4K KysgICAgLy8gICAweEYwMDAwMjU4IHh2Y21wZ3RzcCAoWE84PTc1KSDihpIgWE85ID0gMTUwLzE1 MS4KKysgICAgLy8gICAweEYwMDAwMjk4IHh2Y21wZ2VzcCAoWE84PTgzKSDihpIgWE85ID0gMTY2 LzE2Ny4KKysgICAgLy8gICAweEYwMDAwMzE4IHh2Y21wZXFkcCAoWE84PTk5KSDihpIgWE85ID0g MTk4LzE5OS4KKysgICAgLy8gICAweEYwMDAwMzU4IHh2Y21wZ3RkcCAoWE84PTEwNykg4oaSIFhP OSA9IDIxNC8yMTUuCisrICAgIC8vICAgMHhGMDAwMDM5OCB4dmNtcGdlZHAgKFhPOD0xMTUpIOKG kiBYTzkgPSAyMzAvMjMxLgorKyAgICAvLyBSYz0xIHJlY29yZCBmb3JtIGZsaXBzIElTQSBiaXQg MjEgKHNpbSBiaXQgMTApLCB5aWVsZGluZyBYTzkrMjU2CisrICAgIC8vIChub3QgYWRqYWNlbnQg dG8gdGhlIFJjPTAgc2xvdCkuIHdhc20gbmV2ZXIgZW1pdHMgdGhlIHJlY29yZCBmb3JtLgorKyAg ICBjYXNlIDEzNDogY2FzZSAxMzU6ICAgIC8vIHh2Y21wZXFzcCAoWE84PTY3KQorKyAgICBjYXNl IDE5ODogY2FzZSAxOTk6ICAgIC8vIHh2Y21wZXFkcCAoWE84PTk5KQorKyAgICBjYXNlIDE1MDog Y2FzZSAxNTE6ICAgIC8vIHh2Y21wZ3RzcCAoWE84PTc1KQorKyAgICBjYXNlIDIxNDogY2FzZSAy MTU6ICAgIC8vIHh2Y21wZ3RkcCAoWE84PTEwNykKKysgICAgY2FzZSAxNjY6IGNhc2UgMTY3OiAg ICAvLyB4dmNtcGdlc3AgKFhPOD04MykKKysgICAgY2FzZSAyMzA6IGNhc2UgMjMxOiB7ICAvLyB4 dmNtcGdlZHAgKFhPOD0xMTUpCisrICAgICAgaW50IHh0ID0gaW50KHJ0IHwgKGluc3RyLT5iaXQo MCkgPDwgNSkpOworKyAgICAgIHVpbnQzMl90IHJhID0gaW5zdHItPnJhVmFsdWUoKTsKKysgICAg ICBpbnQgeGEgPSBpbnQocmEgfCAoKGluc3RyLT5pbnN0cnVjdGlvbkJpdHMoKSA+PiAyKSAmIDEp IDw8IDUpOworKyAgICAgIGludCB4YiA9IGludChyYiB8ICgoaW5zdHItPmluc3RydWN0aW9uQml0 cygpID4+IDEpICYgMSkgPDwgNSk7CisrICAgICAgdWludDhfdCBhYlsxNl0sIGJiWzE2XSwgcmVz dWx0WzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKKysgICAgICBnZXRWU1IxMjgoeGIs IGJiKTsKKysgICAgICB1aW50MzJfdCBvcDggPSB4byA+PiAxOyAgLy8gY2Fub25pY2FsIDgtYml0 IFhPCisrICAgICAgYm9vbCBpc0YzMiA9IChvcDggPT0gNjcgfHwgb3A4ID09IDc1IHx8IG9wOCA9 PSA4Myk7CisrICAgICAgYm9vbCBpc0VxICA9IChvcDggPT0gNjcgfHwgb3A4ID09IDk5KTsKKysg ICAgICBib29sIGlzR3QgID0gKG9wOCA9PSA3NSB8fCBvcDggPT0gMTA3KTsKKysgICAgICBib29s IGlzR2UgID0gKG9wOCA9PSA4MyB8fCBvcDggPT0gMTE1KTsKKysgICAgICAodm9pZClpc0dlOwor KyAgICAgIGF1dG8gY21wRjMyID0gWyZdKGludCBpKSAtPiBib29sIHsKKysgICAgICAgIHVpbnQz Ml90IGFCaXRzID0gKHVpbnQzMl90KWFiW2kgKiA0XSB8CisrICAgICAgICAgICAgICAgICAgICAg ICAgICgodWludDMyX3QpYWJbaSAqIDQgKyAxXSA8PCA4KSB8CisrICAgICAgICAgICAgICAgICAg ICAgICAgICgodWludDMyX3QpYWJbaSAqIDQgKyAyXSA8PCAxNikgfAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAoKHVpbnQzMl90KWFiW2kgKiA0ICsgM10gPDwgMjQpOworKyAgICAgICAgdWlu dDMyX3QgYkJpdHMgPSAodWludDMyX3QpYmJbaSAqIDRdIHwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDFdIDw8IDgpIHwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgKCh1aW50MzJfdCliYltpICogNCArIDJdIDw8IDE2KSB8CisrICAgICAgICAgICAg ICAgICAgICAgICAgICgodWludDMyX3QpYmJbaSAqIDQgKyAzXSA8PCAyNCk7CisrICAgICAgICBm bG9hdCBmYSwgZmI7CisrICAgICAgICBtZW1jcHkoJmZhLCAmYUJpdHMsIHNpemVvZihmYSkpOwor KyAgICAgICAgbWVtY3B5KCZmYiwgJmJCaXRzLCBzaXplb2YoZmIpKTsKKysgICAgICAgIGlmIChp c0VxKSByZXR1cm4gZmEgPT0gZmI7CisrICAgICAgICBpZiAoaXNHdCkgcmV0dXJuIGZhID4gZmI7 CisrICAgICAgICByZXR1cm4gZmEgPj0gZmI7CisrICAgICAgfTsKKysgICAgICBhdXRvIGNtcEY2 NCA9IFsmXShpbnQgaSkgLT4gYm9vbCB7CisrICAgICAgICB1aW50NjRfdCBhQml0cyA9IDAsIGJC aXRzID0gMDsKKysgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgODsgaysrKSBhQml0cyB8PSAo KHVpbnQ2NF90KWFiW2kgKiA4ICsga10pIDw8IChrICogOCk7CisrICAgICAgICBmb3IgKGludCBr ID0gMDsgayA8IDg7IGsrKykgYkJpdHMgfD0gKCh1aW50NjRfdCliYltpICogOCArIGtdKSA8PCAo ayAqIDgpOworKyAgICAgICAgZG91YmxlIGZhLCBmYjsKKysgICAgICAgIG1lbWNweSgmZmEsICZh Qml0cywgc2l6ZW9mKGZhKSk7CisrICAgICAgICBtZW1jcHkoJmZiLCAmYkJpdHMsIHNpemVvZihm YikpOworKyAgICAgICAgaWYgKGlzRXEpIHJldHVybiBmYSA9PSBmYjsKKysgICAgICAgIGlmIChp c0d0KSByZXR1cm4gZmEgPiBmYjsKKysgICAgICAgIHJldHVybiBmYSA+PSBmYjsKKysgICAgICB9 OworKyAgICAgIGlmIChpc0YzMikgeworKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBp KyspIHsKKysgICAgICAgICAgdWludDMyX3QgbWFzayA9IGNtcEYzMihpKSA/IDB4RkZGRkZGRkZ1 IDogMDsKKysgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyBrKyspIHsKKysgICAgICAg ICAgICByZXN1bHRbaSAqIDQgKyBrXSA9ICh1aW50OF90KSgobWFzayA+PiAoayAqIDgpKSAmIDB4 RkYpOworKyAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgfSBlbHNlIHsKKysgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisrICAgICAgICAgIHVpbnQ2NF90IG1hc2sg PSBjbXBGNjQoaSkgPyBVSU5UNjRfTUFYIDogMDsKKysgICAgICAgICAgZm9yIChpbnQgayA9IDA7 IGsgPCA4OyBrKyspIHsKKysgICAgICAgICAgICByZXN1bHRbaSAqIDggKyBrXSA9ICh1aW50OF90 KSgobWFzayA+PiAoayAqIDgpKSAmIDB4RkYpOworKyAgICAgICAgICB9CisrICAgICAgICB9Cisr ICAgICAgfQorKyAgICAgIHNldFZTUjEyOCh4dCwgcmVzdWx0KTsKKysgICAgICBicmVhazsKKysg ICAgfQorKworKyAgICAvLyA9PT0gWFgzLWZvcm0gdmVjdG9yIGZsb2F0IGFyaXRobWV0aWMgPT09 CisrICAgIC8vIEVuY29kaW5nOiBiaXRzIDYtMTA9WFQsIDExLTE1PVhBLCAxNi0yMD1YQiwgMjEt Mjg9WE8gKDggYml0cyksIDI5PUFYLAorKyAgICAvLyAzMD1CWCwgMzE9VFguIFdlIGRpc3BhdGNo ZWQgYWJvdmUgdXNpbmcgYGJpdHMoMTAsIDIpYCB3aGljaCBpcyBiaXRzCisrICAgIC8vIDIxLTI5 ICg5IGJpdHMpIOKAlCB0aGF0IGluY2x1ZGVzIHRoZSBBWCByZWdpc3Rlci1leHRlbnNpb24gYml0 LCB3aGljaAorKyAgICAvLyBjaGFuZ2VzIGZvciBldmVyeSBYQSBpbiB7MC4uMzF9IHZzIHszMi4u NjN9LiBUbyBtYXRjaCBhbGwgNAorKyAgICAvLyAoQVgsQlgpIGNvbWJpbmF0aW9ucyBvZiBhbiBY WDMgb3Agd2UgdXNlIGBjYXNlIHhvMyB8IDB8MXwyfDNgIHdoZXJlCisrICAgIC8vIHhvMyA9ICg4 LWJpdCBYTykgPDwgMSAoYmVjYXVzZSBYTyBvY2N1cGllcyBiaXRzIDEuLjggb2Ygb3VyIDktYml0 CisrICAgIC8vIGV4dHJhY3Rpb24pLiBIZWxwZXIgbWFjcm86IGVhY2ggY2FzZSBjb3ZlcnMgZm91 ciBsYWJlbHMuCisrICAgICNkZWZpbmUgWFgzX0NBU0VfQkFTRShuYW1lKSBcCisrICAgICAgY2Fz ZSAoKG5hbWUpIHwgMCk6IGNhc2UgKChuYW1lKSB8IDEpOgorKyAgICBjYXNlIDEyODogIGNhc2Ug MTI5OiAgLy8geHZhZGRzcDogNCDDlyBmMzIgYWRkIChYTz02NCDihpIgYml0cyAxLi44ID0gMTI4 KQorKyAgICBjYXNlIDE5MjogIGNhc2UgMTkzOiAgLy8geHZhZGRkcAorKyAgICBjYXNlIDE0NDog IGNhc2UgMTQ1OiAgLy8geHZzdWJzcAorKyAgICBjYXNlIDIwODogIGNhc2UgMjA5OiAgLy8geHZz dWJkcAorKyAgICBjYXNlIDE2MDogIGNhc2UgMTYxOiAgLy8geHZtdWxzcAorKyAgICBjYXNlIDIy NDogIGNhc2UgMjI1OiAgLy8geHZtdWxkcAorKyAgICBjYXNlIDE3NjogIGNhc2UgMTc3OiAgLy8g eHZkaXZzcAorKyAgICBjYXNlIDI0MDogIGNhc2UgMjQxOiAgLy8geHZkaXZkcAorKyAgICBjYXNl IDM4NDogIGNhc2UgMzg1OiAgLy8geHZtYXhzcAorKyAgICBjYXNlIDQ0ODogIGNhc2UgNDQ5OiAg Ly8geHZtYXhkcAorKyAgICBjYXNlIDQwMDogIGNhc2UgNDAxOiAgLy8geHZtaW5zcAorKyAgICBj YXNlIDQ2NDogIGNhc2UgNDY1OiAgLy8geHZtaW5kcAorKyAgICB7CisrICAgICAgLy8gUmUtZXh0 cmFjdCB0aGUgY2Fub25pY2FsIDgtYml0IFhYMyBYTy4KKysgICAgICB1aW50MzJfdCB4bzMgPSAo eG8gPj4gMSk7CisrICAgICAgKHZvaWQpeG8zOworKyAgICAgIGludCB4dCA9IGludChydCB8IChp bnN0ci0+Yml0KDApIDw8IDUpKTsKKysgICAgICB1aW50MzJfdCByYSA9IGluc3RyLT5yYVZhbHVl KCk7CisrICAgICAgaW50IHhhID0gaW50KHJhIHwgKChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkg Pj4gMikgJiAxKSA8PCA1KTsKKysgICAgICBpbnQgeGIgPSBpbnQocmIgfCAoKGluc3RyLT5pbnN0 cnVjdGlvbkJpdHMoKSA+PiAxKSAmIDEpIDw8IDUpOworKyAgICAgIHVpbnQ4X3QgYWJbMTZdLCBi YlsxNl0sIHJiX2J5dGVzWzE2XTsKKysgICAgICBnZXRWU1IxMjgoeGEsIGFiKTsKKysgICAgICBn ZXRWU1IxMjgoeGIsIGJiKTsKKysKKysgICAgICBhdXRvIGdldEYzMiA9IFtdKHVpbnQ4X3QqIGJ1 ZiwgaW50IGkpIC0+IGZsb2F0IHsKKysgICAgICAgIHVpbnQzMl90IGJpdHMgPSAodWludDMyX3Qp YnVmW2kgKiA0XSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAq IDQgKyAxXSA8PCA4KSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZb aSAqIDQgKyAyXSA8PCAxNikgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3Qp YnVmW2kgKiA0ICsgM10gPDwgMjQpOworKyAgICAgICAgZmxvYXQgZjsKKysgICAgICAgIG1lbWNw eSgmZiwgJmJpdHMsIHNpemVvZihmKSk7CisrICAgICAgICByZXR1cm4gZjsKKysgICAgICB9Owor KyAgICAgIGF1dG8gc2V0RjMyID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgZmxvYXQgZikgewor KyAgICAgICAgdWludDMyX3QgYml0czsKKysgICAgICAgIG1lbWNweSgmYml0cywgJmYsIHNpemVv ZihiaXRzKSk7CisrICAgICAgICBidWZbaSAqIDRdICAgICA9ICh1aW50OF90KShiaXRzICYgMHhG Rik7CisrICAgICAgICBidWZbaSAqIDQgKyAxXSA9ICh1aW50OF90KSgoYml0cyA+PiA4KSAmIDB4 RkYpOworKyAgICAgICAgYnVmW2kgKiA0ICsgMl0gPSAodWludDhfdCkoKGJpdHMgPj4gMTYpICYg MHhGRik7CisrICAgICAgICBidWZbaSAqIDQgKyAzXSA9ICh1aW50OF90KSgoYml0cyA+PiAyNCkg JiAweEZGKTsKKysgICAgICB9OworKyAgICAgIGF1dG8gZ2V0RjY0ID0gW10odWludDhfdCogYnVm LCBpbnQgaSkgLT4gZG91YmxlIHsKKysgICAgICAgIHVpbnQ2NF90IGJpdHMgPSAwOworKyAgICAg ICAgZm9yIChpbnQgayA9IDA7IGsgPCA4OyBrKyspIGJpdHMgfD0gKCh1aW50NjRfdClidWZbaSAq IDggKyBrXSkgPDwgKGsgKiA4KTsKKysgICAgICAgIGRvdWJsZSBkOworKyAgICAgICAgbWVtY3B5 KCZkLCAmYml0cywgc2l6ZW9mKGQpKTsKKysgICAgICAgIHJldHVybiBkOworKyAgICAgIH07Cisr ICAgICAgYXV0byBzZXRGNjQgPSBbXSh1aW50OF90KiBidWYsIGludCBpLCBkb3VibGUgZCkgewor KyAgICAgICAgdWludDY0X3QgYml0czsKKysgICAgICAgIG1lbWNweSgmYml0cywgJmQsIHNpemVv ZihiaXRzKSk7CisrICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDg7IGsrKykgYnVmW2kgKiA4 ICsga10gPSAodWludDhfdCkoKGJpdHMgPj4gKGsgKiA4KSkgJiAweEZGKTsKKysgICAgICB9Owor KworKyAgICAgIC8vIERpc3BhdGNoIG9uIHRoZSBjYW5vbmljYWwgOC1iaXQgWFgzIFhPIChiaXRz IDIxLi4yOCBQUEMgPSB4bz4+MSkuCisrICAgICAgc3dpdGNoICh4bzMpIHsKKysgICAgICAgIGNh c2UgNjQ6ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgc2V0RjMyKHJiX2J5dGVzLCBpLCBn ZXRGMzIoYWIsIGkpICsgZ2V0RjMyKGJiLCBpKSk7IGJyZWFrOyAgLy8geHZhZGRzcAorKyAgICAg ICAgY2FzZSA5NjogIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSBzZXRGNjQocmJfYnl0ZXMs IGksIGdldEY2NChhYiwgaSkgKyBnZXRGNjQoYmIsIGkpKTsgYnJlYWs7ICAvLyB4dmFkZGRwCisr ICAgICAgICBjYXNlIDcyOiAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHNldEYzMihyYl9i eXRlcywgaSwgZ2V0RjMyKGFiLCBpKSAtIGdldEYzMihiYiwgaSkpOyBicmVhazsgIC8vIHh2c3Vi c3AKKysgICAgICAgIGNhc2UgMTA0OiBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgc2V0RjY0 KHJiX2J5dGVzLCBpLCBnZXRGNjQoYWIsIGkpIC0gZ2V0RjY0KGJiLCBpKSk7IGJyZWFrOyAgLy8g eHZzdWJkcAorKyAgICAgICAgY2FzZSA4MDogIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSBz ZXRGMzIocmJfYnl0ZXMsIGksIGdldEYzMihhYiwgaSkgKiBnZXRGMzIoYmIsIGkpKTsgYnJlYWs7 ICAvLyB4dm11bHNwCisrICAgICAgICBjYXNlIDExMjogZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBp KyspIHNldEY2NChyYl9ieXRlcywgaSwgZ2V0RjY0KGFiLCBpKSAqIGdldEY2NChiYiwgaSkpOyBi cmVhazsgIC8vIHh2bXVsZHAKKysgICAgICAgIGNhc2UgODg6ICBmb3IgKGludCBpID0gMDsgaSA8 IDQ7IGkrKykgc2V0RjMyKHJiX2J5dGVzLCBpLCBnZXRGMzIoYWIsIGkpIC8gZ2V0RjMyKGJiLCBp KSk7IGJyZWFrOyAgLy8geHZkaXZzcAorKyAgICAgICAgY2FzZSAxMjA6IGZvciAoaW50IGkgPSAw OyBpIDwgMjsgaSsrKSBzZXRGNjQocmJfYnl0ZXMsIGksIGdldEY2NChhYiwgaSkgLyBnZXRGNjQo YmIsIGkpKTsgYnJlYWs7ICAvLyB4dmRpdmRwCisrICAgICAgICAvLyB4dm1pbntzcCxkcH0gLyB4 dm1heHtzcCxkcH06CisrICAgICAgICAvLyAgIElmIGJvdGggb3BlcmFuZHMgYXJlIE5hTiwgcmVz dWx0IGlzIHRoZSBOYU4gZnJvbSBYQS4KKysgICAgICAgIC8vICAgSWYgZXhhY3RseSBvbmUgb3Bl cmFuZCBpcyBOYU4sIHJlc3VsdCBpcyB0aGUgTk9OLU5hTiBvcGVyYW5kLgorKyAgICAgICAgLy8g ICBGb3IgMCAvIC0wLCB0cmVhdCAtMCA8ICswIChzaWduZWQtemVybyBvcmRlcmluZyk6IHh2bWlu c3AoKzAsLTApCisrICAgICAgICAvLyAgID0gLTAsIHh2bWF4c3AoKzAsLTApID0gKzAsIGluIGVp dGhlciBvcGVyYW5kIG9yZGVyLgorKyAgICAgICAgLy8gICBPdGhlcndpc2UsIHJlc3VsdCBpcyBJ RUVFIG1pbi9tYXgoYSwgYikuCisrICAgICAgICAvLyBUaGlzIGRpZmZlcnMgZnJvbSBJRUVFIDc1 NCAod2hpY2ggcHJvcGFnYXRlcyBOYU4pIGFuZCBpcworKyAgICAgICAgLy8gcmVsaWVkIHVwb24g Ynkgd2FzbSByZWxheGVkX21pbi9tYXggKGJ1ZzE5NDY2MTguanMpIGFuZCBieQorKyAgICAgICAg Ly8gd2FzbSBmMzJ4NC5taW4oMCwtMCkgcmV0dXJuaW5nIC0wIChzaW1kX2YzMng0Lndhc3QuanMp LgorKyAgICAgICAgI2RlZmluZSBYVl9NQVgoVCwgYSwgYikgW10oVCBhXywgVCBiXykgLT4gVCB7 ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGJvb2wgYW4gPSBzdGQ6Omlz bmFuKGFfKSwgYm4gPSBzdGQ6OmlzbmFuKGJfKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKysg ICAgICAgICAgaWYgKGFuICYmIGJuKSByZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKGFuKSByZXR1cm4gYl87ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAg ICAgICAgaWYgKGJuKSByZXR1cm4gYV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgaWYgKGFfID09IDAuMCAmJiBiXyA9PSAw LjApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAg ICAgICAvKiAtMCBpcyBzbWFsbGVyIHRoYW4gKzA7IG1heCBwaWNrcyArMC4gKi8gICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICByZXR1cm4gc3RkOjpzaWduYml0KGFfKSA/ IGJfIDogYV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGFfLCBiXyk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgIH0oYSwg YikKKysgICAgICAgICNkZWZpbmUgWFZfTUlOKFQsIGEsIGIpIFtdKFQgYV8sIFQgYl8pIC0+IFQg eyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBib29sIGFuID0gc3RkOjpp c25hbihhXyksIGJuID0gc3RkOjppc25hbihiXyk7ICAgICAgICAgICAgICAgICAgICAgICBcCisr ICAgICAgICAgIGlmIChhbiAmJiBibikgcmV0dXJuIGFfOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGlmIChhbikgcmV0dXJuIGJfOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAg ICAgICAgIGlmIChibikgcmV0dXJuIGFfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGlmIChhXyA9PSAwLjAgJiYgYl8gPT0g MC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAg ICAgICAgLyogLTAgaXMgc21hbGxlciB0aGFuICswOyBtaW4gcGlja3MgLTAuICovICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c2lnbmJpdChhXykg PyBhXyA6IGJfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAg IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisrICAgICAgICAgIHJldHVybiBzdGQ6Om1pbihhXywgYl8pOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICB9KGEs IGIpCisrICAgICAgICBjYXNlIDE5MjogZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsgIC8v IHh2bWF4c3AKKysgICAgICAgICAgZmxvYXQgYSA9IGdldEYzMihhYiwgaSksIGIgPSBnZXRGMzIo YmIsIGkpOworKyAgICAgICAgICBzZXRGMzIocmJfYnl0ZXMsIGksIFhWX01BWChmbG9hdCwgYSwg YikpOworKyAgICAgICAgfSBicmVhazsKKysgICAgICAgIGNhc2UgMjI0OiBmb3IgKGludCBpID0g MDsgaSA8IDI7IGkrKykgeyAgLy8geHZtYXhkcAorKyAgICAgICAgICBkb3VibGUgYSA9IGdldEY2 NChhYiwgaSksIGIgPSBnZXRGNjQoYmIsIGkpOworKyAgICAgICAgICBzZXRGNjQocmJfYnl0ZXMs IGksIFhWX01BWChkb3VibGUsIGEsIGIpKTsKKysgICAgICAgIH0gYnJlYWs7CisrICAgICAgICBj YXNlIDIwMDogZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsgIC8vIHh2bWluc3AKKysgICAg ICAgICAgZmxvYXQgYSA9IGdldEYzMihhYiwgaSksIGIgPSBnZXRGMzIoYmIsIGkpOworKyAgICAg ICAgICBzZXRGMzIocmJfYnl0ZXMsIGksIFhWX01JTihmbG9hdCwgYSwgYikpOworKyAgICAgICAg fSBicmVhazsKKysgICAgICAgIGNhc2UgMjMyOiBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykg eyAgLy8geHZtaW5kcAorKyAgICAgICAgICBkb3VibGUgYSA9IGdldEY2NChhYiwgaSksIGIgPSBn ZXRGNjQoYmIsIGkpOworKyAgICAgICAgICBzZXRGNjQocmJfYnl0ZXMsIGksIFhWX01JTihkb3Vi bGUsIGEsIGIpKTsKKysgICAgICAgIH0gYnJlYWs7CisrICAgICAgICAjdW5kZWYgWFZfTUFYCisr ICAgICAgICAjdW5kZWYgWFZfTUlOCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBNT1pf Q1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICAgICAgICJ4diBmbG9hdCBkaXNwYXRjaCBt aXNzaW5nIDgtYml0IFhPPSV1IChpbnN0ciAweCUwOHgpIiwKKysgICAgICAgICAgICAgIHhvMywg aW5zdHItPmluc3RydWN0aW9uQml0cygpKTsKKysgICAgICB9CisrICAgICAgc2V0VlNSMTI4KHh0 LCByYl9ieXRlcyk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgLy8gPT09IFhYMy1m b3JtIGZ1c2VkIG11bHRpcGx5LWFkZCAoMy1zb3VyY2U6IFhUIGlzIGFsc28gaW5wdXQpID09PQor KyAgICAvLworKyAgICAvLyAgIHh2bWFkZGFzcCBYVCxYQSxYQjogIFhUID0gKFhBICogWEIpICsg WFQgICAgICAgKGZ1c2VkIG1hZGQpCisrICAgIC8vICAgeHZtYWRkYWRwIFhULFhBLFhCOiAgc2Ft ZSBmb3IgZjY0CisrICAgIC8vICAgeHZubXN1YmFzcCBYVCxYQSxYQjogWFQgPSAtKChYQSAqIFhC KSAtIFhUKSA9IFhUIC0gKFhBICogWEIpCisrICAgIC8vICAgeHZubXN1YmFkcCBYVCxYQSxYQjog c2FtZSBmb3IgZjY0CisrICAgIC8vCisrICAgIC8vIEVuY29kaW5ncyAoZWFjaCArQVgpOiBYTzgg 4oaSIFhPOSBwYWlycworKyAgICAvLyAgIHh2bWFkZGFzcCAgUFBDX3h2bWFkZGFzcD0weEYwMDAw MjA4ICAgWE84PTY1ICDihpIgWE85IDEzMC8xMzEKKysgICAgLy8gICB4dm1hZGRhZHAgIFBQQ194 dm1hZGRhZHA9MHhGMDAwMDMwOCAgIFhPOD05NyAg4oaSIFhPOSAxOTQvMTk1CisrICAgIC8vICAg eHZubXN1YmFzcCBQUENfeHZubXN1YmFzcD0weEYwMDAwNjg4ICBYTzg9MjA5IOKGkiBYTzkgNDE4 LzQxOQorKyAgICAvLyAgIHh2bm1zdWJhZHAgUFBDX3h2bm1zdWJhZHA9MHhGMDAwMDc4OCAgWE84 PTI0MSDihpIgWE85IDQ4Mi80ODMKKysgICAgLy8gc3RkOjpmbWEgZ2l2ZXMgSUVFRS1jb3JyZWN0 IHNpbmdsZS1yb3VuZGluZyBiZWhhdmlvdXIgbWF0Y2hpbmcgdGhlCisrICAgIC8vIFBvd2VyIElT QSBkZWZpbml0aW9uIG9mIHRoZXNlIGZ1c2VkIGZvcm1zLgorKyAgICBjYXNlIDEzMDogY2FzZSAx MzE6ICAgICAgLy8geHZtYWRkYXNwCisrICAgIGNhc2UgMTk0OiBjYXNlIDE5NTogICAgICAvLyB4 dm1hZGRhZHAKKysgICAgY2FzZSA0MTg6IGNhc2UgNDE5OiAgICAgIC8vIHh2bm1zdWJhc3AKKysg ICAgY2FzZSA0ODI6IGNhc2UgNDgzOiB7ICAgIC8vIHh2bm1zdWJhZHAKKysgICAgICBpbnQgeHQg PSBpbnQocnQgfCAoaW5zdHItPmJpdCgwKSA8PCA1KSk7CisrICAgICAgdWludDMyX3QgcmEgPSBp bnN0ci0+cmFWYWx1ZSgpOworKyAgICAgIGludCB4YSA9IGludChyYSB8ICgoaW5zdHItPmluc3Ry dWN0aW9uQml0cygpID4+IDIpICYgMSkgPDwgNSk7CisrICAgICAgaW50IHhiID0gaW50KHJiIHwg KChpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkgPj4gMSkgJiAxKSA8PCA1KTsKKysgICAgICB1aW50 OF90IGFiWzE2XSwgYmJbMTZdLCB0YlsxNl07CisrICAgICAgZ2V0VlNSMTI4KHhhLCBhYik7Cisr ICAgICAgZ2V0VlNSMTI4KHhiLCBiYik7CisrICAgICAgZ2V0VlNSMTI4KHh0LCB0Yik7ICAvLyBY VCBpcyBhbHNvIGFuIGlucHV0IChhY2N1bXVsYXRvcikuCisrICAgICAgYm9vbCBpc1NwID0gKHhv ID09IDEzMCB8fCB4byA9PSAxMzEgfHwgeG8gPT0gNDE4IHx8IHhvID09IDQxOSk7CisrICAgICAg Ym9vbCBpc05tc3ViID0gKHhvID09IDQxOCB8fCB4byA9PSA0MTkgfHwgeG8gPT0gNDgyIHx8IHhv ID09IDQ4Myk7CisrICAgICAgYXV0byByZEYzMiA9IFtdKHVpbnQ4X3QqIGJ1ZiwgaW50IGkpIC0+ IGZsb2F0IHsKKysgICAgICAgIHVpbnQzMl90IGIgPSAodWludDMyX3QpYnVmW2kgKiA0XSB8Cisr ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAxXSA8PCA4KSB8Cisr ICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdClidWZbaSAqIDQgKyAyXSA8PCAxNikgfAor KyAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpYnVmW2kgKiA0ICsgM10gPDwgMjQpOwor KyAgICAgICAgZmxvYXQgZjsgbWVtY3B5KCZmLCAmYiwgc2l6ZW9mKGYpKTsgcmV0dXJuIGY7Cisr ICAgICAgfTsKKysgICAgICBhdXRvIHdyRjMyID0gW10odWludDhfdCogYnVmLCBpbnQgaSwgZmxv YXQgZikgeworKyAgICAgICAgdWludDMyX3QgYjsgbWVtY3B5KCZiLCAmZiwgc2l6ZW9mKGIpKTsK KysgICAgICAgIGJ1ZltpKjRdPSh1aW50OF90KWI7IGJ1ZltpKjQrMV09KHVpbnQ4X3QpKGI+Pjgp OworKyAgICAgICAgYnVmW2kqNCsyXT0odWludDhfdCkoYj4+MTYpOyBidWZbaSo0KzNdPSh1aW50 OF90KShiPj4yNCk7CisrICAgICAgfTsKKysgICAgICBhdXRvIHJkRjY0ID0gW10odWludDhfdCog YnVmLCBpbnQgaSkgLT4gZG91YmxlIHsKKysgICAgICAgIHVpbnQ2NF90IGIgPSAwOworKyAgICAg ICAgZm9yIChpbnQgaz0wO2s8ODtrKyspIGIgfD0gKCh1aW50NjRfdClidWZbaSo4K2tdKTw8KGsq OCk7CisrICAgICAgICBkb3VibGUgZDsgbWVtY3B5KCZkLCAmYiwgc2l6ZW9mKGQpKTsgcmV0dXJu IGQ7CisrICAgICAgfTsKKysgICAgICBhdXRvIHdyRjY0ID0gW10odWludDhfdCogYnVmLCBpbnQg aSwgZG91YmxlIGQpIHsKKysgICAgICAgIHVpbnQ2NF90IGI7IG1lbWNweSgmYiwgJmQsIHNpemVv ZihiKSk7CisrICAgICAgICBmb3IgKGludCBrPTA7azw4O2srKykgYnVmW2kqOCtrXT0odWludDhf dCkoYj4+KGsqOCkpOworKyAgICAgIH07CisrICAgICAgdWludDhfdCByZXN1bHRbMTZdOworKyAg ICAgIGlmIChpc1NwKSB7CisrICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewor KyAgICAgICAgICBmbG9hdCBhID0gcmRGMzIoYWIsIGkpLCBiID0gcmRGMzIoYmIsIGkpLCB0ID0g cmRGMzIodGIsIGkpOworKyAgICAgICAgICAvLyBtYWRkOiAgdCArIGEqYiA7ICBubXN1YjogLShh KmIgLSB0KSA9IHQgLSBhKmIgPSBzdGQ6OmZtYShhLGIsLXQpIG5lZ2F0ZWQuCisrICAgICAgICAg IGZsb2F0IG91dCA9IGlzTm1zdWIgPyAtc3RkOjpmbWEoYSwgYiwgLXQpCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiAgc3RkOjpmbWEoYSwgYiwgdCk7CisrICAgICAgICAgIHdyRjMy KHJlc3VsdCwgaSwgb3V0KTsKKysgICAgICAgIH0KKysgICAgICB9IGVsc2UgeworKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKKysgICAgICAgICAgZG91YmxlIGEgPSByZEY2 NChhYiwgaSksIGIgPSByZEY2NChiYiwgaSksIHQgPSByZEY2NCh0YiwgaSk7CisrICAgICAgICAg IGRvdWJsZSBvdXQgPSBpc05tc3ViID8gLXN0ZDo6Zm1hKGEsIGIsIC10KQorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6ICBzdGQ6OmZtYShhLCBiLCB0KTsKKysgICAgICAgICAgd3JG NjQocmVzdWx0LCBpLCBvdXQpOworKyAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBzZXRWU1Ix MjgoeHQsIHJlc3VsdCk7CisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICAgZGVmYXVsdDoK KysgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysgICAgICAgICAgImRlY29kZVZTWDog dW5pbXBsZW1lbnRlZCBYTz0ldSAoaW5zdHJ1Y3Rpb24gMHglMDh4KSIsIHhvLAorKyAgICAgICAg ICBpbnN0ci0+aW5zdHJ1Y3Rpb25CaXRzKCkpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKy8vIFBvd2VyIElTQSB2My4xIHByZWZpeGVkIGluc3RydWN0aW9ucyAoUE9X RVIxMCkuCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLworKy8vIEEgcHJlZml4ZWQgaW5z dHJ1Y3Rpb24gaXMgOCBieXRlczogYSA0LWJ5dGUgcHJlZml4IHdvcmQgKHByaW1hcnkgb3Bjb2Rl IDEpCisrLy8gZm9sbG93ZWQgYnkgYSA0LWJ5dGUgc3VmZml4IHdvcmQuIFByZWZpeCBhbmQgc3Vm Zml4IG11c3QgbGllIGluIHRoZSBzYW1lCisrLy8gNjQtYnl0ZSBhbGlnbmVkIGJsb2NrIOKAlCB0 aGUgSklUIG11c3QgZ3VhcmFudGVlIHRoaXMgd2hlbiBlbWl0dGluZzsgdGhlIHNpbQorKy8vIGFz c2VydHMuCisrLy8KKysvLyBQcmVmaXggd29yZCBsYXlvdXQgKEJFIGJpdCBudW1iZXJpbmcpOgor Ky8vICAgWzAuLjVdICAgcHJpbWFyeSBvcGNvZGUgPSAxCisrLy8gICBbNi4uN10gICBUeXBlICgw MCA9IDhMUywgMTAgPSBNTFMg4oCUIG9ubHkgZm9ybXMgd2UgaW1wbGVtZW50KQorKy8vICAgWzgu LjEwXSAgcmVzZXJ2ZWQgKG11c3QgYmUgMCkKKysvLyAgIFsxMV0gICAgIFIgKDEgPSBQQy1yZWxh dGl2ZTsgUkEgbXVzdCBiZSAwKQorKy8vICAgWzEyLi4xM10gcmVzZXJ2ZWQgKG11c3QgYmUgMCkK KysvLyAgIFsxNC4uMzFdIGQwIChoaWdoIDE4IGJpdHMgb2YgdGhlIDM0LWJpdCBzaWduZWQgaW1t ZWRpYXRlKQorKy8vCisrLy8gU3VmZml4IHdvcmQgKE1MUy84TFMgZm9ybSwgR1BSLXRhcmdldCBp bnN0cnVjdGlvbnMgbGlrZSBwYWRkaS9wbGQpOgorKy8vICAgWzAuLjVdICAgc3VmZml4IHByaW1h cnkgb3Bjb2RlIChzZWxlY3RzIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb24pCisrLy8gICBbNi4uMTBd ICBSVCAob3IgUlMgZm9yIHN0b3JlcykKKysvLyAgIFsxMS4uMTVdIFJBCisrLy8gICBbMTYuLjMx XSBkMSAobG93IDE2IGJpdHMgb2YgaW1tZWRpYXRlKQorKy8vCisrLy8gU3VmZml4IHdvcmQgKDhM UyBwbHh2IHF1aXJrKTogdGhlIHN1ZmZpeCBvcGNvZGUgZmllbGQgaXMgb25seSA1IGJpdHMKKysv LyB3aWRlIGFuZCBiaXQgWzVdIGhvbGRzIFRYLCB0aGUgaGlnaCBiaXQgb2YgdGhlIDYtYml0IFhU IFZTUiBudW1iZXI6CisrLy8gICBbMC4uNF0gICBwbHh2IHN1ZmZpeCBvcGNvZGUgPSAxMTAwMSAo PSAyNSkKKysvLyAgIFs1XSAgICAgIFRYCisrLy8gICBbNi4uMTBdICBUCisrLy8gICBbMTEuLjE1 XSBSQQorKy8vICAgWzE2Li4zMV0gZDEKKysvLyBDb21iaW5lZDogWFQgPSAoVFggPDwgNSkgfCBU LiAoRXF1aXZhbGVudDogZnVsbCA2LWJpdCBmaWVsZCBhdCBbMC4uNV0KKysvLyBpcyAwYjExMDAx KFRYKSDigJQgdmFsdWVzIDUwIG9yIDUxIGluIG91ciBMRSBiaXRzIDMxLi4yNi4pCisrLy8KKysv LyBDb21iaW5lZCBpbW1lZGlhdGU6IFNJID0gc2lnbl9leHRlbmQoKGQwIDw8IDE2KSB8IGQxLCAz NCkuCisrLy8gRUEgd2hlbiBSPTE6IGFkZHJlc3Mtb2YtcHJlZml4ICsgU0kuIChSQSBtdXN0IGJl IDAuKQorKy8vIEVBIHdoZW4gUj0wOiAoUkEgPT0gMCA/IDAgOiBHUFJbUkFdKSArIFNJLgorKy8v CisrLy8gU3VmZml4IG9wY29kZXMgaW1wbGVtZW50ZWQgaGVyZToKKysvLyAgIE1MUyAoVHlwZSAy KSAvIHN1ZmZpeD0xNCAgcGFkZGkKKysvLyAgIE1MUyAoVHlwZSAyKSAvIHN1ZmZpeD00OCAgcGxm cyAgIChsb2FkIEZQIHNpbmdsZSwgd2lkZW5zIHRvIGRvdWJsZSkKKysvLyAgIE1MUyAoVHlwZSAy KSAvIHN1ZmZpeD01MCAgcGxmZCAgIChsb2FkIEZQIGRvdWJsZSkKKysvLyAgIDhMUyAoVHlwZSAw KSAvIHN1ZmZpeD01NyAgcGxkCisrLy8gICA4TFMgKFR5cGUgMCkgLyA1LWJpdCBzdWZmaXg9MjUs IGJpdCAyNiA9IFRYICBwbHh2CisrLy8KKysvLyBWZXJpZmljYXRpb24gcmVjaXBlIHdoZW4gYWRk aW5nIG1vcmU6IGFzc2VtYmxlIHdpdGggYGdjYyAtbWNwdT1wb3dlcjEwCisrLy8gLWNgIChvciBj bGFuZykgYW5kIGNvbXBhcmUgdGhlIGVtaXR0ZWQgYnl0ZXMgYWdhaW5zdCB0aGUgZW5jb2Rlcjsg ZW5jb2RlCisrLy8gaW4gYSBzbWFsbCBpbmxpbmUtYXNtIHByb2dyYW0gYW5kIHN0ZXAgdGhyb3Vn aCB1bmRlciB0aGlzIHNpbS4KKysKKyt2b2lkIFNpbXVsYXRvcjo6ZGVjb2RlUHJlZml4ZWQoU2lt SW5zdHJ1Y3Rpb24qIHByZWZpeCkgeworKyAgLy8gUHJlZml4IGFuZCBzdWZmaXggbXVzdCByZXNp ZGUgaW4gdGhlIHNhbWUgNjQtYnl0ZSBibG9jay4KKysgIHVpbnQ2NF90IHByZWZpeEFkZHIgPSBy ZWludGVycHJldF9jYXN0PHVpbnQ2NF90PihwcmVmaXgpOworKyAgTU9aX0FTU0VSVCgocHJlZml4 QWRkciAmIDYzKSA8PSA1NiwKKysgICAgICAgICAgICAgIlBPV0VSMTAgcHJlZml4ZWQgaW5zdHJ1 Y3Rpb24gY3Jvc3NlcyA2NC1ieXRlIGJvdW5kYXJ5Iik7CisrCisrICBTaW1JbnN0cnVjdGlvbiog c3VmZml4ID0gcmVpbnRlcnByZXRfY2FzdDxTaW1JbnN0cnVjdGlvbio+KAorKyAgICAgIHJlaW50 ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHByZWZpeCkgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6 ZSk7CisrCisrICB1aW50MzJfdCB0eXBlID0gcHJlZml4LT5iaXRzKDI1LCAyNCk7CisrICB1aW50 MzJfdCBSID0gcHJlZml4LT5iaXQoMjApOworKyAgdWludDMyX3QgZDAgPSBwcmVmaXgtPmJpdHMo MTcsIDApOyAgLy8gMTggYml0cworKyAgdWludDMyX3Qgc3VmZml4T3A2ID0gc3VmZml4LT5iaXRz KDMxLCAyNik7ICAvLyA2LWJpdCBmb3JtIChwYWRkaSwgcGxkKQorKyAgdWludDMyX3Qgc3VmZml4 T3A1ID0gc3VmZml4LT5iaXRzKDMxLCAyNyk7ICAvLyA1LWJpdCBmb3JtIChwbHh2KQorKyAgdWlu dDMyX3QgcGx4dlRYID0gc3VmZml4LT5iaXQoMjYpOworKyAgdWludDMyX3QgcnQgPSBzdWZmaXgt PnJ0VmFsdWUoKTsKKysgIHVpbnQzMl90IHJhID0gc3VmZml4LT5yYVZhbHVlKCk7CisrICB1aW50 MzJfdCBkMSA9IHN1ZmZpeC0+dWltbTE2VmFsdWUoKTsKKysKKysgIC8vIFJlYXNzZW1ibGUgMzQt Yml0IHNpZ25lZCBkaXNwbGFjZW1lbnQuCisrICBpbnQ2NF90IGltbTM0ID0gKHN0YXRpY19jYXN0 PGludDY0X3Q+KGQwKSA8PCAxNikgfCBkMTsKKysgIGltbTM0ID0gKGltbTM0IDw8IDMwKSA+PiAz MDsgIC8vIHNpZ24tZXh0ZW5kIGZyb20gYml0IDMzCisrCisrICAvLyBSPTEgZm9ybXMgcmVxdWly ZSBSQT0wIHBlciB0aGUgSVNBLgorKyAgTU9aX0FTU0VSVCghUiB8fCByYSA9PSAwLAorKyAgICAg ICAgICAgICAiUE9XRVIxMCBwcmVmaXhlZCBSPTEgZm9ybSByZXF1aXJlcyBSQT0wIik7CisrCisr ICAvLyBUeXBlIDIgPSBNTFMsIFR5cGUgMCA9IDhMUy4gT3RoZXIgdHlwZXMgYXJlIHJlc2VydmVk IGhlcmUuCisrICBpZiAodHlwZSA9PSAyICYmIHN1ZmZpeE9wNiA9PSAxNCkgeworKyAgICAvLyBw YWRkaSBSVCwgUkEsIFNJLCBSIChNTFMpCisrICAgIGludDY0X3QgYmFzZSA9IFIgPyBzdGF0aWNf Y2FzdDxpbnQ2NF90PihwcmVmaXhBZGRyKQorKyAgICAgICAgICAgICAgICAgICAgIDogKHJhID09 IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKTsKKysgICAgc2V0UmVnaXN0ZXIocnQsIGJhc2UgKyBp bW0zNCk7CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMCAmJiBzdWZmaXhPcDYgPT0gNTcpIHsKKysg ICAgLy8gcGxkIFJULCBEKFJBKSwgUiAoOExTKQorKyAgICB1aW50NjRfdCBlYSA9IFIgPyBwcmVm aXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQorKyAgICAgICAgICAgICAgICAg ICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKKysgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7CisrICAgIGlmICghaGFuZGxl V2FzbVNlZ0ZhdWx0KGVhLCA4KSkgeworKyAgICAgIHNldFJlZ2lzdGVyKHJ0LCByZWFkRFcoZWEs IHByZWZpeCkpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMiAmJiBzdWZmaXhPcDYg PT0gNTApIHsKKysgICAgLy8gcGxmZCBGUlQsIEQoUkEpLCBSIChNTFMpIOKAlCBsb2FkIDgtYnl0 ZSBkb3VibGUgaW50byBGUFIuCisrICAgIHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIgKyBz dGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpCisrICAgICAgICAgICAgICAgICAgICA6IChyYSA9 PSAwID8gMCA6IGdldFJlZ2lzdGVyKHJhKSkgKworKyAgICAgICAgICAgICAgICAgICAgICAgICAg c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKKysgICAgaWYgKCFoYW5kbGVXYXNtU2VnRmF1 bHQoZWEsIDgpKSB7CisrICAgICAgc2V0RnB1UmVnaXN0ZXJEb3VibGUocnQsIHJlYWREKGVhLCBw cmVmaXgpKTsKKysgICAgfQorKyAgfSBlbHNlIGlmICh0eXBlID09IDIgJiYgc3VmZml4T3A2ID09 IDQ4KSB7CisrICAgIC8vIHBsZnMgRlJULCBEKFJBKSwgUiAoTUxTKSDigJQgbG9hZCA0LWJ5dGUg c2luZ2xlLCB3aWRlbiBOYU4tcHJlc2VydmluZy4KKysgICAgdWludDY0X3QgZWEgPSBSID8gcHJl Zml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKKysgICAgICAgICAgICAgICAg ICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCisrICAgICAgICAgICAgICAg ICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOworKyAgICBpZiAoIWhhbmRs ZVdhc21TZWdGYXVsdChlYSwgNCkpIHsKKysgICAgICBmbG9hdCB2YWwgPSAqcmVpbnRlcnByZXRf Y2FzdDxmbG9hdCo+KGVhKTsKKysgICAgICBzZXRGcHVSZWdpc3RlckRvdWJsZShydCwgcHJvbW90 ZUZsb2F0UHJlc2VydmluZ05hTih2YWwpKTsKKysgICAgfQorKyAgfSBlbHNlIGlmICh0eXBlID09 IDAgJiYgc3VmZml4T3A1ID09IDI1KSB7CisrICAgIC8vIHBseHYgWFQsIEQoUkEpLCBSICg4TFMp IOKAlCBYVCA9IChUWCA8PCA1KSB8IFQsIFRYIGF0IHN1ZmZpeCBiaXQgMjYuCisrICAgIGludCB4 dCA9IHN0YXRpY19jYXN0PGludD4ocnQgfCAocGx4dlRYIDw8IDUpKTsKKysgICAgdWludDY0X3Qg ZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKKysgICAg ICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCisrICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOworKyAg ICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSB7CisrICAgICAgdWludDhfdCBidWZb MTZdOworKyAgICAgIG1lbWNweShidWYsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgdm9pZCo+KGVh KSwgMTYpOworKyAgICAgIHNldFZTUjEyOCh4dCwgYnVmKTsKKysgICAgfQorKyAgfSBlbHNlIGlm ICh0eXBlID09IDAgJiYgc3VmZml4T3A2ID09IDYxKSB7CisrICAgIC8vIHBzdGQgUlMsIEQoUkEp LCBSICg4TFMpIOKAlCBzdG9yZSBkb3VibGV3b3JkLgorKyAgICB1aW50NjRfdCBlYSA9IFIgPyBw cmVmaXhBZGRyICsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KQorKyAgICAgICAgICAgICAg ICAgICAgOiAocmEgPT0gMCA/IDAgOiBnZXRSZWdpc3RlcihyYSkpICsKKysgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCk7CisrICAgIGlmICghaGFu ZGxlV2FzbVNlZ0ZhdWx0KGVhLCA4KSkgeworKyAgICAgIHdyaXRlRFcoZWEsIGdldFJlZ2lzdGVy KHJ0KSwgcHJlZml4KTsKKysgICAgfQorKyAgfSBlbHNlIGlmICh0eXBlID09IDIgJiYgc3VmZml4 T3A2ID09IDU0KSB7CisrICAgIC8vIHBzdGZkIEZSUywgRChSQSksIFIgKE1MUykg4oCUIHN0b3Jl IGRvdWJsZS4KKysgICAgdWludDY0X3QgZWEgPSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0 PHVpbnQ2NF90PihpbW0zNCkKKysgICAgICAgICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDog Z2V0UmVnaXN0ZXIocmEpKSArCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz dDx1aW50NjRfdD4oaW1tMzQpOworKyAgICBpZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgOCkp IHsKKysgICAgICB3cml0ZUQoZWEsIGdldEZwdVJlZ2lzdGVyRG91YmxlKHJ0KSwgcHJlZml4KTsK KysgICAgfQorKyAgfSBlbHNlIGlmICh0eXBlID09IDIgJiYgc3VmZml4T3A2ID09IDUyKSB7Cisr ICAgIC8vIHBzdGZzIEZSUywgRChSQSksIFIgKE1MUykg4oCUIHN0b3JlIHNpbmdsZSAobmFycm93 IGZyb20gZG91YmxlIGluIEZQUikuCisrICAgIHVpbnQ2NF90IGVhID0gUiA/IHByZWZpeEFkZHIg KyBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpCisrICAgICAgICAgICAgICAgICAgICA6IChy YSA9PSAwID8gMCA6IGdldFJlZ2lzdGVyKHJhKSkgKworKyAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGltbTM0KTsKKysgICAgaWYgKCFoYW5kbGVXYXNtU2Vn RmF1bHQoZWEsIDQpKSB7CisrICAgICAgZG91YmxlIGR2YWwgPSBnZXRGcHVSZWdpc3RlckRvdWJs ZShydCk7CisrICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihlYSkgPSBkZW1vdGVEb3Vi bGVQcmVzZXJ2aW5nTmFOKGR2YWwpOworKyAgICB9CisrICB9IGVsc2UgaWYgKHR5cGUgPT0gMCAm JiBzdWZmaXhPcDUgPT0gMjcpIHsKKysgICAgLy8gcHN0eHYgWFMsIEQoUkEpLCBSICg4TFMpIOKA lCBYUyA9IChTWCA8PCA1KSB8IFMsIFNYIGF0IHN1ZmZpeCBiaXQgMjYuCisrICAgIGludCB4cyA9 IHN0YXRpY19jYXN0PGludD4ocnQgfCAocGx4dlRYIDw8IDUpKTsKKysgICAgdWludDY0X3QgZWEg PSBSID8gcHJlZml4QWRkciArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihpbW0zNCkKKysgICAgICAg ICAgICAgICAgICAgIDogKHJhID09IDAgPyAwIDogZ2V0UmVnaXN0ZXIocmEpKSArCisrICAgICAg ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oaW1tMzQpOworKyAgICBp ZiAoIWhhbmRsZVdhc21TZWdGYXVsdChlYSwgMTYpKSB7CisrICAgICAgdWludDhfdCBidWZbMTZd OworKyAgICAgIGdldFZTUjEyOCh4cywgYnVmKTsKKysgICAgICBtZW1jcHkocmVpbnRlcnByZXRf Y2FzdDx2b2lkKj4oZWEpLCBidWYsIDE2KTsKKysgICAgfQorKyAgfSBlbHNlIHsKKysgICAgTU9a X0NSQVNIX1VOU0FGRV9QUklOVEYoCisrICAgICAgICAiZGVjb2RlUHJlZml4ZWQ6IHVuaW1wbGVt ZW50ZWQgdHlwZT0ldSAiCisrICAgICAgICAiKHByZWZpeCAweCUwOHgsIHN1ZmZpeCAweCUwOHgp IiwKKysgICAgICAgIHR5cGUsIHByZWZpeC0+aW5zdHJ1Y3Rpb25CaXRzKCksIHN1ZmZpeC0+aW5z dHJ1Y3Rpb25CaXRzKCkpOworKyAgfQorKworKyAgLy8gQWR2YW5jZSBwYXN0IHRoZSBmdWxsIDgt Ynl0ZSBwcmVmaXhlZCBpbnN0cnVjdGlvbiB1bmxlc3MgYSBoYW5kbGVyCisrICAvLyBhbHJlYWR5 IHJlZGlyZWN0ZWQgdGhlIFBDLiBUaGUgY2FsbGVyIChpbnN0cnVjdGlvbkRlY29kZSkgcmV0dXJu cworKyAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIgdXMsIHNvIGl0cyA0LWJ5dGUgdHJhaWxpbmcgYWR2 YW5jZSBpcyBza2lwcGVkLgorKyAgaWYgKCFwY19tb2RpZmllZF8pIHsKKysgICAgc2V0X3BjKHN0 YXRpY19jYXN0PGludDY0X3Q+KHByZWZpeEFkZHIpICsgMiAqIFNpbUluc3RydWN0aW9uOjprSW5z dHJTaXplKTsKKysgIH0KKyt9CisrCisrLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysvLyBUb3At bGV2ZWwgaW5zdHJ1Y3Rpb24gZGVjb2Rlci4KKysvLyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKwor K3ZvaWQgU2ltdWxhdG9yOjppbnN0cnVjdGlvbkRlY29kZShTaW1JbnN0cnVjdGlvbiogaW5zdHIp IHsKKysgIGlmICghU2ltdWxhdG9yUHJvY2Vzczo6SUNhY2hlQ2hlY2tpbmdEaXNhYmxlQ291bnQp IHsKKysgICAgQXV0b0xvY2tTaW11bGF0b3JDYWNoZSBhbHM7CisrICAgIFNpbXVsYXRvclByb2Nl c3M6OmNoZWNrSUNhY2hlTG9ja2VkKGluc3RyKTsKKysgIH0KKysgIHBjX21vZGlmaWVkXyA9IGZh bHNlOworKworKyAgdWludDMyX3QgaW5zdHJCaXRzID0gaW5zdHItPmluc3RydWN0aW9uQml0cygp OworKworKyAgLy8gQ2hlY2sgZm9yIGtDYWxsUmVkaXJJbnN0ciBmaXJzdCAoUFBDX3N0b3AgPSAw eDRDMDAwMkU0KS4KKysgIGlmIChpbnN0ckJpdHMgPT0ga0NhbGxSZWRpckluc3RyKSB7CisrICAg IHNvZnR3YXJlSW50ZXJydXB0KGluc3RyKTsKKysgICAgaWYgKCFwY19tb2RpZmllZF8pIHsKKysg ICAgICBzZXRfcGMocmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihpbnN0cikgKyBTaW1JbnN0cnVj dGlvbjo6a0luc3RyU2l6ZSk7CisrICAgIH0KKysgICAgcmV0dXJuOworKyAgfQorKworKyAgLy8g Q2hlY2sgZm9yIFBQQ190cmFwICgweDdGRTAwMDA4KS4KKysgIGlmIChpbnN0ckJpdHMgPT0gMHg3 RkUwMDAwOCkgeworKyAgICBzb2Z0d2FyZUludGVycnVwdChpbnN0cik7CisrICAgIGlmICghcGNf bW9kaWZpZWRfKSB7CisrICAgICAgc2V0X3BjKHJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdD4oaW5z dHIpICsgU2ltSW5zdHJ1Y3Rpb246OmtJbnN0clNpemUpOworKyAgICB9CisrICAgIHJldHVybjsK KysgIH0KKysKKysgIHVpbnQzMl90IG9wY29kZSA9IGluc3RyLT5vcGNvZGUoKTsKKysKKysgIC8v IFBvd2VyIElTQSB2My4xIHByZWZpeGVkIGluc3RydWN0aW9uczogcHJpbWFyeSBvcGNvZGUgMSBt YXJrcyBhCisrICAvLyA0LWJ5dGUgcHJlZml4IHdvcmQgZm9sbG93ZWQgYnkgYSA0LWJ5dGUgc3Vm Zml4IHdvcmQuIGRlY29kZVByZWZpeGVkCisrICAvLyBhZHZhbmNlcyB0aGUgUEMgYnkgdGhlIGZ1 bGwgOCBieXRlcyAob3IgbGVhdmVzIGl0IG1vZGlmaWVkIGZvcgorKyAgLy8gUEMtcmVsYXRpdmUg c2lkZS1lZmZlY3RzKS4KKysgIGlmIChvcGNvZGUgPT0gMSkgeworKyAgICBkZWNvZGVQcmVmaXhl ZChpbnN0cik7CisrICAgIHJldHVybjsKKysgIH0KKysKKysgIHN3aXRjaCAob3Bjb2RlKSB7Cisr ICAgIC8vIEQtZm9ybSBBTFUKKysgICAgY2FzZSAzOiAgIC8vIHR3aQorKyAgICBjYXNlIDc6ICAg Ly8gbXVsbGkKKysgICAgY2FzZSA4OiAgIC8vIHN1YmZpYworKyAgICBjYXNlIDEwOiAgLy8gY21w bGkKKysgICAgY2FzZSAxMTogIC8vIGNtcGkKKysgICAgY2FzZSAxMjogIC8vIGFkZGljCisrICAg IGNhc2UgMTM6ICAvLyBhZGRpYy4KKysgICAgY2FzZSAxNDogIC8vIGFkZGkKKysgICAgY2FzZSAx NTogIC8vIGFkZGlzCisrICAgIGNhc2UgMjQ6ICAvLyBvcmkKKysgICAgY2FzZSAyNTogIC8vIG9y aXMKKysgICAgY2FzZSAyNjogIC8vIHhvcmkKKysgICAgY2FzZSAyNzogIC8vIHhvcmlzCisrICAg IGNhc2UgMjg6ICAvLyBhbmRpLgorKyAgICBjYXNlIDI5OiAgLy8gYW5kaXMuCisrICAgICAgZGVj b2RlREZvcm1BTFUoaW5zdHIpOworKyAgICAgIGJyZWFrOworKworKyAgICAvLyBELWZvcm0gbG9h ZHMKKysgICAgY2FzZSAzMjogIC8vIGx3egorKyAgICBjYXNlIDMzOiAgLy8gbHd6dQorKyAgICBj YXNlIDM0OiAgLy8gbGJ6CisrICAgIGNhc2UgMzU6ICAvLyBsYnp1CisrICAgIGNhc2UgNDA6ICAv LyBsaHoKKysgICAgY2FzZSA0MTogIC8vIGxoenUKKysgICAgY2FzZSA0MjogIC8vIGxoYQorKyAg ICBjYXNlIDQzOiAgLy8gbGhhdQorKyAgICBjYXNlIDQ4OiAgLy8gbGZzCisrICAgIGNhc2UgNDk6 ICAvLyBsZnN1CisrICAgIGNhc2UgNTA6ICAvLyBsZmQKKysgICAgY2FzZSA1MTogIC8vIGxmZHUK KysgICAgICBkZWNvZGVERm9ybUxvYWQoaW5zdHIpOworKyAgICAgIGJyZWFrOworKworKyAgICAv LyBELWZvcm0gc3RvcmVzCisrICAgIGNhc2UgMzY6ICAvLyBzdHcKKysgICAgY2FzZSAzODogIC8v IHN0YgorKyAgICBjYXNlIDM5OiAgLy8gc3RidQorKyAgICBjYXNlIDQ0OiAgLy8gc3RoCisrICAg IGNhc2UgNDU6ICAvLyBzdGh1CisrICAgIGNhc2UgNTI6ICAvLyBzdGZzCisrICAgIGNhc2UgNTM6 ICAvLyBzdGZzdQorKyAgICBjYXNlIDU0OiAgLy8gc3RmZAorKyAgICBjYXNlIDU1OiAgLy8gc3Rm ZHUKKysgICAgICBkZWNvZGVERm9ybVN0b3JlKGluc3RyKTsKKysgICAgICBicmVhazsKKysKKysg ICAgLy8gRFMtZm9ybQorKyAgICBjYXNlIDU4OiAgLy8gbGQsIGxkdSwgbHdhCisrICAgIGNhc2Ug NjI6ICAvLyBzdGQsIHN0ZHUKKysgICAgICBkZWNvZGVEU0Zvcm0oaW5zdHIpOworKyAgICAgIGJy ZWFrOworKworKyAgICAvLyBCLWZvcm0gY29uZGl0aW9uYWwgYnJhbmNoCisrICAgIGNhc2UgMTY6 CisrICAgICAgZGVjb2RlQnJhbmNoKGluc3RyKTsKKysgICAgICBicmVhazsKKysKKysgICAgLy8g U0MgKHN5c3RlbSBjYWxsKSAtIHVudXNlZCBpbiBKSVQKKysgICAgY2FzZSAxNzoKKysgICAgICBN T1pfQ1JBU0goIlNpbXVsYXRvcjogc2MgaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCIpOworKyAg ICAgIGJyZWFrOworKworKyAgICAvLyBJLWZvcm0gdW5jb25kaXRpb25hbCBicmFuY2gKKysgICAg Y2FzZSAxODoKKysgICAgICBkZWNvZGVCcmFuY2goaW5zdHIpOworKyAgICAgIGJyZWFrOworKwor KyAgICAvLyBYTC1mb3JtIChicmFuY2ggdG8gTFIvQ1RSLCBDUiBvcGVyYXRpb25zKQorKyAgICBj YXNlIDE5OgorKyAgICAgIGRlY29kZUJyYW5jaChpbnN0cik7CisrICAgICAgYnJlYWs7CisrCisr ICAgIC8vIE0tZm9ybSAvIE1ELWZvcm0gcm90YXRlL21hc2sKKysgICAgY2FzZSAyMDogIC8vIHJs d2ltaQorKyAgICBjYXNlIDIxOiAgLy8gcmx3aW5tCisrICAgIGNhc2UgMjM6ICAvLyBybHdubQor KyAgICBjYXNlIDMwOiAgLy8gcmxkaWNsLCBybGRpY3IsIHJsZGljLCBybGRpbWksIHJsZGNsLCBy bGRjcgorKyAgICAgIGRlY29kZVJvdGF0ZU1hc2soaW5zdHIpOworKyAgICAgIGJyZWFrOworKwor KyAgICAvLyBWTVggKEFsdGlWZWMpIOKAlCBwcmltYXJ5IG9wY29kZSA0LiBWZWN0b3IgYXJpdGht ZXRpYyAvIGNvbXBhcmUgLyBzaGlmdCAvCisrICAgIC8vIHNwbGF0IC8gbWVyZ2UgLyBwYWNrIC8g dW5wYWNrIG9uIFZSMC1WUjMxLiBUaGUgd2FzbSBTSU1EIGxvd2VyaW5nCisrICAgIC8vIGVtaXRz IHRoZXNlIGRpcmVjdGx5IChTaW1kMTI4IGxpdmVzIGluIHRoZSBWUiBuYW1lc3BhY2UpLgorKyAg ICBjYXNlIDQ6CisrICAgICAgZGVjb2RlVk1YKGluc3RyKTsKKysgICAgICBicmVhazsKKysKKysg ICAgLy8gWC1mb3JtIC8gWE8tZm9ybQorKyAgICBjYXNlIDMxOgorKyAgICAgIGRlY29kZVhGb3Jt KGluc3RyKTsKKysgICAgICBicmVhazsKKysKKysgICAgLy8gRlAgc2luZ2xlIChBLWZvcm0pCisr ICAgIGNhc2UgNTk6CisrICAgICAgZGVjb2RlRlAoaW5zdHIpOworKyAgICAgIGJyZWFrOworKwor KyAgICAvLyBWU1ggKFhYMS1mb3JtKQorKyAgICBjYXNlIDYwOgorKyAgICAgIGRlY29kZVZTWChp bnN0cik7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8vIEZQIGRvdWJsZSAoWC1mb3JtIC8gQS1m b3JtKQorKyAgICBjYXNlIDYzOgorKyAgICAgIGRlY29kZUZQKGluc3RyKTsKKysgICAgICBicmVh azsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBNT1pfQ1JBU0hfVU5TQUZFX1BSSU5URigKKysg ICAgICAgICAgImluc3RydWN0aW9uRGVjb2RlOiB1bnN1cHBvcnRlZCBvcGNvZGUgJXUgKGluc3Ry dWN0aW9uIDB4JTA4eCkiLAorKyAgICAgICAgICBvcGNvZGUsIGluc3RyQml0cyk7CisrICB9Cisr CisrICBpZiAoIXBjX21vZGlmaWVkXykgeworKyAgICBzZXRfcGMocmVpbnRlcnByZXRfY2FzdDxp bnQ2NF90PihpbnN0cikgKyBTaW1JbnN0cnVjdGlvbjo6a0luc3RyU2l6ZSk7CisrICB9CisrfQor KworKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrLy8gU2luZ2xlLXN0ZXBwaW5nIC8gZXhlY3V0 ZSBsb29wLgorKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrCisrdm9pZCBTaW11bGF0b3I6OmVu YWJsZV9zaW5nbGVfc3RlcHBpbmcoU2luZ2xlU3RlcENhbGxiYWNrIGNiLCB2b2lkKiBhcmcpIHsK KysgIHNpbmdsZV9zdGVwcGluZ18gPSB0cnVlOworKyAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfID0g Y2I7CisrICBzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfID0gYXJnOworKyAgc2luZ2xlX3N0ZXBf Y2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNrX2FyZ18sIHRoaXMsICh2b2lkKilnZXRfcGMo KSk7CisrfQorKworK3ZvaWQgU2ltdWxhdG9yOjpkaXNhYmxlX3NpbmdsZV9zdGVwcGluZygpIHsK KysgIGlmICghc2luZ2xlX3N0ZXBwaW5nXykgeworKyAgICByZXR1cm47CisrICB9CisrICBzaW5n bGVfc3RlcF9jYWxsYmFja18oc2luZ2xlX3N0ZXBfY2FsbGJhY2tfYXJnXywgdGhpcywgKHZvaWQq KWdldF9wYygpKTsKKysgIHNpbmdsZV9zdGVwcGluZ18gPSBmYWxzZTsKKysgIHNpbmdsZV9zdGVw X2NhbGxiYWNrXyA9IG51bGxwdHI7CisrICBzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfID0gbnVs bHB0cjsKKyt9CisrCisrdGVtcGxhdGUgPGJvb2wgZW5hYmxlU3RvcFNpbUF0PgorK3ZvaWQgU2lt dWxhdG9yOjpleGVjdXRlKCkgeworKyAgaWYgKHNpbmdsZV9zdGVwcGluZ18gJiYgZ2V0ZW52KCJQ UEM2NF9UUkFDRV9TSU0iKSkgeworKyAgICBmcHJpbnRmKHN0ZGVyciwgIltzaW1dIGVudGVyIGV4 ZWN1dGUgcGM9MHglbHggbHI9MHglbHggZnA9MHglbHggc3A9MHglbHhcbiIsCisrICAgICAgICAg ICAgKGxvbmcpZ2V0X3BjKCksIChsb25nKWdldExSKCksIChsb25nKWdldFJlZ2lzdGVyKGZwKSwK KysgICAgICAgICAgICAobG9uZylnZXRSZWdpc3RlcihzcCkpOworKyAgfQorKyAgaWYgKHNpbmds ZV9zdGVwcGluZ18pIHsKKysgICAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2Nh bGxiYWNrX2FyZ18sIHRoaXMsIG51bGxwdHIpOworKyAgfQorKworKyAgaW50NjRfdCBwcm9ncmFt X2NvdW50ZXIgPSBnZXRfcGMoKTsKKysKKysgIHdoaWxlIChwcm9ncmFtX2NvdW50ZXIgIT0gZW5k X3NpbV9wYykgeworKyAgICBpZiAoZW5hYmxlU3RvcFNpbUF0ICYmIChpY291bnRfID09IFNpbXVs YXRvcjo6U3RvcFNpbUF0KSkgeworKyAgICAgIHBwYzY0RGVidWdnZXIgZGJnKHRoaXMpOworKyAg ICAgIGRiZy5kZWJ1ZygpOworKyAgICB9IGVsc2UgeworKyAgICAgIGlmIChzaW5nbGVfc3RlcHBp bmdfKSB7CisrICAgICAgICBpZiAoZ2V0ZW52KCJQUEM2NF9UUkFDRV9TSU0iKSkgeworKyAgICAg ICAgICBmcHJpbnRmKHN0ZGVyciwKKysgICAgICAgICAgICAgICAgICAiW3NpbV0gc3RlcCBpY291 bnQ9JWxsdSBwYz0weCVseCBpbnN0cj0weCUwOHggbHI9MHglbHggZnA9MHglbHggc3A9MHglbHhc biIsCisrICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpY291bnRfLCAobG9u Zylwcm9ncmFtX2NvdW50ZXIsCisrICAgICAgICAgICAgICAgICAgKih1aW50MzJfdCopcHJvZ3Jh bV9jb3VudGVyLCAobG9uZylnZXRMUigpLAorKyAgICAgICAgICAgICAgICAgIChsb25nKWdldFJl Z2lzdGVyKGZwKSwgKGxvbmcpZ2V0UmVnaXN0ZXIoc3ApKTsKKysgICAgICAgIH0KKysgICAgICAg IHNpbmdsZV9zdGVwX2NhbGxiYWNrXyhzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfLCB0aGlzLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKilwcm9ncmFtX2NvdW50ZXIpOwor KyAgICAgIH0KKysgICAgICBTaW1JbnN0cnVjdGlvbiogaW5zdHIgPQorKyAgICAgICAgICByZWlu dGVycHJldF9jYXN0PFNpbUluc3RydWN0aW9uKj4ocHJvZ3JhbV9jb3VudGVyKTsKKysgICAgICBp bnN0cnVjdGlvbkRlY29kZShpbnN0cik7CisrICAgICAgaWNvdW50XysrOworKyAgICB9CisrICAg IHByb2dyYW1fY291bnRlciA9IGdldF9wYygpOworKyAgfQorKworKyAgaWYgKHNpbmdsZV9zdGVw cGluZ18pIHsKKysgICAgc2luZ2xlX3N0ZXBfY2FsbGJhY2tfKHNpbmdsZV9zdGVwX2NhbGxiYWNr X2FyZ18sIHRoaXMsIG51bGxwdHIpOworKyAgfQorK30KKysKKysvLyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKy8vIGNhbGxJbnRlcm5hbCAvIGNhbGwuCisrLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysKKyt2b2lkIFNpbXVsYXRvcjo6Y2FsbEludGVybmFsKHVpbnQ4X3QqIGVudHJ5KSB7CisrICAv LyBQcmVwYXJlIHRvIGV4ZWN1dGUgdGhlIGNvZGUgYXQgZW50cnkuCisrICBzZXRSZWdpc3Rlcihw YywgcmVpbnRlcnByZXRfY2FzdDxpbnQ2NF90PihlbnRyeSkpOworKyAgLy8gVGhlIHNpbXVsYXRp b24gc3RvcHMgd2hlbiByZXR1cm5pbmcgdG8gdGhpcyBjYWxsIHBvaW50IChMUiA9PSBlbmRfc2lt X3BjKS4KKysgIHNldExSKGVuZF9zaW1fcGMpOworKworKyAgLy8gUmVtZW1iZXIgdGhlIHZhbHVl cyBvZiBjYWxsZWUtc2F2ZWQgcmVnaXN0ZXJzIChyMTQtcjMxIGluIEVMRnYyKS4KKysgIGludDY0 X3QgcjE0X3ZhbCA9IGdldFJlZ2lzdGVyKHIxNCk7CisrICBpbnQ2NF90IHIxNV92YWwgPSBnZXRS ZWdpc3RlcihyMTUpOworKyAgaW50NjRfdCByMTZfdmFsID0gZ2V0UmVnaXN0ZXIocjE2KTsKKysg IGludDY0X3QgcjE3X3ZhbCA9IGdldFJlZ2lzdGVyKHIxNyk7CisrICBpbnQ2NF90IHIxOF92YWwg PSBnZXRSZWdpc3RlcihyMTgpOworKyAgaW50NjRfdCByMTlfdmFsID0gZ2V0UmVnaXN0ZXIocjE5 KTsKKysgIGludDY0X3QgcjIwX3ZhbCA9IGdldFJlZ2lzdGVyKHIyMCk7CisrICBpbnQ2NF90IHIy MV92YWwgPSBnZXRSZWdpc3RlcihyMjEpOworKyAgaW50NjRfdCByMjJfdmFsID0gZ2V0UmVnaXN0 ZXIocjIyKTsKKysgIGludDY0X3QgcjIzX3ZhbCA9IGdldFJlZ2lzdGVyKHIyMyk7CisrICBpbnQ2 NF90IHIyNF92YWwgPSBnZXRSZWdpc3RlcihyMjQpOworKyAgaW50NjRfdCByMjVfdmFsID0gZ2V0 UmVnaXN0ZXIocjI1KTsKKysgIGludDY0X3QgcjI2X3ZhbCA9IGdldFJlZ2lzdGVyKHIyNik7Cisr ICBpbnQ2NF90IHIyN192YWwgPSBnZXRSZWdpc3RlcihyMjcpOworKyAgaW50NjRfdCByMjhfdmFs ID0gZ2V0UmVnaXN0ZXIocjI4KTsKKysgIGludDY0X3QgcjI5X3ZhbCA9IGdldFJlZ2lzdGVyKHIy OSk7CisrICBpbnQ2NF90IHIzMF92YWwgPSBnZXRSZWdpc3RlcihyMzApOworKyAgaW50NjRfdCBy MzFfdmFsID0gZ2V0UmVnaXN0ZXIocjMxKTsKKysgIGludDY0X3Qgc3BfdmFsID0gZ2V0UmVnaXN0 ZXIoc3ApOworKworKyNpZmRlZiBERUJVRworKyAgLy8gU2V0IHVwIGNhbGxlZS1zYXZlZCByZWdp c3RlcnMgd2l0aCBhIGtub3duIHZhbHVlIHRvIGRldGVjdCBjbG9iYmVycy4KKysgIC8vIERFQlVH LW9ubHk6IGluIHJlbGVhc2UgdGhpcyB3b3VsZCBzaWxlbnRseSBjb3JydXB0IGV2ZXJ5IEpTLWpp dC1lbnRyeQorKyAgLy8gc3R1YiBmcmFtZSwgc2luY2UgdGhlIHN0dWIgc2F2ZXMgcjE0LXIzMSB0 byBpdHMgc3RhY2sgZWFybHkgb24uIEFueQorKyAgLy8gc2luZ2xlLXN0ZXAtcHJvZmlsaW5nIHNh bXBsZSB0YWtlbiBsYXRlciAob3IgYW55IHVud2luZCB0aHJvdWdoIHRoZQorKyAgLy8gc3R1Yidz IHNhdmVkIENTUiBhcmVhKSB0aGVuIGRlcmVmZXJlbmNlcyBgaWNvdW50X2AgYXMgYSBmcmFtZQor KyAgLy8gcG9pbnRlciBhbmQgY3Jhc2hlcyDigJQgc2VlIGUuZy4gd2FzbS9wcm9maWxpbmcuanMs IGlvbi1lcnJvci0qLmpzLAorKyAgLy8gaW9uLWxhenktdGFibGVzLmpzLCBpb24tY2FsbGVyZnAt dGFnLmpzLCByZXR1cm4tY2FsbC1wcm9maWxpbmcuanMsCisrICAvLyBleHRlcm5yZWYtZ2xvYmFs LXBvc3RiYXJyaWVyLmpzLCBidWlsdGluLW1vZHVsZXMvaTh2ZWNtdWwuanMsCisrICAvLyBhc20u anMvdGVzdEJ1ZzEzNTcwNTMuanMgKGFsbCBzaW5nbGUtc3RlcC1wcm9maWxpbmcgdGVzdHMpLiBJ bgorKyAgLy8gZGVidWcgYnVpbGRzIHRoZSB2YWx1ZSBjb2xsaWRlcyB3aXRoIHRoZSBzYW1lIGNh bGxzaXRlcyBidXQgdGhlCisrICAvLyBNT1pfQVNTRVJUcyBiZWxvdyBjYXRjaCBhbnkgYWN0dWFs IEFCSSB2aW9sYXRpb24sIHdoaWNoIGlzIHRoZQorKyAgLy8gZW50aXJlIHBvaW50LgorKyAgaW50 NjRfdCBjYWxsZWVfc2F2ZWRfdmFsdWUgPSBpY291bnRfOworKyAgc2V0UmVnaXN0ZXIocjE0LCBj YWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjE1LCBjYWxsZWVfc2F2ZWRfdmFs dWUpOworKyAgc2V0UmVnaXN0ZXIocjE2LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVn aXN0ZXIocjE3LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjE4LCBjYWxs ZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjE5LCBjYWxsZWVfc2F2ZWRfdmFsdWUp OworKyAgc2V0UmVnaXN0ZXIocjIwLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0 ZXIocjIxLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjIyLCBjYWxsZWVf c2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjIzLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOwor KyAgc2V0UmVnaXN0ZXIocjI0LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIo cjI1LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjI2LCBjYWxsZWVfc2F2 ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjI3LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAg c2V0UmVnaXN0ZXIocjI4LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjI5 LCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjMwLCBjYWxsZWVfc2F2ZWRf dmFsdWUpOworKyAgc2V0UmVnaXN0ZXIocjMxLCBjYWxsZWVfc2F2ZWRfdmFsdWUpOworKyNlbmRp ZgorKworKyAgLy8gU3RhcnQgdGhlIHNpbXVsYXRpb24uCisrICBpZiAoU2ltdWxhdG9yOjpTdG9w U2ltQXQgIT0gLTEpIHsKKysgICAgZXhlY3V0ZTx0cnVlPigpOworKyAgfSBlbHNlIHsKKysgICAg ZXhlY3V0ZTxmYWxzZT4oKTsKKysgIH0KKysKKysjaWZkZWYgREVCVUcKKysgIC8vIENoZWNrIHRo YXQgdGhlIGNhbGxlZS1zYXZlZCByZWdpc3RlcnMgaGF2ZSBiZWVuIHByZXNlcnZlZC4KKysgIE1P Wl9BU1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxNCkpOworKyAgTU9a X0FTU0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE1KSk7CisrICBNT1pf QVNTRVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTYpKTsKKysgIE1PWl9B U1NFUlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIxNykpOworKyAgTU9aX0FT U0VSVChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjE4KSk7CisrICBNT1pfQVNT RVJUKGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMTkpKTsKKysgIE1PWl9BU1NF UlQoY2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyMCkpOworKyAgTU9aX0FTU0VS VChjYWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjIxKSk7CisrICBNT1pfQVNTRVJU KGNhbGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjIpKTsKKysgIE1PWl9BU1NFUlQo Y2FsbGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyMykpOworKyAgTU9aX0FTU0VSVChj YWxsZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjI0KSk7CisrICBNT1pfQVNTRVJUKGNh bGxlZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjUpKTsKKysgIE1PWl9BU1NFUlQoY2Fs bGVlX3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyNikpOworKyAgTU9aX0FTU0VSVChjYWxs ZWVfc2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjI3KSk7CisrICBNT1pfQVNTRVJUKGNhbGxl ZV9zYXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMjgpKTsKKysgIE1PWl9BU1NFUlQoY2FsbGVl X3NhdmVkX3ZhbHVlID09IGdldFJlZ2lzdGVyKHIyOSkpOworKyAgTU9aX0FTU0VSVChjYWxsZWVf c2F2ZWRfdmFsdWUgPT0gZ2V0UmVnaXN0ZXIocjMwKSk7CisrICBNT1pfQVNTRVJUKGNhbGxlZV9z YXZlZF92YWx1ZSA9PSBnZXRSZWdpc3RlcihyMzEpKTsKKysjZW5kaWYKKysKKysgIC8vIFJlc3Rv cmUgY2FsbGVlLXNhdmVkIHJlZ2lzdGVycy4KKysgIHNldFJlZ2lzdGVyKHIxNCwgcjE0X3ZhbCk7 CisrICBzZXRSZWdpc3RlcihyMTUsIHIxNV92YWwpOworKyAgc2V0UmVnaXN0ZXIocjE2LCByMTZf dmFsKTsKKysgIHNldFJlZ2lzdGVyKHIxNywgcjE3X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMTgs IHIxOF92YWwpOworKyAgc2V0UmVnaXN0ZXIocjE5LCByMTlfdmFsKTsKKysgIHNldFJlZ2lzdGVy KHIyMCwgcjIwX3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMjEsIHIyMV92YWwpOworKyAgc2V0UmVn aXN0ZXIocjIyLCByMjJfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIyMywgcjIzX3ZhbCk7CisrICBz ZXRSZWdpc3RlcihyMjQsIHIyNF92YWwpOworKyAgc2V0UmVnaXN0ZXIocjI1LCByMjVfdmFsKTsK KysgIHNldFJlZ2lzdGVyKHIyNiwgcjI2X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMjcsIHIyN192 YWwpOworKyAgc2V0UmVnaXN0ZXIocjI4LCByMjhfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHIyOSwg cjI5X3ZhbCk7CisrICBzZXRSZWdpc3RlcihyMzAsIHIzMF92YWwpOworKyAgc2V0UmVnaXN0ZXIo cjMxLCByMzFfdmFsKTsKKysgIHNldFJlZ2lzdGVyKHNwLCBzcF92YWwpOworK30KKysKKytpbnQ2 NF90IFNpbXVsYXRvcjo6Y2FsbCh1aW50OF90KiBlbnRyeSwgaW50IGFyZ3VtZW50X2NvdW50LCAu Li4pIHsKKysgIHZhX2xpc3QgcGFyYW1ldGVyczsKKysgIHZhX3N0YXJ0KHBhcmFtZXRlcnMsIGFy Z3VtZW50X2NvdW50KTsKKysKKysgIGludDY0X3Qgb3JpZ2luYWxfc3RhY2sgPSBnZXRSZWdpc3Rl cihzcCk7CisrICAvLyBDb21wdXRlIHBvc2l0aW9uIG9mIHN0YWNrIG9uIGVudHJ5IHRvIGdlbmVy YXRlZCBjb2RlLgorKyAgaW50NjRfdCBlbnRyeV9zdGFjayA9IG9yaWdpbmFsX3N0YWNrOworKyAg aWYgKGFyZ3VtZW50X2NvdW50ID4ga0NBcmdTbG90Q291bnQpIHsKKysgICAgZW50cnlfc3RhY2sg PSBlbnRyeV9zdGFjayAtIGFyZ3VtZW50X2NvdW50ICogc2l6ZW9mKGludDY0X3QpOworKyAgfSBl bHNlIHsKKysgICAgZW50cnlfc3RhY2sgPSBlbnRyeV9zdGFjayAtIGtDQXJnc1Nsb3RzU2l6ZTsK KysgIH0KKysKKysgIGVudHJ5X3N0YWNrICY9IH5VNjQoQUJJU3RhY2tBbGlnbm1lbnQgLSAxKTsK KysKKysgIGludHB0cl90KiBzdGFja19hcmd1bWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy X3QqPihlbnRyeV9zdGFjayk7CisrCisrICAvLyBQUEM2NCBFTEZ2MjogZmlyc3QgOCBpbnRlZ2Vy IGFyZ3MgZ28gaW4gcjMtcjEwLgorKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudF9jb3Vu dDsgaSsrKSB7CisrICAgIGpzOjpqaXQ6OlJlZ2lzdGVyIGFyZ1JlZzsKKysgICAgaWYgKEdldElu dEFyZ1JlZyhpLCAmYXJnUmVnKSkgeworKyAgICAgIHNldFJlZ2lzdGVyKGFyZ1JlZy5jb2RlKCks IHZhX2FyZyhwYXJhbWV0ZXJzLCBpbnQ2NF90KSk7CisrICAgIH0gZWxzZSB7CisrICAgICAgc3Rh Y2tfYXJndW1lbnRbaV0gPSB2YV9hcmcocGFyYW1ldGVycywgaW50NjRfdCk7CisrICAgIH0KKysg IH0KKysKKysgIHZhX2VuZChwYXJhbWV0ZXJzKTsKKysgIHNldFJlZ2lzdGVyKHNwLCBlbnRyeV9z dGFjayk7CisrCisrICBjYWxsSW50ZXJuYWwoZW50cnkpOworKworKyAgTU9aX0FTU0VSVChlbnRy eV9zdGFjayA9PSBnZXRSZWdpc3RlcihzcCkpOworKyAgc2V0UmVnaXN0ZXIoc3AsIG9yaWdpbmFs X3N0YWNrKTsKKysKKysgIGludDY0X3QgcmVzdWx0ID0gZ2V0UmVnaXN0ZXIocjMpOworKyAgcmV0 dXJuIHJlc3VsdDsKKyt9CisrCisrdWludHB0cl90IFNpbXVsYXRvcjo6cHVzaEFkZHJlc3ModWlu dHB0cl90IGFkZHJlc3MpIHsKKysgIGludDY0X3QgbmV3X3NwID0gZ2V0UmVnaXN0ZXIoc3ApIC0g c2l6ZW9mKHVpbnRwdHJfdCk7CisrICB1aW50cHRyX3QqIHN0YWNrX3Nsb3QgPSByZWludGVycHJl dF9jYXN0PHVpbnRwdHJfdCo+KG5ld19zcCk7CisrICAqc3RhY2tfc2xvdCA9IGFkZHJlc3M7Cisr ICBzZXRSZWdpc3RlcihzcCwgbmV3X3NwKTsKKysgIHJldHVybiBuZXdfc3A7CisrfQorKworK3Vp bnRwdHJfdCBTaW11bGF0b3I6OnBvcEFkZHJlc3MoKSB7CisrICBpbnQ2NF90IGN1cnJlbnRfc3Ag PSBnZXRSZWdpc3RlcihzcCk7CisrICB1aW50cHRyX3QqIHN0YWNrX3Nsb3QgPSByZWludGVycHJl dF9jYXN0PHVpbnRwdHJfdCo+KGN1cnJlbnRfc3ApOworKyAgdWludHB0cl90IGFkZHJlc3MgPSAq c3RhY2tfc2xvdDsKKysgIHNldFJlZ2lzdGVyKHNwLCBjdXJyZW50X3NwICsgc2l6ZW9mKHVpbnRw dHJfdCkpOworKyAgcmV0dXJuIGFkZHJlc3M7CisrfQorKworK30gIC8vIG5hbWVzcGFjZSBqaXQK Kyt9ICAvLyBuYW1lc3BhY2UganMKKysKKytqczo6aml0OjpTaW11bGF0b3IqIEpTQ29udGV4dDo6 c2ltdWxhdG9yKCkgY29uc3QgeyByZXR1cm4gc2ltdWxhdG9yXzsgfQorZGlmZiAtLWdpdCBhL2pz L3NyYy9qaXQvcHBjNjQvU2ltdWxhdG9yLXBwYzY0LmggYi9qcy9zcmMvaml0L3BwYzY0L1NpbXVs YXRvci1wcGM2NC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwLi5j N2EzZjM3NjdkNjEKKy0tLSAvZGV2L251bGwKKysrKyBiL2pzL3NyYy9qaXQvcHBjNjQvU2ltdWxh dG9yLXBwYzY0LmgKK0BAIC0wLDAgKzEsNTU2IEBACisrLyogLSotIE1vZGU6IEMrKzsgdGFiLXdp ZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiAyIC0qLQorKyAq IHZpbTogc2V0IHRzPTggc3RzPTIgZXQgc3c9MiB0dz04MDoKKysgKiBUaGlzIFNvdXJjZSBDb2Rl IEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisrICog TGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVk IHdpdGggdGhpcworKyAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxs YS5vcmcvTVBMLzIuMC8uICovCisrCisrI2lmbmRlZiBqaXRfcHBjNjRfU2ltdWxhdG9yX3BwYzY0 X2gKKysjZGVmaW5lIGppdF9wcGM2NF9TaW11bGF0b3JfcHBjNjRfaAorKworKyNpZmRlZiBKU19T SU1VTEFUT1JfUFBDNjQKKysKKysjICBpbmNsdWRlICJtb3ppbGxhL0F0b21pY3MuaCIKKysKKysj ICBpbmNsdWRlICJqaXQvSW9uVHlwZXMuaCIKKysjICBpbmNsdWRlICJqcy9Qcm9maWxpbmdGcmFt ZUl0ZXJhdG9yLmgiCisrIyAgaW5jbHVkZSAidGhyZWFkaW5nL1RocmVhZC5oIgorKyMgIGluY2x1 ZGUgInZtL011dGV4SURzLmgiCisrIyAgaW5jbHVkZSAid2FzbS9XYXNtU2lnbmFsSGFuZGxlcnMu aCIKKysKKytuYW1lc3BhY2UganMgeworK25hbWVzcGFjZSBqaXQgeworKworK2NsYXNzIEppdEFj dGl2YXRpb247CisrY2xhc3MgU2ltdWxhdG9yOworK2NsYXNzIFJlZGlyZWN0aW9uOworK2NsYXNz IENhY2hlUGFnZTsKKytjbGFzcyBBdXRvTG9ja1NpbXVsYXRvcjsKKysKKyt0eXBlZGVmIHZvaWQg KCpTaW5nbGVTdGVwQ2FsbGJhY2spKHZvaWQqIGFyZywgU2ltdWxhdG9yKiBzaW0sIHZvaWQqIHBj KTsKKysKKytjb25zdCBpbnRwdHJfdCBrUG9pbnRlckFsaWdubWVudCA9IDg7CisrY29uc3QgaW50 cHRyX3Qga1BvaW50ZXJBbGlnbm1lbnRNYXNrID0ga1BvaW50ZXJBbGlnbm1lbnQgLSAxOworK2Nv bnN0IGludHB0cl90IGtEb3VibGVBbGlnbm1lbnQgPSA4OworK2NvbnN0IGludHB0cl90IGtEb3Vi bGVBbGlnbm1lbnRNYXNrID0ga0RvdWJsZUFsaWdubWVudCAtIDE7CisrCisrY29uc3QgaW50IGtO dW1HUFJlZ2lzdGVycyA9IDMyOworK2NvbnN0IGludCBrUENSZWdpc3RlciA9IDMyOworK2NvbnN0 IGludCBrTnVtRlBVUmVnaXN0ZXJzID0gMzI7CisrY29uc3QgaW50IGtOdW1WUlJlZ2lzdGVycyA9 IDMyOyAgLy8gVlIwLVZSMzEgKEFsdGl2ZWMvVk1YOyA9IFZTUjMyLTYzIGluIFZTWCkKKysKKysv LyBQUEM2NCBDb25kaXRpb24gUmVnaXN0ZXI6IDggZmllbGRzIG9mIDQgYml0cyBlYWNoLgorKy8v IEVhY2ggZmllbGQ6IGJpdDM9TFQsIGJpdDI9R1QsIGJpdDE9RVEsIGJpdDA9U08gKGluIFBQQyBi aWctZW5kaWFuIG51bWJlcmluZworKy8vIHdpdGhpbiBhIGZpZWxkLCBidXQgc3RvcmVkIGluIGxp dHRsZS1lbmRpYW4gbmliYmxlIG9yZGVyIGluIG91ciB1aW50MzJfdCkuCisrY29uc3QgaW50IGtO dW1DUkZpZWxkcyA9IDg7CisrCisrLy8gQ1IgZmllbGQgYml0IHBvc2l0aW9ucyAod2l0aGluIGEg NC1iaXQgZmllbGQpLgorK2NvbnN0IHVpbnQ4X3Qga0NSRmllbGRMVCA9IDB4ODsKKytjb25zdCB1 aW50OF90IGtDUkZpZWxkR1QgPSAweDQ7CisrY29uc3QgdWludDhfdCBrQ1JGaWVsZEVRID0gMHgy OworK2NvbnN0IHVpbnQ4X3Qga0NSRmllbGRTTyA9IDB4MTsKKysKKysvLyBYRVIgcmVnaXN0ZXIg Yml0IHBvc2l0aW9ucy4KKytjb25zdCBpbnQga1hFUlNPQml0ID0gMzE7CisrY29uc3QgaW50IGtY RVJPVkJpdCA9IDMwOworK2NvbnN0IGludCBrWEVSQ0FCaXQgPSAyOTsKKytjb25zdCBpbnQga1hF Uk9WMzJCaXQgPSAxOTsKKytjb25zdCBpbnQga1hFUkNBMzJCaXQgPSAxODsKKysKKysvLyBGUFND UiByb3VuZGluZyBtb2RlIGJpdHMgKGJpdHMgNjI6NjMsIHN0b3JlZCBpbiBsb3cgYml0cyBvZiBv dXIgdWludDY0X3QpLgorK2NvbnN0IHVpbnQ2NF90IGtGUFNDUlJOTWFzayA9IDB4MzsKKysKKysv LyBGUFUgcm91bmRpbmcgbW9kZXMgbWF0Y2hpbmcgUFBDNjQgRlBTQ1IgUk4gZmllbGQuCisrZW51 bSBGUFVSb3VuZGluZ01vZGUgeworKyAgUk4gPSAwLCAgLy8gUm91bmQgdG8gTmVhcmVzdCAodGll cyB0byBldmVuKQorKyAgUlogPSAxLCAgLy8gUm91bmQgdG93YXJkIFplcm8KKysgIFJQID0gMiwg IC8vIFJvdW5kIHRvd2FyZCArSW5maW5pdHkKKysgIFJNID0gMywgIC8vIFJvdW5kIHRvd2FyZCAt SW5maW5pdHkKKyt9OworKworKy8vIEZQVSBpbnZhbGlkIHJlc3VsdCBjb25zdGFudHMuCisrY29u c3QgdWludDMyX3Qga0ZQVUludmFsaWRSZXN1bHQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oMSA8 PCAzMSkgLSAxOworK2NvbnN0IGludDMyX3Qga0ZQVUludmFsaWRSZXN1bHROZWdhdGl2ZSA9IHN0 YXRpY19jYXN0PGludDMyX3Q+KDF1IDw8IDMxKTsKKytjb25zdCB1aW50NjRfdCBrRlBVNjRJbnZh bGlkUmVzdWx0ID0KKysgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0YXRpY19jYXN0PHVpbnQ2 NF90PigxKSA8PCA2MykgLSAxOworK2NvbnN0IGludDY0X3Qga0ZQVTY0SW52YWxpZFJlc3VsdE5l Z2F0aXZlID0KKysgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+ KDEpIDw8IDYzKTsKKysKKysvLyBCcmVha3BvaW50L3N0b3AgY29kZSByYW5nZXMuCisrY29uc3Qg dWludDMyX3Qga01heFdhdGNocG9pbnRDb2RlID0gMzE7CisrY29uc3QgdWludDMyX3Qga01heFN0 b3BDb2RlID0gMTI3OworK2NvbnN0IHVpbnQzMl90IGtXYXNtVHJhcENvZGUgPSA2OworKworKy8v IFJlZGlyZWN0aW9uIGluc3RydWN0aW9uOiBQUENfc3RvcCAoMHg0QzAwMDJFNCkuCisrLy8gRGlz dGluY3QgZnJvbSBQUENfdHJhcCAoMHg3RkUwMDAwOCkgdXNlZCBmb3Igd2FzbSB0cmFwcy4KKytj b25zdCB1aW50MzJfdCBrQ2FsbFJlZGlySW5zdHIgPSAweDRDMDAwMkU0OworKworK3R5cGVkZWYg dWludDMyX3QgSW5zdHI7CisrY2xhc3MgU2ltSW5zdHJ1Y3Rpb247CisrCisrY2xhc3MgU2ltdWxh dG9yIHsKKysgIGZyaWVuZCBjbGFzcyBwcGM2NERlYnVnZ2VyOworKworKyBwdWJsaWM6CisrICBl bnVtIFJlZ2lzdGVyIHsKKysgICAgbm9fcmVnID0gLTEsCisrICAgIHIwID0gMCwKKysgICAgcjEs CisrICAgIHIyLAorKyAgICByMywKKysgICAgcjQsCisrICAgIHI1LAorKyAgICByNiwKKysgICAg cjcsCisrICAgIHI4LAorKyAgICByOSwKKysgICAgcjEwLAorKyAgICByMTEsCisrICAgIHIxMiwK KysgICAgcjEzLAorKyAgICByMTQsCisrICAgIHIxNSwKKysgICAgcjE2LAorKyAgICByMTcsCisr ICAgIHIxOCwKKysgICAgcjE5LAorKyAgICByMjAsCisrICAgIHIyMSwKKysgICAgcjIyLAorKyAg ICByMjMsCisrICAgIHIyNCwKKysgICAgcjI1LAorKyAgICByMjYsCisrICAgIHIyNywKKysgICAg cjI4LAorKyAgICByMjksCisrICAgIHIzMCwKKysgICAgcjMxLAorKyAgICBwYywKKysgICAga051 bVNpbXVSZWdpc3RlcnMsCisrICAgIC8vIEFsaWFzZXMKKysgICAgc3AgPSByMSwKKysgICAgZnAg PSByMzEsCisrICB9OworKworKyAgZW51bSBGUFVSZWdpc3RlciB7CisrICAgIGYwID0gMCwKKysg ICAgZjEsCisrICAgIGYyLAorKyAgICBmMywKKysgICAgZjQsCisrICAgIGY1LAorKyAgICBmNiwK KysgICAgZjcsCisrICAgIGY4LAorKyAgICBmOSwKKysgICAgZjEwLAorKyAgICBmMTEsCisrICAg IGYxMiwKKysgICAgZjEzLAorKyAgICBmMTQsCisrICAgIGYxNSwKKysgICAgZjE2LAorKyAgICBm MTcsCisrICAgIGYxOCwKKysgICAgZjE5LAorKyAgICBmMjAsCisrICAgIGYyMSwKKysgICAgZjIy LAorKyAgICBmMjMsCisrICAgIGYyNCwKKysgICAgZjI1LAorKyAgICBmMjYsCisrICAgIGYyNywK KysgICAgZjI4LAorKyAgICBmMjksCisrICAgIGYzMCwKKysgICAgZjMxLAorKyAgICBrTnVtRlBV UmVnaXN0ZXJzCisrICB9OworKworKyAgc3RhdGljIFNpbXVsYXRvciogQ3JlYXRlKCk7CisrICBz dGF0aWMgdm9pZCBEZXN0cm95KFNpbXVsYXRvciogc2ltdWxhdG9yKTsKKysKKysgIFNpbXVsYXRv cigpOworKyAgflNpbXVsYXRvcigpOworKworKyAgc3RhdGljIFNpbXVsYXRvciogQ3VycmVudCgp OworKworKyAgc3RhdGljIGlubGluZSB1aW50cHRyX3QgU3RhY2tMaW1pdCgpIHsKKysgICAgcmV0 dXJuIFNpbXVsYXRvcjo6Q3VycmVudCgpLT5zdGFja0xpbWl0KCk7CisrICB9CisrCisrICB1aW50 cHRyX3QqIGFkZHJlc3NPZlN0YWNrTGltaXQoKTsKKysKKysgIC8vIEdQUiBhY2Nlc3NvcnMuCisr ICB2b2lkIHNldFJlZ2lzdGVyKGludCByZWcsIGludDY0X3QgdmFsdWUpOworKyAgaW50NjRfdCBn ZXRSZWdpc3RlcihpbnQgcmVnKSBjb25zdDsKKysKKysgIC8vIEZQUiBhY2Nlc3NvcnMuCisrICB2 b2lkIHNldEZwdVJlZ2lzdGVyKGludCBmcHVyZWcsIGludDY0X3QgdmFsdWUpOworKyAgdm9pZCBz ZXRGcHVSZWdpc3RlcldvcmQoaW50IGZwdXJlZywgaW50MzJfdCB2YWx1ZSk7CisrICB2b2lkIHNl dEZwdVJlZ2lzdGVyRmxvYXQoaW50IGZwdXJlZywgZmxvYXQgdmFsdWUpOworKyAgdm9pZCBzZXRG cHVSZWdpc3RlckRvdWJsZShpbnQgZnB1cmVnLCBkb3VibGUgdmFsdWUpOworKyAgaW50NjRfdCBn ZXRGcHVSZWdpc3RlcihpbnQgZnB1cmVnKSBjb25zdDsKKysgIGludDMyX3QgZ2V0RnB1UmVnaXN0 ZXJXb3JkKGludCBmcHVyZWcpIGNvbnN0OworKyAgaW50MzJfdCBnZXRGcHVSZWdpc3RlclNpZ25l ZFdvcmQoaW50IGZwdXJlZykgY29uc3Q7CisrICBmbG9hdCBnZXRGcHVSZWdpc3RlckZsb2F0KGlu dCBmcHVyZWcpIGNvbnN0OworKyAgZG91YmxlIGdldEZwdVJlZ2lzdGVyRG91YmxlKGludCBmcHVy ZWcpIGNvbnN0OworKworKyAgLy8gVlIgYWNjZXNzb3JzIChBbHRpdmVjL1ZNWCByZWdpc3RlcnMg VlIwLVZSMzEpLiBUaGUgYnl0ZXMgYXJyYXkgaXMgdGhlCisrICAvLyBncm91bmQgdHJ1dGg6IGJ5 dGVzWzBdIGlzIHRoZSBtb3N0LXNpZ25pZmljYW50LWJ5dGUgb24gUFBDNjQgYmlnLWVuZGlhbgor KyAgLy8gbnVtYmVyaW5nLCBpLmUuLCBWU1JbTVNCLi5MU0JdIG1hcHBlZCBhcyBieXRlc1swLi4x NV0uIENhbGxlcnMgdGhhdCB3YW50CisrICAvLyB0eXBlZCB2aWV3cyAobGFuZSAwIGV0Yy4pIHNo b3VsZCBleHRyYWN0IGZyb20gdGhlIGJ5dGVzIGFycmF5IGFjY29yZGluZworKyAgLy8gdG8gdGhl IElTQSdzIGxhbmUgbnVtYmVyaW5nIGZvciB0aGF0IGluc3RydWN0aW9uLgorKyAgdm9pZCBzZXRW UkJ5dGVzKGludCB2cmVnLCBjb25zdCB1aW50OF90IGJ5dGVzWzE2XSk7CisrICB2b2lkIGdldFZS Qnl0ZXMoaW50IHZyZWcsIHVpbnQ4X3QgYnl0ZXNbMTZdKSBjb25zdDsKKysKKysgIC8vIFZTUiAo VmVjdG9yLVNjYWxhciBSZWdpc3RlcikgYWNjZXNzb3JzOiB1bmlmaWVkIDY0LXJlZ2lzdGVyIG5h bWVzcGFjZQorKyAgLy8gd2hlcmUgVlNSIDAtMzEgYWxpYXNlcyBGUFIgMC0zMSAoRFcwIGlzIHRo ZSBGUFIgdmFsdWUsIERXMSBpcworKyAgLy8gYXJjaGl0ZWN0dXJhbGx5IHVuZGVmaW5lZCDigJQg d2UgbW9kZWwgaXQgYXMgemVybyBvbiByZWFkLCBpZ25vcmVkIG9uCisrICAvLyB3cml0ZSkgYW5k IFZTUiAzMi02MyBhbGlhc2VzIFZSIDAtMzEuIFVzZWQgYnkgVlNYIGluc3RydWN0aW9ucworKyAg Ly8gKHh4cGVybWRpLCB4eGxvciwgeHhseG9yLCBtdHZzcmQsIG1mdnNyZCwgLi4uKS4KKysgIHZv aWQgZ2V0VlNSMTI4KGludCB2c3IsIHVpbnQ4X3QgYnl0ZXNbMTZdKSBjb25zdDsKKysgIHZvaWQg c2V0VlNSMTI4KGludCB2c3IsIGNvbnN0IHVpbnQ4X3QgYnl0ZXNbMTZdKTsKKysKKysgIC8vIFNQ UiBhY2Nlc3NvcnMuCisrICBpbnQ2NF90IGdldExSKCkgY29uc3QgeyByZXR1cm4gTFJfOyB9Cisr ICB2b2lkIHNldExSKGludDY0X3QgdmFsdWUpIHsgTFJfID0gdmFsdWU7IH0KKysgIGludDY0X3Qg Z2V0Q1RSKCkgY29uc3QgeyByZXR1cm4gQ1RSXzsgfQorKyAgdm9pZCBzZXRDVFIoaW50NjRfdCB2 YWx1ZSkgeyBDVFJfID0gdmFsdWU7IH0KKysgIHVpbnQzMl90IGdldENSKCkgY29uc3QgeyByZXR1 cm4gQ1JfOyB9CisrICB2b2lkIHNldENSKHVpbnQzMl90IHZhbHVlKSB7IENSXyA9IHZhbHVlOyB9 CisrICB1aW50NjRfdCBnZXRYRVIoKSBjb25zdCB7IHJldHVybiBYRVJfOyB9CisrICB2b2lkIHNl dFhFUih1aW50NjRfdCB2YWx1ZSkgeyBYRVJfID0gdmFsdWU7IH0KKysgIHVpbnQ2NF90IGdldEZQ U0NSKCkgY29uc3QgeyByZXR1cm4gRlBTQ1JfOyB9CisrICB2b2lkIHNldEZQU0NSKHVpbnQ2NF90 IHZhbHVlKSB7IEZQU0NSXyA9IHZhbHVlOyB9CisrCisrICAvLyBDUiBmaWVsZCBhY2Nlc3NvcnM6 IGZpZWxkIDAgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgbmliYmxlIChiaXRzIDMxOjI4KS4KKysg IHVpbnQ4X3QgZ2V0Q1JGaWVsZChpbnQgZmllbGQpIGNvbnN0IHsKKysgICAgcmV0dXJuIChDUl8g Pj4gKDQgKiAoNyAtIGZpZWxkKSkpICYgMHhGOworKyAgfQorKyAgdm9pZCBzZXRDUkZpZWxkKGlu dCBmaWVsZCwgdWludDhfdCB2YWwpIHsKKysgICAgdWludDMyX3Qgc2hpZnQgPSA0ICogKDcgLSBm aWVsZCk7CisrICAgIENSXyA9IChDUl8gJiB+KDB4RnUgPDwgc2hpZnQpKSB8ICgodmFsICYgMHhG dSkgPDwgc2hpZnQpOworKyAgfQorKworKyAgLy8gWEVSIGJpdCBhY2Nlc3NvcnMuCisrICBib29s IGdldFhFUlNPKCkgY29uc3QgeyByZXR1cm4gKFhFUl8gPj4ga1hFUlNPQml0KSAmIDE7IH0KKysg IHZvaWQgc2V0WEVSU08oYm9vbCB2KSB7CisrICAgIFhFUl8gPSAoWEVSXyAmIH4oMXVsbCA8PCBr WEVSU09CaXQpKSB8ICgodWludDY0X3QpdiA8PCBrWEVSU09CaXQpOworKyAgfQorKyAgYm9vbCBn ZXRYRVJPVigpIGNvbnN0IHsgcmV0dXJuIChYRVJfID4+IGtYRVJPVkJpdCkgJiAxOyB9CisrICB2 b2lkIHNldFhFUk9WKGJvb2wgdikgeworKyAgICBYRVJfID0gKFhFUl8gJiB+KDF1bGwgPDwga1hF Uk9WQml0KSkgfCAoKHVpbnQ2NF90KXYgPDwga1hFUk9WQml0KTsKKysgICAgLy8gTWlycm9yIHRv IE9WMzIuIFJlYWwgUE9XRVI5IHNpbGljb24gc2V0cyBPVjMyID09IE9WIGZvciBib3RoIDMyLWJp dAorKyAgICAvLyBhbmQgNjQtYml0IG92ZXJmbG93IG9wczogbXVsbGRvKDIsIDJeNjIpIHByb2R1 Y2VzIE9WPU9WMzI9MTsKKysgICAgLy8gbXVsbGRvKDJeMzAsIDQpIHByb2R1Y2VzIE9WPU9WMzI9 MC4gVGhlIEpJVCdzCisrICAgIC8vIFBPV0VSOSBPdmVyZmxvdyBwYXRoIGlzIGBtdWxsZG8gKyBt Y3J4cnggKyBiYyBPdmVyZmxvd2AsIHdoZXJlCisrICAgIC8vIG1jcnhyeCBwbGFjZXMgT1YzMiBp biB0aGUgR1Qgc2xvdCBhbmQgdGhlIE92ZXJmbG93IGNvbmRpdGlvbiB0ZXN0cworKyAgICAvLyBH VCDigJQgc28gT1YzMiBtdXN0IGJlIGxpdmUgb3Igbm8tb3ZlcmZsb3cgaXMgcmVwb3J0ZWQgZXZl biB3aGVuCisrICAgIC8vIE9WPTEuIFdpdGhvdXQgdGhpcyBtaXJyb3IsIEJpZ0ludCBmYXN0LXBh dGggbXVsIHNpbGVudGx5IHdyYXBzLgorKyAgICBYRVJfID0gKFhFUl8gJiB+KDF1bGwgPDwga1hF Uk9WMzJCaXQpKSB8ICgodWludDY0X3QpdiA8PCBrWEVST1YzMkJpdCk7CisrICAgIGlmICh2KSBz ZXRYRVJTTyh0cnVlKTsKKysgIH0KKysgIGJvb2wgZ2V0WEVSQ0EoKSBjb25zdCB7IHJldHVybiAo WEVSXyA+PiBrWEVSQ0FCaXQpICYgMTsgfQorKyAgdm9pZCBzZXRYRVJDQShib29sIHYpIHsKKysg ICAgWEVSXyA9IChYRVJfICYgfigxdWxsIDw8IGtYRVJDQUJpdCkpIHwgKCh1aW50NjRfdCl2IDw8 IGtYRVJDQUJpdCk7CisrICB9CisrCisrICAvLyBQQyBhY2Nlc3NvcnMuCisrICB2b2lkIHNldF9w YyhpbnQ2NF90IHZhbHVlKTsKKysgIGludDY0X3QgZ2V0X3BjKCkgY29uc3Q7CisrCisrICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KKysgIFQgZ2V0X3BjX2FzKCkgY29uc3QgeworKyAgICByZXR1cm4g cmVpbnRlcnByZXRfY2FzdDxUPihnZXRfcGMoKSk7CisrICB9CisrCisrICB2b2lkIGVuYWJsZV9z aW5nbGVfc3RlcHBpbmcoU2luZ2xlU3RlcENhbGxiYWNrIGNiLCB2b2lkKiBhcmcpOworKyAgdm9p ZCBkaXNhYmxlX3NpbmdsZV9zdGVwcGluZygpOworKworKyAgdWludHB0cl90IHN0YWNrTGltaXQo KSBjb25zdDsKKysgIGJvb2wgb3ZlclJlY3Vyc2VkKHVpbnRwdHJfdCBuZXdzcCA9IDApIGNvbnN0 OworKyAgYm9vbCBvdmVyUmVjdXJzZWRXaXRoRXh0cmEodWludDMyX3QgZXh0cmEpIGNvbnN0Owor KworKyAgdGVtcGxhdGUgPGJvb2wgZW5hYmxlU3RvcFNpbUF0PgorKyAgdm9pZCBleGVjdXRlKCk7 CisrCisrICBpbnQ2NF90IGNhbGwodWludDhfdCogZW50cnksIGludCBhcmd1bWVudF9jb3VudCwg Li4uKTsKKysKKysgIHVpbnRwdHJfdCBwdXNoQWRkcmVzcyh1aW50cHRyX3QgYWRkcmVzcyk7Cisr ICB1aW50cHRyX3QgcG9wQWRkcmVzcygpOworKworKyAgdm9pZCBzZXRMYXN0RGVidWdnZXJJbnB1 dChjaGFyKiBpbnB1dCk7CisrICBjaGFyKiBsYXN0RGVidWdnZXJJbnB1dCgpIHsgcmV0dXJuIGxh c3REZWJ1Z2dlcklucHV0XzsgfQorKworKyAgYm9vbCBoYXNfYmFkX3BjKCkgY29uc3Q7CisrCisr ICAvLyBVcGRhdGUgQ1IgZmllbGQgMCBmcm9tIGEgNjQtYml0IHJlc3VsdC4KKysgIHZvaWQgdXBk YXRlQ1IwKGludDY0X3QgcmVzdWx0KSB7CisrICAgIHVpbnQ4X3QgZmllbGQgPSBrQ1JGaWVsZFNP ICogZ2V0WEVSU08oKTsKKysgICAgaWYgKHJlc3VsdCA8IDApCisrICAgICAgZmllbGQgfD0ga0NS RmllbGRMVDsKKysgICAgZWxzZSBpZiAocmVzdWx0ID4gMCkKKysgICAgICBmaWVsZCB8PSBrQ1JG aWVsZEdUOworKyAgICBlbHNlCisrICAgICAgZmllbGQgfD0ga0NSRmllbGRFUTsKKysgICAgc2V0 Q1JGaWVsZCgwLCBmaWVsZCk7CisrICB9CisrCisrICAvLyBVcGRhdGUgQ1IgZmllbGQgMCBmcm9t IGEgMzItYml0IHJlc3VsdCAoc2lnbi1leHRlbmRlZCBjb21wYXJpc29uKS4KKysgIHZvaWQgdXBk YXRlQ1IwXzMyKGludDMyX3QgcmVzdWx0KSB7CisrICAgIHVpbnQ4X3QgZmllbGQgPSBrQ1JGaWVs ZFNPICogZ2V0WEVSU08oKTsKKysgICAgaWYgKHJlc3VsdCA8IDApCisrICAgICAgZmllbGQgfD0g a0NSRmllbGRMVDsKKysgICAgZWxzZSBpZiAocmVzdWx0ID4gMCkKKysgICAgICBmaWVsZCB8PSBr Q1JGaWVsZEdUOworKyAgICBlbHNlCisrICAgICAgZmllbGQgfD0ga0NSRmllbGRFUTsKKysgICAg c2V0Q1JGaWVsZCgwLCBmaWVsZCk7CisrICB9CisrCisrICAvLyBDb21wYXJlIGFuZCBzZXQgYW4g YXJiaXRyYXJ5IENSIGZpZWxkLgorKyAgdm9pZCBzZXRDUkZpZWxkQ21wKGludCBmaWVsZCwgaW50 NjRfdCBsaHMsIGludDY0X3QgcmhzKSB7CisrICAgIHVpbnQ4X3QgdmFsID0ga0NSRmllbGRTTyAq IGdldFhFUlNPKCk7CisrICAgIGlmIChsaHMgPCByaHMpCisrICAgICAgdmFsIHw9IGtDUkZpZWxk TFQ7CisrICAgIGVsc2UgaWYgKGxocyA+IHJocykKKysgICAgICB2YWwgfD0ga0NSRmllbGRHVDsK KysgICAgZWxzZQorKyAgICAgIHZhbCB8PSBrQ1JGaWVsZEVROworKyAgICBzZXRDUkZpZWxkKGZp ZWxkLCB2YWwpOworKyAgfQorKworKyAgdm9pZCBzZXRDUkZpZWxkQ21wVShpbnQgZmllbGQsIHVp bnQ2NF90IGxocywgdWludDY0X3QgcmhzKSB7CisrICAgIHVpbnQ4X3QgdmFsID0ga0NSRmllbGRT TyAqIGdldFhFUlNPKCk7CisrICAgIGlmIChsaHMgPCByaHMpCisrICAgICAgdmFsIHw9IGtDUkZp ZWxkTFQ7CisrICAgIGVsc2UgaWYgKGxocyA+IHJocykKKysgICAgICB2YWwgfD0ga0NSRmllbGRH VDsKKysgICAgZWxzZQorKyAgICAgIHZhbCB8PSBrQ1JGaWVsZEVROworKyAgICBzZXRDUkZpZWxk KGZpZWxkLCB2YWwpOworKyAgfQorKworKyBwcml2YXRlOgorKyAgZW51bSBTcGVjaWFsVmFsdWVz IHsKKysgICAgLy8gUFBDNjQgbWFza3MgdGhlIGxvdyAyIGJpdHMgb2YgYnJhbmNoIHRhcmdldHMs IHNvIHRoZXNlIG11c3QgYmUKKysgICAgLy8gNC1ieXRlIGFsaWduZWQgdG8gc3Vydml2ZSB0aGUg JiB+MyBtYXNrIGluIGJsci9iY2N0ci4KKysgICAgYmFkX3JhID0gLTQsCisrICAgIGVuZF9zaW1f cGMgPSAtOCwKKysgICAgVW5wcmVkaWN0YWJsZSA9IDB4YmFkYmVhZgorKyAgfTsKKysKKysgIGJv b2wgaW5pdCgpOworKworKyAgdm9pZCBmb3JtYXQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyLCBjb25z dCBjaGFyKiBmb3JtYXQpOworKworKyAgLy8gTWVtb3J5IGFjY2Vzcy4KKysgIGlubGluZSB1aW50 OF90IHJlYWRCVSh1aW50NjRfdCBhZGRyKTsKKysgIGlubGluZSBpbnQ4X3QgcmVhZEIodWludDY0 X3QgYWRkcik7CisrICBpbmxpbmUgdm9pZCB3cml0ZUIodWludDY0X3QgYWRkciwgdWludDhfdCB2 YWx1ZSk7CisrICBpbmxpbmUgdm9pZCB3cml0ZUIodWludDY0X3QgYWRkciwgaW50OF90IHZhbHVl KTsKKysKKysgIGlubGluZSB1aW50MTZfdCByZWFkSFUodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1 Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSBpbnQxNl90IHJlYWRIKHVpbnQ2NF90IGFkZHIsIFNp bUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgdm9pZCB3cml0ZUgodWludDY0X3QgYWRk ciwgdWludDE2X3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgdm9p ZCB3cml0ZUgodWludDY0X3QgYWRkciwgaW50MTZfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24qIGlu c3RyKTsKKysKKysgIGlubGluZSB1aW50MzJfdCByZWFkV1UodWludDY0X3QgYWRkciwgU2ltSW5z dHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSBpbnQzMl90IHJlYWRXKHVpbnQ2NF90IGFkZHIs IFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgdm9pZCB3cml0ZVcodWludDY0X3Qg YWRkciwgdWludDMyX3QgdmFsdWUsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUg dm9pZCB3cml0ZVcodWludDY0X3QgYWRkciwgaW50MzJfdCB2YWx1ZSwgU2ltSW5zdHJ1Y3Rpb24q IGluc3RyKTsKKysKKysgIGlubGluZSBpbnQ2NF90IHJlYWREVyh1aW50NjRfdCBhZGRyLCBTaW1J bnN0cnVjdGlvbiogaW5zdHIpOworKyAgaW5saW5lIHZvaWQgd3JpdGVEVyh1aW50NjRfdCBhZGRy LCBpbnQ2NF90IHZhbHVlLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKworKyAgaW5saW5lIGRv dWJsZSByZWFkRCh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgaW5s aW5lIHZvaWQgd3JpdGVEKHVpbnQ2NF90IGFkZHIsIGRvdWJsZSB2YWx1ZSwgU2ltSW5zdHJ1Y3Rp b24qIGluc3RyKTsKKysKKysgIGlubGluZSB1aW50OF90IGxvYWRMaW5rZWRCKHVpbnQ2NF90IGFk ZHIsIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgaW50IHN0b3JlQ29uZGl0aW9u YWxCKHVpbnQ2NF90IGFkZHIsIHVpbnQ4X3QgdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICBpbmxpbmUgdWludDE2X3QgbG9h ZExpbmtlZEgodWludDY0X3QgYWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGlu ZSBpbnQgc3RvcmVDb25kaXRpb25hbEgodWludDY0X3QgYWRkciwgdWludDE2X3QgdmFsdWUsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbUluc3RydWN0aW9uKiBpbnN0cik7Cisr ICBpbmxpbmUgaW50MzJfdCBsb2FkTGlua2VkVyh1aW50NjRfdCBhZGRyLCBTaW1JbnN0cnVjdGlv biogaW5zdHIpOworKyAgaW5saW5lIGludCBzdG9yZUNvbmRpdGlvbmFsVyh1aW50NjRfdCBhZGRy LCBpbnQzMl90IHZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaW1JbnN0 cnVjdGlvbiogaW5zdHIpOworKyAgaW5saW5lIGludDY0X3QgbG9hZExpbmtlZEQodWludDY0X3Qg YWRkciwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGlubGluZSBpbnQgc3RvcmVDb25kaXRp b25hbEQodWludDY0X3QgYWRkciwgaW50NjRfdCB2YWx1ZSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysKKysgIC8vIEluc3RydWN0aW9u IGRlY29kZXJzLgorKyAgdm9pZCBkZWNvZGVERm9ybUFMVShTaW1JbnN0cnVjdGlvbiogaW5zdHIp OworKyAgdm9pZCBkZWNvZGVERm9ybUxvYWQoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIHZv aWQgZGVjb2RlREZvcm1TdG9yZShTaW1JbnN0cnVjdGlvbiogaW5zdHIpOworKyAgdm9pZCBkZWNv ZGVEU0Zvcm0oU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIHZvaWQgZGVjb2RlWEZvcm0oU2lt SW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIHZvaWQgZGVjb2RlUm90YXRlTWFzayhTaW1JbnN0cnVj dGlvbiogaW5zdHIpOworKyAgdm9pZCBkZWNvZGVCcmFuY2goU2ltSW5zdHJ1Y3Rpb24qIGluc3Ry KTsKKysgIHZvaWQgZGVjb2RlRlAoU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIHZvaWQgZGVj b2RlVlNYKFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrICB2b2lkIGRlY29kZVZNWChTaW1JbnN0 cnVjdGlvbiogaW5zdHIpOworKyAgLy8gUG93ZXIgSVNBIHYzLjEgcHJlZml4ZWQgaW5zdHJ1Y3Rp b25zLiBgcHJlZml4YCBwb2ludHMgYXQgdGhlCisrICAvLyA0LWJ5dGUgcHJlZml4IHdvcmQ7IHRo ZSBzdWZmaXggaXMgcmVhZCBmcm9tIGBwcmVmaXggKyA0YC4KKysgIHZvaWQgZGVjb2RlUHJlZml4 ZWQoU2ltSW5zdHJ1Y3Rpb24qIHByZWZpeCk7CisrCisrICB2b2lkIHNvZnR3YXJlSW50ZXJydXB0 KFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrCisrICAvLyBTdG9wL2JyZWFrcG9pbnQgaGVscGVy cy4KKysgIGJvb2wgaXNXYXRjaHBvaW50KHVpbnQzMl90IGNvZGUpOworKyAgdm9pZCBwcmludFdh dGNocG9pbnQodWludDMyX3QgY29kZSk7CisrICB2b2lkIGhhbmRsZVN0b3AodWludDMyX3QgY29k ZSwgU2ltSW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGJvb2wgaXNTdG9wSW5zdHJ1Y3Rpb24oU2lt SW5zdHJ1Y3Rpb24qIGluc3RyKTsKKysgIGJvb2wgaXNFbmFibGVkU3RvcCh1aW50MzJfdCBjb2Rl KTsKKysgIHZvaWQgZW5hYmxlU3RvcCh1aW50MzJfdCBjb2RlKTsKKysgIHZvaWQgZGlzYWJsZVN0 b3AodWludDMyX3QgY29kZSk7CisrICB2b2lkIGluY3JlYXNlU3RvcENvdW50ZXIodWludDMyX3Qg Y29kZSk7CisrICB2b2lkIHByaW50U3RvcEluZm8odWludDMyX3QgY29kZSk7CisrCisrICBKUzo6 UHJvZmlsaW5nRnJhbWVJdGVyYXRvcjo6UmVnaXN0ZXJTdGF0ZSByZWdpc3RlclN0YXRlKCk7Cisr CisrICBib29sIE1PWl9BTFdBWVNfSU5MSU5FIGhhbmRsZVdhc21TZWdGYXVsdCh1aW50NjRfdCBh ZGRyLCB1bnNpZ25lZCBudW1CeXRlcykgeworKyAgICBpZiAoTU9aX0xJS0VMWSghanM6Ondhc206 OkNvZGVFeGlzdHMpKSB7CisrICAgICAgcmV0dXJuIGZhbHNlOworKyAgICB9CisrICAgIHVpbnQ4 X3QqIG5ld1BDOworKyAgICBpZiAoIWpzOjp3YXNtOjpNZW1vcnlBY2Nlc3NUcmFwcyhyZWdpc3Rl clN0YXRlKCksICh1aW50OF90KilhZGRyLCBudW1CeXRlcywKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm5ld1BDKSkgeworKyAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorKyAgICBMTEJpdF8gPSBmYWxzZTsKKysgICAgc2V0X3BjKGludDY0X3QobmV3UEMpKTsKKysg ICAgcmV0dXJuIHRydWU7CisrICB9CisrCisrICB2b2lkIGluc3RydWN0aW9uRGVjb2RlKFNpbUlu c3RydWN0aW9uKiBpbnN0cik7CisrCisrIHB1YmxpYzoKKysgIHN0YXRpYyBpbnQ2NF90IFN0b3BT aW1BdDsKKysKKysgIHN0YXRpYyB2b2lkKiBSZWRpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZvaWQqIG5h dGl2ZUZ1bmN0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJJ RnVuY3Rpb25UeXBlIHR5cGUpOworKworKyBwcml2YXRlOgorKyAgdm9pZCBzZXRDYWxsUmVzdWx0 RG91YmxlKGRvdWJsZSByZXN1bHQpOworKyAgdm9pZCBzZXRDYWxsUmVzdWx0RmxvYXQoZmxvYXQg cmVzdWx0KTsKKysgIHZvaWQgc2V0Q2FsbFJlc3VsdChpbnQ2NF90IHJlcyk7CisrIyAgaWZkZWYg WFBfREFSV0lOCisrICB2b2lkIHNldENhbGxSZXN1bHQoaW50cHRyX3QgcmVzKTsKKysjICBlbmRp ZgorKyAgdm9pZCBzZXRDYWxsUmVzdWx0KF9faW50MTI4IHJlcyk7CisrCisrICB2b2lkIGNhbGxJ bnRlcm5hbCh1aW50OF90KiBlbnRyeSk7CisrCisrICAvLyBBcmNoaXRlY3R1cmUgc3RhdGUuCisr ICBpbnQ2NF90IHJlZ2lzdGVyc19ba051bVNpbXVSZWdpc3RlcnNdOworKyAgaW50NjRfdCBGUFVy ZWdpc3RlcnNfW2tOdW1GUFVSZWdpc3RlcnNdOworKyAgLy8gVlIgbmFtZXNwYWNlIChBbHRpdmVj L1ZNWCByZWdpc3RlcnMgVlIwLVZSMzEgPT0gVlNSMzItNjMpLiBTdG9yZWQgYXMKKysgIC8vIDE2 IHJhdyBieXRlcyBwZXIgcmVnaXN0ZXIgdG8gcHJlc2VydmUgZXhhY3QgYXJjaGl0ZWN0dXJhbCBi eXRlIG9yZGVyCisrICAvLyBpbmRlcGVuZGVudCBvZiBob3N0IGVuZGlhbm5lc3MuIEFjY2Vzc29y cyBkZWZpbmVkIGJlbG93OyB0aGUgYnl0ZXMKKysgIC8vIGFycmF5IGlzIHRoZSBncm91bmQgdHJ1 dGguCisrICB1aW50OF90IFZScmVnaXN0ZXJzX1trTnVtVlJSZWdpc3RlcnNdWzE2XTsKKysKKysg IC8vIFBQQzY0IFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlcnMuCisrICBpbnQ2NF90IExSXzsKKysg IGludDY0X3QgQ1RSXzsKKysgIHVpbnQzMl90IENSXzsKKysgIHVpbnQ2NF90IFhFUl87CisrICB1 aW50NjRfdCBGUFNDUl87CisrCisrICAvLyBBdG9taWNzLgorKyAgYm9vbCBMTEJpdF87CisrICB1 aW50cHRyX3QgTExBZGRyXzsKKysgIGludDY0X3QgbGFzdExMVmFsdWVfOworKworKyAgLy8gU2lt dWxhdG9yIHN1cHBvcnQuCisrICBjaGFyKiBzdGFja187CisrICB1aW50cHRyX3Qgc3RhY2tMaW1p dF87CisrICBib29sIHBjX21vZGlmaWVkXzsKKysgIGludDY0X3QgaWNvdW50XzsKKysgIGludDY0 X3QgYnJlYWtfY291bnRfOworKworKyAgY2hhciogbGFzdERlYnVnZ2VySW5wdXRfOworKworKyAg U2ltSW5zdHJ1Y3Rpb24qIGJyZWFrX3BjXzsKKysgIEluc3RyIGJyZWFrX2luc3RyXzsKKysKKysg IGJvb2wgc2luZ2xlX3N0ZXBwaW5nXzsKKysgIFNpbmdsZVN0ZXBDYWxsYmFjayBzaW5nbGVfc3Rl cF9jYWxsYmFja187CisrICB2b2lkKiBzaW5nbGVfc3RlcF9jYWxsYmFja19hcmdfOworKworKyAg c3RhdGljIGNvbnN0IHVpbnQzMl90IGtOdW1PZldhdGNoZWRTdG9wcyA9IDI1NjsKKysgIHN0YXRp YyBjb25zdCB1aW50MzJfdCBrU3RvcERpc2FibGVkQml0ID0gMVUgPDwgMzE7CisrCisrICBzdHJ1 Y3QgU3RvcENvdW50QW5kRGVzYyB7CisrICAgIHVpbnQzMl90IGNvdW50XzsKKysgICAgY2hhciog ZGVzY187CisrICB9OworKyAgU3RvcENvdW50QW5kRGVzYyB3YXRjaGVkU3RvcHNfW2tOdW1PZldh dGNoZWRTdG9wc107CisrfTsKKysKKysvLyBQcm9jZXNzLXdpZGUgc2ltdWxhdG9yIHN0YXRlLgor K2NsYXNzIFNpbXVsYXRvclByb2Nlc3MgeworKyAgZnJpZW5kIGNsYXNzIFJlZGlyZWN0aW9uOwor KyAgZnJpZW5kIGNsYXNzIEF1dG9Mb2NrU2ltdWxhdG9yQ2FjaGU7CisrCisrIHByaXZhdGU6Cisr ICBzdHJ1Y3QgSUNhY2hlSGFzaGVyIHsKKysgICAgdHlwZWRlZiB2b2lkKiBLZXk7CisrICAgIHR5 cGVkZWYgdm9pZCogTG9va3VwOworKyAgICBzdGF0aWMgSGFzaE51bWJlciBoYXNoKGNvbnN0IExv b2t1cCYgbCk7CisrICAgIHN0YXRpYyBib29sIG1hdGNoKGNvbnN0IEtleSYgaywgY29uc3QgTG9v a3VwJiBsKTsKKysgIH07CisrCisrIHB1YmxpYzoKKysgIHR5cGVkZWYgSGFzaE1hcDx2b2lkKiwg Q2FjaGVQYWdlKiwgSUNhY2hlSGFzaGVyLCBTeXN0ZW1BbGxvY1BvbGljeT4gSUNhY2hlTWFwOwor KworKyAgc3RhdGljIG1vemlsbGE6OkF0b21pYzxzaXplX3QsIG1vemlsbGE6OlJlbGVhc2VBY3F1 aXJlPgorKyAgICAgIElDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50OworKyAgc3RhdGljIHZvaWQg Rmx1c2hJQ2FjaGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKTsKKysgIHN0YXRpYyB2b2lkIGNo ZWNrSUNhY2hlTG9ja2VkKFNpbUluc3RydWN0aW9uKiBpbnN0cik7CisrCisrICBzdGF0aWMgYm9v bCBpbml0aWFsaXplKCkgeworKyAgICBzaW5nbGV0b25fID0ganNfbmV3PFNpbXVsYXRvclByb2Nl c3M+KCk7CisrICAgIHJldHVybiBzaW5nbGV0b25fOworKyAgfQorKyAgc3RhdGljIHZvaWQgZGVz dHJveSgpIHsKKysgICAganNfZGVsZXRlKHNpbmdsZXRvbl8pOworKyAgICBzaW5nbGV0b25fID0g bnVsbHB0cjsKKysgIH0KKysKKysgIFNpbXVsYXRvclByb2Nlc3MoKTsKKysgIH5TaW11bGF0b3JQ cm9jZXNzKCk7CisrCisrIHByaXZhdGU6CisrICBzdGF0aWMgU2ltdWxhdG9yUHJvY2Vzcyogc2lu Z2xldG9uXzsKKysKKysgIE11dGV4IGNhY2hlTG9ja187CisrICBSZWRpcmVjdGlvbiogcmVkaXJl Y3Rpb25fOworKyAgSUNhY2hlTWFwIGljYWNoZV87CisrCisrIHB1YmxpYzoKKysgIHN0YXRpYyBJ Q2FjaGVNYXAmIGljYWNoZSgpIHsKKysgICAgc2luZ2xldG9uXy0+Y2FjaGVMb2NrXy5hc3NlcnRP d25lZEJ5Q3VycmVudFRocmVhZCgpOworKyAgICByZXR1cm4gc2luZ2xldG9uXy0+aWNhY2hlXzsK KysgIH0KKysKKysgIHN0YXRpYyBSZWRpcmVjdGlvbiogcmVkaXJlY3Rpb24oKSB7CisrICAgIHNp bmdsZXRvbl8tPmNhY2hlTG9ja18uYXNzZXJ0T3duZWRCeUN1cnJlbnRUaHJlYWQoKTsKKysgICAg cmV0dXJuIHNpbmdsZXRvbl8tPnJlZGlyZWN0aW9uXzsKKysgIH0KKysKKysgIHN0YXRpYyB2b2lk IHNldFJlZGlyZWN0aW9uKGpzOjpqaXQ6OlJlZGlyZWN0aW9uKiByZWRpcmVjdGlvbikgeworKyAg ICBzaW5nbGV0b25fLT5jYWNoZUxvY2tfLmFzc2VydE93bmVkQnlDdXJyZW50VGhyZWFkKCk7Cisr ICAgIHNpbmdsZXRvbl8tPnJlZGlyZWN0aW9uXyA9IHJlZGlyZWN0aW9uOworKyAgfQorK307Cisr CisrfSAgLy8gbmFtZXNwYWNlIGppdAorK30gIC8vIG5hbWVzcGFjZSBqcworKworKyNlbmRpZiAv KiBKU19TSU1VTEFUT1JfUFBDNjQgKi8KKysKKysjZW5kaWYgLyogaml0X3BwYzY0X1NpbXVsYXRv cl9wcGM2NF9oICovCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBw YzY0LmNwcCBiL2pzL3NyYy9qaXQvcHBjNjQvVHJhbXBvbGluZS1wcGM2NC5jcHAKK25ldyBmaWxl IG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwMDAwMDAuLjUxNWE5MzFjODZiMAorLS0tIC9kZXYv bnVsbAorKysrIGIvanMvc3JjL2ppdC9wcGM2NC9UcmFtcG9saW5lLXBwYzY0LmNwcAorQEAgLTAs MCArMSw2NDggQEAKKysvKiAtKi0gTW9kZTogQysrOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJz LW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDIgLSotCisrICogdmltOiBzZXQgdHM9OCBzdHM9 MiBldCBzdz0yIHR3PTgwOgorKyAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRv IHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKysgKiBMaWNlbnNlLCB2LiAyLjAuIElm IGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCisrICogZmls ZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gKi8K KysKKysjaW5jbHVkZSAiaml0L0JhaWxvdXRzLmgiCisrI2luY2x1ZGUgImppdC9CYXNlbGluZUZy YW1lLmgiCisrI2luY2x1ZGUgImppdC9DYWxsZWVUb2tlbi5oIgorKyNpbmNsdWRlICJqaXQvSml0 RnJhbWVzLmgiCisrI2luY2x1ZGUgImppdC9KaXRSdW50aW1lLmgiCisrI2luY2x1ZGUgImppdC9Q ZXJmU3Bld2VyLmgiCisrI2luY2x1ZGUgImppdC9wcGM2NC9TaGFyZWRJQ0hlbHBlcnMtcHBjNjQu aCIKKysjaW5jbHVkZSAiaml0L1ZNRnVuY3Rpb25zLmgiCisrI2luY2x1ZGUgInZtL0ppdEFjdGl2 YXRpb24uaCIKKysjaW5jbHVkZSAidm0vSlNDb250ZXh0LmgiCisrCisrI2luY2x1ZGUgImppdC9N YWNyb0Fzc2VtYmxlci1pbmwuaCIKKysKKyt1c2luZyBuYW1lc3BhY2UganM7CisrdXNpbmcgbmFt ZXNwYWNlIGpzOjpqaXQ7CisrCisrLy8gRmxvYXQgKFNpbmdsZStEb3VibGUpIGFuZCBhbGwgR1BS cy4gU2ltZDEyOCBleGNsdWRlZCDigJQgSW9uIGNvbXBpbGVzIEpTCisrLy8gKG5vIHYxMjggdHlw ZSksIHNvIFNJTUQgcmVncyBhcmUgbmV2ZXIgbGl2ZSBhdCBiYWlsb3V0IC8gaW52YWxpZGF0b3Ig LworKy8vIHByZUJhcnJpZXIgZW50cnkuIEluY2x1ZGluZyB0aGVtIHdvdWxkIGZvcmNlIHRoZSBi YWlsb3V0IGZyYW1lJ3MKKysvLyBGUFVBcnJheSB0byBob2xkIHYxMjggc2xvdHMgdGhhdCBJb24g bmV2ZXIgd3JpdGVzLgorK3N0YXRpYyBjb25zdCBMaXZlUmVnaXN0ZXJTZXQgQWxsUmVncyA9IExp dmVSZWdpc3RlclNldCgKKysgICAgR2VuZXJhbFJlZ2lzdGVyU2V0KFJlZ2lzdGVyczo6QWxsTWFz ayksCisrICAgIEZsb2F0UmVnaXN0ZXJTZXQoRmxvYXRSZWdpc3RlcnM6OkFsbFNpbmdsZU1hc2sg fAorKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxEb3VibGVNYXNrKSk7 CisrCisrc3RhdGljX2Fzc2VydChzaXplb2YodWludHB0cl90KSA9PSBzaXplb2YodWludDY0X3Qp LCAiTm90IDY0LWJpdCBjbGVhbi4iKTsKKysKKysvLyBQUEM2NCBFTEZ2MiBjYWxsZWUtc2F2ZWQ6 IEdQUnMgcjE0LXIzMSwgRlBScyBmMTQtZjMxLCBWUnMgVlIyMC1WUjMxLCBMUi4KKysvLyBXZSBh bHNvIHNhdmUgcmVnX3ZwIChyMTAgLyBJbnRBcmdSZWc3KSBzbyB3ZSBjYW4gdXNlIGl0IGFmdGVy IHRoZSBKSVQgY2FsbC4KKysvLworKy8vIExheW91dCBpcyBhbGlnbmFzKDE2KSBzbyB0aGF0IGFm dGVyIGByZXNlcnZlU3RhY2soc2l6ZW9mKEVudGVySklUUmVncykpYAorKy8vIHRoZSBTUC1yZWxh dGl2ZSBvZmZzZXQgb2YgZXZlcnkgVlIgc2xvdCBpcyAxNi1ieXRlIGFsaWduZWQsIHNhdGlzZnlp bmcKKysvLyB0aGUgMTYtYnl0ZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2Ygc3R4dmQyeCAvIHN0 dnggKHN0dnggaXMgdGVjaG5pY2FsbHkKKysvLyBhbGlnbm1lbnQtdG9sZXJhbnQsIGJ1dCB3ZSdk IHJhdGhlciBhbGlnbiBieSBjb25zdHJ1Y3Rpb24pLiBQYWRkaW5nIGF0CisrLy8gdGhlIGVuZCBr ZWVwcyBzaXplb2YgYSBtdWx0aXBsZSBvZiAxNiBzbyBTUCBzdGF5cyBxdWFkd29yZC1hbGlnbmVk IHBlcgorKy8vIHRoZSBFTEZ2MiBzdGFjay1wb2ludGVyIHJ1bGUuCisrc3RydWN0IGFsaWduYXMo MTYpIEVudGVySklUUmVncyB7CisrICAvLyBWUjIwLVZSMzEgZmlyc3Qgc28gdGhlaXIgU1AtcmVs YXRpdmUgb2Zmc2V0cyBhcmUgMCwgMTYsIDMyLCAuLi4g4oCUIGFsbAorKyAgLy8gMTYtYnl0ZSBh bGlnbmVkIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBmb2xsb3dzLgorKyAgdWludDhfdCB2cjIwWzE2XTsK KysgIHVpbnQ4X3QgdnIyMVsxNl07CisrICB1aW50OF90IHZyMjJbMTZdOworKyAgdWludDhfdCB2 cjIzWzE2XTsKKysgIHVpbnQ4X3QgdnIyNFsxNl07CisrICB1aW50OF90IHZyMjVbMTZdOworKyAg dWludDhfdCB2cjI2WzE2XTsKKysgIHVpbnQ4X3QgdnIyN1sxNl07CisrICB1aW50OF90IHZyMjhb MTZdOworKyAgdWludDhfdCB2cjI5WzE2XTsKKysgIHVpbnQ4X3QgdnIzMFsxNl07CisrICB1aW50 OF90IHZyMzFbMTZdOworKworKyAgZG91YmxlIGYzMTsKKysgIGRvdWJsZSBmMzA7CisrICBkb3Vi bGUgZjI5OworKyAgZG91YmxlIGYyODsKKysgIGRvdWJsZSBmMjc7CisrICBkb3VibGUgZjI2Owor KyAgZG91YmxlIGYyNTsKKysgIGRvdWJsZSBmMjQ7CisrICBkb3VibGUgZjIzOworKyAgZG91Ymxl IGYyMjsKKysgIGRvdWJsZSBmMjE7CisrICBkb3VibGUgZjIwOworKyAgZG91YmxlIGYxOTsKKysg IGRvdWJsZSBmMTg7CisrICBkb3VibGUgZjE3OworKyAgZG91YmxlIGYxNjsKKysgIGRvdWJsZSBm MTU7CisrICBkb3VibGUgZjE0OworKworKyAgdWludDY0X3QgcjMxOyAgLy8gRnJhbWVQb2ludGVy CisrICB1aW50NjRfdCByMzA7CisrICB1aW50NjRfdCByMjk7CisrICB1aW50NjRfdCByMjg7Cisr ICB1aW50NjRfdCByMjc7CisrICB1aW50NjRfdCByMjY7CisrICB1aW50NjRfdCByMjU7CisrICB1 aW50NjRfdCByMjQ7CisrICB1aW50NjRfdCByMjM7CisrICB1aW50NjRfdCByMjI7CisrICB1aW50 NjRfdCByMjE7CisrICB1aW50NjRfdCByMjA7CisrICB1aW50NjRfdCByMTk7CisrICB1aW50NjRf dCByMTg7CisrICB1aW50NjRfdCByMTc7CisrICB1aW50NjRfdCByMTY7CisrICB1aW50NjRfdCBy MTU7CisrICB1aW50NjRfdCByMTQ7CisrICB1aW50NjRfdCByMjsgIC8vIFRPQyBwb2ludGVyCisr ICB1aW50NjRfdCBscjsKKysgIC8vIFNhdmUgcmVnX3ZwIChyMTApIG9uIHN0YWNrIHNvIHdlIGNh biB1c2UgaXQgYWZ0ZXIgdGhlIEpJVCBjYWxsIHJldHVybnMuCisrICB1aW50NjRfdCByMTA7Cisr fTsKKysvLyBhbGlnbmFzKDE2KSBvbiB0aGUgc3RydWN0IGVuc3VyZXMgc2l6ZW9mIGlzIGEgbXVs dGlwbGUgb2YgMTYsIHdoaWNoIGtlZXBzCisrLy8gU1AgcXVhZHdvcmQtYWxpZ25lZCBhZnRlciBg cmVzZXJ2ZVN0YWNrKHNpemVvZihFbnRlckpJVFJlZ3MpKWAuIFRoZQorKy8vIGV4aXN0aW5nIGZp ZWxkcyB0b3RhbCAzMTIgYnl0ZXM7IHdpdGggdGhlIDE5MiBieXRlcyBvZiBWUiBzbG90cyB3ZSBh cmUKKysvLyBhdCA1MDQsIHdoaWNoIGFsaWduYXMoMTYpIGJ1bXBzIHRvIDUxMi4KKytzdGF0aWNf YXNzZXJ0KChzaXplb2YoRW50ZXJKSVRSZWdzKSAlIDE2KSA9PSAwLAorKyAgICAgICAgICAgICAg IkVudGVySklUUmVncyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25lZCB0byBrZWVwIFNQIGFsaWduZWQi KTsKKysKKytzdGF0aWMgdm9pZCBHZW5lcmF0ZVJldHVybihNYWNyb0Fzc2VtYmxlciYgbWFzbSkg eworKyAgTU9aX0FTU0VSVChtYXNtLmZyYW1lUHVzaGVkKCkgPT0gc2l6ZW9mKEVudGVySklUUmVn cykpOworKworKyAgLy8gUmVzdG9yZSBub24tdm9sYXRpbGUgR1BScy4KKysgIG1hc20uYXNfbGQo cjE0LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE0KSk7CisrICBtYXNt LmFzX2xkKHIxNSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxNSkpOwor KyAgbWFzbS5hc19sZChyMTYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBy MTYpKTsKKysgIG1hc20uYXNfbGQocjE3LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgcjE3KSk7CisrICBtYXNtLmFzX2xkKHIxOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihF bnRlckpJVFJlZ3MsIHIxOCkpOworKyAgbWFzbS5hc19sZChyMTksIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMTkpKTsKKysgIG1hc20uYXNfbGQocjIwLCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIwKSk7CisrICBtYXNtLmFzX2xkKHIyMSwgU3Rh Y2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMSkpOworKyAgbWFzbS5hc19sZChy MjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjIpKTsKKysgIG1hc20u YXNfbGQocjIzLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIzKSk7Cisr ICBtYXNtLmFzX2xkKHIyNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIy NCkpOworKyAgbWFzbS5hc19sZChyMjUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRS ZWdzLCByMjUpKTsKKysgIG1hc20uYXNfbGQocjI2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVu dGVySklUUmVncywgcjI2KSk7CisrICBtYXNtLmFzX2xkKHIyNywgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIHIyNykpOworKyAgbWFzbS5hc19sZChyMjgsIFN0YWNrUG9pbnRl ciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjgpKTsKKysgIG1hc20uYXNfbGQocjI5LCBTdGFj a1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI5KSk7CisrICBtYXNtLmFzX2xkKHIz MCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIzMCkpOworKyAgbWFzbS5h c19sZChyMzEsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMzEpKTsKKysg IG1hc20uYXNfbGQocjIsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMikp OworKworKyAgLy8gUmVzdG9yZSBMUi4KKysgIG1hc20uYXNfbGQocjAsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBscikpOworKyAgbWFzbS54c19tdGxyKHIwKTsKKysKKysg IC8vIFJlc3RvcmUgbm9uLXZvbGF0aWxlIEZQUnMuCisrICBtYXNtLmFzX2xmZChmMTQsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTQpKTsKKysgIG1hc20uYXNfbGZkKGYx NSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYxNSkpOworKyAgbWFzbS5h c19sZmQoZjE2LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjE2KSk7Cisr ICBtYXNtLmFzX2xmZChmMTcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MTcpKTsKKysgIG1hc20uYXNfbGZkKGYxOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJ VFJlZ3MsIGYxOCkpOworKyAgbWFzbS5hc19sZmQoZjE5LCBTdGFja1BvaW50ZXIsIG9mZnNldG9m KEVudGVySklUUmVncywgZjE5KSk7CisrICBtYXNtLmFzX2xmZChmMjAsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjApKTsKKysgIG1hc20uYXNfbGZkKGYyMSwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyMSkpOworKyAgbWFzbS5hc19sZmQoZjIy LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjIyKSk7CisrICBtYXNtLmFz X2xmZChmMjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjMpKTsKKysg IG1hc20uYXNfbGZkKGYyNCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYy NCkpOworKyAgbWFzbS5hc19sZmQoZjI1LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklU UmVncywgZjI1KSk7CisrICBtYXNtLmFzX2xmZChmMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjYpKTsKKysgIG1hc20uYXNfbGZkKGYyNywgU3RhY2tQb2ludGVyLCBv ZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYyNykpOworKyAgbWFzbS5hc19sZmQoZjI4LCBTdGFja1Bv aW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjI4KSk7CisrICBtYXNtLmFzX2xmZChmMjks IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjkpKTsKKysgIG1hc20uYXNf bGZkKGYzMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGYzMCkpOworKyAg bWFzbS5hc19sZmQoZjMxLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgZjMx KSk7CisrCisrICAvLyBSZXN0b3JlIGNhbGxlZS1zYXZlZCBWUjIwLVZSMzEgKEVMRnYyKS4gbHZ4 IHVzZXMgaW5kZXhlZCBhZGRyZXNzaW5nCisrICAvLyAoUkEgKyBSQiksIGFuZCByMCdzIHZhbHVl IGlzIHVzZWQgaGVyZSBhcyBSQiAoUkEgPSBTdGFja1BvaW50ZXIgaXMKKysgIC8vIG5vbi16ZXJv LCBzbyBpdHMgdmFsdWUgaXMgYWRkZWQpLiByMCBpcyBub24tYWxsb2NhdGFibGUuCisrI2RlZmlu ZSBSRVNUT1JFX1ZSKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKysgIG1hc20ueHNfbGkocjAsIG9mZnNldG9mKEVudGVySklUUmVncywgdnIjI04p KTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgbWFzbS5hc19sdngoTiwgU3RhY2tQb2ludGVy LCByMCkKKysgIFJFU1RPUkVfVlIoMjApOyBSRVNUT1JFX1ZSKDIxKTsgUkVTVE9SRV9WUigyMik7 IFJFU1RPUkVfVlIoMjMpOworKyAgUkVTVE9SRV9WUigyNCk7IFJFU1RPUkVfVlIoMjUpOyBSRVNU T1JFX1ZSKDI2KTsgUkVTVE9SRV9WUigyNyk7CisrICBSRVNUT1JFX1ZSKDI4KTsgUkVTVE9SRV9W UigyOSk7IFJFU1RPUkVfVlIoMzApOyBSRVNUT1JFX1ZSKDMxKTsKKysjdW5kZWYgUkVTVE9SRV9W UgorKworKyAgbWFzbS5mcmVlU3RhY2soc2l6ZW9mKEVudGVySklUUmVncykpOworKworKyAgbWFz bS5hc19ibHIoKTsKKyt9CisrCisrc3RhdGljIHZvaWQgR2VuZXJhdGVQcm9sb2d1ZShNYWNyb0Fz c2VtYmxlciYgbWFzbSkgeworKyAgLy8gU2F2ZSBMUiBmaXJzdCAoUFBDNjQgTFIgaXMgU1BSLCBu b3QgR1BSKS4KKysgIG1hc20ueHNfbWZscihyMCk7CisrCisrICAvLyBFTEZ2MiBwcm9sb2d1ZSBj b252ZW50aW9uOiBzYXZlIExSIGF0IGNhbGxlcidzIGZyYW1lIFtTUCsxNl0gQkVGT1JFCisrICAv LyBkZWNyZW1lbnRpbmcgU1AuIEV4dGVybmFsIHVud2luZGVycyAoZ2RiLCBwZXJmLCBsaWJ1bndp bmQpIHdhbGsgdGhlCisrICAvLyBzdGFjayBieSByZWFkaW5nIExSLXNhdmUgc2xvdHMgYXQgW1NQ KzE2XSBvZiBldmVyeSBmcmFtZTsgd2l0aG91dAorKyAgLy8gdGhpcyB3cml0ZSB0aGV5J2QgZmlu ZCBqdW5rIGF0IG91ciBjYWxsZXIncyBzbG90LiBDb3N0cyAxIGV4dHJhCisrICAvLyBpbnN0cnVj dGlvbjsgd2Ugc3RpbGwga2VlcCB0aGUgaW4tZnJhbWUgc2F2ZSBiZWxvdyBmb3IgY2xlYW4KKysg IC8vIHJlc3RvcmUgc3ltbWV0cnkuCisrICBtYXNtLmFzX3N0ZChyMCwgU3RhY2tQb2ludGVyLCAx Nik7CisrCisrICBtYXNtLnJlc2VydmVTdGFjayhzaXplb2YoRW50ZXJKSVRSZWdzKSk7CisrCisr ICAvLyBTYXZlIExSIChhbHNvIGtlcHQgaW4gb3VyIG93biBmcmFtZSBmb3IgdGhlIGNsZWFuIHJl c3RvcmUgaW4KKysgIC8vIEdlbmVyYXRlUmV0dXJuIOKAlCBzZWUgY29tbWVudCB0aGVyZSkuCisr ICBtYXNtLmFzX3N0ZChyMCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIGxy KSk7CisrCisrICAvLyBTYXZlIG5vbi12b2xhdGlsZSBHUFJzLgorKyAgbWFzbS5hc19zdGQocjIs IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMikpOworKyAgbWFzbS5hc19z dGQocjE0LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjE0KSk7CisrICBt YXNtLmFzX3N0ZChyMTUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMTUp KTsKKysgIG1hc20uYXNfc3RkKHIxNiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJl Z3MsIHIxNikpOworKyAgbWFzbS5hc19zdGQocjE3LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVu dGVySklUUmVncywgcjE3KSk7CisrICBtYXNtLmFzX3N0ZChyMTgsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCByMTgpKTsKKysgIG1hc20uYXNfc3RkKHIxOSwgU3RhY2tQb2lu dGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxOSkpOworKyAgbWFzbS5hc19zdGQocjIwLCBT dGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjIwKSk7CisrICBtYXNtLmFzX3N0 ZChyMjEsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjEpKTsKKysgIG1h c20uYXNfc3RkKHIyMiwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyMikp OworKyAgbWFzbS5hc19zdGQocjIzLCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVn cywgcjIzKSk7CisrICBtYXNtLmFzX3N0ZChyMjQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCByMjQpKTsKKysgIG1hc20uYXNfc3RkKHIyNSwgU3RhY2tQb2ludGVyLCBvZmZz ZXRvZihFbnRlckpJVFJlZ3MsIHIyNSkpOworKyAgbWFzbS5hc19zdGQocjI2LCBTdGFja1BvaW50 ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI2KSk7CisrICBtYXNtLmFzX3N0ZChyMjcsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCByMjcpKTsKKysgIG1hc20uYXNfc3Rk KHIyOCwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIyOCkpOworKyAgbWFz bS5hc19zdGQocjI5LCBTdGFja1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjI5KSk7 CisrICBtYXNtLmFzX3N0ZChyMzAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCByMzApKTsKKysgIG1hc20uYXNfc3RkKHIzMSwgU3RhY2tQb2ludGVyLCBvZmZzZXRvZihFbnRl ckpJVFJlZ3MsIHIzMSkpOworKworKyAgLy8gU2F2ZSByZWdfdnAgKHIxMCkgc28gd2UgY2FuIHJl dHJpZXZlIGl0IGFmdGVyIHRoZSBKSVQgY2FsbC4KKysgIG1hc20uYXNfc3RkKHIxMCwgU3RhY2tQ b2ludGVyLCBvZmZzZXRvZihFbnRlckpJVFJlZ3MsIHIxMCkpOworKworKyAgLy8gU2F2ZSBub24t dm9sYXRpbGUgRlBScy4KKysgIG1hc20uYXNfc3RmZChmMTQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0 b2YoRW50ZXJKSVRSZWdzLCBmMTQpKTsKKysgIG1hc20uYXNfc3RmZChmMTUsIFN0YWNrUG9pbnRl ciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTUpKTsKKysgIG1hc20uYXNfc3RmZChmMTYsIFN0 YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTYpKTsKKysgIG1hc20uYXNfc3Rm ZChmMTcsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTcpKTsKKysgIG1h c20uYXNfc3RmZChmMTgsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMTgp KTsKKysgIG1hc20uYXNfc3RmZChmMTksIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRS ZWdzLCBmMTkpKTsKKysgIG1hc20uYXNfc3RmZChmMjAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2Yo RW50ZXJKSVRSZWdzLCBmMjApKTsKKysgIG1hc20uYXNfc3RmZChmMjEsIFN0YWNrUG9pbnRlciwg b2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjEpKTsKKysgIG1hc20uYXNfc3RmZChmMjIsIFN0YWNr UG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjIpKTsKKysgIG1hc20uYXNfc3RmZChm MjMsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjMpKTsKKysgIG1hc20u YXNfc3RmZChmMjQsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjQpKTsK KysgIG1hc20uYXNfc3RmZChmMjUsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdz LCBmMjUpKTsKKysgIG1hc20uYXNfc3RmZChmMjYsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50 ZXJKSVRSZWdzLCBmMjYpKTsKKysgIG1hc20uYXNfc3RmZChmMjcsIFN0YWNrUG9pbnRlciwgb2Zm c2V0b2YoRW50ZXJKSVRSZWdzLCBmMjcpKTsKKysgIG1hc20uYXNfc3RmZChmMjgsIFN0YWNrUG9p bnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjgpKTsKKysgIG1hc20uYXNfc3RmZChmMjks IFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMjkpKTsKKysgIG1hc20uYXNf c3RmZChmMzAsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBmMzApKTsKKysg IG1hc20uYXNfc3RmZChmMzEsIFN0YWNrUG9pbnRlciwgb2Zmc2V0b2YoRW50ZXJKSVRSZWdzLCBm MzEpKTsKKysKKysgIC8vIFNhdmUgY2FsbGVlLXNhdmVkIFZSMjAtVlIzMSAoRUxGdjIpLiBUaGUg SklUIGZyZWVseSB1c2VzIFZNWCByZWdpc3RlcnMKKysgIC8vIHZpYSBFbWl0Vm14QmluYXJ5IGV0 Yy47IHdpdGhvdXQgdGhpcyBzYXZlIHRoZSBDIGNhbGxlcidzIFZSMjAtVlIzMQorKyAgLy8gY29u dGVudHMgd291bGQgYmUgdHJhc2hlZCBvbiByZXR1cm4uIHN0dnggdXNlcyBpbmRleGVkIGFkZHJl c3Npbmcg4oCUCisrICAvLyByMCBob2xkcyB0aGUgb2Zmc2V0IChub24tYWxsb2NhdGFibGUgaW4g SklUIHJlZ2FsbG9jOyBzYWZlIHRvIHVzZSBhcworKyAgLy8gYSBmcmVlIHRlbXAgaGVyZSkuCisr I2RlZmluZSBTQVZFX1ZSKE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKysgIG1hc20ueHNfbGkocjAsIG9mZnNldG9mKEVudGVySklUUmVncywg dnIjI04pKTsgICAgICAgICAgICAgICAgICAgICAgXAorKyAgbWFzbS5hc19zdHZ4KE4sIFN0YWNr UG9pbnRlciwgcjApCisrICBTQVZFX1ZSKDIwKTsgU0FWRV9WUigyMSk7IFNBVkVfVlIoMjIpOyBT QVZFX1ZSKDIzKTsKKysgIFNBVkVfVlIoMjQpOyBTQVZFX1ZSKDI1KTsgU0FWRV9WUigyNik7IFNB VkVfVlIoMjcpOworKyAgU0FWRV9WUigyOCk7IFNBVkVfVlIoMjkpOyBTQVZFX1ZSKDMwKTsgU0FW RV9WUigzMSk7CisrI3VuZGVmIFNBVkVfVlIKKyt9CisrCisrdm9pZCBKaXRSdW50aW1lOjpnZW5l cmF0ZUVudGVySklUKEpTQ29udGV4dCogY3gsIE1hY3JvQXNzZW1ibGVyJiBtYXNtKSB7CisrICBB dXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVFbnRlckpJVCIpOwor KworKyAgZW50ZXJKSVRPZmZzZXRfID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsKKysKKysg IC8vIEVudGVySml0Q29kZSBzaWduYXR1cmU6ICh2b2lkKiBjb2RlLCB1bnNpZ25lZCBhcmdjLCBW YWx1ZSogYXJndiwKKysgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcnByZXRlckZy YW1lKiBmcCwgQ2FsbGVlVG9rZW4gY2FsbGVlVG9rZW4sCisrICAvLyAgICAgICAgICAgICAgICAg ICAgICAgICAgSlNPYmplY3QqIGVudkNoYWluLCBzaXplX3QgbnVtU3RhY2tWYWx1ZXMsCisrICAv LyAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHZwKQorKyAgY29uc3QgUmVnaXN0ZXIg cmVnX2NvZGUgPSBJbnRBcmdSZWcwOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcjMKKysgIGNv bnN0IFJlZ2lzdGVyIHJlZ19hcmdjID0gSW50QXJnUmVnMTsgICAgICAgICAgICAgICAgICAgICAg IC8vIHI0CisrICBjb25zdCBSZWdpc3RlciByZWdfYXJndiA9IEludEFyZ1JlZzI7ICAgICAgICAg ICAgICAgICAgICAgICAvLyByNQorKyAgY29uc3QgbW96aWxsYTo6RGVidWdPbmx5PFJlZ2lzdGVy PiByZWdfZnJhbWUgPSBJbnRBcmdSZWczOyAgLy8gcjYKKysgIGNvbnN0IFJlZ2lzdGVyIHJlZ190 b2tlbiA9IEludEFyZ1JlZzQ7ICAgICAgICAgICAgICAgICAgICAgIC8vIHI3CisrICBjb25zdCBS ZWdpc3RlciByZWdfY2hhaW4gPSBJbnRBcmdSZWc1OyAgICAgICAgICAgICAgICAgICAgICAvLyBy OAorKyAgY29uc3QgUmVnaXN0ZXIgcmVnX3ZhbHVlcyA9IEludEFyZ1JlZzY7ICAgICAgICAgICAg ICAgICAgICAgLy8gcjkKKysgIGNvbnN0IFJlZ2lzdGVyIHJlZ192cCA9IEludEFyZ1JlZzc7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8vIHIxMAorKworKyAgTU9aX0FTU0VSVChPc3JGcmFtZVJl ZyA9PSByZWdfZnJhbWUpOworKworKyAgR2VuZXJhdGVQcm9sb2d1ZShtYXNtKTsKKysKKysgIC8v IFNhdmUgc3RhY2sgcG9pbnRlciBhcyBiYXNlbGluZSBmcmFtZS4KKysgIG1hc20ubW92ZVB0cihT dGFja1BvaW50ZXIsIEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBVc2Ugbm9uLXZvbGF0aWxlIHNj cmF0Y2ggcmVnaXN0ZXJzIGZvciBnZW5lcmF0ZUVudGVySml0U2hhcmVkLgorKyAgLy8gcjE0LCBy MTUsIHIxNyBhcmUgbm9uLXZvbGF0aWxlIGFuZCBub3Qgc3BlY2lhbC1wdXJwb3NlIGluIEpJVC4K KysgIGdlbmVyYXRlRW50ZXJKaXRTaGFyZWQobWFzbSwgcmVnX2FyZ2MsIHJlZ19hcmd2LCByZWdf dG9rZW4sIHIxNCwgcjE1LCByMTcpOworKworKyAgLy8gUHVzaCB0aGUgZGVzY3JpcHRvci4KKysg IG1hc20udW5ib3hJbnQzMihBZGRyZXNzKHJlZ192cCwgMCksIHIxNCk7CisrICBtYXNtLnB1c2hG cmFtZURlc2NyaXB0b3JGb3JKaXRDYWxsKEZyYW1lVHlwZTo6Q3BwVG9KU0ppdCwgcjE0LCByMTQp OworKworKyAgQ29kZUxhYmVsIHJldHVybkxhYmVsOworKyAgTGFiZWwgb29tUmV0dXJuTGFiZWw7 CisrICB7CisrICAgIC8vIEhhbmRsZSBJbnRlcnByZXRlciAtPiBCYXNlbGluZSBPU1IuCisrICAg IEFsbG9jYXRhYmxlR2VuZXJhbFJlZ2lzdGVyU2V0IHJlZ3MoR2VuZXJhbFJlZ2lzdGVyU2V0OjpB bGwoKSk7CisrICAgIE1PWl9BU1NFUlQoIXJlZ3MuaGFzKEZyYW1lUG9pbnRlcikpOworKyAgICBy ZWdzLnRha2UoT3NyRnJhbWVSZWcpOworKyAgICByZWdzLnRha2UocmVnX2NvZGUpOworKyAgICBN T1pfQVNTRVJUKCFyZWdzLmhhcyhSZXR1cm5SZWcpLCAiUmV0dXJuUmVnIG1hdGNoZXMgcmVnX2Nv ZGUiKTsKKysKKysgICAgTGFiZWwgbm90T3NyOworKyAgICBtYXNtLmJyYW5jaFRlc3RQdHIoQXNz ZW1ibGVyOjpaZXJvLCBPc3JGcmFtZVJlZywgT3NyRnJhbWVSZWcsICZub3RPc3IpOworKworKyAg ICBSZWdpc3RlciBudW1TdGFja1ZhbHVlcyA9IHJlZ192YWx1ZXM7CisrICAgIHJlZ3MudGFrZShu dW1TdGFja1ZhbHVlcyk7CisrICAgIFJlZ2lzdGVyIHNjcmF0Y2ggPSByZWdzLnRha2VBbnkoKTsK KysKKysgICAgLy8gUHVzaCByZXR1cm4gYWRkcmVzcy4KKysgICAgbWFzbS5zdWJQdHIoSW1tMzIo c2l6ZW9mKHVpbnRwdHJfdCkpLCBTdGFja1BvaW50ZXIpOworKyAgICBtYXNtLm1vdigmcmV0dXJu TGFiZWwsIHNjcmF0Y2gpOworKyAgICBtYXNtLnN0b3JlUHRyKHNjcmF0Y2gsIEFkZHJlc3MoU3Rh Y2tQb2ludGVyLCAwKSk7CisrCisrICAgIC8vIFB1c2ggcHJldmlvdXMgZnJhbWUgcG9pbnRlci4K KysgICAgbWFzbS5zdWJQdHIoSW1tMzIoc2l6ZW9mKHVpbnRwdHJfdCkpLCBTdGFja1BvaW50ZXIp OworKyAgICBtYXNtLnN0b3JlUHRyKEZyYW1lUG9pbnRlciwgQWRkcmVzcyhTdGFja1BvaW50ZXIs IDApKTsKKysKKysgICAgLy8gUmVzZXJ2ZSBmcmFtZS4KKysgICAgUmVnaXN0ZXIgZnJhbWVQdHIg PSBGcmFtZVBvaW50ZXI7CisrICAgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIGZyYW1lUHRy KTsKKysgICAgbWFzbS5zdWJQdHIoSW1tMzIoQmFzZWxpbmVGcmFtZTo6U2l6ZSgpKSwgU3RhY2tQ b2ludGVyKTsKKysKKysgICAgUmVnaXN0ZXIgZnJhbWVQdHJTY3JhdGNoID0gcmVncy50YWtlQW55 KCk7CisrICAgIG1hc20ubW92ZVB0cihTdGFja1BvaW50ZXIsIGZyYW1lUHRyU2NyYXRjaCk7Cisr CisrICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGxvY2FscyBhbmQgc3RhY2sgdmFsdWVzLgorKyAg ICBtYXNtLnhfc2xkaShzY3JhdGNoLCBudW1TdGFja1ZhbHVlcywgMyk7CisrICAgIG1hc20uc3Vi UHRyKHNjcmF0Y2gsIFN0YWNrUG9pbnRlcik7CisrCisrICAgIC8vIEVudGVyIGV4aXQgZnJhbWUu CisrICAgIG1hc20ucmVzZXJ2ZVN0YWNrKDMgKiBzaXplb2YodWludHB0cl90KSk7CisrICAgIG1h c20uc3RvcmVQdHIoSW1tV29yZChNYWtlRnJhbWVEZXNjcmlwdG9yKEZyYW1lVHlwZTo6QmFzZWxp bmVKUykpLAorKyAgICAgICAgICAgICAgICAgIEFkZHJlc3MoU3RhY2tQb2ludGVyLCAyICogc2l6 ZW9mKHVpbnRwdHJfdCkpKTsKKysgICAgbWFzbS5zdG9yZVB0cihJbW1QdHIobnVsbHB0ciksIEFk ZHJlc3MoU3RhY2tQb2ludGVyLCBzaXplb2YodWludHB0cl90KSkpOworKyAgICBtYXNtLnN0b3Jl UHRyKEZyYW1lUG9pbnRlciwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApKTsKKysKKysgICAgLy8g Tm8gR0MgdGhpbmdzIHRvIG1hcmssIHB1c2ggYSBiYXJlIHRva2VuLgorKyAgICBtYXNtLmxvYWRK U0NvbnRleHQoc2NyYXRjaCk7CisrICAgIG1hc20uZW50ZXJGYWtlRXhpdEZyYW1lKHNjcmF0Y2gs IHNjcmF0Y2gsIEV4aXRGcmFtZVR5cGU6OkJhcmUpOworKworKyAgICBtYXNtLnJlc2VydmVTdGFj aygyICogc2l6ZW9mKHVpbnRwdHJfdCkpOworKyAgICBtYXNtLnN0b3JlUHRyKGZyYW1lUHRyLCBB ZGRyZXNzKFN0YWNrUG9pbnRlciwgc2l6ZW9mKHVpbnRwdHJfdCkpKTsKKysgICAgbWFzbS5zdG9y ZVB0cihyZWdfY29kZSwgQWRkcmVzcyhTdGFja1BvaW50ZXIsIDApKTsKKysKKysgICAgdXNpbmcg Rm4gPSB2b2lkICgqKShCYXNlbGluZUZyYW1lKiBmcmFtZSwgSW50ZXJwcmV0ZXJGcmFtZSogaW50 ZXJwRnJhbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgbnVtU3RhY2tWYWx1 ZXMpOworKyAgICBtYXNtLnNldHVwVW5hbGlnbmVkQUJJQ2FsbChzY3JhdGNoKTsKKysgICAgbWFz bS5wYXNzQUJJQXJnKGZyYW1lUHRyU2NyYXRjaCk7CisrICAgIG1hc20ucGFzc0FCSUFyZyhPc3JG cmFtZVJlZyk7CisrICAgIG1hc20ucGFzc0FCSUFyZyhudW1TdGFja1ZhbHVlcyk7CisrICAgIG1h c20uY2FsbFdpdGhBQkk8Rm4sIGppdDo6SW5pdEJhc2VsaW5lRnJhbWVGb3JPc3I+KAorKyAgICAg ICAgQUJJVHlwZTo6R2VuZXJhbCwgQ2hlY2tVbnNhZmVDYWxsV2l0aEFCSTo6RG9udENoZWNrSGFz RXhpdEZyYW1lKTsKKysKKysgICAgcmVncy5hZGQoT3NyRnJhbWVSZWcpOworKyAgICBSZWdpc3Rl ciBqaXRjb2RlID0gcmVncy50YWtlQW55KCk7CisrICAgIG1hc20ubG9hZFB0cihBZGRyZXNzKFN0 YWNrUG9pbnRlciwgMCksIGppdGNvZGUpOworKyAgICBtYXNtLmxvYWRQdHIoQWRkcmVzcyhTdGFj a1BvaW50ZXIsIHNpemVvZih1aW50cHRyX3QpKSwgZnJhbWVQdHIpOworKyAgICBtYXNtLmZyZWVT dGFjaygyICogc2l6ZW9mKHVpbnRwdHJfdCkpOworKworKyAgICBtYXNtLmZyZWVTdGFjayhFeGl0 RnJhbWVMYXlvdXQ6OlNpemVXaXRoRm9vdGVyKCkpOworKworKyAgICAvLyBJZiBPU1ItaW5nLCB0 aGVuIGVtaXQgaW5zdHJ1bWVudGF0aW9uIGZvciBzZXR0aW5nIGxhc3RQcm9maWxlckZyYW1lCisr ICAgIC8vIGlmIHByb2ZpbGVyIGluc3RydW1lbnRhdGlvbiBpcyBlbmFibGVkLgorKyAgICB7Cisr ICAgICAgTGFiZWwgc2tpcFByb2ZpbGluZ0luc3RydW1lbnRhdGlvbjsKKysgICAgICBBYnNvbHV0 ZUFkZHJlc3MgYWRkcmVzc09mRW5hYmxlZCgKKysgICAgICAgICAgY3gtPnJ1bnRpbWUoKS0+Z2Vj a29Qcm9maWxlcigpLmFkZHJlc3NPZkVuYWJsZWQoKSk7CisrICAgICAgbWFzbS5icmFuY2gzMihB c3NlbWJsZXI6OkVxdWFsLCBhZGRyZXNzT2ZFbmFibGVkLCBJbW0zMigwKSwKKysgICAgICAgICAg ICAgICAgICAgICZza2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKKysgICAgICBtYXNtLnBy b2ZpbGVyRW50ZXJGcmFtZShmcmFtZVB0ciwgc2NyYXRjaCk7CisrICAgICAgbWFzbS5iaW5kKCZz a2lwUHJvZmlsaW5nSW5zdHJ1bWVudGF0aW9uKTsKKysgICAgfQorKworKyAgICBtYXNtLmp1bXAo aml0Y29kZSk7CisrCisrICAgIG1hc20uYmluZCgmbm90T3NyKTsKKysgICAgLy8gTG9hZCB0aGUg c2NvcGUgY2hhaW4gaW4gUjEuCisrICAgIE1PWl9BU1NFUlQoUjEuc2NyYXRjaFJlZygpICE9IHJl Z19jb2RlKTsKKysgICAgbWFzbS5tb3ZlUHRyKHJlZ19jaGFpbiwgUjEuc2NyYXRjaFJlZygpKTsK KysgIH0KKysKKysgIC8vIFRoZSBjYWxsIHdpbGwgcHVzaCB0aGUgcmV0dXJuIGFkZHJlc3MgYW5k IGZyYW1lIHBvaW50ZXIgb24gdGhlIHN0YWNrLCB0aHVzCisrICAvLyB3ZSBjaGVjayB0aGF0IHRo ZSBzdGFjayB3b3VsZCBiZSBhbGlnbmVkIG9uY2UgdGhlIGNhbGwgaXMgY29tcGxldGUuCisrICBt YXNtLmFzc2VydFN0YWNrQWxpZ25tZW50KEppdFN0YWNrQWxpZ25tZW50LCAyICogc2l6ZW9mKHVp bnRwdHJfdCkpOworKworKyAgLy8gQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBwdXNoaW5nIHJldHVy biBhZGRyZXNzIHRvIHN0YWNrLgorKyAgbWFzbS5jYWxsSml0Tm9Qcm9maWxlcihyZWdfY29kZSk7 CisrCisrICB7CisrICAgIC8vIEludGVycHJldGVyIC0+IEJhc2VsaW5lIE9TUiB3aWxsIHJldHVy biBoZXJlLgorKyAgICBtYXNtLmJpbmQoJnJldHVybkxhYmVsKTsKKysgICAgbWFzbS5hZGRDb2Rl TGFiZWwocmV0dXJuTGFiZWwpOworKyAgICBtYXNtLmJpbmQoJm9vbVJldHVybkxhYmVsKTsKKysg IH0KKysKKysgIC8vIERpc2NhcmQgYXJndW1lbnRzIGFuZCBwYWRkaW5nLiBTZXQgc3AgdG8gdGhl IGFkZHJlc3Mgb2YgdGhlIEVudGVySklUUmVncworKyAgLy8gb24gdGhlIHN0YWNrLgorKyAgbWFz bS5tb3ZlUHRyKEZyYW1lUG9pbnRlciwgU3RhY2tQb2ludGVyKTsKKysKKysgIC8vIFN0b3JlIHRo ZSByZXR1cm5lZCB2YWx1ZSBpbnRvIHRoZSB2cC4KKysgIG1hc20uYXNfbGQocmVnX3ZwLCBTdGFj a1BvaW50ZXIsIG9mZnNldG9mKEVudGVySklUUmVncywgcjEwKSk7CisrICBtYXNtLnN0b3JlVmFs dWUoSlNSZXR1cm5PcGVyYW5kLCBBZGRyZXNzKHJlZ192cCwgMCkpOworKworKyAgLy8gUmVzdG9y ZSBub24tdm9sYXRpbGUgcmVnaXN0ZXJzIGFuZCByZXR1cm4uCisrICBHZW5lcmF0ZVJldHVybiht YXNtKTsKKyt9CisrCisrLy8gc3RhdGljCisrbW96aWxsYTo6TWF5YmU8OjpKUzo6UHJvZmlsaW5n RnJhbWVJdGVyYXRvcjo6UmVnaXN0ZXJTdGF0ZT4KKytKaXRSdW50aW1lOjpnZXRDcHBFbnRyeVJl Z2lzdGVycyhKaXRGcmFtZUxheW91dCogZnJhbWVTdGFja0FkZHJlc3MpIHsKKysgIHJldHVybiBt b3ppbGxhOjpOb3RoaW5ne307CisrfQorKworK3ZvaWQgSml0UnVudGltZTo6Z2VuZXJhdGVJbnZh bGlkYXRvcihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgTGFiZWwqIGJhaWxvdXRUYWlsKSB7CisrICBB dXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVJbnZhbGlkYXRvciIp OworKworKyAgaW52YWxpZGF0b3JPZmZzZXRfID0gc3RhcnRUcmFtcG9saW5lQ29kZShtYXNtKTsK KysKKysgIG1hc20uY2hlY2tTdGFja0FsaWdubWVudCgpOworKworKyAgLy8gUHVzaCBhbGwgcmVn aXN0ZXJzIHNvIHdlIGNhbiBhY2Nlc3MgdGhlbSBmcm9tIFtiYXNlICsgY29kZV0uCisrICBtYXNt LlB1c2hSZWdzSW5NYXNrKEFsbFJlZ3MpOworKworKyAgLy8gUGFzcyBwb2ludGVyIHRvIEludmFs aWRhdGlvbkJhaWxvdXRTdGFjayBzdHJ1Y3R1cmUuCisrICBtYXNtLm1vdmVQdHIoU3RhY2tQb2lu dGVyLCBJbnRBcmdSZWcwKTsKKysKKysgIC8vIFJlc2VydmUgcGxhY2UgZm9yIEJhaWxvdXRJbmZv IHBvaW50ZXIuIFR3byB3b3JkcyB0byBlbnN1cmUgYWxpZ25tZW50IGZvcgorKyAgLy8gc2V0dXBB bGlnbmVkQUJJQ2FsbC4KKysgIG1hc20uc3ViUHRyKEltbTMyKDIgKiBzaXplb2YodWludHB0cl90 KSksIFN0YWNrUG9pbnRlcik7CisrICBtYXNtLm1vdmVQdHIoU3RhY2tQb2ludGVyLCBJbnRBcmdS ZWcxKTsKKysKKysgIHVzaW5nIEZuID0gYm9vbCAoKikoSW52YWxpZGF0aW9uQmFpbG91dFN0YWNr KiBzcCwgQmFzZWxpbmVCYWlsb3V0SW5mbyoqIGluZm8pOworKyAgbWFzbS5zZXR1cEFsaWduZWRB QklDYWxsKCk7CisrICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMCk7CisrICBtYXNtLnBhc3NB QklBcmcoSW50QXJnUmVnMSk7CisrICBtYXNtLmNhbGxXaXRoQUJJPEZuLCBJbnZhbGlkYXRpb25C YWlsb3V0PigKKysgICAgICBBQklUeXBlOjpHZW5lcmFsLCBDaGVja1Vuc2FmZUNhbGxXaXRoQUJJ OjpEb250Q2hlY2tPdGhlcik7CisrCisrICBtYXNtLnBvcChJbnRBcmdSZWcyKTsKKysKKysgIC8v IFBvcCB0aGUgbWFjaGluZSBzdGF0ZSBhbmQgdGhlIGRlYWQgZnJhbWUuCisrICBtYXNtLm1vdmVU b1N0YWNrUHRyKEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBKdW1wIHRvIHNoYXJlZCBiYWlsb3V0 IHRhaWwuIFRoZSBCYWlsb3V0SW5mbyBwb2ludGVyIGhhcyB0byBiZSBpbgorKyAgLy8gSW50QXJn UmVnMiAocjUpLgorKyAgbWFzbS5qdW1wKGJhaWxvdXRUYWlsKTsKKyt9CisrCisrLy8gV2hlbiBi YWlsb3V0IGlzIGRvbmUgdmlhIG91dCBvZiBsaW5lIGNvZGUgKGxhenkgYmFpbG91dCkuCisrLy8g RnJhbWUgc2l6ZSBpcyBzdG9yZWQgaW4gTFIgKGxvb2sgYXQKKysvLyBDb2RlR2VuZXJhdG9yUFBD NjQ6OmdlbmVyYXRlT3V0T2ZMaW5lQ29kZSgpKSBhbmQgdGh1bmsgY29kZSBzaG91bGQgc2F2ZSBp dAorKy8vIG9uIHN0YWNrLgorK3N0YXRpYyB2b2lkIFB1c2hCYWlsb3V0RnJhbWUoTWFjcm9Bc3Nl bWJsZXImIG1hc20sIFJlZ2lzdGVyIHNwQXJnKSB7CisrICAvLyBQdXNoIHRoZSBmcmFtZVNpemVf IHN0b3JlZCBpbiBMUi4KKysgIC8vIFNlZTogQ29kZUdlbmVyYXRvclBQQzY0OjpnZW5lcmF0ZU91 dE9mTGluZUNvZGUoKQorKyAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygpOworKworKyAgLy8gUHVz aCByZWdpc3RlcnMgc3VjaCB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbSBmcm9tIFtiYXNlICsgY29k ZV0uCisrICBtYXNtLlB1c2hSZWdzSW5NYXNrKEFsbFJlZ3MpOworKworKyAgLy8gUHV0IHBvaW50 ZXIgdG8gQmFpbG91dFN0YWNrIGFzIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBCYWlsb3V0KCkuCisr ICBtYXNtLm1vdmVQdHIoU3RhY2tQb2ludGVyLCBzcEFyZyk7CisrfQorKworK3N0YXRpYyB2b2lk IEdlbmVyYXRlQmFpbG91dFRodW5rKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBMYWJlbCogYmFpbG91 dFRhaWwpIHsKKysgIFB1c2hCYWlsb3V0RnJhbWUobWFzbSwgSW50QXJnUmVnMCk7CisrCisrICAv LyBNYWtlIHNwYWNlIGZvciBCYWlsb3V0J3MgYmFpbG91dEluZm8gb3V0cGFyYW0uCisrICBtYXNt LnJlc2VydmVTdGFjayhzaXplb2Yodm9pZCopKTsKKysgIG1hc20ubW92ZVB0cihTdGFja1BvaW50 ZXIsIEludEFyZ1JlZzEpOworKworKyAgLy8gQ2FsbCB0aGUgYmFpbG91dCBmdW5jdGlvbi4KKysg IHVzaW5nIEZuID0gYm9vbCAoKikoQmFpbG91dFN0YWNrKiBzcCwgQmFzZWxpbmVCYWlsb3V0SW5m byoqIGluZm8pOworKyAgbWFzbS5zZXR1cFVuYWxpZ25lZEFCSUNhbGwoSW50QXJnUmVnMik7Cisr ICBtYXNtLnBhc3NBQklBcmcoSW50QXJnUmVnMCk7CisrICBtYXNtLnBhc3NBQklBcmcoSW50QXJn UmVnMSk7CisrICBtYXNtLmNhbGxXaXRoQUJJPEZuLCBCYWlsb3V0PihBQklUeXBlOjpHZW5lcmFs LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tVbnNhZmVDYWxsV2l0aEFC STo6RG9udENoZWNrT3RoZXIpOworKworKyAgLy8gR2V0IHRoZSBiYWlsb3V0SW5mbyBvdXRwYXJh bS4KKysgIG1hc20ucG9wKEludEFyZ1JlZzIpOworKworKyAgLy8gUmVtb3ZlIGJvdGggdGhlIGJh aWxvdXQgZnJhbWUgYW5kIHRoZSB0b3Btb3N0IElvbiBmcmFtZSdzIHN0YWNrLgorKyAgbWFzbS5t b3ZlVG9TdGFja1B0cihGcmFtZVBvaW50ZXIpOworKworKyAgLy8gSnVtcCB0byBzaGFyZWQgYmFp bG91dCB0YWlsLiBUaGUgQmFpbG91dEluZm8gcG9pbnRlciBoYXMgdG8gYmUgaW4KKysgIC8vIElu dEFyZ1JlZzIgKHI1KS4KKysgIG1hc20uanVtcChiYWlsb3V0VGFpbCk7CisrfQorKworK3ZvaWQg Sml0UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0SGFuZGxlcihNYWNyb0Fzc2VtYmxlciYgbWFzbSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwqIGJhaWxvdXRU YWlsKSB7CisrICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVudGltZTo6Z2VuZXJhdGVC YWlsb3V0SGFuZGxlciIpOworKworKyAgYmFpbG91dEhhbmRsZXJPZmZzZXRfID0gc3RhcnRUcmFt cG9saW5lQ29kZShtYXNtKTsKKysKKysgIEdlbmVyYXRlQmFpbG91dFRodW5rKG1hc20sIGJhaWxv dXRUYWlsKTsKKyt9CisrCisrYm9vbCBKaXRSdW50aW1lOjpnZW5lcmF0ZVZNV3JhcHBlcihKU0Nv bnRleHQqIGN4LCBNYWNyb0Fzc2VtYmxlciYgbWFzbSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZNRnVuY3Rpb25JZCBpZCwgY29uc3QgVk1GdW5jdGlvbkRhdGEmIGYsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEeW5GbiBuYXRpdmVGdW4sIHVpbnQz Ml90KiB3cmFwcGVyT2Zmc2V0KSB7CisrICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0UnVu dGltZTo6Z2VuZXJhdGVWTVdyYXBwZXIiKTsKKysKKysgICp3cmFwcGVyT2Zmc2V0ID0gc3RhcnRU cmFtcG9saW5lQ29kZShtYXNtKTsKKysKKysgIC8vIEF2b2lkIGNvbmZsaWN0cyB3aXRoIGFyZ3Vt ZW50IHJlZ2lzdGVycyB3aGlsZSBkaXNjYXJkaW5nIHRoZSByZXN1bHQgYWZ0ZXIKKysgIC8vIHRo ZSBmdW5jdGlvbiBjYWxsLgorKyAgQWxsb2NhdGFibGVHZW5lcmFsUmVnaXN0ZXJTZXQgcmVncyhS ZWdpc3Rlcjo6Q29kZXM6OldyYXBwZXJNYXNrKTsKKysKKysgIHN0YXRpY19hc3NlcnQoCisrICAg ICAgKFJlZ2lzdGVyOjpDb2Rlczo6Vm9sYXRpbGVNYXNrICYgflJlZ2lzdGVyOjpDb2Rlczo6V3Jh cHBlck1hc2spID09IDAsCisrICAgICAgIldyYXBwZXIgcmVnaXN0ZXIgc2V0IHNob3VsZCBiZSBh IHN1cGVyc2V0IG9mIFZvbGF0aWxlIHJlZ2lzdGVyIHNldC4iKTsKKysKKysgIC8vIFRoZSBjb250 ZXh0IGlzIHRoZSBmaXJzdCBhcmd1bWVudDsgcjMgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IHJlZ2lz dGVyLgorKyAgUmVnaXN0ZXIgY3hyZWcgPSBJbnRBcmdSZWcwOworKyAgcmVncy50YWtlKGN4cmVn KTsKKysKKysgIC8vIE9uIGxpbmstcmVnaXN0ZXIgcGxhdGZvcm1zLCBpdCBpcyB0aGUgcmVzcG9u c2liaWxpdHkgb2YgdGhlIFZNICpjYWxsZWUqIHRvCisrICAvLyBwdXNoIHRoZSByZXR1cm4gYWRk cmVzcywgd2hpbGUgdGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzCisrICAv LyBpcyBzdG9yZWQgaW4gTFIgb24gZW50cnkuIFRoaXMgYWxsb3dzIHRoZSBWTSB3cmFwcGVyIHRv IHdvcmsgd2l0aCBib3RoCisrICAvLyBkaXJlY3QgY2FsbHMgYW5kIHRhaWwgY2FsbHMuCisrICBt YXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7CisrCisrICAvLyBQdXNoIHRoZSBmcmFtZSBwb2ludGVy IHRvIGZpbmlzaCB0aGUgZXhpdCBmcmFtZSwgdGhlbiBsaW5rIGl0IHVwLgorKyAgbWFzbS5QdXNo KEZyYW1lUG9pbnRlcik7CisrICBtYXNtLm1vdmVTdGFja1B0clRvKEZyYW1lUG9pbnRlcik7Cisr ICBtYXNtLmxvYWRKU0NvbnRleHQoY3hyZWcpOworKyAgbWFzbS5lbnRlckV4aXRGcmFtZShjeHJl ZywgcmVncy5nZXRBbnkoKSwgaWQpOworKworKyAgLy8gUmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIG91 dHBhcmFtZXRlci4KKysgIG1hc20ucmVzZXJ2ZVZNRnVuY3Rpb25PdXRQYXJhbVNwYWNlKGYpOwor KworKyAgbWFzbS5zZXR1cFVuYWxpZ25lZEFCSUNhbGxEb250U2F2ZVJlc3RvcmVTUCgpOworKyAg bWFzbS5wYXNzQUJJQXJnKGN4cmVnKTsKKysKKysgIHNpemVfdCBhcmdEaXNwID0gRXhpdEZyYW1l TGF5b3V0OjpTaXplKCk7CisrCisrICAvLyBDb3B5IGFueSBhcmd1bWVudHMuCisrICBmb3IgKHVp bnQzMl90IGV4cGxpY2l0QXJnID0gMDsgZXhwbGljaXRBcmcgPCBmLmV4cGxpY2l0QXJnczsgZXhw bGljaXRBcmcrKykgeworKyAgICBzd2l0Y2ggKGYuYXJnUHJvcGVydGllcyhleHBsaWNpdEFyZykp IHsKKysgICAgICBjYXNlIFZNRnVuY3Rpb25EYXRhOjpXb3JkQnlWYWx1ZToKKysgICAgICAgIGlm IChmLmFyZ1Bhc3NlZEluRmxvYXRSZWcoZXhwbGljaXRBcmcpKSB7CisrICAgICAgICAgIG1hc20u cGFzc0FCSUFyZyhNb3ZlT3BlcmFuZChGcmFtZVBvaW50ZXIsIGFyZ0Rpc3ApLCBBQklUeXBlOjpG bG9hdDY0KTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgIG1hc20ucGFzc0FCSUFyZyhN b3ZlT3BlcmFuZChGcmFtZVBvaW50ZXIsIGFyZ0Rpc3ApLCBBQklUeXBlOjpHZW5lcmFsKTsKKysg ICAgICAgIH0KKysgICAgICAgIGFyZ0Rpc3AgKz0gc2l6ZW9mKHZvaWQqKTsKKysgICAgICAgIGJy ZWFrOworKyAgICAgIGNhc2UgVk1GdW5jdGlvbkRhdGE6OldvcmRCeVJlZjoKKysgICAgICAgIG1h c20ucGFzc0FCSUFyZyhNb3ZlT3BlcmFuZChGcmFtZVBvaW50ZXIsIGFyZ0Rpc3AsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW92ZU9wZXJhbmQ6OktpbmQ6OkVmZmVjdGl2 ZUFkZHJlc3MpLAorKyAgICAgICAgICAgICAgICAgICAgICAgIEFCSVR5cGU6OkdlbmVyYWwpOwor KyAgICAgICAgYXJnRGlzcCArPSBzaXplb2Yodm9pZCopOworKyAgICAgICAgYnJlYWs7CisrICAg ICAgY2FzZSBWTUZ1bmN0aW9uRGF0YTo6RG91YmxlQnlWYWx1ZToKKysgICAgICBjYXNlIFZNRnVu Y3Rpb25EYXRhOjpEb3VibGVCeVJlZjoKKysgICAgICAgIE1PWl9DUkFTSCgiTllJOiBQUEM2NCBj YWxsVk0gc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggMTI4Yml0cyB2YWx1ZXMuIik7CisrICAgICAg ICBicmVhazsKKysgICAgfQorKyAgfQorKworKyAgLy8gQ29weSB0aGUgaW1wbGljaXQgb3V0cGFy YW0sIGlmIGFueS4KKysgIGNvbnN0IGludDMyX3Qgb3V0UGFyYW1PZmZzZXQgPQorKyAgICAgIC1p bnQzMl90KEV4aXRGb290ZXJGcmFtZTo6U2l6ZSgpKSAtIGYuc2l6ZU9mT3V0UGFyYW1TdGFja1Ns b3QoKTsKKysgIGlmIChmLm91dFBhcmFtICE9IFR5cGVfVm9pZCkgeworKyAgICBtYXNtLnBhc3NB QklBcmcoTW92ZU9wZXJhbmQoRnJhbWVQb2ludGVyLCBvdXRQYXJhbU9mZnNldCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVPcGVyYW5kOjpLaW5kOjpFZmZlY3RpdmVBZGRy ZXNzKSwKKysgICAgICAgICAgICAgICAgICAgIEFCSVR5cGU6OkdlbmVyYWwpOworKyAgfQorKwor KyAgbWFzbS5jYWxsV2l0aEFCSShuYXRpdmVGdW4sIEFCSVR5cGU6OkdlbmVyYWwsCisrICAgICAg ICAgICAgICAgICAgIENoZWNrVW5zYWZlQ2FsbFdpdGhBQkk6OkRvbnRDaGVja0hhc0V4aXRGcmFt ZSk7CisrCisrICAvLyBUZXN0IGZvciBmYWlsdXJlLgorKyAgc3dpdGNoIChmLmZhaWxUeXBlKCkp IHsKKysgICAgY2FzZSBUeXBlX0NlbGw6CisrICAgICAgbWFzbS5icmFuY2hUZXN0UHRyKEFzc2Vt Ymxlcjo6WmVybywgSW50QXJnUmVnMCwgSW50QXJnUmVnMCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgbWFzbS5mYWlsdXJlTGFiZWwoKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgVHlw ZV9Cb29sOgorKyAgICAgIG1hc20uYnJhbmNoSWZGYWxzZUJvb2woSW50QXJnUmVnMCwgbWFzbS5m YWlsdXJlTGFiZWwoKSk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgVHlwZV9Wb2lkOgorKyAg ICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgIE1PWl9DUkFTSCgidW5rbm93biBmYWls dXJlIGtpbmQiKTsKKysgIH0KKysKKysgIC8vIExvYWQgdGhlIG91dHBhcmFtLgorKyAgbWFzbS5s b2FkVk1GdW5jdGlvbk91dFBhcmFtKGYsIEFkZHJlc3MoRnJhbWVQb2ludGVyLCBvdXRQYXJhbU9m ZnNldCkpOworKworKyAgLy8gUG9wIGZyYW1lIGFuZCByZXN0b3JlIGZyYW1lIHBvaW50ZXIuCisr ICBtYXNtLm1vdmVUb1N0YWNrUHRyKEZyYW1lUG9pbnRlcik7CisrICBtYXNtLnBvcChGcmFtZVBv aW50ZXIpOworKworKyAgLy8gUmV0dXJuLiBTdWJ0cmFjdCBzaXplb2Yodm9pZCopIGZvciB0aGUg ZnJhbWUgcG9pbnRlci4KKysgIG1hc20ucmV0bihJbW0zMihzaXplb2YoRXhpdEZyYW1lTGF5b3V0 KSAtIHNpemVvZih2b2lkKikgKworKyAgICAgICAgICAgICAgICAgIGYuZXhwbGljaXRTdGFja1Ns b3RzKCkgKiBzaXplb2Yodm9pZCopICsKKysgICAgICAgICAgICAgICAgICBmLmV4dHJhVmFsdWVz VG9Qb3AgKiBzaXplb2YoVmFsdWUpKSk7CisrCisrICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrdWlu dDMyX3QgSml0UnVudGltZTo6Z2VuZXJhdGVQcmVCYXJyaWVyKEpTQ29udGV4dCogY3gsIE1hY3Jv QXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBNSVJUeXBlIHR5cGUpIHsKKysgIEF1dG9DcmVhdGVkQnkgYWNiKG1hc20sICJKaXRSdW50aW1l OjpnZW5lcmF0ZVByZUJhcnJpZXIiKTsKKysKKysgIHVpbnQzMl90IG9mZnNldCA9IHN0YXJ0VHJh bXBvbGluZUNvZGUobWFzbSk7CisrCisrICBNT1pfQVNTRVJUKFByZUJhcnJpZXJSZWcgPT0gSW50 QXJnUmVnMSk7ICAvLyByNAorKyAgUmVnaXN0ZXIgdGVtcDEgPSBJbnRBcmdSZWcwOyAgICAgICAg ICAgICAgLy8gcjMKKysgIFJlZ2lzdGVyIHRlbXAyID0gSW50QXJnUmVnMjsgICAgICAgICAgICAg IC8vIHI1CisrICBSZWdpc3RlciB0ZW1wMyA9IEludEFyZ1JlZzM7ICAgICAgICAgICAgICAvLyBy NgorKyAgbWFzbS5wdXNoKHRlbXAxKTsKKysgIG1hc20ucHVzaCh0ZW1wMik7CisrICBtYXNtLnB1 c2godGVtcDMpOworKworKyAgTGFiZWwgbm9CYXJyaWVyOworKyAgbWFzbS5lbWl0UHJlQmFycmll ckZhc3RQYXRoKHR5cGUsIHRlbXAxLCB0ZW1wMiwgdGVtcDMsICZub0JhcnJpZXIpOworKworKyAg Ly8gQ2FsbCBpbnRvIEMrKyB0byBtYXJrIHRoaXMgR0MgdGhpbmcuCisrICBtYXNtLnBvcCh0ZW1w Myk7CisrICBtYXNtLnBvcCh0ZW1wMik7CisrICBtYXNtLnBvcCh0ZW1wMSk7CisrCisrICBMaXZl UmVnaXN0ZXJTZXQgc2F2ZTsKKysgIHNhdmUuc2V0KCkgPSBSZWdpc3RlclNldChHZW5lcmFsUmVn aXN0ZXJTZXQoUmVnaXN0ZXJzOjpWb2xhdGlsZU1hc2spLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZsb2F0UmVnaXN0ZXJTZXQoRmxvYXRSZWdpc3RlcnM6OlZvbGF0aWxlTWFzaykpOwor KyAgLy8gT24gUFBDNjQsIHNhdmUgTFIgc2luY2Ugd2UnbGwgYmUgbWFraW5nIGEgY2FsbC4KKysg IG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsKKysgIG1hc20uUHVzaFJlZ3NJbk1hc2soc2F2ZSk7 CisrCisrICBtYXNtLm1vdmVQdHIoSW1tUHRyKGN4LT5ydW50aW1lKCkpLCBJbnRBcmdSZWcwKTsK KysKKysgIG1hc20uc2V0dXBVbmFsaWduZWRBQklDYWxsKEludEFyZ1JlZzIpOworKyAgbWFzbS5w YXNzQUJJQXJnKEludEFyZ1JlZzApOworKyAgbWFzbS5wYXNzQUJJQXJnKEludEFyZ1JlZzEpOwor KyAgbWFzbS5jYWxsV2l0aEFCSShKaXRQcmVXcml0ZUJhcnJpZXIodHlwZSkpOworKworKyAgbWFz bS5Qb3BSZWdzSW5NYXNrKHNhdmUpOworKyAgbWFzbS5yZXQoKTsKKysKKysgIG1hc20uYmluZCgm bm9CYXJyaWVyKTsKKysgIG1hc20ucG9wKHRlbXAzKTsKKysgIG1hc20ucG9wKHRlbXAyKTsKKysg IG1hc20ucG9wKHRlbXAxKTsKKysgIG1hc20uYWJpcmV0KCk7CisrCisrICByZXR1cm4gb2Zmc2V0 OworK30KKysKKyt2b2lkIEppdFJ1bnRpbWU6OmdlbmVyYXRlQmFpbG91dFRhaWxTdHViKE1hY3Jv QXNzZW1ibGVyJiBtYXNtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGFiZWwqIGJhaWxvdXRUYWlsKSB7CisrICBBdXRvQ3JlYXRlZEJ5IGFjYihtYXNtLCAiSml0 UnVudGltZTo6Z2VuZXJhdGVCYWlsb3V0VGFpbFN0dWIiKTsKKysKKysgIG1hc20uYmluZChiYWls b3V0VGFpbCk7CisrICBtYXNtLmdlbmVyYXRlQmFpbG91dFRhaWwoSW50QXJnUmVnMSwgSW50QXJn UmVnMik7CisrfQorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFy ZWQuaCBiL2pzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQuaAoraW5kZXggZDVmZWQy ZmFiZTMxLi40OTBhOWY1MzkxZTAgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0L3NoYXJlZC9Bc3Nl bWJsZXItc2hhcmVkLmgKKysrKyBiL2pzL3NyYy9qaXQvc2hhcmVkL0Fzc2VtYmxlci1zaGFyZWQu aAorQEAgLTMwLDE0ICszMCwxNSBAQAorIAorICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8ICAgICAgXAorICAgICBkZWZpbmVkKEpTX0NP REVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBk ZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkK KysgICAgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJ U0NWNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIC8vIFB1c2ggcmV0 dXJuIGFkZHJlc3NlcyBjYWxsZWUtc2lkZS4KKyAjICBkZWZpbmUgSlNfVVNFX0xJTktfUkVHSVNU RVIKKyAjZW5kaWYKKyAKKyAjaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0FSTTY0KSB8fCAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09O RzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpT X0NPREVHRU5fQVJNKQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisgLy8gSlNfQ09ERUxBQkVMX0xJTktNT0RFIGdpdmVzIGxhYmVscyBh ZGRpdGlvbmFsIG1ldGFkYXRhCisgLy8gZGVzY3JpYmluZyBob3cgQmluZCgpIHNob3VsZCBwYXRj aCB0aGVtLgorICMgIGRlZmluZSBKU19DT0RFTEFCRUxfTElOS01PREUKK2RpZmYgLS1naXQgYS9q cy9zcmMvaml0L3NoYXJlZC9BdG9taWNPcGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmggYi9q cy9zcmMvaml0L3NoYXJlZC9BdG9taWNPcGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmgKK2lu ZGV4IGE2OTA5ZTU2MGJlZi4uZDg4NmNiYTJjN2U2IDEwMDY0NAorLS0tIGEvanMvc3JjL2ppdC9z aGFyZWQvQXRvbWljT3BlcmF0aW9ucy1mZWVsaW5nLWx1Y2t5LWdjYy5oCisrKysgYi9qcy9zcmMv aml0L3NoYXJlZC9BdG9taWNPcGVyYXRpb25zLWZlZWxpbmctbHVja3ktZ2NjLmgKK0BAIC00Niw3 ICs0Niw4IEBACisgLy8gY29kZSBpbiB0aGlzIGZpbGUuCisgCisgI2lmIGRlZmluZWQoSlNfU0lN VUxBVE9SX0FSTTY0KSB8fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9BUk0pIHx8IFwKKy0gICAgZGVm aW5lZChKU19TSU1VTEFUT1JfTUlQUzY0KSB8fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9MT09ORzY0 KQorKyAgICBkZWZpbmVkKEpTX1NJTVVMQVRPUl9NSVBTNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxB VE9SX0xPT05HNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCisgLy8g T24gc29tZSB4ODYgKDMyLWJpdCkgc3lzdGVtcyB0aGlzIHdpbGwgbm90IHdvcmsgYmVjYXVzZSB0 aGUgY29tcGlsZXIgZG9lcyBub3QKKyAvLyBvcGVuLWNvZGUgNjQtYml0IGF0b21pY3MuICBJZiBz bywgdHJ5IGxpbmtpbmcgd2l0aCAtbGF0b21pYy4gIElmIHRoYXQgZG9lc24ndAorIC8vIHdvcmss IHlvdSdyZSBtb3N0bHkgb24geW91ciBvd24uCitkaWZmIC0tZ2l0IGEvanMvc3JjL2ppdC9zaGFy ZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3BwIGIvanMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVy YXRvci1zaGFyZWQuY3BwCitpbmRleCBhZGE4N2YxZjExYTIuLjE0NDY4MzU2Y2YzMSAxMDA2NDQK Ky0tLSBhL2pzL3NyYy9qaXQvc2hhcmVkL0NvZGVHZW5lcmF0b3Itc2hhcmVkLmNwcAorKysrIGIv anMvc3JjL2ppdC9zaGFyZWQvQ29kZUdlbmVyYXRvci1zaGFyZWQuY3BwCitAQCAtODYsOCArODYs OCBAQCBDb2RlR2VuZXJhdG9yU2hhcmVkOjpDb2RlR2VuZXJhdG9yU2hhcmVkKE1JUkdlbmVyYXRv ciogZ2VuLCBMSVJHcmFwaCogZ3JhcGgsCisgCisgI2lmZGVmIEVOQUJMRV9XQVNNX1NJTUQKKyAj ICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8 fCBcCistICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorLSAgICAvLyBPbiBYNjQveDg2 IGFuZCBBUk02NCwgd2UgZG9uJ3QgbmVlZCBhbGlnbm1lbnQgZm9yIFdhc20gU0lNRCBhdCB0aGlz IHRpbWUuCisrICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NP REVHRU5fUFBDNjQpCisrICAgIC8vIE9uIFg2NC94ODYsIEFSTTY0LCBhbmQgUFBDNjQsIHdlIGRv bid0IG5lZWQgYWxpZ25tZW50IGZvciBXYXNtIFNJTUQgYXQgdGhpcyB0aW1lLgorICMgIGVsc2UK KyAjICAgIGVycm9yIFwKKyAgICAgICAgICJ3ZSBtYXkgbmVlZCBwYWRkaW5nIHNvIHRoYXQgbG9j YWwgc2xvdHMgYXJlIFNJTUQtYWxpZ25lZCBhbmQgdGhlIHN0YWNrIG11c3QgYmUga2VwdCBTSU1E LWFsaWduZWQgdG9vLiIKK0BAIC0xMDc1LDcgKzEwNzUsNyBAQCBMYWJlbCogQ29kZUdlbmVyYXRv clNoYXJlZDo6Z2V0SnVtcExhYmVsRm9yQnJhbmNoKE1CYXNpY0Jsb2NrKiBibG9jaykgeworIC8v IFRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgZm9yIE1JUFM2NC9MT09ORzY0L1JJU0NWNjQuIFRo ZXkgaGF2ZQorIC8vIGJyYW5jaFRvQmxvY2suCisgI2lmICFkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSAmJiAhZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpICYmIFwKKy0gICAgIWRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KQorKyAgICAhZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpICYm ICFkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgdm9pZCBDb2RlR2VuZXJhdG9yU2hhcmVkOjpq dW1wVG9CbG9jayhNQmFzaWNCbG9jayogbWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXNzZW1ibGVyOjpDb25kaXRpb24gY29uZCkgeworICAgLy8gU2tpcCBwYXN0 IHRyaXZpYWwgYmxvY2tzLgorZGlmZiAtLWdpdCBhL2pzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5n LXNoYXJlZC1pbmwuaCBiL2pzL3NyYy9qaXQvc2hhcmVkL0xvd2VyaW5nLXNoYXJlZC1pbmwuaAor aW5kZXggYmRjYzFkYTdkNDFhLi5iNjJmOGY2ODFkZjEgMTAwNjQ0CistLS0gYS9qcy9zcmMvaml0 L3NoYXJlZC9Mb3dlcmluZy1zaGFyZWQtaW5sLmgKKysrKyBiL2pzL3NyYy9qaXQvc2hhcmVkL0xv d2VyaW5nLXNoYXJlZC1pbmwuaAorQEAgLTUyNyw3ICs1MjcsNyBAQCBMQWxsb2NhdGlvbiBMSVJH ZW5lcmF0b3JTaGFyZWQ6OnVzZVJlZ2lzdGVyT3JOb25Eb3VibGVDb25zdGFudCgKKyAKKyAjaWYg ZGVmaW5lZChKU19DT0RFR0VOX0FSTSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCAg ICAgIFwKKyAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9NSVBTNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAg IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQp CisgTEFsbG9jYXRpb24gTElSR2VuZXJhdG9yU2hhcmVkOjp1c2VBbnlPckNvbnN0YW50KE1EZWZp bml0aW9uKiBtaXIpIHsKKyAgIHJldHVybiB1c2VSZWdpc3Rlck9yQ29uc3RhbnQobWlyKTsKKyB9 CitkaWZmIC0tZ2l0IGEvanMvc3JjL2pzLWNvbmZpZy5tb3pidWlsZCBiL2pzL3NyYy9qcy1jb25m aWcubW96YnVpbGQKK2luZGV4IDIyYmVjYWY0ZWNmYi4uZmY1Mjk0ODI1ZTlkIDEwMDY0NAorLS0t IGEvanMvc3JjL2pzLWNvbmZpZy5tb3pidWlsZAorKysrIGIvanMvc3JjL2pzLWNvbmZpZy5tb3pi dWlsZAorQEAgLTgsNiArOCw3IEBAIGlmICgKKyAgICAgQ09ORklHWyJKU19DT0RFR0VOX1g2NCJd CisgICAgIG9yIENPTkZJR1siSlNfQ09ERUdFTl9BUk02NCJdCisgICAgIG9yIENPTkZJR1siSlNf Q09ERUdFTl9SSVNDVjY0Il0KKysgICAgb3IgQ09ORklHWyJKU19DT0RFR0VOX1BQQzY0Il0KKyAp OgorICAgICBERUZJTkVTWyJXQVNNX1NVUFBPUlRTX0hVR0VfTUVNT1JZIl0gPSBUcnVlCisgCitk aWZmIC0tZ2l0IGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RKaXRBQkljYWxscy5jcHAgYi9qcy9z cmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNhbGxzLmNwcAoraW5kZXggYjVjMDNhNDdkZDgzLi44 ODdhZDllM2Q5NTkgMTAwNjQ0CistLS0gYS9qcy9zcmMvanNhcGktdGVzdHMvdGVzdEppdEFCSWNh bGxzLmNwcAorKysrIGIvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RKaXRBQkljYWxscy5jcHAKK0BA IC03MTgsNiArNzE4LDkgQEAgY2xhc3MgSml0QUJJQ2FsbCBmaW5hbCA6IHB1YmxpYyBqc2FwaXRl c3Q6OlJ1bnRpbWVUZXN0LAorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICAg ICBSZWdpc3RlciBiYXNlID0gdDA7CisgICAgIHJlZ3MudGFrZShiYXNlKTsKKysjZWxpZiBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAgIFJlZ2lzdGVyIGJhc2UgPSByMTE7CisrICAgIHJl Z3MudGFrZShiYXNlKTsKKyAjZWxzZQorICMgIGVycm9yICJVbmtub3duIGFyY2hpdGVjdHVyZSEi CisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJu Q2FsbHMuY3BwIGIvanMvc3JjL2pzYXBpLXRlc3RzL3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwCitp bmRleCA0NzI4ZjI0MDRhZTguLmEwN2RkYjJmMjE0ZSAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qc2Fw aS10ZXN0cy90ZXN0V2FzbVJldHVybkNhbGxzLmNwcAorKysrIGIvanMvc3JjL2pzYXBpLXRlc3Rz L3Rlc3RXYXNtUmV0dXJuQ2FsbHMuY3BwCitAQCAtMzIsNyArMzIsMTAgQEAgQkVHSU5fVEVTVCh0 ZXN0V2FzbUNoZWNrU2xvd0NhbGxNYXJrZXJIaXQpIHsKKyAKKyAgIG1hc20uYmluZCgmY2hlY2sp OworICMgIGlmZGVmIEpTX1VTRV9MSU5LX1JFR0lTVEVSCistIyAgICBpZiAhZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpICYmICFkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSAmJiBcCisrIyAg ICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBzdGF0aWMgY29uc3RleHByIFJlZ2lz dGVyIHJhID0gQUJJTm9uQXJnUmVnMzsKKysgIG1hc20ueHNfbWZscihyYSk7CisrIyAgICBlbGlm ICFkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgJiYgIWRlZmluZWQoSlNfQ09ERUdFTl9NSVBT NjQpICYmIFwKKyAgICAgICAgICFkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIHN0YXRp YyBjb25zdGV4cHIgUmVnaXN0ZXIgcmEgPSBscjsKKyAjICAgIGVuZGlmCitAQCAtNzAsNyArNzMs MTAgQEAgQkVHSU5fVEVTVCh0ZXN0V2FzbUNoZWNrU2xvd0NhbGxNYXJrZXJNaXNzKSB7CisgCisg ICBtYXNtLmJpbmQoJmNoZWNrKTsKKyAjICBpZmRlZiBKU19VU0VfTElOS19SRUdJU1RFUgorLSMg ICAgaWYgIWRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSAmJiAhZGVmaW5lZChKU19DT0RFR0VO X01JUFM2NCkgJiYgXAorKyMgICAgaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgc3Rh dGljIGNvbnN0ZXhwciBSZWdpc3RlciByYSA9IEFCSU5vbkFyZ1JlZzM7CisrICBtYXNtLnhzX21m bHIocmEpOworKyMgICAgZWxpZiAhZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpICYmICFkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSAmJiBcCisgICAgICAgICAhZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCisgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIHJhID0gbHI7CisgIyAgICBl bmRpZgorZGlmZiAtLWdpdCBhL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAgYi9qcy9z cmMvanNhcGktdGVzdHMvdGVzdHNKaXQuY3BwCitpbmRleCBhMmRmZTVkMDE5NmMuLjdmM2RjY2E4 OTVkMiAxMDA2NDQKKy0tLSBhL2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAKKysrKyBi L2pzL3NyYy9qc2FwaS10ZXN0cy90ZXN0c0ppdC5jcHAKK0BAIC0yNSw2ICsyNSwxNCBAQCB2b2lk IFByZXBhcmVKaXQoanM6OmppdDo6TWFjcm9Bc3NlbWJsZXImIG1hc20pIHsKKyAjaWYgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwK KyAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgICBzYXZlLmFkZChqczo6aml0Ojpy YSk7CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgLy8gTFIgb24gUFBDNjQg aXNuJ3QgYSBHUFI7IHNhdmUgaXQgdG8gdGhlIHN0YWNrIG1hbnVhbGx5LgorKyAgeworKyAgICBV c2VTY3JhdGNoUmVnaXN0ZXJTY29wZSB0ZW1wcyhtYXNtKTsKKysgICAgUmVnaXN0ZXIgc2NyYXRj aCA9IHRlbXBzLkFjcXVpcmUoKTsKKysgICAgbWFzbS54c19tZmxyKHNjcmF0Y2gpOworKyAgICBt YXNtLmFzX3N0ZHUoc2NyYXRjaCwgU3RhY2tQb2ludGVyLCAtOCk7CisrICB9CisgI2VsaWYgZGVm aW5lZChKU19VU0VfTElOS19SRUdJU1RFUikKKyAgIHNhdmUuYWRkKGpzOjpqaXQ6OmxyKTsKKyAj ZW5kaWYKK0BAIC00NCw2ICs1Miw4IEBAIGJvb2wgRXhlY3V0ZUppdChKU0NvbnRleHQqIGN4LCBq czo6aml0OjpNYWNyb0Fzc2VtYmxlciYgbWFzbSkgeworICNpZiBkZWZpbmVkKEpTX0NPREVHRU5f TUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorICAgICBkZWZpbmVk KEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIHJlc3RvcmUuYWRkKGpzOjpqaXQ6OnJhKTsKKysjZWxp ZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBMUiB3aWxsIGJlIHJlc3RvcmVkIG1h bnVhbGx5IGFmdGVyIFBvcFJlZ3NJbk1hc2suCisgI2VsaWYgZGVmaW5lZChKU19VU0VfTElOS19S RUdJU1RFUikKKyAgIHJlc3RvcmUuYWRkKGpzOjpqaXQ6OmxyKTsKKyAjZW5kaWYKK0BAIC01NSw2 ICs2NSwxNiBAQCBib29sIEV4ZWN1dGVKaXQoSlNDb250ZXh0KiBjeCwganM6OmppdDo6TWFjcm9B c3NlbWJsZXImIG1hc20pIHsKKyAKKyAgIC8vIFJlc2V0IHN0YWNrIHBvaW50ZXIuCisgICBtYXNt LlNldFN0YWNrUG9pbnRlcjY0KFBzZXVkb1N0YWNrUG9pbnRlcjY0KTsKKysjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBSZXN0b3JlIExSIGZyb20gdGhlIHN0YWNrIGFuZCBy ZXR1cm4uCisrICB7CisrICAgIFVzZVNjcmF0Y2hSZWdpc3RlclNjb3BlIHRlbXBzKG1hc20pOwor KyAgICBSZWdpc3RlciBzY3JhdGNoID0gdGVtcHMuQWNxdWlyZSgpOworKyAgICBtYXNtLmFzX2xk KHNjcmF0Y2gsIFN0YWNrUG9pbnRlciwgMCk7CisrICAgIG1hc20ueHNfbXRscihzY3JhdGNoKTsK KysgICAgbWFzbS5hc19hZGRpKFN0YWNrUG9pbnRlciwgU3RhY2tQb2ludGVyLCA4KTsKKysgIH0K KysgIG1hc20uYXNfYmxyKCk7CisgI2Vsc2UKKyAgIC8vIEV4aXQgdGhlIEpJVC1lZCBjb2RlIHVz aW5nIHRoZSBBQkkgcmV0dXJuIHN0eWxlLgorICAgbWFzbS5hYmlyZXQoKTsKK2RpZmYgLS1naXQg YS9qcy9zcmMvc2hlbGwvanMuY3BwIGIvanMvc3JjL3NoZWxsL2pzLmNwcAoraW5kZXggNDViYzA3 OTZiOTY0Li4yMGViMTIzMWJiN2YgMTAwNjQ0CistLS0gYS9qcy9zcmMvc2hlbGwvanMuY3BwCisr KysgYi9qcy9zcmMvc2hlbGwvanMuY3BwCitAQCAtNzg5NSw2ICs3ODk1LDEzIEBAIHN0YXRpYyB2 b2lkIFNpbmdsZVN0ZXBDYWxsYmFjayh2b2lkKiBhcmcsIGppdDo6U2ltdWxhdG9yKiBzaW0sIHZv aWQqIHBjKSB7CisgICBzdGF0ZS5mcCA9ICh2b2lkKilzaW0tPmdldFJlZ2lzdGVyKGppdDo6U2lt dWxhdG9yOjpmcCk7CisgICAvLyBzZWUgV2FzbVRhaWxDYWxsRlBTY3JhdGNoUmVnIGFuZCBDb2xs YXBzZVdhc21GcmFtZUZhc3QKKyAgIHN0YXRlLnRlbXBGUCA9ICh2b2lkKilzaW0tPmdldFJlZ2lz dGVyKGppdDo6U2ltdWxhdG9yOjp0Myk7CisrIyAgZWxpZiBkZWZpbmVkKEpTX1NJTVVMQVRPUl9Q UEM2NCkKKysgIHN0YXRlLnNwID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0 b3I6OnNwKTsKKysgIHN0YXRlLmxyID0gKHZvaWQqKXNpbS0+Z2V0TFIoKTsKKysgIHN0YXRlLmZw ID0gKHZvaWQqKXNpbS0+Z2V0UmVnaXN0ZXIoaml0OjpTaW11bGF0b3I6OmZwKTsKKysgIC8vIFdh c21UYWlsQ2FsbEZQU2NyYXRjaFJlZyA9IEFCSU5vbkFyZ1JlZzMgPSByMjIgaG9sZHMgdGhlIHVu d2luZCBGUAorKyAgLy8gZHVyaW5nIHRoZSB3YXNtIHRhaWwtY2FsbCBjb2xsYXBzZSB3aW5kb3cg KFJlc3RvcmVGcFJhIHVud2luZCBpbmZvKS4KKysgIHN0YXRlLnRlbXBGUCA9ICh2b2lkKilzaW0t PmdldFJlZ2lzdGVyKGppdDo6U2ltdWxhdG9yOjpyMjIpOworICMgIGVsc2UKKyAjICAgIGVycm9y ICJOWUk6IFNpbmdsZS1zdGVwIHByb2ZpbGluZyBzdXBwb3J0IgorICMgIGVuZGlmCitAQCAtMTMx NDQsNiArMTMxNTEsMTUgQEAgYm9vbCBJbml0T3B0aW9uUGFyc2VyKE9wdGlvblBhcnNlciYgb3Ap IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJTdG9wIHRoZSBSSVNDLVYgc2ltdWxhdG9yIGFm dGVyIHRoZSBnaXZlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAiTlVNQkVSIG9mIGluc3Ry dWN0aW9ucy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgLTEpIHx8CisrI2VuZGlmCisrI2lm ZGVmIEpTX1NJTVVMQVRPUl9QUEM2NAorKyAgICAgICFvcC5hZGRCb29sT3B0aW9uKCdcMCcsICJw cGM2NC1zaW0taWNhY2hlLWNoZWNrcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIkVuYWJs ZSBpY2FjaGUgZmx1c2ggY2hlY2tzIGluIHRoZSBQUEM2NCAiCisrICAgICAgICAgICAgICAgICAg ICAgICAgInNpbXVsYXRvci4iKSB8fAorKyAgICAgICFvcC5hZGRJbnRPcHRpb24oJ1wwJywgInBw YzY0LXNpbS1zdG9wLWF0IiwgIk5VTUJFUiIsCisrICAgICAgICAgICAgICAgICAgICAgICAiU3Rv cCB0aGUgUFBDNjQgc2ltdWxhdG9yIGFmdGVyIHRoZSBnaXZlbiAiCisrICAgICAgICAgICAgICAg ICAgICAgICAiTlVNQkVSIG9mIGluc3RydWN0aW9ucy4iLAorKyAgICAgICAgICAgICAgICAgICAg ICAgLTEpIHx8CisgI2VuZGlmCisgICAgICAgIW9wLmFkZEludE9wdGlvbignXDAnLCAibnVyc2Vy eS1zaXplIiwgIlNJWkUtTUIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlNldCB0aGUgbWF4 aW11bSBudXJzZXJ5IHNpemUgaW4gTUIiLAorQEAgLTE0MjM1LDYgKzE0MjUxLDE1IEBAIGJvb2wg U2V0Q29udGV4dEpJVE9wdGlvbnMoSlNDb250ZXh0KiBjeCwgY29uc3QgT3B0aW9uUGFyc2VyJiBv cCkgeworICAgaWYgKHN0b3BBdCA+PSAwKSB7CisgICAgIGppdDo6U2ltdWxhdG9yOjpTdG9wU2lt QXQgPSBzdG9wQXQ7CisgICB9CisrI2VsaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfUFBDNjQpCisr ICBpZiAob3AuZ2V0Qm9vbE9wdGlvbigicHBjNjQtc2ltLWljYWNoZS1jaGVja3MiKSkgeworKyAg ICBqaXQ6OlNpbXVsYXRvclByb2Nlc3M6OklDYWNoZUNoZWNraW5nRGlzYWJsZUNvdW50ID0gMDsK KysgIH0KKysKKysgIGludDMyX3Qgc3RvcEF0ID0gb3AuZ2V0SW50T3B0aW9uKCJwcGM2NC1zaW0t c3RvcC1hdCIpOworKyAgaWYgKHN0b3BBdCA+PSAwKSB7CisrICAgIGppdDo6U2ltdWxhdG9yOjpT dG9wU2ltQXQgPSBzdG9wQXQ7CisrICB9CisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCitkaWZm IC0tZ2l0IGEvanMvc3JjL3NoZWxsL2pzc2hlbGwuaCBiL2pzL3NyYy9zaGVsbC9qc3NoZWxsLmgK K2luZGV4IGU4ZDQ3YmE2ODg4Yy4uNTdlMmIxNWYzY2RkIDEwMDY0NAorLS0tIGEvanMvc3JjL3No ZWxsL2pzc2hlbGwuaAorKysrIGIvanMvc3JjL3NoZWxsL2pzc2hlbGwuaAorQEAgLTIyLDcgKzIy LDggQEAKKyAKKyAvLyBTb21lIHBsYXRmb3JtIGhvb2tzIG11c3QgYmUgaW1wbGVtZW50ZWQgZm9y IHNpbmdsZS1zdGVwIHByb2ZpbGluZy4KKyAjaWYgZGVmaW5lZChKU19TSU1VTEFUT1JfQVJNKSB8 fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9NSVBTNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19TSU1V TEFUT1JfQVJNNjQpIHx8IGRlZmluZWQoSlNfU0lNVUxBVE9SX0xPT05HNjQpCisrICAgIGRlZmlu ZWQoSlNfU0lNVUxBVE9SX0FSTTY0KSB8fCBkZWZpbmVkKEpTX1NJTVVMQVRPUl9MT09ORzY0KSB8 fCBcCisrICAgIGRlZmluZWQoSlNfU0lNVUxBVE9SX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfU0lN VUxBVE9SX1BQQzY0KQorICMgIGRlZmluZSBTSU5HTEVTVEVQX1BST0ZJTElORworICNlbmRpZgor IAorZGlmZiAtLWdpdCBhL2pzL3NyYy90ZXN0cy9zaGVsbC9vcy5qcyBiL2pzL3NyYy90ZXN0cy9z aGVsbC9vcy5qcworaW5kZXggOTI5OTgyNzU2NTQ4Li5mM2QyMzk2YjE3ZWIgMTAwNjQ0CistLS0g YS9qcy9zcmMvdGVzdHMvc2hlbGwvb3MuanMKKysrKyBiL2pzL3NyYy90ZXN0cy9zaGVsbC9vcy5q cworQEAgLTIwLDcgKzIwLDEzIEBAIHZhciBpbmZvID0gb3Mud2FpdHBpZChraWRwaWQsIHRydWUp OworIGFzc2VydEVxKGluZm8uaGFzT3duUHJvcGVydHkoInBpZCIpLCBmYWxzZSk7CisgYXNzZXJ0 RXEoaW5mby5oYXNPd25Qcm9wZXJ0eSgiZXhpdFN0YXR1cyIpLCBmYWxzZSk7CisgCistb3Mua2ls bChraWRwaWQpOworKy8vIFVzZSBTSUdLSUxMICg5KSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFNJ R0lOVDogdW5kZXIgaGVhdnkgcGFyYWxsZWwgdGVzdAorKy8vIGxvYWQsIFNJR0lOVCBkZWxpdmVy eSBjYW4gcmFjZSB3aXRoIHRoZSBjaGlsZCdzIHNpZ25hbC1oYW5kbGVyIHNldHVwIGFuZAorKy8v IHRoZSBrZXJuZWwncyByZWFwaW5nIHBhdGgsIGxlYWRpbmcgdG8gd2FpdHBpZCBiZWxvdyBibG9j a2luZyB1bnRpbCB0aGUKKysvLyBgc2xlZXAgNjBgIGV4aXRzIG5vcm1hbGx5LiBTSUdLSUxMIGlz IHVuY2F0Y2hhYmxlIGFuZCBmb3JjZXMgaW1tZWRpYXRlCisrLy8gdGVybWluYXRpb24sIHNvIHRo ZSBhc3NlcnRpb24gYmVsb3cgKCJraWxsZWQgcHJvY2VzcyBzaG91bGQgbm90IGhhdmUKKysvLyBl eGl0U3RhdHVzIikgaXMgcmVsaWFibGUuCisrb3Mua2lsbChraWRwaWQsIDkpOworIAorIGluZm8g PSBvcy53YWl0cGlkKGtpZHBpZCk7CisgYXNzZXJ0RXEoaW5mby5oYXNPd25Qcm9wZXJ0eSgicGlk IiksIHRydWUsICJ3YWl0aW5nIG9uIGRlYWQgcHJvY2VzcyBzaG91bGQgcmV0dXJuIHBpZCIpOwor ZGlmZiAtLWdpdCBhL2pzL3NyYy91dGlsL1BvaXNvbi5oIGIvanMvc3JjL3V0aWwvUG9pc29uLmgK K2luZGV4IDcyMWVjZmY2MTQ5ZC4uZGU3OTgxYWE2ZjYwIDEwMDY0NAorLS0tIGEvanMvc3JjL3V0 aWwvUG9pc29uLmgKKysrKyBiL2pzL3NyYy91dGlsL1BvaXNvbi5oCitAQCAtOTIsNiArOTIsOCBA QCBjb25zdCB1aW50OF90IEpTX1NDT1BFX0RBVEFfVFJBSUxJTkdfTkFNRVNfUEFUVEVSTiA9IDB4 Q0M7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgIyAgZGVmaW5lIEpTX1NX RVBUX0NPREVfUEFUVEVSTiBcCisgICAgIDB4MjkgIC8vIGlsbGVnYWwgc2IgaW5zdHJ1Y3Rpb24s IGNyYXNoZXMgaW4gdXNlciBtb2RlLgorKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkK KysjICBkZWZpbmUgSlNfU1dFUFRfQ09ERV9QQVRURVJOIDB4MDAgIC8vIGlsbGVnYWwgaW5zdHJ1 Y3Rpb24gKGFsbCB6ZXJvcykKKyAjZWxzZQorICMgIGVycm9yICJKU19TV0VQVF9DT0RFX1BBVFRF Uk4gbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0iCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEv anMvc3JjL3dhc20vV2FzbUFueVJlZi5oIGIvanMvc3JjL3dhc20vV2FzbUFueVJlZi5oCitpbmRl eCBmODFkNGM2MTcxYjYuLjcyMDBlOWFiMGUyMyAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dh c21BbnlSZWYuaAorKysrIGIvanMvc3JjL3dhc20vV2FzbUFueVJlZi5oCitAQCAtMjA5LDcgKzIw OSw3IEBAIGNsYXNzIEFueVJlZiB7CisgICAgIC8vIFRydW5jYXRlIHRoZSB2YWx1ZSB0byB0aGUg MzEtYml0IHZhbHVlIHNpemUuCisgICAgIHVpbnRwdHJfdCB3aWRlVmFsdWUgPSB1aW50cHRyX3Qo dmFsdWUgJiAweDdGRkZGRkZGKTsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKKyAgICAgLy8gU2lnbiBleHRlbmQgdGhlIHZhbHVlIHRvIHRoZSBu YXRpdmUgcG9pbnRlciBzaXplLgorICAgICB1aW50cHRyX3Qgd2lkZVZhbHVlID0gdWludHB0cl90 KGludDY0X3QoKHVpbnQ2NF90KHZhbHVlKSA8PCAzMykpID4+IDMzKTsKKyAjZWxpZiAhZGVmaW5l ZChKU182NEJJVCkKK0BAIC0yMzQsNiArMjM0LDExIEBAIGNsYXNzIEFueVJlZiB7CisgIyAgaWZk ZWYgREVCVUcKKyAjICAgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkKKyAgICAgTU9aX0FTU0VSVCh2YWx1ZSA8PSBVSU5UMzJfTUFYKTsKKysj ICAgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdF Tl9NSVBTNjQpIHx8IFwKKysgICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBk ZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAgIC8vIE9uIHNpZ24tZXh0ZW5kaW5nIHBsYXRm b3JtcywgYSBjYW5vbmljYWwgaTMyIG11c3QgYmUgdGhlIHNpZ24KKysgICAgLy8gZXh0ZW5zaW9u IG9mIGl0cyBsb3cgMzIgYml0cy4KKysgICAgTU9aX0FTU0VSVCh2YWx1ZSA9PSB1aW50cHRyX3Qo aW50NjRfdChpbnQzMl90KHZhbHVlKSkpKTsKKyAjICAgIGVuZGlmCisgIyAgZW5kaWYKKyAgIH0K K2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtQkNEZWZzLmggYi9qcy9zcmMvd2FzbS9XYXNt QkNEZWZzLmgKK2luZGV4IGI0NGU5MWUyODY5My4uNjZhOGM5YWZlOGM2IDEwMDY0NAorLS0tIGEv anMvc3JjL3dhc20vV2FzbUJDRGVmcy5oCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtQkNEZWZzLmgK K0BAIC00NCw2ICs0NCw5IEBACisgI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KQorICMg IGluY2x1ZGUgImppdC9yaXNjdjY0L0Fzc2VtYmxlci1yaXNjdjY0LmgiCisgI2VuZGlmCisrI2lm IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysjICBpbmNsdWRlICJqaXQvcHBjNjQvQXNzZW1i bGVyLXBwYzY0LmgiCisrI2VuZGlmCisgI2luY2x1ZGUgImpzL1NjYWxhclR5cGUuaCIKKyAjaW5j bHVkZSAidXRpbC9NZW1vcnkuaCIKKyAjaW5jbHVkZSAid2FzbS9XYXNtQ29kZWdlblR5cGVzLmgi CitAQCAtMTUxLDYgKzE1NCwxMCBAQCBlbnVtIGNsYXNzIFJoc0Rlc3RPcCB7IFRydWUgPSB0cnVl IH07CisgIyAgZGVmaW5lIFJBQkFMRFJfUElOX0lOU1RBTkNFCisgI2VuZGlmCisgCisrI2lmZGVm IEpTX0NPREVHRU5fUFBDNjQKKysjICBkZWZpbmUgUkFCQUxEUl9QSU5fSU5TVEFOQ0UKKysjZW5k aWYKKysKKyAvLyBNYXggbnVtYmVyIG9mIHB1c2hlcyBvbnRvIHRoZSB2YWx1ZSBzdGFjayBmb3Ig YW55IG9wY29kZSBvciBlbWl0dGVyIHRoYXQKKyAvLyBkb2VzIG5vdCBwdXNoIGEgdmFyaWFibGUs IHVuYm91bmRlZCBhbW91bnQgKGFueXRoaW5nIHdpdGggbXVsdGlwbGUKKyAvLyByZXN1bHRzKS4g IFRoaXMgaW5jbHVkZXMgYWxzbyBpbnRlcm1lZGlhdGUgcHVzaGVzIHN1Y2ggYXMgdmFsdWVzIHB1 c2hlZCBhcworZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAgYi9qcy9z cmMvd2FzbS9XYXNtQkNNZW1vcnkuY3BwCitpbmRleCA4MzU1MTJiMDliOGMuLjkxMzdiMDlmNDY4 NCAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21CQ01lbW9yeS5jcHAKKysrKyBiL2pzL3Ny Yy93YXNtL1dhc21CQ01lbW9yeS5jcHAKK0BAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBCYXNlQ29t cGlsZXI6OmJvdW5kc0NoZWNrQmVsb3c0R0JBY2Nlc3ModWludDMyX3QgbWVtb3J5SW5kZXgsCisg Ly8gTWFrZSBzdXJlIHRoZSBwdHIgY291bGQgYmUgdXNlZCBhcyBhbiBpbmRleCByZWdpc3Rlci4K KyBzdGF0aWMgaW5saW5lIHZvaWQgVG9WYWxpZEluZGV4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBS ZWdJMzIgcHRyKSB7CisgI2lmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0 KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorICAgLy8gV2hlbiBwdHIgaXMgdXNlZCBhcyBhbiBpbmRleCwgaXQgd2lsbCBiZSBh ZGRlZCB0byBhIDY0LWJpdCByZWdpc3Rlci4KKyAgIC8vIFNvIHdlIHNob3VsZCBleHBsaWNpdGx5 IHByb21vdGUgcHRyIHRvIDY0LWJpdC4gU2luY2Ugbm93IHB0ciBob2xkcyBhCisgICAvLyB1bnNp Z25lZCAzMi1iaXQgdmFsdWUsIHdlIHplcm8tZXh0ZW5kIGl0IHRvIDY0LWJpdCBoZXJlLgorQEAg LTY0NSw2ICs2NDUsMTMgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmV4ZWN1dGVMb2FkKE1lbW9yeUFj Y2Vzc0Rlc2MqIGFjY2VzcywgQWNjZXNzQ2hlY2sqIGNoZWNrLAorICAgfSBlbHNlIHsKKyAgICAg bWFzbS53YXNtTG9hZCgqYWNjZXNzLCBtZW1vcnlCYXNlLCBwdHIsIHB0ciwgZGVzdC5hbnkoKSk7 CisgICB9CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgTU9aX0FTU0VSVCh0 ZW1wLmlzSW52YWxpZCgpKTsKKysgIGlmIChkZXN0LnRhZyA9PSBBbnlSZWc6Okk2NCkgeworKyAg ICBtYXNtLndhc21Mb2FkSTY0KCphY2Nlc3MsIG1lbW9yeUJhc2UsIHB0ciwgcHRyLCBkZXN0Lmk2 NCgpKTsKKysgIH0gZWxzZSB7CisrICAgIG1hc20ud2FzbUxvYWQoKmFjY2VzcywgbWVtb3J5QmFz ZSwgcHRyLCBwdHIsIGRlc3QuYW55KCkpOworKyAgfQorICNlbHNlCisgICBNT1pfQ1JBU0goIkJh c2VDb21waWxlciBwbGF0Zm9ybSBob29rOiBsb2FkIik7CisgI2VuZGlmCitAQCAtNjc1LDEwICs2 ODIsMTEgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OmxvYWQoTWVtb3J5QWNjZXNzRGVzYyogYWNjZXNz LCBBY2Nlc3NDaGVjayogY2hlY2ssCisgICAvLyBnZW5lcmF0ZWQgaXMgdGhlIHNhbWUgZm9yIHRo ZSA2NC1iaXQgYW5kIHRoZSAzMi1iaXQgY2FzZS4KKyAgIHJldHVybiBleGVjdXRlTG9hZChhY2Nl c3MsIGNoZWNrLCBpbnN0YW5jZSwgbWVtb3J5QmFzZSwgUmVnSTMyKHB0ci5yZWcpLCBkZXN0LAor ICAgICAgICAgICAgICAgICAgICAgIG1heWJlRnJvbUk2NCh0ZW1wKSk7CistI2VsaWYgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCistICAv LyBPbiBtaXBzNjQgYW5kIGxvb25nYXJjaDY0LCB0aGUgJ3ByZXBhcmVNZW1vcnlBY2Nlc3MnIGZ1 bmN0aW9uIHdpbGwgbWFrZQorLSAgLy8gc3VyZSB0aGF0IHB0ciBob2xkcyBhIHZhbGlkIDY0LWJp dCBpbmRleCB2YWx1ZS4gVGh1cyB0aGUgY29kZSBnZW5lcmF0ZWQgaW4KKy0gIC8vICdleGVjdXRl TG9hZCcgaXMgdGhlIHNhbWUgZm9yIHRoZSA2NC1iaXQgYW5kIHRoZSAzMi1iaXQgY2FzZS4KKysj ZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9P Tkc2NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICAvLyBPbiBtaXBz NjQsIGxvb25nYXJjaDY0LCBhbmQgcHBjNjQsIHRoZSAncHJlcGFyZU1lbW9yeUFjY2VzcycgZnVu Y3Rpb24gd2lsbAorKyAgLy8gbWFrZSBzdXJlIHRoYXQgcHRyIGhvbGRzIGEgdmFsaWQgNjQtYml0 IGluZGV4IHZhbHVlLiBUaHVzIHRoZSBjb2RlCisrICAvLyBnZW5lcmF0ZWQgaW4gJ2V4ZWN1dGVM b2FkJyBpcyB0aGUgc2FtZSBmb3IgdGhlIDY0LWJpdCBhbmQgdGhlIDMyLWJpdCBjYXNlLgorICAg cmV0dXJuIGV4ZWN1dGVMb2FkKGFjY2VzcywgY2hlY2ssIGluc3RhbmNlLCBtZW1vcnlCYXNlLCBS ZWdJMzIocHRyLnJlZyksIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgbWF5YmVGcm9tSTY0 KHRlbXApKTsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKK0BAIC03ODgsNiAr Nzk2LDEzIEBAIHZvaWQgQmFzZUNvbXBpbGVyOjpleGVjdXRlU3RvcmUoTWVtb3J5QWNjZXNzRGVz YyogYWNjZXNzLCBBY2Nlc3NDaGVjayogY2hlY2ssCisgICB9IGVsc2UgeworICAgICBtYXNtLndh c21TdG9yZSgqYWNjZXNzLCBzcmMuYW55KCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKKyAgIH0K KysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrICBNT1pfQVNTRVJUKHRlbXAuaXNJ bnZhbGlkKCkpOworKyAgaWYgKGFjY2Vzcy0+dHlwZSgpID09IFNjYWxhcjo6SW50NjQpIHsKKysg ICAgbWFzbS53YXNtU3RvcmVJNjQoKmFjY2Vzcywgc3JjLmk2NCgpLCBtZW1vcnlCYXNlLCBwdHIs IHB0cik7CisrICB9IGVsc2UgeworKyAgICBtYXNtLndhc21TdG9yZSgqYWNjZXNzLCBzcmMuYW55 KCksIG1lbW9yeUJhc2UsIHB0ciwgcHRyKTsKKysgIH0KKyAjZWxzZQorICAgTU9aX0NSQVNIKCJC YXNlQ29tcGlsZXIgcGxhdGZvcm0gaG9vazogc3RvcmUiKTsKKyAjZW5kaWYKK0BAIC04MTIsNyAr ODI3LDcgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnN0b3JlKE1lbW9yeUFjY2Vzc0Rlc2MqIGFjY2Vz cywgQWNjZXNzQ2hlY2sqIGNoZWNrLAorICAgICAgICAgICAgICAgICAgICAgICBtYXliZUZyb21J NjQodGVtcCkpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkgfHwgICAgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8 fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVH RU5fUklTQ1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKKyAgIHJldHVybiBleGVjdXRlU3RvcmUoYWNjZXNzLCBjaGVjaywg aW5zdGFuY2UsIG1lbW9yeUJhc2UsIFJlZ0kzMihwdHIucmVnKSwgc3JjLAorICAgICAgICAgICAg ICAgICAgICAgICBtYXliZUZyb21JNjQodGVtcCkpOworICNlbHNlCitAQCAtMTI5NSw3ICsxMzEw LDggQEAgc3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGlsZXIqIGJjLCBSZWdJMzIgcnYs IGNvbnN0IFRlbXBzJiB0ZW1wcykgeworICAgYmMtPmZyZWVJMzIodGVtcHMudDApOworIH0KKyAK Ky0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f TE9PTkc2NCkKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisg Cisgc3RydWN0IFRlbXBzIHsKKyAgIFJlZ0kzMiB0MCwgdDEsIHQyOworQEAgLTE1MDQsNyArMTUy MCw3IEBAIHN0YXRpYyB2b2lkIERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywgQXRvbWljT3Ag b3AsIFJlZ0k2NCBydiwgUmVnSTY0IHRlbXApIHsKKyB9CisgCisgI2VsaWYgZGVmaW5lZChKU19D T0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBcCistICAgIGRl ZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIAorIHN0YXRpYyB2b2lkIFBvcEFuZEFs bG9jYXRlKEJhc2VDb21waWxlciogYmMsIEF0b21pY09wIG9wLCBSZWdJNjQqIHJkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFJlZ0k2NCogcnYsIFJlZ0k2NCogdGVtcCkgeworQEAgLTE2 NzgsNyArMTY5NCw4IEBAIHN0YXRpYyB2b2lkIERlYWxsb2NhdGUoQmFzZUNvbXBpbGVyKiBiYywg UmVnSTMyIHJ2LCBjb25zdCBUZW1wcyYpIHsKKyAgIGJjLT5mcmVlSTMyKHJ2KTsKKyB9CisgCist I2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xP T05HNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX0xPT05HNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIAor IHN0cnVjdCBUZW1wcyB7CisgICBSZWdJMzIgdDAsIHQxLCB0MjsKK0BAIC0xODQ0LDcgKzE4NjEs NyBAQCBzdGF0aWMgdm9pZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciogYmMsIFJlZ0k2NCByZCwg UmVnSTY0IHJ2KSB7CisgfQorIAorICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5f TE9PTkc2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKKyAKKyBzdGF0aWMgdm9pZCBQb3BBbmRBbGxvY2F0ZShCYXNlQ29tcGls ZXIqIGJjLCBSZWdJNjQqIHJkLCBSZWdJNjQqIHJ2KSB7CisgICAqcnYgPSBiYy0+cG9wSTY0KCk7 CitAQCAtMjAxNyw3ICsyMDM0LDggQEAgc3RhdGljIHZvaWQgRGVhbGxvY2F0ZShCYXNlQ29tcGls ZXIqIGJjLCBSZWdJMzIgcmV4cGVjdCwgUmVnSTMyIHJuZXcsCisgICBiYy0+ZnJlZUkzMihyZXhw ZWN0KTsKKyB9CisgCistI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5l ZChKU19DT0RFR0VOX0xPT05HNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKysgICAgZGVmaW5lZChKU19DT0RF R0VOX1BQQzY0KQorIAorIHN0cnVjdCBUZW1wcyB7CisgICBSZWdJMzIgdDAsIHQxLCB0MjsKK0BA IC0yMjg3LDcgKzIzMDUsNyBAQCBzdGF0aWMgdm9pZCBEZWFsbG9jYXRlKEJhc2VDb21waWxlciog YmMsIFJlZ0k2NCByZXhwZWN0LCBSZWdJNjQgcm5ldykgeworIH0KKyAKKyAjZWxpZiBkZWZpbmVk KEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKKy0g ICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgCisgdGVtcGxhdGUgPHR5cGVu YW1lIFJlZ0FkZHJlc3NUeXBlPgorIHN0YXRpYyB2b2lkIFBvcEFuZEFsbG9jYXRlKEJhc2VDb21w aWxlciogYmMsIFJlZ0k2NCogcmV4cGVjdCwgUmVnSTY0KiBybmV3LAorQEAgLTI4ODUsNiArMjkw MywxMSBAQCB2b2lkIEJhc2VDb21waWxlcjo6bG9hZEV4dGVuZChNZW1vcnlBY2Nlc3NEZXNjKiBh Y2Nlc3MsIFNjYWxhcjo6VHlwZSB2aWV3VHlwZSkgeworICAgUmVnSTY0IHJzID0gcG9wSTY0KCk7 CisgICBSZWdWMTI4IHJkID0gbmVlZFYxMjgoKTsKKyAgIG1hc20ubW92ZUdQUjY0VG9Eb3VibGUo cnMsIHJkKTsKKysjaWZkZWYgSlNfQ09ERUdFTl9QUEM2NAorKyAgLy8gbXR2c3JkIHBsYWNlcyB2 YWx1ZSBpbiBCRSBkdzAgKD0gTEUgZHcxKS4gd2lkZW5Mb3cqIG9wZXJhdGVzIG9uIExFIGR3MC4K KysgIC8vIFN3YXAgZHdvcmRzIHRvIG1vdmUgbG9hZGVkIGRhdGEgdG8gdGhlIGNvcnJlY3QgaGFs Zi4KKysgIG1hc20uYXNfeHhwZXJtZGkocmQsIHJkLCByZCwgMik7CisrI2VuZGlmCisgICBzd2l0 Y2ggKHZpZXdUeXBlKSB7CisgICAgIGNhc2UgU2NhbGFyOjpJbnQ4OgorICAgICAgIG1hc20ud2lk ZW5Mb3dJbnQ4eDE2KHJkLCByZCk7CitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUJDUmVn RGVmcy5oIGIvanMvc3JjL3dhc20vV2FzbUJDUmVnRGVmcy5oCitpbmRleCBiYjg0ZjA4NjNkZTIu LmZkMzdiZDQ2NGYzOSAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21CQ1JlZ0RlZnMuaAor KysrIGIvanMvc3JjL3dhc20vV2FzbUJDUmVnRGVmcy5oCitAQCAtMTE4LDYgKzExOCwxMyBAQCBz dGF0aWMgY29uc3RleHByIFJlZ2lzdGVyIFJhYmFsZHJTY3JhdGNoSTMyID0gQ2FsbFRlbXBSZWcy OworIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXIgUmFiYWxkclNjcmF0Y2hJMzIgPSBDYWxsVGVt cFJlZzI7CisgI2VuZGlmCisgCisrI2lmZGVmIEpTX0NPREVHRU5fUFBDNjQKKysjICBkZWZpbmUg UkFCQUxEUl9TQ1JBVENIX0kzMgorKy8vIFVzZSByMjUgKGNhbGxlZS1zYXZlZCwgbm9uLWFyZywg bm90IHVzZWQgYnkgYW55IHdhc20gaW5mcmFzdHJ1Y3R1cmUpCisrLy8gaW5zdGVhZCBvZiBDYWxs VGVtcFJlZzIgKHIxMCkgd2hpY2ggaXMgSW50QXJnUmVnNy4KKytzdGF0aWMgY29uc3RleHByIFJl Z2lzdGVyIFJhYmFsZHJTY3JhdGNoSTMyID0gcjI1OworKyNlbmRpZgorKworICNpZmRlZiBSQUJB TERSX1NDUkFUQ0hfRjMyX0FMSUFTRVNfRjY0CisgIyAgaWYgIWRlZmluZWQoUkFCQUxEUl9TQ1JB VENIX0YzMikgfHwgIWRlZmluZWQoUkFCQUxEUl9TQ1JBVENIX0Y2NCkKKyAjICAgIGVycm9yICJC YWQgY29uZmlndXJhdGlvbiIKK0BAIC0zODYsOCArMzkzLDkgQEAgc3RydWN0IFNwZWNpZmljUmVn cyB7CisgCisgICBTcGVjaWZpY1JlZ3MoKSA6IGFiaVJldHVyblJlZ0k2NChSZXR1cm5SZWc2NCkg e30KKyB9OworLSNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19D T0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FS TTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCAgXAorKyAgICBkZWZpbmVkKEpT X0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IFwKKysg ICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIHN0cnVjdCBTcGVjaWZpY1JlZ3MgeworICAg Ly8gUmVxdWlyZWQgYnkgZ2NjLgorICAgU3BlY2lmaWNSZWdzKCkge30KK2RpZmYgLS1naXQgYS9q cy9zcmMvd2FzbS9XYXNtQmFzZWxpbmVDb21waWxlLmNwcCBiL2pzL3NyYy93YXNtL1dhc21CYXNl bGluZUNvbXBpbGUuY3BwCitpbmRleCAyYWY3YWQ3ZjU4M2IuLmM1NzE4MGRkMzYyYiAxMDA2NDQK Ky0tLSBhL2pzL3NyYy93YXNtL1dhc21CYXNlbGluZUNvbXBpbGUuY3BwCisrKysgYi9qcy9zcmMv d2FzbS9XYXNtQmFzZWxpbmVDb21waWxlLmNwcAorQEAgLTM3NiwxMSArMzc2LDE1IEBAIHZvaWQg QmFzZUNvbXBpbGVyOjp0YWJsZVN3aXRjaChMYWJlbCogdGhlVGFibGUsIFJlZ0kzMiBzd2l0Y2hW YWx1ZSwKKyAgIG1hc20ubWFfbGRyKERUUkFkZHIoc2NyYXRjaCwgRHRyUmVnSW1tU2hpZnQoc3dp dGNoVmFsdWUsIExTTCwgMikpLCBwYywgT2Zmc2V0LAorICAgICAgICAgICAgICAgQXNzZW1ibGVy OjpBbHdheXMpOworICNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9MT09ORzY0KSB8fCBcCistICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0 KQorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorICAgU2NyYXRjaEkzMiBzY3JhdGNoKCp0aGlzKTsKKyAgIENvZGVMYWJlbCB0YWJs ZUNsOworIAorKyMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIG1hc20ubW92KCZ0 YWJsZUNsLCBzY3JhdGNoKTsKKysjICBlbHNlCisgICBtYXNtLm1hX2xpKHNjcmF0Y2gsICZ0YWJs ZUNsKTsKKysjICBlbmRpZgorIAorICAgdGFibGVDbC50YXJnZXQoKS0+YmluZCh0aGVUYWJsZS0+ b2Zmc2V0KCkpOworICAgbWFzbS5hZGRDb2RlTGFiZWwodGFibGVDbCk7CitAQCAtODk4LDcgKzkw Miw3IEBAIHZvaWQgQmFzZUNvbXBpbGVyOjppbnNlcnRCcmVha2FibGVQb2ludChDYWxsU2l0ZUtp bmQga2luZCkgeworICAgbWFzbS5hcHBlbmQoQ2FsbFNpdGVEZXNjKGl0ZXJfLmxhc3RPcGNvZGVP ZmZzZXQoKSwga2luZCksCisgICAgICAgICAgICAgICBDb2RlT2Zmc2V0KG1hc20uY3VycmVudE9m ZnNldCgpKSk7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp CisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCisgICBTY3JhdGNoUHRyIHNjcmF0Y2goKnRoaXMpOworICAgTGFiZWwgTDsKKyAgIG1h c20ubG9hZFB0cihBZGRyZXNzKEluc3RhbmNlUmVnLCBJbnN0YW5jZTo6b2Zmc2V0T2ZEZWJ1Z1N0 dWIoKSksIHNjcmF0Y2gpOworQEAgLTk3Miw3ICs5NzYsNyBAQCB2b2lkIEJhc2VDb21waWxlcjo6 aW5zZXJ0UGVyRnVuY3Rpb25EZWJ1Z1N0dWIoKSB7CisgICAgIG1hc20ubWFfYngobHIsIEFzc2Vt Ymxlcjo6WmVybyk7CisgICB9CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8 IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19DT0RFR0VO X1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisgICB7CisgICAgIFNjcmF0Y2hQdHIgc2NyYXRjaCgqdGhpcyk7Cisg CitAQCAtMTQwMyw3ICsxNDA3LDcgQEAgdm9pZCBCYXNlQ29tcGlsZXI6OnBvcFN0YWNrUmVzdWx0 cyhBQklSZXN1bHRJdGVyJiBpdGVyLCBTdGFja0hlaWdodCBzdGFja0Jhc2UpIHsKKyAgICAgc3dp dGNoICh2LmtpbmQoKSkgeworICAgICAgIGNhc2UgU3RrOjpDb25zdEkzMjoKKyAjaWYgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwK Ky0gICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdF Tl9SSVNDVjY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICAgICAgICBmci5zdG9y ZUltbWVkaWF0ZVB0clRvU3RhY2sodi5pMzJ2YWxfLCByZXN1bHRIZWlnaHQsIHRlbXApOworICNl bHNlCisgICAgICAgICBmci5zdG9yZUltbWVkaWF0ZVB0clRvU3RhY2sodWludDMyX3Qodi5pMzJ2 YWxfKSwgcmVzdWx0SGVpZ2h0LCB0ZW1wKTsKK0BAIC0xNzIzLDYgKzE3MjcsMTMgQEAgdm9pZCBC YXNlQ29tcGlsZXI6OnBhc3NBcmcoVmFsVHlwZSB0eXBlLCBjb25zdCBTdGsmIGFyZywgRnVuY3Rp b25DYWxsKiBjYWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh cmdMb2Mub2Zmc2V0RnJvbUFyZ0Jhc2UoKSkpOworICAgICAgIH0gZWxzZSB7CisgICAgICAgICBs b2FkSTMyKGFyZywgUmVnSTMyKGFyZ0xvYy5ncHIoKSkpOworKyNpZmRlZiBKU19DT0RFR0VOX1BQ QzY0CisrICAgICAgICAvLyBhZGRpIGNhbiBzaWduLWV4dGVuZCwgd2hpY2ggeWllbGRzIHdyb25n IHZhbHVlcyB3aGVuIHRoZSBDKysKKysgICAgICAgIC8vIGNhbGxlZSBleHBlY3RzIGEgdWludDMy X3QuIENsZWFyIHRoZSB1cHBlciAzMiBiaXRzLgorKyAgICAgICAgaWYgKGNhbGwtPmFiaUtpbmQg PT0gQUJJS2luZDo6U3lzdGVtKSB7CisrICAgICAgICAgIG1hc20uYXNfcmxkaWNsKGFyZ0xvYy5n cHIoKSwgYXJnTG9jLmdwcigpLCAwLCAzMik7CisrICAgICAgICB9CisrI2VuZGlmCisgICAgICAg fQorICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjM3Miw5ICsyMzgzLDEwIEBAIHZvaWQgQmFz ZUNvbXBpbGVyOjpmaW5pc2hUcnlOb3RlKHNpemVfdCB0cnlOb3RlSW5kZXgpIHsKKyBSZWdJMzIg QmFzZUNvbXBpbGVyOjpuZWVkUm90YXRlNjRUZW1wKCkgeworICNpZiBkZWZpbmVkKEpTX0NPREVH RU5fWDg2KQorICAgcmV0dXJuIG5lZWRJMzIoKTsKKy0jZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f WDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICBcCistICAgIGRlZmluZWQoSlNf Q09ERUdFTl9BUk02NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX01JUFM2NCkgfHwgXAorLSAgICBk ZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQp CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FS TSkgfHwgICAgICAgXAorKyAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAgIFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05H NjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBcCisrICAgIGRlZmluZWQoSlNf Q09ERUdFTl9QUEM2NCkKKyAgIHJldHVybiBSZWdJMzI6OkludmFsaWQoKTsKKyAjZWxzZQorICAg TU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIgcGxhdGZvcm0gaG9vazogbmVlZFJvdGF0ZTY0VGVtcCIp OworQEAgLTI0MzMsNiArMjQ0NSw4IEBAIHZvaWQgQmFzZUNvbXBpbGVyOjpwb3BBbmRBbGxvY2F0 ZUZvck11bEk2NChSZWdJNjQqIHIwLCBSZWdJNjQqIHIxLAorICAgcG9wMnhJNjQocjAsIHIxKTsK KyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkKKyAgIHBvcDJ4STY0KHIwLCByMSk7 CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgcG9wMnhJNjQocjAsIHIxKTsK KyAjZWxzZQorICAgTU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIgcG9ydGluZyBpbnRlcmZhY2U6IHBv cEFuZEFsbG9jYXRlRm9yTXVsSTY0Iik7CisgI2VuZGlmCitAQCAtMjg2Niw2ICsyODgwLDkgQEAg c3RhdGljIFJlZ0kzMiBQb3BjbnRUZW1wKEJhc2VDb21waWxlciYgYmMpIHsKKyAgICAgZGVmaW5l ZChKU19DT0RFR0VOX01JUFM2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwK KyAgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgICByZXR1cm4gYmMubmVlZEkzMigp OworKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgIC8vIFBQQzY0IGhhcyBuYXRp dmUgcG9wY250ZC9wb3BjbnR3OyBubyB0ZW1wIHJlZ2lzdGVyIG5lZWRlZC4KKysgIHJldHVybiBS ZWdJMzI6OkludmFsaWQoKTsKKyAjZWxzZQorICAgTU9aX0NSQVNIKCJCYXNlQ29tcGlsZXIgcGxh dGZvcm0gaG9vazogUG9wY250VGVtcCIpOworICNlbmRpZgorQEAgLTkzNjIsNiArOTM3OSwxMSBA QCBzdGF0aWMgdm9pZCBNdWxJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywg UmVnVjEyOCByc2QsCisgICAgICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wMSwgUmVnVjEy OCB0ZW1wMikgeworICAgbWFzbS5tdWxJbnQ2NHgyKHJzZCwgcnMsIHJzZCwgdGVtcDEsIHRlbXAy KTsKKyB9CisrIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrc3RhdGljIHZvaWQg TXVsSTY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkLAor KyAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggdGVtcDEsIFJlZ1YxMjggdGVtcDIpIHsKKysg IG1hc20ubXVsSW50NjR4Mihyc2QsIHJzLCByc2QsIHRlbXAxLCB0ZW1wMik7CisrfQorICMgIGVu ZGlmCisgCisgc3RhdGljIHZvaWQgTXVsRjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1Yx MjggcnMsIFJlZ1YxMjggcnNkKSB7CitAQCAtOTM3Niw3ICs5Mzk4LDggQEAgc3RhdGljIHZvaWQg RGl2RjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkKSB7 CisgICBtYXNtLmRpdkZsb2F0NjR4Mihyc2QsIHJzLCByc2QpOworIH0KKyAKKy0jICBpZiBkZWZp bmVkKEpTX0NPREVHRU5fWDg2KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KQorKyMgIGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9YODYpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9YNjQpIHx8IFwKKysg ICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisgc3RhdGljIHZvaWQgTWluRjMyeDQoTWFj cm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ1YxMjggcnNkLAorICAgICAgICAgICAg ICAgICAgICAgIFJlZ1YxMjggdGVtcDEsIFJlZ1YxMjggdGVtcDIpIHsKKyAgIG1hc20ubWluRmxv YXQzMng0KHJzZCwgcnMsIHJzZCwgdGVtcDEsIHRlbXAyKTsKK0BAIC05Mzk3LDYgKzk0MjAsMjIg QEAgc3RhdGljIHZvaWQgTWF4RjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMs IFJlZ1YxMjggcnNkLAorICAgbWFzbS5tYXhGbG9hdDY0eDIocnNkLCBycywgcnNkLCB0ZW1wMSwg dGVtcDIpOworIH0KKyAKKysjICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrLy8gUFBD NjQ6IHVzZSBub24tUmhzRGVzdE9wIGNvbnZlbnRpb24gKGZpcnN0PXJocywgc2Vjb25kPWxoc0Rl c3QpLAorKy8vIG1hdGNoaW5nIHRoZSBwc2V1ZG9NaW4vTWF4IGZ1bmN0aW9uIHNpZ25hdHVyZS4K KytzdGF0aWMgdm9pZCBQTWluRjMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMs IFJlZ1YxMjggcnNkKSB7CisrICBtYXNtLnBzZXVkb01pbkZsb2F0MzJ4NChycywgcnNkKTsKKyt9 Cisrc3RhdGljIHZvaWQgUE1pbkY2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJz LCBSZWdWMTI4IHJzZCkgeworKyAgbWFzbS5wc2V1ZG9NaW5GbG9hdDY0eDIocnMsIHJzZCk7Cisr fQorK3N0YXRpYyB2b2lkIFBNYXhGMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBy cywgUmVnVjEyOCByc2QpIHsKKysgIG1hc20ucHNldWRvTWF4RmxvYXQzMng0KHJzLCByc2QpOwor K30KKytzdGF0aWMgdm9pZCBQTWF4RjY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjgg cnMsIFJlZ1YxMjggcnNkKSB7CisrICBtYXNtLnBzZXVkb01heEZsb2F0NjR4MihycywgcnNkKTsK Kyt9CisrIyAgZWxzZQorIHN0YXRpYyB2b2lkIFBNaW5GMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFz bSwgUmVnVjEyOCByc2QsIFJlZ1YxMjggcnMsCisgICAgICAgICAgICAgICAgICAgICAgIFJoc0Rl c3RPcCkgeworICAgbWFzbS5wc2V1ZG9NaW5GbG9hdDMyeDQocnNkLCBycyk7CitAQCAtOTQxNiw2 ICs5NDU1LDcgQEAgc3RhdGljIHZvaWQgUE1heEY2NHgyKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBS ZWdWMTI4IHJzZCwgUmVnVjEyOCBycywKKyAgICAgICAgICAgICAgICAgICAgICAgUmhzRGVzdE9w KSB7CisgICBtYXNtLnBzZXVkb01heEZsb2F0NjR4Mihyc2QsIHJzKTsKKyB9CisrIyAgZW5kaWYK KyAjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKyBzdGF0aWMgdm9pZCBNaW5GMzJ4 NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnVjEyOCByc2QpIHsKKyAgIG1h c20ubWluRmxvYXQzMng0KHJzLCByc2QpOworQEAgLTk4MDYsNiArOTg0Niw2OCBAQCBzdGF0aWMg dm9pZCBTaGlmdFJpZ2h0STY0eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVn VjEyOCByc2QsCisgICBtYXNtLnJpZ2h0U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKKyB9 CisgCisrc3RhdGljIHZvaWQgU2hpZnRSaWdodFVJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwg UmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z0kzMiB0ZW1wKSB7CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6Okk2NHgyU2hyVSwgcnMs IHRlbXApOworKyAgbWFzbS51bnNpZ25lZFJpZ2h0U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNk KTsKKyt9CisrIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBDNjQpCisrLy8gUFBDNjQ6IHNh bWUgYXMgQVJNNjQgcGF0dGVybiAoc2hpZnQgYW1vdW50IGluIEdQUiwgcmVzdWx0IGluIHZlY3Rv ciByZWcpCisrc3RhdGljIHZvaWQgU2hpZnRMZWZ0STh4MTYoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVn STMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STh4MTZTaGwsIHJzLCB0 ZW1wKTsKKysgIG1hc20ubGVmdFNoaWZ0SW50OHgxNihyc2QsIHRlbXAsIHJzZCk7CisrfQorK3N0 YXRpYyB2b2lkIFNoaWZ0TGVmdEkxNng4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdJMzIgcnMs IFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kzMiB0ZW1wKSB7 CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkxNng4U2hsLCBycywgdGVtcCk7CisrICBt YXNtLmxlZnRTaGlmdEludDE2eDgocnNkLCB0ZW1wLCByc2QpOworK30KKytzdGF0aWMgdm9pZCBT aGlmdExlZnRJMzJ4NChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJz ZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRP cE1hc2sobWFzbSwgU2ltZE9wOjpJMzJ4NFNobCwgcnMsIHRlbXApOworKyAgbWFzbS5sZWZ0U2hp ZnRJbnQzMng0KHJzZCwgdGVtcCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRMZWZ0STY0 eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20s IFNpbWRPcDo6STY0eDJTaGwsIHJzLCB0ZW1wKTsKKysgIG1hc20ubGVmdFNoaWZ0SW50NjR4Mihy c2QsIHRlbXAsIHJzZCk7CisrfQorK3N0YXRpYyB2b2lkIFNoaWZ0UmlnaHRJOHgxNihNYWNyb0Fz c2VtYmxlciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6 STh4MTZTaHJTLCBycywgdGVtcCk7CisrICBtYXNtLnJpZ2h0U2hpZnRJbnQ4eDE2KHJzZCwgdGVt cCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRSaWdodFVJOHgxNihNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlZ0kzMiB0ZW1wKSB7CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6Okk4eDE2 U2hyVSwgcnMsIHRlbXApOworKyAgbWFzbS51bnNpZ25lZFJpZ2h0U2hpZnRJbnQ4eDE2KHJzZCwg dGVtcCwgcnNkKTsKKyt9Cisrc3RhdGljIHZvaWQgU2hpZnRSaWdodEkxNng4KE1hY3JvQXNzZW1i bGVyJiBtYXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBSZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJMTZ4 OFNoclMsIHJzLCB0ZW1wKTsKKysgIG1hc20ucmlnaHRTaGlmdEludDE2eDgocnNkLCB0ZW1wLCBy c2QpOworK30KKytzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0VUkxNng4KE1hY3JvQXNzZW1ibGVyJiBt YXNtLCBSZWdJMzIgcnMsIFJlZ1YxMjggcnNkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STE2eDhTaHJV LCBycywgdGVtcCk7CisrICBtYXNtLnVuc2lnbmVkUmlnaHRTaGlmdEludDE2eDgocnNkLCB0ZW1w LCByc2QpOworK30KKytzdGF0aWMgdm9pZCBTaGlmdFJpZ2h0STMyeDQoTWFjcm9Bc3NlbWJsZXIm IG1hc20sIFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJlZ0kzMiB0ZW1wKSB7CisrICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6OkkzMng0U2hy UywgcnMsIHRlbXApOworKyAgbWFzbS5yaWdodFNoaWZ0SW50MzJ4NChyc2QsIHRlbXAsIHJzZCk7 CisrfQorK3N0YXRpYyB2b2lkIFNoaWZ0UmlnaHRVSTMyeDQoTWFjcm9Bc3NlbWJsZXImIG1hc20s IFJlZ0kzMiBycywgUmVnVjEyOCByc2QsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS ZWdJMzIgdGVtcCkgeworKyAgU2hpZnRPcE1hc2sobWFzbSwgU2ltZE9wOjpJMzJ4NFNoclUsIHJz LCB0ZW1wKTsKKysgIG1hc20udW5zaWduZWRSaWdodFNoaWZ0SW50MzJ4NChyc2QsIHRlbXAsIHJz ZCk7CisrfQorK3N0YXRpYyB2b2lkIFNoaWZ0UmlnaHRJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFz bSwgUmVnSTMyIHJzLCBSZWdWMTI4IHJzZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg UmVnSTMyIHRlbXApIHsKKysgIFNoaWZ0T3BNYXNrKG1hc20sIFNpbWRPcDo6STY0eDJTaHJTLCBy cywgdGVtcCk7CisrICBtYXNtLnJpZ2h0U2hpZnRJbnQ2NHgyKHJzZCwgdGVtcCwgcnNkKTsKKyt9 Cisgc3RhdGljIHZvaWQgU2hpZnRSaWdodFVJNjR4MihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn STMyIHJzLCBSZWdWMTI4IHJzZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ0kz MiB0ZW1wKSB7CisgICBTaGlmdE9wTWFzayhtYXNtLCBTaW1kT3A6Okk2NHgyU2hyVSwgcnMsIHRl bXApOworQEAgLTEwMTA3LDYgKzEwMjA5LDIzIEBAIHN0YXRpYyB2b2lkIEJpdG1hc2tJMzJ4NChN YWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAorICAgbWFzbS5iaXRt YXNrSW50MzJ4NChycywgcmQsIHRlbXApOworIH0KKyAKKytzdGF0aWMgdm9pZCBCaXRtYXNrSTY0 eDIoTWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ0kzMiByZCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wKSB7CisrICBtYXNtLmJpdG1hc2tJbnQ2NHgy KHJzLCByZCwgdGVtcCk7CisrfQorKyMgIGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQor K3N0YXRpYyB2b2lkIEJpdG1hc2tJOHgxNihNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVnVjEyOCBy cywgUmVnSTMyIHJkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdWMTI4IHRlbXApIHsK KysgIG1hc20uYml0bWFza0ludDh4MTYocnMsIHJkLCB0ZW1wKTsKKyt9Cisrc3RhdGljIHZvaWQg Qml0bWFza0kxNng4KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJzLCBSZWdJMzIgcmQs CisrICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ1YxMjggdGVtcCkgeworKyAgbWFzbS5iaXRt YXNrSW50MTZ4OChycywgcmQsIHRlbXApOworK30KKytzdGF0aWMgdm9pZCBCaXRtYXNrSTMyeDQo TWFjcm9Bc3NlbWJsZXImIG1hc20sIFJlZ1YxMjggcnMsIFJlZ0kzMiByZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgUmVnVjEyOCB0ZW1wKSB7CisrICBtYXNtLmJpdG1hc2tJbnQzMng0KHJz LCByZCwgdGVtcCk7CisrfQorIHN0YXRpYyB2b2lkIEJpdG1hc2tJNjR4MihNYWNyb0Fzc2VtYmxl ciYgbWFzbSwgUmVnVjEyOCBycywgUmVnSTMyIHJkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBSZWdWMTI4IHRlbXApIHsKKyAgIG1hc20uYml0bWFza0ludDY0eDIocnMsIHJkLCB0ZW1wKTsK K0BAIC0xMDE4Miw2ICsxMDMwMSwxMyBAQCBzdGF0aWMgdm9pZCBCaXRzZWxlY3RWMTI4KE1hY3Jv QXNzZW1ibGVyJiBtYXNtLCBSZWdWMTI4IHJocywgUmVnVjEyOCBjb250cm9sLAorICAgbWFzbS5i aXR3aXNlU2VsZWN0U2ltZDEyOChsaHNEZXN0LCByaHMsIHRlbXApOworICAgbWFzbS5tb3ZlU2lt ZDEyOCh0ZW1wLCBsaHNEZXN0KTsKKyB9CisrIyAgZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCisrc3RhdGljIHZvaWQgQml0c2VsZWN0VjEyOChNYWNyb0Fzc2VtYmxlciYgbWFzbSwgUmVn VjEyOCByaHMsIFJlZ1YxMjggY29udHJvbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFJl Z1YxMjggbGhzRGVzdCwgUmVnVjEyOCB0ZW1wKSB7CisrICBtYXNtLm1vdmVTaW1kMTI4KGNvbnRy b2wsIHRlbXApOworKyAgbWFzbS5iaXR3aXNlU2VsZWN0U2ltZDEyOChsaHNEZXN0LCByaHMsIHRl bXApOworKyAgbWFzbS5tb3ZlU2ltZDEyOCh0ZW1wLCBsaHNEZXN0KTsKKyt9CisgIyAgZW5kaWYK KyAKKyAjICBpZmRlZiBFTkFCTEVfV0FTTV9SRUxBWEVEX1NJTUQKK0BAIC0xMDI1Nyw3ICsxMDM4 Myw3IEBAIHZvaWQgQmFzZUNvbXBpbGVyOjplbWl0RG90STh4MTZJN3gxNkFkZFMoKSB7CisgICBS ZWdWMTI4IHJzZCA9IHBvcFYxMjgoKTsKKyAgIFJlZ1YxMjggcnMwLCByczE7CisgICBwb3AyeFYx MjgoJnJzMCwgJnJzMSk7CistIyAgICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCisrIyAg ICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKKyAgIFJlZ1YxMjggdGVtcCA9IG5lZWRWMTI4KCk7CisgICBtYXNtLmRvdEludDh4MTZJbnQ3 eDE2VGhlbkFkZChyczAsIHJzMSwgcnNkLCB0ZW1wKTsKKyAgIGZyZWVWMTI4KHRlbXApOworQEAg LTEwNDYzLDcgKzEwNTg5LDcgQEAgYm9vbCBCYXNlQ29tcGlsZXI6OmVtaXRWZWN0b3JMYW5lU2Vs ZWN0KCkgeworICAgZnJlZVYxMjgobGhzKTsKKyAgIGZyZWVWMTI4KG1hc2spOworICAgcHVzaFYx MjgocmhzRGVzdCk7CistIyAgICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKysjICAg IGVsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUFBD NjQpCisgICBSZWdWMTI4IG1hc2tEZXN0ID0gcG9wVjEyOCgpOworICAgUmVnVjEyOCByaHMgPSBw b3BWMTI4KCk7CisgICBSZWdWMTI4IGxocyA9IHBvcFYxMjgoKTsKK0BAIC0xMjYyOCw3ICsxMjc1 NCw3IEBAIGJvb2wganM6Ondhc206OkJhc2VsaW5lUGxhdGZvcm1TdXBwb3J0KCkgeworICNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAgICAg ICAgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f QVJNNjQpIHx8ICAgICAgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklT Q1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKKyAgIHJldHVybiB0cnVlOworICNlbHNlCisgICByZXR1cm4gZmFsc2U7Citk aWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaCBiL2pzL3NyYy93 YXNtL1dhc21Db2RlZ2VuQ29uc3RhbnRzLmgKK2luZGV4IDljMTBkMzA3YWU2Zi4uZTI1MzMyYjU0 NjRlIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaAorKysr IGIvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5Db25zdGFudHMuaAorQEAgLTQzLDcgKzQzLDggQEAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIEludGVycEZhaWxJbnN0YW5jZVJlZyA9IDB4YmFkOworIC8v IFRoZSBmb2xsb3dpbmcgdGhyZXNob2xkcyB3ZXJlIGRlcml2ZWQgZnJvbSBhIG1pY3JvYmVuY2ht YXJrLiBJZiB3ZSBiZWdpbiB0bworIC8vIHNoaXAgdGhpcyBvcHRpbWl6YXRpb24gZm9yIG1vcmUg cGxhdGZvcm1zLCB3ZSB3aWxsIG5lZWQgdG8gZXh0ZW5kIHRoaXMgbGlzdC4KKyAKKy0jaWYgZGVm aW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorKyNpZiBk ZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpIHx8IFwK KysgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorIHN0YXRpYyBjb25zdCB1aW50MzJfdCBN YXhJbmxpbmVNZW1vcnlDb3B5TGVuZ3RoID0gNjQ7Cisgc3RhdGljIGNvbnN0IHVpbnQzMl90IE1h eElubGluZU1lbW9yeUZpbGxMZW5ndGggPSA2NDsKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f WDg2KQorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21Db2RlZ2VuVHlwZXMuY3BwIGIvanMv c3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5jcHAKK2luZGV4IDhiOWYzMjYzOWVhMy4uZTkwNmM0 YWZlY2MzIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbUNvZGVnZW5UeXBlcy5jcHAKKysr KyBiL2pzL3NyYy93YXNtL1dhc21Db2RlZ2VuVHlwZXMuY3BwCitAQCAtMTQ0LDE0ICsxNDQsMTUg QEAgdm9pZCBUcmFwU2l0ZXNGb3JLaW5kOjpjaGVja0ludmFyaWFudHMoY29uc3QgdWludDhfdCog Y29kZUJhc2UpIGNvbnN0IHsKKyAgICAgbGFzdCA9IHBjT2Zmc2V0OworICAgfQorIAorLSMgIGlm IChkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fWDg2KSB8fCAg IFwKKy0gICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVH RU5fQVJNKSB8fCBcCistICAgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9MT09ORzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSkKKysjICBpZiAoZGVmaW5lZChKU19DT0RFR0VOX1g2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX1g4NikgfHwgICAgICAgIFwKKysgICAgICAgZGVmaW5lZChK U19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCAgICAgIFwKKysg ICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9N SVBTNjQpIHx8IFwKKysgICAgICAgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KSkKKyAgIC8vIENo ZWNrIHRoYXQgZWFjaCB0cmFwc2l0ZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBwbGF1c2libGUgaW5z dHJ1Y3Rpb24uICBUaGUKKyAgIC8vIHJlcXVpcmVkIGluc3RydWN0aW9uIGtpbmQgZGVwZW5kcyBv biB0aGUgdHJhcHNpdGUga2luZC4KKyAgIC8vCistICAvLyBOT1RFOiBjdXJyZW50bHkgZW5hYmxl ZCBvbiB4ODZfezMyLDY0fSwgYXJtezMyLDY0fSwgbG9vbmdzb242NCBhbmQgbWlwczY0LgorLSAg Ly8gSWRlYWxseSBpdCBzaG91bGQgYmUgZXh0ZW5kZWQgdG8gcmlzY3Y2NCB0b28uCisrICAvLyBO T1RFOiBjdXJyZW50bHkgZW5hYmxlZCBvbiB4ODZfezMyLDY0fSwgYXJtezMyLDY0fSwgbG9vbmdz b242NCwgbWlwczY0LAorKyAgLy8gYW5kIHBwYzY0LiBJZGVhbGx5IGl0IHNob3VsZCBiZSBleHRl bmRlZCB0byByaXNjdjY0IHRvby4KKyAgIC8vCisgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg bGVuZ3RoKCk7IGkrKykgeworICAgICB1aW50MzJfdCBwY09mZnNldCA9IHBjT2Zmc2V0c19baV07 CitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbUNvbXBpbGUuY3BwIGIvanMvc3JjL3dhc20v V2FzbUNvbXBpbGUuY3BwCitpbmRleCAwNTFjNjBlYmFhNTUuLjg5NDQ3YWE2NjhmZiAxMDA2NDQK Ky0tLSBhL2pzL3NyYy93YXNtL1dhc21Db21waWxlLmNwcAorKysrIGIvanMvc3JjL3dhc20vV2Fz bUNvbXBpbGUuY3BwCitAQCAtNzEsOCArNzEsOSBAQCB1aW50MzJfdCB3YXNtOjpPYnNlcnZlZENQ VUZlYXR1cmVzKCkgeworICAgICBBUk02NCA9IDB4NiwKKyAgICAgTE9PTkc2NCA9IDB4NywKKyAg ICAgUklTQ1Y2NCA9IDB4OCwKKysgICAgUFBDNjQgPSAweDksCisgCistICAgIExBU1QgPSBSSVND VjY0LAorKyAgICBMQVNUID0gUFBDNjQsCisgICAgIEFSQ0hfQklUUyA9IDQKKyAgIH07CisgCitA QCAtMTAxLDYgKzEwMiw5IEBAIHVpbnQzMl90IHdhc206Ok9ic2VydmVkQ1BVRmVhdHVyZXMoKSB7 CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpCisgICBNT1pfQVNTRVJUKGppdDo6 R2V0UklTQ1Y2NEZsYWdzKCkgPD0gKFVJTlQzMl9NQVggPj4gQVJDSF9CSVRTKSk7CisgICByZXR1 cm4gUklTQ1Y2NCB8IChqaXQ6OkdldFJJU0NWNjRGbGFncygpIDw8IEFSQ0hfQklUUyk7CisrI2Vs aWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgTU9aX0FTU0VSVChqaXQ6OkdldFBQQzY0 RmxhZ3MoKSA8PSAoVUlOVDMyX01BWCA+PiBBUkNIX0JJVFMpKTsKKysgIHJldHVybiBQUEM2NCB8 IChqaXQ6OkdldFBQQzY0RmxhZ3MoKSA8PCBBUkNIX0JJVFMpOworICNlbGlmIGRlZmluZWQoSlNf Q09ERUdFTl9OT05FKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fV0FTTTMyKQorICAgcmV0dXJuIDA7 CisgI2Vsc2UKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtRnJhbWVJdGVyLmNwcCBiL2pz L3NyYy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwCitpbmRleCBiM2IyNjRiYzYyNWEuLmI1NDBhY2Y5 YTA1ZCAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21GcmFtZUl0ZXIuY3BwCisrKysgYi9q cy9zcmMvd2FzbS9XYXNtRnJhbWVJdGVyLmNwcAorQEAgLTYyMiw2ICs2MjIsMTkgQEAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIFB1c2hlZEZQID0gMTY7Cisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFNl dEZQID0gMjA7Cisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBvcHBlZEZQID0gNDsKKyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgUG9wcGVkRlBKaXRFbnRyeSA9IDg7CisrI2VsaWYgZGVmaW5lZChKU19D T0RFR0VOX1BQQzY0KQorKy8vIHB1c2hSZXR1cm5BZGRyZXNzID0gbWZscig0KSArIHN0ZHUoNCkg PSA4IGJ5dGVzLgorKy8vIHB1c2goRlApID0gc3RkdSg0KSA9IDQgYnl0ZXMgKFBQQzY0IHN0ZHUg aXMgYSBzaW5nbGUgRFMtZm9ybSBpbnN0cnVjdGlvbikuCisrLy8gbW92ZVN0YWNrUHRyVG8gPSBt cig0KSA9IDQgYnl0ZXMuCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIFB1c2hlZFJldEFkZHIgPSA4 OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQdXNoZWRGUCA9IDEyOworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBTZXRGUCA9IDE2OworKy8vIENhbGxhYmxlICsgaml0LWVudHJ5IGVwaWxvZ3VlcyBi ZXR3ZWVuIHBvcHBlZEZQIGFuZCAqcmV0IGFyZToKKysvLyAgIG10bHIgcjA7IGFkZGkgc3AsIHNw LCAxNiAgKHR3byA0LWJ5dGUgaW5zdHJ1Y3Rpb25zIOKAlCA4IGJ5dGVzKS4KKysvLyBtdGxyIG11 c3QgY29tZSBiZWZvcmUgYWRkaSBzbyBMUiBob2xkcyB0aGUgY2FsbGVyJ3MgUkEgdGhyb3VnaG91 dCB0aGUKKysvLyBwb3N0LXBvcHBlZEZQIHdpbmRvdyAoc2luZ2xlLXN0ZXAgcHJvZmlsaW5nIGZp cmVzIGV2ZXJ5IGluc3RydWN0aW9uKS4KKytzdGF0aWMgY29uc3QgdW5zaWduZWQgUG9wcGVkRlAg PSA4OworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQb3BwZWRGUEppdEVudHJ5ID0gODsKKyAjZWxp ZiBkZWZpbmVkKEpTX0NPREVHRU5fTk9ORSkgfHwgZGVmaW5lZChKU19DT0RFR0VOX1dBU00zMikK KyAvLyBTeW50aGV0aWMgdmFsdWVzIHRvIHNhdGlzZnkgYXNzZXJ0cyBhbmQgYXZvaWQgY29tcGls ZXIgd2FybmluZ3MuCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFB1c2hlZFJldEFkZHIgPSAwOwor QEAgLTcxMCw2ICs3MjMsMTcgQEAgc3RhdGljIHZvaWQgR2VuZXJhdGVDYWxsYWJsZVByb2xvZ3Vl KE1hY3JvQXNzZW1ibGVyJiBtYXNtLCB1aW50MzJfdCogZW50cnkpIHsKKyAgICAgbWFzbS5tb3Zl U3RhY2tQdHJUbyhGcmFtZVBvaW50ZXIpOworICAgICBNT1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgp LCBTZXRGUCA9PSBtYXNtLmN1cnJlbnRPZmZzZXQoKSAtICplbnRyeSk7CisgICB9CisrI2VsaWYg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgeworKyAgICAqZW50cnkgPSBtYXNtLmN1cnJl bnRPZmZzZXQoKTsKKysKKysgICAgbWFzbS5wdXNoUmV0dXJuQWRkcmVzcygpOworKyAgICBNT1pf QVNTRVJUX0lGKCFtYXNtLm9vbSgpLCBQdXNoZWRSZXRBZGRyID09IG1hc20uY3VycmVudE9mZnNl dCgpIC0gKmVudHJ5KTsKKysgICAgbWFzbS5wdXNoKEZyYW1lUG9pbnRlcik7CisrICAgIE1PWl9B U1NFUlRfSUYoIW1hc20ub29tKCksIFB1c2hlZEZQID09IG1hc20uY3VycmVudE9mZnNldCgpIC0g KmVudHJ5KTsKKysgICAgbWFzbS5tb3ZlU3RhY2tQdHJUbyhGcmFtZVBvaW50ZXIpOworKyAgICBN T1pfQVNTRVJUX0lGKCFtYXNtLm9vbSgpLCBTZXRGUCA9PSBtYXNtLmN1cnJlbnRPZmZzZXQoKSAt ICplbnRyeSk7CisrICB9CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KQorICAgewor ICAgICAvLyBXZSBkbyBub3QgdXNlIHRoZSBQc2V1ZG9TdGFja1BvaW50ZXIuICBIb3dldmVyLCB3 ZSBtYXkgYmUgY2FsbGVkIGluIGEKK0BAIC04MDMsNiArODI3LDM4IEBAIHN0YXRpYyB2b2lkIEdl bmVyYXRlQ2FsbGFibGVFcGlsb2d1ZShNYWNyb0Fzc2VtYmxlciYgbWFzbSwgdW5zaWduZWQgZnJh bWVQdXNoZWQsCisgICAgIG1hc20uamFscih6ZXJvLCByYSwgMCk7CisgICAgIG1hc20ubm9wKCk7 CisgICB9CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgLy8gTG9hZCBSQSBh bmQgRlAgZnJvbSB0aGUgRnJhbWUgd2hpbGUgaXQncyBzdGlsbCBvbiB0aGUgc3RhY2suCisrICAv LyBVc2luZyByMCAoanM6OmppdDo6cjApIGZvciBSQSBpcyBzYWZlOiBpdCdzIHZvbGF0aWxlLCB1 c2VkIGFzCisrICAvLyBSVCAobm90IGJhc2UpLCBhbmQgd2UncmUgaW4gYW4gZXBpbG9ndWUgd2hl cmUgaXQncyBub3QgbGl2ZS4KKysgIG1hc20ubG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwg RnJhbWU6OnJldHVybkFkZHJlc3NPZmZzZXQoKSksCisrICAgICAgICAgICAgICAganM6OmppdDo6 cjApOworKyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBGcmFtZTo6Y2FsbGVy RlBPZmZzZXQoKSksIEZyYW1lUG9pbnRlcik7CisrCisrICAvLyBGZW5jZSB0aGUgcG9vbCBCRUZP UkUgY2FwdHVyaW5nIHBvcHBlZEZQLiBQb3BwZWRGUCBpcyBhIHN0YXRpYyA4CisrICAvLyAobXRs ciArIGFkZGkpOyBlbnRlck5vUG9vbCBpdHNlbGYgY2FuIGVtaXQgaW5zZXJ0Tm9wRmlsbCgpIGFu ZCBhCisrICAvLyBwcmVlbXB0aXZlIGZpbmlzaFBvb2woKSBhdCBpdHMgdG9wIGVkZ2UsIHNvIGFu eSBsZWFkaW5nIGluc2VydGlvbnMKKysgIC8vIG11c3QgbGFuZCBiZWZvcmUgcG9wcGVkRlAg4oCU IG5vdCBiZXR3ZWVuIHBvcHBlZEZQIGFuZCAqcmV0LiBBIHBvb2wKKysgIC8vIGZsdXNoIGluc2lk ZSB0aGUgMi1pbnNuIHdpbmRvdyB3b3VsZCBvdGhlcndpc2UgZXh0ZW5kICpyZXQgLSBwb3BwZWRG UAorKyAgLy8gYW5kIHRyaXAgdGhlIHBvc3QtY29uZGl0aW9uIGFzc2VydGlvbiBiZWxvdy4gUDkg cm91dGVzIEZQIGNvbnN0YW50cworKyAgLy8gdGhyb3VnaCB0aGUgcG9vbCBzbyBmbHVzaGVzIGFy ZSBtb3JlIGZyZXF1ZW50IHRoYW4gb24gUDggKHRoZQorKyAgLy8gYXNzZXJ0aW9uIHdhcyBoaXN0 b3JpY2FsbHkgc2lsZW50IG9uIFA4IGJ1dCByZXByb2R1Y2libGUgb24gUDkgZGJnb3B0KS4KKysg IG1hc20uZW50ZXJOb1Bvb2woMik7CisrICBwb3BwZWRGUCA9IG1hc20uY3VycmVudE9mZnNldCgp OworKworKyAgLy8gTW92ZSBSQSBpbnRvIExSIEJFRk9SRSBwb3BwaW5nIHRoZSBGcmFtZS4gSWYg dGhlIG9yZGVyIHdlcmUgYWRkaS9tdGxyLAorKyAgLy8gc2luZ2xlLXN0ZXAgcHJvZmlsaW5nIGZp cmluZyBhdCB0aGUgbXRsciBpbnN0cnVjdGlvbiB3b3VsZCBzZWU6IHNwCisrICAvLyBhbHJlYWR5 IG1vdmVkIChzbyBzYXZlZCBSQSBhdCBzcFs4XSBpcyBnb25lKSwgYWRkaSBhbHJlYWR5IGV4ZWN1 dGVkLAorKyAgLy8gYW5kIExSIHN0aWxsIGhvbGRpbmcgdGhlIGFkZHJlc3MgcmlnaHQgYWZ0ZXIg dGhlIGZ1bmN0aW9uJ3MgbGFzdCBgYmxgCisrICAvLyAoaS5lLiBpbnNpZGUgdGhpcyBmdW5jdGlv biwgbm90IHRoZSBjYWxsZXIncyBSQSkuIFdpdGggbXRsciBmaXJzdCwKKysgIC8vIHRoZSBlbnRp cmUgcG9zdC1wb3BwZWRGUCB3aW5kb3cgaGFzIExSID09IGNhbGxlcidzIFJBIGF2YWlsYWJsZQor KyAgLy8gZWl0aGVyIHZpYSBzcFs4XSAocHJlLWFkZGkpIG9yIHJlZ2lzdGVycy5sciAocG9zdC1t dGxyKS4KKysgIG1hc20ueHNfbXRscihqczo6aml0OjpyMCk7CisrICBtYXNtLmFkZFRvU3RhY2tQ dHIoSW1tMzIoc2l6ZW9mKEZyYW1lKSkpOworKyAgKnJldCA9IG1hc20uY3VycmVudE9mZnNldCgp OworKyAgbWFzbS5sZWF2ZU5vUG9vbCgpOworKyAgbWFzbS5hc19ibHIoKTsKKysKKyAjZWxpZiBk ZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCisgCisgICAvLyBTZWUgY29tbWVudCBhdCBlcXVpdmFs ZW50IHBsYWNlIGluIHxHZW5lcmF0ZUNhbGxhYmxlUHJvbG9ndWV8IGFib3ZlLgorQEAgLTE0ODMs NiArMTUzOSw5IEBAIHZvaWQgd2FzbTo6R2VuZXJhdGVKaXRFbnRyeVByb2xvZ3VlKE1hY3JvQXNz ZW1ibGVyJiBtYXNtLAorICAgICBCbG9ja1RyYW1wb2xpbmVQb29sU2NvcGUgYmxvY2tfdHJhbXBv bGluZV9wb29sKCZtYXNtLCAxMCk7CisgICAgIG9mZnNldHMtPmJlZ2luID0gbWFzbS5jdXJyZW50 T2Zmc2V0KCk7CisgICAgIG1hc20ucHVzaChyYSk7CisrI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X1BQQzY0KQorKyAgICBvZmZzZXRzLT5iZWdpbiA9IG1hc20uY3VycmVudE9mZnNldCgpOworKyAg ICBtYXNtLnB1c2hSZXR1cm5BZGRyZXNzKCk7CisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VOX0FS TTY0KQorICAgICB7CisgICAgICAgQXV0b0ZvcmJpZFBvb2xzQW5kTm9wcyBhZnAoJm1hc20sCitA QCAtMTUzNiw2ICsxNTk1LDIwIEBAIHZvaWQgd2FzbTo6R2VuZXJhdGVKaXRFbnRyeUVwaWxvZ3Vl KE1hY3JvQXNzZW1ibGVyJiBtYXNtLAorICAgICBtYXNtLlJldChBUk1SZWdpc3RlcihsciwgNjQp KTsKKyAgICAgbWFzbS5zZXRGcmFtZVB1c2hlZCgwKTsKKyAgIH0KKysjZWxpZiBkZWZpbmVkKEpT X0NPREVHRU5fUFBDNjQpCisrICAvLyBMb2FkIFJBIGFuZCBGUCBmcm9tIHRoZSBmcmFtZSB3aGls ZSBpdCdzIHN0aWxsIG9uIHRoZSBzdGFjaywgdGhlbgorKyAgLy8gcmVzdG9yZSBMUiwgcG9wIHRo ZSBmcmFtZSwgYW5kIHJldHVybi4gbXRsciBtdXN0IHByZWNlZGUgYWRkaSBzbyBMUgorKyAgLy8g aG9sZHMgdGhlIGNhbGxlcidzIFJBIGFjcm9zcyB0aGUgd2hvbGUgcG9zdC1wb3BwZWRGUCB3aW5k b3cgKHNlZQorKyAgLy8gR2VuZXJhdGVDYWxsYWJsZUVwaWxvZ3VlIGZvciB0aGUgbWF0Y2hpbmcg cmF0aW9uYWxlKS4KKysgIG1hc20ubG9hZFB0cihBZGRyZXNzKFN0YWNrUG9pbnRlciwgRnJhbWU6 OnJldHVybkFkZHJlc3NPZmZzZXQoKSksCisrICAgICAgICAgICAgICAganM6OmppdDo6cjApOwor KyAgbWFzbS5sb2FkUHRyKEFkZHJlc3MoU3RhY2tQb2ludGVyLCBGcmFtZTo6Y2FsbGVyRlBPZmZz ZXQoKSksIEZyYW1lUG9pbnRlcik7CisrICBwb3BwZWRGUCA9IG1hc20uY3VycmVudE9mZnNldCgp OworKworKyAgbWFzbS54c19tdGxyKGpzOjpqaXQ6OnIwKTsKKysgIG1hc20uYWRkVG9TdGFja1B0 cihJbW0zMihzaXplb2YoRnJhbWUpKSk7CisrICBvZmZzZXRzLT5yZXQgPSBtYXNtLmN1cnJlbnRP ZmZzZXQoKTsKKysgIG1hc20uYXNfYmxyKCk7CisgI2Vsc2UKKyAgIC8vIEZvcmJpZCBwb29scyBm b3IgdGhlIHNhbWUgcmVhc29uIGFzIGRlc2NyaWJlZCBpbiBHZW5lcmF0ZUNhbGxhYmxlUHJvbG9n dWUuCisgIyAgaWYgZGVmaW5lZChKU19DT0RFR0VOX0FSTSkKK0BAIC0xOTA1LDYgKzE5NzgsMjIg QEAgYm9vbCBqczo6d2FzbTo6U3RhcnRVbndpbmRpbmcoY29uc3QgUmVnaXN0ZXJTdGF0ZSYgcmVn aXN0ZXJzLAorICAgICAgICAgZml4ZWRGUCA9IGZwOworICAgICAgICAgQXNzZXJ0TWF0Y2hlc0Nh bGxTaXRlKGZpeGVkUEMsIGZpeGVkRlApOworICAgICAgIH0gZWxzZQorKyNlbGlmIGRlZmluZWQo SlNfQ09ERUdFTl9QUEM2NCkKKysgICAgICBpZiAoY29kZVJhbmdlLT5pc1RodW5rKCkpIHsKKysg ICAgICAgIC8vIFRoZSBGYXJKdW1wSXNsYW5kIHNlcXVlbmNlIHRlbXBvcmFyeSBzY3JhbWJsZXMg dGhlIGxpbmsgcmVnaXN0ZXIuCisrICAgICAgICBmaXhlZFBDID0gcGM7CisrICAgICAgICBmaXhl ZEZQID0gZnA7CisrICAgICAgICAqdW53b3VuZENhbGxlciA9IGZhbHNlOworKyAgICAgICAgQXNz ZXJ0TWF0Y2hlc0NhbGxTaXRlKAorKyAgICAgICAgICAgIEZyYW1lOjpmcm9tVW50YWdnZWRXYXNt RXhpdEZQKGZwKS0+cmV0dXJuQWRkcmVzcygpLAorKyAgICAgICAgICAgIEZyYW1lOjpmcm9tVW50 YWdnZWRXYXNtRXhpdEZQKGZwKS0+cmF3Q2FsbGVyKCkpOworKyAgICAgIH0gZWxzZSBpZiAob2Zm c2V0RnJvbUVudHJ5IDwgUHVzaGVkRlApIHsKKysgICAgICAgIC8vIE9uIFBQQzY0IHRoZSByZXR1 cm4gYWRkcmVzcyBpcyBpbiBMUiAocmVnaXN0ZXJzLmxyKSB1bnRpbAorKyAgICAgICAgLy8gcHVz aFJldHVybkFkZHJlc3MoKSBzYXZlcyBpdCB0byB0aGUgc3RhY2suCisrICAgICAgICBmaXhlZFBD ID0gKHVpbnQ4X3QqKXJlZ2lzdGVycy5scjsKKysgICAgICAgIGZpeGVkRlAgPSBmcDsKKysgICAg ICAgIEFzc2VydE1hdGNoZXNDYWxsU2l0ZShmaXhlZFBDLCBmaXhlZEZQKTsKKysgICAgICB9IGVs c2UKKyAjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNNjQpCisgICAgICAgaWYgKG9mZnNldEZy b21FbnRyeSA8IFNldEZQIHx8IGNvZGVSYW5nZS0+aXNUaHVuaygpKSB7CisgICAgICAgICAvLyBP biBBUk02NCB3ZSByZWx5IG9uIHJlZ2lzdGVyIHN0YXRlIGluc3RlYWQgb2Ygc3RhdGUgc2F2ZWQg b24KK0BAIC0xOTU2LDYgKzIwNDUsMzUgQEAgYm9vbCBqczo6d2FzbTo6U3RhcnRVbndpbmRpbmco Y29uc3QgUmVnaXN0ZXJTdGF0ZSYgcmVnaXN0ZXJzLAorICAgICAgICAgZml4ZWRQQyA9IEZyYW1l Ojpmcm9tVW50YWdnZWRXYXNtRXhpdEZQKHNwKS0+cmV0dXJuQWRkcmVzcygpOworICAgICAgICAg Zml4ZWRGUCA9IGZwOworICAgICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVkUEMsIGZp eGVkRlApOworKyNlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKysgICAgICB9IGVsc2Ug aWYgKG9mZnNldEluQ29kZSA+PSBjb2RlUmFuZ2UtPnJldCgpIC0gUG9wcGVkRlAgJiYKKysgICAg ICAgICAgICAgICAgIG9mZnNldEluQ29kZSA8IGNvZGVSYW5nZS0+cmV0KCkpIHsKKysgICAgICAg IC8vIFBQQzY0IGVwaWxvZ3VlIChSQSBsb2FkZWQgaW50byByMCwgRlAgcmVzdG9yZWQsIFJBIG5v dCB5ZXQKKysgICAgICAgIC8vIG1vdmVkIHRvIExSLCBTUCBub3QgeWV0IGFkanVzdGVkKToKKysg ICAgICAgIC8vICAgbGQgcjAsIDgoc3ApICAgICAgOyByZXN0b3JlIGNhbGxlcidzIFJBIGludG8g cjAKKysgICAgICAgIC8vICAgbGQgRlAsIDAoc3ApICAgICAgOyByZXN0b3JlIGNhbGxlcidzIEZQ CisrICAgICAgICAvLyAgIDwtLSBwb3BwZWRGUCAtLT4KKysgICAgICAgIC8vICAgbXRsciByMCAg ICAgICAgICAgOyBMUiA6PSBjYWxsZXIncyBSQQorKyAgICAgICAgLy8gICBhZGRpIHNwLCBzcCwg MTYgICA7IHBvcCB0aGUgRnJhbWUKKysgICAgICAgIC8vICAgPC0tIHJldCAtLT4KKysgICAgICAg IC8vICAgYmxyCisrICAgICAgICAvLyBJbiB0aGUgW3BvcHBlZEZQLCByZXQpIHdpbmRvdyB0aGUg YWRkaSBoYXMgbm90IHJ1biwgc28gKnNwCisrICAgICAgICAvLyBpcyBzdGlsbCB0aGUgc2F2ZWQg RnJhbWUgYW5kIHNwWzhdIGlzIHRoZSBjYWxsZXIncyBSQS4KKysgICAgICAgIC8vIChyZWdpc3Rl cnMubHIgd291bGQgYWxzbyBiZSBjb3JyZWN0IGFmdGVyIG10bHIgZXhlY3V0ZXMsIGJ1dAorKyAg ICAgICAgLy8gc3BbOF0gaXMgdmFsaWQgdGhyb3VnaG91dCB0aGlzIHdpbmRvdyDigJQgaW5jbHVk aW5nIGJlZm9yZSBtdGxyIOKAlAorKyAgICAgICAgLy8gc28gd2UgcmVhZCBpdCBjb25zaXN0ZW50 bHkuKQorKyAgICAgICAgTU9aX0FTU0VSVCgqc3AgPT0gZnApOworKyAgICAgICAgZml4ZWRQQyA9 IEZyYW1lOjpmcm9tVW50YWdnZWRXYXNtRXhpdEZQKHNwKS0+cmV0dXJuQWRkcmVzcygpOworKyAg ICAgICAgZml4ZWRGUCA9IGZwOworKyAgICAgICAgQXNzZXJ0TWF0Y2hlc0NhbGxTaXRlKGZpeGVk UEMsIGZpeGVkRlApOworKyAgICAgIH0gZWxzZSBpZiAob2Zmc2V0SW5Db2RlID09IGNvZGVSYW5n ZS0+cmV0KCkpIHsKKysgICAgICAgIC8vIFBQQzY0IGVwaWxvZ3VlLCBhdCB0aGUgYmxyOiBhZGRp IGhhcyBydW4sIHNvIFNQIGlzIHRoZQorKyAgICAgICAgLy8gY2FsbGVyJ3MgYW5kICpzcCBpcyB1 bnJlbGF0ZWQgbWVtb3J5LiBtdGxyIHJhbiBlYXJsaWVyIGluCisrICAgICAgICAvLyB0aGUgW3Bv cHBlZEZQLCByZXQpIHdpbmRvdywgc28gTFIgaG9sZHMgdGhlIGNhbGxlcidzIFJBLgorKyAgICAg ICAgLy8gZnAgaG9sZHMgdGhlIHJlc3RvcmVkIGNhbGxlcidzIEZQLgorKyAgICAgICAgZml4ZWRQ QyA9ICh1aW50OF90KilyZWdpc3RlcnMubHI7CisrICAgICAgICBmaXhlZEZQID0gZnA7CisrICAg ICAgICBBc3NlcnRNYXRjaGVzQ2FsbFNpdGUoZml4ZWRQQywgZml4ZWRGUCk7CisgI2VsaWYgZGVm aW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTE9PTkc2NCkKKyAg ICAgICAgIC8vIFRoZSBzdGFjayBwb2ludGVyIGRvZXMgbm90IG1vdmUgdW50aWwgYWxsIHZhbHVl cyBoYXZlCisgICAgICAgICAvLyBiZWVuIHJlc3RvcmVkIHNvIHNldmVyYWwgY2FzZXMgY2FuIGJl IGNvYWxlc2NlZCBoZXJlLgorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21HQy5jcHAgYi9q cy9zcmMvd2FzbS9XYXNtR0MuY3BwCitpbmRleCBlNTljZDRmNWFiYTAuLjIxY2QwMWZkMWM1ZSAx MDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21HQy5jcHAKKysrKyBiL2pzL3NyYy93YXNtL1dh c21HQy5jcHAKK0BAIC00NDQsNiArNDQ0LDE0IEBAIGJvb2wgd2FzbTo6SXNQbGF1c2libGVTdGFj a01hcEtleShjb25zdCB1aW50OF90KiBuZXh0UEMpIHsKKyAgICAgICAgICAgICBpbnNuWy0xXSA9 PSAweDAwMDAwMDEzIC8qIGFkZGkgemVybywgemVybywgMCAqLykgfHwgIC8vIGphbDsgbm9wCisg ICAgICAgICAgICAoaW5zblstMV0gPT0gMHgwMDEwMDA3MyAmJgorICAgICAgICAgICAgIChpbnNu Wy0yXSAmIGtJVHlwZU1hc2spID09IFJPX0NTUlJXSSkpKTsgIC8vIHdhc20gdHJhcAorKyMgIGVs aWYgZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KQorKyAgY29uc3QgdWludDMyX3QqIGluc24gPSBy ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4obmV4dFBDKTsKKysgIE1PWl9BU1NFUlQo KHVpbnRwdHJfdChpbnNuKSAmIDMpID09IDApOworKyAgLy8geHNfdHJhcCgpID0gdHcgMzEscjAs cjAgKFBQQ190cmFwKTsgYmN0cmwgPSBQUENfYmN0cnwxOyBibCA9IEktZm9ybQorKyAgLy8gb3Bj b2RlIDE4IChQUENfYikgd2l0aCBMSz0xLCBBQT0wLCBjaGVja2VkIHZpYSAweEZDMDAwMDAzIG1h c2suCisrICByZXR1cm4gaW5zblstMV0gPT0gdWludDMyX3QoUFBDX3RyYXApIHx8CisrICAgICAg ICAgaW5zblstMV0gPT0gKHVpbnQzMl90KFBQQ19iY3RyKSB8IDF1KSB8fAorKyAgICAgICAgIChp bnNuWy0xXSAmIDB4RkMwMDAwMDN1KSA9PSAodWludDMyX3QoUFBDX2IpIHwgMXUpOworICMgIGVs c2UKKyAgIE1PWl9DUkFTSCgiSXNWYWxpZFN0YWNrTWFwS2V5OiByZXF1aXJlcyBpbXBsZW1lbnRh dGlvbiBvbiB0aGlzIHBsYXRmb3JtIik7CisgIyAgZW5kaWYKK2RpZmYgLS1naXQgYS9qcy9zcmMv d2FzbS9XYXNtR2VuZXJhdG9yLmNwcCBiL2pzL3NyYy93YXNtL1dhc21HZW5lcmF0b3IuY3BwCitp bmRleCAyZGFmYWM3M2U5NmEuLjA3ZmZlMTUwZmM1NyAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNt L1dhc21HZW5lcmF0b3IuY3BwCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtR2VuZXJhdG9yLmNwcAor QEAgLTkzMCw3ICs5MzAsMjMgQEAgYm9vbCBNb2R1bGVHZW5lcmF0b3I6OmZpbmlzaENvZGVCbG9j ayhDb2RlQmxvY2tSZXN1bHQqIHJlc3VsdCkgeworICAgY2FsbFNpdGVUYXJnZXRzXy5jbGVhcigp OworICAgY2FsbEZhckp1bXBzXy5jbGVhcigpOworIAorLSAgLy8gTm9uZSBvZiB0aGUgbGlua2lu ZyBvciBmYXItanVtcCBvcGVyYXRpb25zIHNob3VsZCBlbWl0IG1hc20gbWV0YWRhdGEuCisrICAv LyBOb25lIG9mIHRoZSBsaW5raW5nIG9yIGZhci1qdW1wIG9wZXJhdGlvbnMgc2hvdWxkIGVtaXQg bWFzbSBtZXRhZGF0YSwKKysgIC8vIGV4Y2VwdCBvbiBQUEM2NCB3aGVyZSBwYXRjaEZhckp1bXAg dXNlcyBhZGRMb25nSnVtcCB0byBjcmVhdGUgQ29kZUxhYmVscworKyAgLy8gZm9yIGFic29sdXRl LWFkZHJlc3MgZmFyIGp1bXBzLiBEcmFpbiB0aG9zZSBpbnRvIGxpbmtEYXRhXyBoZXJlLgorKyNp ZmRlZiBKU19DT0RFR0VOX1BQQzY0CisrICBmb3IgKGNvbnN0IGppdDo6Q29kZUxhYmVsJiBjb2Rl TGFiZWwgOiBtYXNtXy0+Y29kZUxhYmVscygpKSB7CisrICAgIExpbmtEYXRhOjpJbnRlcm5hbExp bmsgbGluazsKKysgICAgbGluay5wYXRjaEF0T2Zmc2V0ID0gY29kZUxhYmVsLnBhdGNoQXQoKS5v ZmZzZXQoKTsKKysgICAgbGluay50YXJnZXRPZmZzZXQgPSBjb2RlTGFiZWwudGFyZ2V0KCkub2Zm c2V0KCk7CisrIyAgaWZkZWYgSlNfQ09ERUxBQkVMX0xJTktNT0RFCisrICAgIGxpbmsubW9kZSA9 IGNvZGVMYWJlbC5saW5rTW9kZSgpOworKyMgIGVuZGlmCisrICAgIGlmICghbGlua0RhdGFfLT5p bnRlcm5hbExpbmtzLmFwcGVuZChsaW5rKSkgeworKyAgICAgIHJldHVybiBmYWxzZTsKKysgICAg fQorKyAgfQorKyAgbWFzbV8tPmNvZGVMYWJlbHMoKS5jbGVhcigpOworKyNlbmRpZgorIAorICAg TU9aX0FTU0VSVChtYXNtXy0+aW5saW5pbmdDb250ZXh0KCkuZW1wdHkoKSk7CisgICBNT1pfQVNT RVJUKG1hc21fLT5jYWxsU2l0ZXMoKS5lbXB0eSgpKTsKK2RpZmYgLS1naXQgYS9qcy9zcmMvd2Fz bS9XYXNtSW9uQ29tcGlsZS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAKK2lu ZGV4IDljNzliOWNmMDcwNC4uMGQwZTY2MTc3MGFmIDEwMDY0NAorLS0tIGEvanMvc3JjL3dhc20v V2FzbUlvbkNvbXBpbGUuY3BwCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtSW9uQ29tcGlsZS5jcHAK K0BAIC0xMTYwMiw3ICsxMTYwMiw3IEBAIGJvb2wganM6Ondhc206OklvblBsYXRmb3JtU3VwcG9y dCgpIHsKKyAjaWYgZGVmaW5lZChKU19DT0RFR0VOX1g2NCkgfHwgZGVmaW5lZChKU19DT0RFR0VO X1g4NikgfHwgICAgICAgXAorICAgICBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVk KEpTX0NPREVHRU5fTUlQUzY0KSB8fCAgICBcCisgICAgIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02 NCkgfHwgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IFwKKy0gICAgZGVmaW5lZChKU19D T0RFR0VOX1JJU0NWNjQpCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9SSVNDVjY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fUFBDNjQpCisgICByZXR1cm4gdHJ1ZTsKKyAjZWxzZQorICAgcmV0dXJu IGZhbHNlOworZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21NZW1vcnkuY3BwIGIvanMvc3Jj L3dhc20vV2FzbU1lbW9yeS5jcHAKK2luZGV4IDBlM2U2ZDM1MDlhZC4uZmVlZTlmNmVhMWM5IDEw MDY0NAorLS0tIGEvanMvc3JjL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrKyBiL2pzL3NyYy93YXNt L1dhc21NZW1vcnkuY3BwCitAQCAtMjg4LDkgKzI4OCw5IEBAIHN0YXRpY19hc3NlcnQoTWF4TWVt b3J5QWNjZXNzU2l6ZSA8PSBIdWdlVW5hbGlnbmVkR3VhcmRQYWdlLAorIHN0YXRpY19hc3NlcnQo SHVnZU9mZnNldEd1YXJkTGltaXQgPCBVSU5UMzJfTUFYLAorICAgICAgICAgICAgICAgImNoZWNr aW5nIGZvciBvdmVyZmxvdyBhZ2FpbnN0IE9mZnNldEd1YXJkTGltaXQgaXMgZW5vdWdoLiIpOwor IAorLS8vIFdlIGhhdmUgb25seSB0ZXN0ZWQgaHVnZSBtZW1vcnkgb24geDY0LCBhcm02NCBhbmQg cmlzY3Y2NC4KKysvLyBXZSBoYXZlIG9ubHkgdGVzdGVkIGh1Z2UgbWVtb3J5IG9uIHg2NCwgYXJt NjQsIHJpc2N2NjQgYW5kIHBwYzY0LgorICMgIGlmICEoZGVmaW5lZChKU19DT0RFR0VOX1g2NCkg fHwgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBcCistICAgICAgICBkZWZpbmVkKEpTX0NP REVHRU5fUklTQ1Y2NCkpCisrICAgICAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwg ZGVmaW5lZChKU19DT0RFR0VOX1BQQzY0KSkKKyAjICAgIGVycm9yICJOb3QgYW4gZXhwZWN0ZWQg Y29uZmlndXJhdGlvbiIKKyAjICBlbmRpZgorIAorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dh c21TaWduYWxIYW5kbGVycy5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtU2lnbmFsSGFuZGxlcnMuY3Bw CitpbmRleCBjYzhiYzI3NTU3NDUuLjg0ZDNjNGVjMTY0ZCAxMDA2NDQKKy0tLSBhL2pzL3NyYy93 YXNtL1dhc21TaWduYWxIYW5kbGVycy5jcHAKKysrKyBiL2pzL3NyYy93YXNtL1dhc21TaWduYWxI YW5kbGVycy5jcHAKK0BAIC0xMTEsNyArMTExLDkgQEAgdXNpbmcgbmFtZXNwYWNlIGpzOjp3YXNt OworICMgICAgaWYgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX19QUEM2NF9fKSB8fCBk ZWZpbmVkKF9fcHBjNjRsZV9fKSB8fCBcCisgICAgICAgICBkZWZpbmVkKF9fUFBDNjRMRV9fKQor ICMgICAgICBkZWZpbmUgUjAxX3NpZyhwKSAoKHApLT5zY19mcmFtZS5maXhyZWdbMV0pCisrIyAg ICAgIGRlZmluZSBSMzFfc2lnKHApICgocCktPnNjX2ZyYW1lLmZpeHJlZ1szMV0pCisgIyAgICAg IGRlZmluZSBSMzJfc2lnKHApICgocCktPnNjX2ZyYW1lLnNycjApCisrIyAgICAgIGRlZmluZSBS MzZfc2lnKHApICgocCktPnNjX2ZyYW1lLmxyKQorICMgICAgZW5kaWYKKyAjICBlbGlmIGRlZmlu ZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fc3VuKQorICMgICAgaWYgZGVmaW5lZChfX2xpbnV4 X18pCitAQCAtMTU3LDcgKzE1OSw5IEBAIHVzaW5nIG5hbWVzcGFjZSBqczo6d2FzbTsKKyAjICAg IGlmIGRlZmluZWQoX19saW51eF9fKSAmJiAoZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQo X19QUEM2NF9fKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQo X19wcGM2NGxlX18pIHx8IGRlZmluZWQoX19QUEM2NExFX18pKQorICMgICAgICBkZWZpbmUgUjAx X3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5ncF9yZWdzWzFdKQorKyMgICAgICBkZWZpbmUgUjMx X3NpZyhwKSAoKHApLT51Y19tY29udGV4dC5ncF9yZWdzWzMxXSkKKyAjICAgICAgZGVmaW5lIFIz Ml9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuZ3BfcmVnc1szMl0pCisrIyAgICAgIGRlZmluZSBS MzZfc2lnKHApICgocCktPnVjX21jb250ZXh0LmdwX3JlZ3NbMzZdKQorICMgICAgZW5kaWYKKyAj ICAgIGlmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fbG9vbmdhcmNoX18pCisgIyAg ICAgIGRlZmluZSBFUENfc2lnKHApICgocCktPnVjX21jb250ZXh0Ll9fcGMpCitAQCAtMjAwLDcg KzIwNCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBqczo6d2FzbTsKKyAjICAgIGlmIGRlZmluZWQoX19w cGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykgfHwgZGVmaW5lZChfX3BwYzY0bGVfXykgfHwg XAorICAgICAgICAgZGVmaW5lZChfX1BQQzY0TEVfXykKKyAjICAgICAgZGVmaW5lIFIwMV9zaWco cCkgKChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tfUkVHX1IxXSkKKysjICAgICAgZGVmaW5lIFIz MV9zaWcocCkgKChwKS0+dWNfbWNvbnRleHQuX19ncmVnc1tfUkVHX1IzMV0pCisgIyAgICAgIGRl ZmluZSBSMzJfc2lnKHApICgocCktPnVjX21jb250ZXh0Ll9fZ3JlZ3NbX1JFR19QQ10pCisrIyAg ICAgIGRlZmluZSBSMzZfc2lnKHApICgocCktPnVjX21jb250ZXh0Ll9fZ3JlZ3NbX1JFR19MUl0p CisgIyAgICBlbmRpZgorICMgIGVsaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBkZWZpbmVk KF9fRnJlZUJTRF9fKSB8fCBcCisgICAgICAgZGVmaW5lZChfX0ZyZWVCU0Rfa2VybmVsX18pCitA QCAtMjM0LDcgKzI0MCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBqczo6d2FzbTsKKyAjICAgIGlmIGRl ZmluZWQoX19GcmVlQlNEX18pICYmIChkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX1BQ QzY0X18pIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkKF9f cHBjNjRsZV9fKSB8fCBkZWZpbmVkKF9fUFBDNjRMRV9fKSkKKyAjICAgICAgZGVmaW5lIFIwMV9z aWcocCkgKChwKS0+dWNfbWNvbnRleHQubWNfZ3ByWzFdKQorKyMgICAgICBkZWZpbmUgUjMxX3Np ZyhwKSAoKHApLT51Y19tY29udGV4dC5tY19ncHJbMzFdKQorICMgICAgICBkZWZpbmUgUjMyX3Np ZyhwKSAoKHApLT51Y19tY29udGV4dC5tY19zcnIwKQorKyMgICAgICBkZWZpbmUgUjM2X3NpZyhw KSAoKHApLT51Y19tY29udGV4dC5tY19scikKKyAjICAgIGVuZGlmCisgIyAgZWxpZiBkZWZpbmVk KFhQX0RBUldJTikKKyAjICAgIGRlZmluZSBFSVBfc2lnKHApICgocCktPnRocmVhZC51dHMudHMz Mi5fX2VpcCkKK0BAIC00MTIsNyArNDIwLDggQEAgc3RydWN0IG1hY29zX2FhcmNoNjRfY29udGV4 dCB7CisgICAgICAgZGVmaW5lZChfX1BQQzY0TEVfXykKKyAjICAgIGRlZmluZSBQQ19zaWcocCkg UjMyX3NpZyhwKQorICMgICAgZGVmaW5lIFNQX3NpZyhwKSBSMDFfc2lnKHApCistIyAgICBkZWZp bmUgRlBfc2lnKHApIFIwMV9zaWcocCkKKysjICAgIGRlZmluZSBGUF9zaWcocCkgUjMxX3NpZyhw KQorKyMgICAgZGVmaW5lIExSX3NpZyhwKSBSMzZfc2lnKHApCisgIyAgZWxpZiBkZWZpbmVkKF9f bG9vbmdhcmNoX18pCisgIyAgICBkZWZpbmUgUENfc2lnKHApIEVQQ19zaWcocCkKKyAjICAgIGRl ZmluZSBGUF9zaWcocCkgUkZQX3NpZyhwKQorQEAgLTQ1OCw3ICs0NjcsOCBAQCBzdGF0aWMgdWlu dDhfdCogQ29udGV4dFRvU1AoQ09OVEVYVCogY29udGV4dCkgeworIH0KKyAKKyAjICBpZiBkZWZp bmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQoX19taXBzX18p IHx8IFwKKy0gICAgICBkZWZpbmVkKF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikK KysgICAgICBkZWZpbmVkKF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNjdikgfHwgXAor KyAgICAgIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykKKyBzdGF0aWMg dWludDhfdCogQ29udGV4dFRvTFIoQ09OVEVYVCogY29udGV4dCkgeworICMgICAgaWZkZWYgTFJf c2lnCisgICByZXR1cm4gbW96aWxsYTo6Qml0d2lzZUNhc3Q8dWludDhfdCo+KExSX3NpZyhjb250 ZXh0KSk7CitAQCAtNDc1LDcgKzQ4NSw4IEBAIHN0YXRpYyBKUzo6UHJvZmlsaW5nRnJhbWVJdGVy YXRvcjo6UmVnaXN0ZXJTdGF0ZSBUb1JlZ2lzdGVyU3RhdGUoCisgICBzdGF0ZS5wYyA9IENvbnRl eHRUb1BDKGNvbnRleHQpOworICAgc3RhdGUuc3AgPSBDb250ZXh0VG9TUChjb250ZXh0KTsKKyAj ICBpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hYXJjaDY0X18pIHx8IGRlZmluZWQo X19taXBzX18pIHx8IFwKKy0gICAgICBkZWZpbmVkKF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQo X19yaXNjdikKKysgICAgICBkZWZpbmVkKF9fbG9vbmdhcmNoX18pIHx8IGRlZmluZWQoX19yaXNj dikgfHwgXAorKyAgICAgIGRlZmluZWQoX19wcGM2NF9fKSB8fCBkZWZpbmVkKF9fUFBDNjRfXykK KyAgIHN0YXRlLmxyID0gQ29udGV4dFRvTFIoY29udGV4dCk7CisgIyAgZWxzZQorICAgc3RhdGUu bHIgPSAodm9pZCopVUlOVFBUUl9NQVg7CitAQCAtNzc2LDYgKzc4Nyw5IEBAIHN0YXRpYyB2b2lk IE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCkgeworIAorICMgICAgaWYgZGVmaW5lZChfX21p cHNfXykgfHwgZGVmaW5lZChfX2xvb25nYXJjaF9fKQorIHN0YXRpYyBjb25zdCB1aW50MzJfdCBr V2FzbVRyYXBTaWduYWwgPSBTSUdGUEU7CisrIyAgICBlbGlmIGRlZmluZWQoX19wcGM2NF9fKSB8 fCBkZWZpbmVkKF9fUFBDNjRfXykgfHwgXCAKKysgICAgICAgICAgZGVmaW5lZChfX3BwYzY0bGVf XykgfHwgZGVmaW5lZChfX1BQQzY0TEVfXykKKytzdGF0aWMgY29uc3QgdWludDMyX3Qga1dhc21U cmFwU2lnbmFsID0gU0lHVFJBUDsKKyAjICAgIGVsc2UKKyBzdGF0aWMgY29uc3QgdWludDMyX3Qg a1dhc21UcmFwU2lnbmFsID0gU0lHSUxMOworICMgICAgZW5kaWYKK2RpZmYgLS1naXQgYS9qcy9z cmMvd2FzbS9XYXNtU3RhY2tzLmNwcCBiL2pzL3NyYy93YXNtL1dhc21TdGFja3MuY3BwCitpbmRl eCA3MTQ5NzM1M2M1YzEuLjY1MTRkOGIwZTJlNCAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dh c21TdGFja3MuY3BwCisrKysgYi9qcy9zcmMvd2FzbS9XYXNtU3RhY2tzLmNwcAorQEAgLTQyNiw2 ICs0MjYsMzAgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQ29udFN0YWNrTWF4Sml0U3RhY2tT aXplID0gMTAgKiAxMDI0ICogMTAyNDsKKyAvLyBvciBzdGFjayBzbmFwc2hvdHMgdXRpbGl0aWVz LgorIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IENvbnRTdGFja1JlZFpvbmVTaXplID0gMHg4MDAw OworIAorKy8vIEVmZmVjdGl2ZSByZWQtem9uZSBzaXplIHVzZWQgd2hlbiBsYXlpbmcgb3V0IGEg Y29udGludWF0aW9uIHN0YWNrLgorKy8vCisrLy8gVGhlIGppdCBzdGFjayAoYW5kIHRoZXJlZm9y ZSB0aGUgYm90dG9tIGd1YXJkIHBhZ2UpIG11c3Qgc3RhcnQgb24gYSBwYWdlCisrLy8gYm91bmRh cnk7IG90aGVyd2lzZSBnYzo6UHJvdGVjdFBhZ2VzIHRyaXBzIE1PWl9SRUxFQVNFX0FTU0VSVChs ZW5ndGggJQorKy8vIHBhZ2VTaXplID09IDApLiBUaGUgcmVkIHpvbmUgc2l0cyBiZXR3ZWVuIHRo ZSB0b3AgZ3VhcmQgcGFnZSBhbmQgdGhlIGppdAorKy8vIHN0YWNrLCBzbyBpdHMgc2l6ZSBoYXMg dG8gYmUgYSBwYWdlIG11bHRpcGxlIHRvIGtlZXAgdGhhdCBzdGFydCBhbGlnbmVkLgorKy8vCisr Ly8gUm91bmRpbmcgdGhlIHJlZCB6b25lIHVwIHRvIGEgcGFnZSBpcyBjb3JyZWN0IG9uIGV2ZXJ5 IHBsYXRmb3JtIGFuZCB3b3VsZAorKy8vIGFsc28gY292ZXIgYW55IGNvbmZpZ3VyYXRpb24gd2hv c2UgcGFnZSBzaXplIGV4Y2VlZHMgQ29udFN0YWNrUmVkWm9uZVNpemUKKysvLyAoMzJLKSAtLSBl LmcuIGEgNjRLLXBhZ2UgQUFyY2g2NCBrZXJuZWwgLS0gYnV0IENvbnRTdGFja1JlZFpvbmVTaXpl IGlzCisrLy8gYWxyZWFkeSBhIG11bHRpcGxlIG9mIHRoZSA0Sy8xNksgcGFnZXMgdXNlZCBvbiB0 aGUgdGllci0xIHBsYXRmb3Jtcywgc28gdGhlCisrLy8gcm91bmQtdXAgaXMgYSBuby1vcCB0aGVy ZSB0b2RheS4gV2UgZGVsaWJlcmF0ZWx5IGdhdGUgaXQgdG8gUFBDNjQgKDY0SworKy8vIHBhZ2Vz LCB3aGVyZSB0aGUgcm91bmQtdXAgaXMgbG9hZC1iZWFyaW5nKSBzbyB0aGlzIHBhdGNoIGNhbm5v dCBhbHRlcgorKy8vIGNvbnRpbnVhdGlvbiBzdGFjayBsYXlvdXQgb24gYW55IHRpZXItMSBwbGF0 Zm9ybS4gRHJvcCB0aGUgZ2F0ZSBpZiB0aGUKKysvLyBnZW5lcmFsIGNhc2UgaXMgZXZlciB3YW50 ZWQuCisrc3RhdGljIGlubGluZSBzaXplX3QgQ29udFN0YWNrRWZmZWN0aXZlUmVkWm9uZVNpemUo CisrICAgIFtbbWF5YmVfdW51c2VkXV0gc2l6ZV90IHBhZ2VTaXplKSB7CisrI2lmZGVmIEpTX0NP REVHRU5fUFBDNjQKKysgIHJldHVybiBSb3VuZFVwKENvbnRTdGFja1JlZFpvbmVTaXplLCBwYWdl U2l6ZSk7CisrI2Vsc2UKKysgIHJldHVybiBDb250U3RhY2tSZWRab25lU2l6ZTsKKysjZW5kaWYK Kyt9CisrCisgLy8gTnVtYmVyIG9mIGd1YXJkIHBhZ2VzIGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBv ZiBlYWNoIGNvbnRpbnVhdGlvbiBzdGFjayBzbG90LgorIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90 IENvbnRTdGFja1RvcEd1YXJkUGFnZXMgPSAxOworIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IENv bnRTdGFja0JvdHRvbUd1YXJkUGFnZXMgPSAxOworQEAgLTQ0NCw4ICs0NjgsOCBAQCB2b2lkIENv bnRTdGFja1NpemU6OmNvbXB1dGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRT dGFja01pbkppdFN0YWNrU2l6ZSwgQ29udFN0YWNrTWF4Sml0U3RhY2tTaXplKSwKKyAgICAgICAg ICAgICAgIHBhZ2VTaXplKTsKKyAgIGhlYWRlclNpemUgPSBSb3VuZFVwKHNpemVvZihDb250U3Rh Y2spLCBwYWdlU2l6ZSk7CistICB0b3RhbFNpemUgPSB0b3BHdWFyZFNpemUgKyBDb250U3RhY2tS ZWRab25lU2l6ZSArIGppdFN0YWNrU2l6ZSArCistICAgICAgICAgICAgICBib3R0b21HdWFyZFNp emUgKyBoZWFkZXJTaXplOworKyAgdG90YWxTaXplID0gdG9wR3VhcmRTaXplICsgQ29udFN0YWNr RWZmZWN0aXZlUmVkWm9uZVNpemUocGFnZVNpemUpICsKKysgICAgICAgICAgICAgIGppdFN0YWNr U2l6ZSArIGJvdHRvbUd1YXJkU2l6ZSArIGhlYWRlclNpemU7CisgCisgICAvLyBBc3NlcnQgd2Ug Y2FuJ3Qgb3ZlcmZsb3cgd2hlbiBtdWx0aXBseWluZyBvdXIgc2l6ZSBieSBjYXBhY2l0eS4gQXNz dW1lCisgICAvLyAzMi1iaXQgaW50ZWdlcnMgdG8gYmUgY29uc2VydmF0aXZlLgorQEAgLTQ2Nyw3 ICs0OTEsOCBAQCB2b2lkIENvbnRTdGFjazo6aW5pdChDb250U3RhY2tBcmVuYSogYXJlbmEsIHVp bnRwdHJfdCBhbGxvY2F0aW9uQmFzZSwKKyAgIHVpbnRwdHJfdCB0b3BHdWFyZFBhZ2VQaHlzaWNh bFN0YXJ0ID0gYWxsb2NhdGlvbkJhc2U7CisgICB1aW50cHRyX3QgdG9wR3VhcmRQYWdlUGh5c2lj YWxFbmQgPSBhbGxvY2F0aW9uQmFzZSArIHRvcEd1YXJkUGFnZVNpemU7CisgICB1aW50cHRyX3Qg cmVkWm9uZVBoeXNpY2FsU3RhcnQgPSB0b3BHdWFyZFBhZ2VQaHlzaWNhbEVuZDsKKy0gIHVpbnRw dHJfdCBqaXRTdGFja1BoeXNpY2FsU3RhcnQgPSByZWRab25lUGh5c2ljYWxTdGFydCArIENvbnRT dGFja1JlZFpvbmVTaXplOworKyAgdWludHB0cl90IGppdFN0YWNrUGh5c2ljYWxTdGFydCA9Cisr ICAgICAgcmVkWm9uZVBoeXNpY2FsU3RhcnQgKyBDb250U3RhY2tFZmZlY3RpdmVSZWRab25lU2l6 ZShwYWdlU2l6ZSk7CisgICB1aW50cHRyX3Qgaml0U3RhY2tQaHlzaWNhbEVuZCA9IGppdFN0YWNr UGh5c2ljYWxTdGFydCArIGppdFN0YWNrU2l6ZTsKKyAgIHVpbnRwdHJfdCBib3R0b21HdWFyZFBh Z2VQaHlzaWNhbFN0YXJ0ID0gaml0U3RhY2tQaHlzaWNhbEVuZDsKKyAgIHVpbnRwdHJfdCBoZWFk ZXJQaHlzaWNhbFN0YXJ0ID0KK2RpZmYgLS1naXQgYS9qcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3Bw IGIvanMvc3JjL3dhc20vV2FzbVN0dWJzLmNwcAoraW5kZXggOGE5OGUyMDFhNDUyLi44NDk3ODE0 ZmNkMzcgMTAwNjQ0CistLS0gYS9qcy9zcmMvd2FzbS9XYXNtU3R1YnMuY3BwCisrKysgYi9qcy9z cmMvd2FzbS9XYXNtU3R1YnMuY3BwCitAQCAtNjQ2LDggKzY0Niw5IEBAIHN0YXRpYyBib29sIEdl bmVyYXRlSW50ZXJwRW50cnkoTWFjcm9Bc3NlbWJsZXImIG1hc20sIGNvbnN0IEZ1bmNFeHBvcnQm IGZlLAorIAorICAgLy8gU2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgaWYgaXQgd2Fzbid0IGFscmVh ZHkgc2F2ZWQgYnkgdGhlIGNhbGwgaW5zbi4KKyAjaWZkZWYgSlNfVVNFX0xJTktfUkVHSVNURVIK Ky0jICBpZiBkZWZpbmVkKEpTX0NPREVHRU5fQVJNKSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fTUlQ UzY0KSB8fCBcCistICAgICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQo SlNfQ09ERUdFTl9SSVNDVjY0KQorKyMgIGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8IGRl ZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8ICAgICAgXAorKyAgICAgIGRlZmluZWQoSlNfQ09E RUdFTl9MT09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAorKyAgICAg IGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2NCkKKyAgIG1hc20ucHVzaFJldHVybkFkZHJlc3MoKTsK KyAjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9BUk02NCkKKyAgIC8vIFdhc21QdXNoIHVwZGF0 ZXMgZnJhbWVQdXNoZWQoKSB1bmxpa2UgcHVzaFJldHVybkFkZHJlc3MoKSwgYnV0IHRoYXQncwor QEAgLTIxMjMsOSArMjEyNCwxMCBAQCBzdGF0aWMgYm9vbCBHZW5lcmF0ZUltcG9ydEludGVycEV4 aXQoTWFjcm9Bc3NlbWJsZXImIG1hc20sIGNvbnN0IEZ1bmNJbXBvcnQmIGZpLAorICAgLy8gVGhl IG5hdGl2ZSBBQkkgcHJlc2VydmVzIHRoZSBpbnN0YW5jZSwgaGVhcCBhbmQgZ2xvYmFsIHJlZ2lz dGVycyBzaW5jZSB0aGV5CisgICAvLyBhcmUgbm9uLXZvbGF0aWxlLgorICAgTU9aX0FTU0VSVChO b25Wb2xhdGlsZVJlZ3MuaGFzKEluc3RhbmNlUmVnKSk7CistI2lmIGRlZmluZWQoSlNfQ09ERUdF Tl9YNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9BUk0pIHx8ICAgICAgXAorLSAgICBkZWZpbmVk KEpTX0NPREVHRU5fQVJNNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9NSVBTNjQpIHx8IFwKKy0g ICAgZGVmaW5lZChKU19DT0RFR0VOX0xPT05HNjQpIHx8IGRlZmluZWQoSlNfQ09ERUdFTl9SSVND VjY0KQorKyNpZiBkZWZpbmVkKEpTX0NPREVHRU5fWDY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5f QVJNKSB8fCAgICAgICAgIFwKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX0FSTTY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCAgICBcCisrICAgIGRlZmluZWQoSlNfQ09ERUdFTl9M T09ORzY0KSB8fCBkZWZpbmVkKEpTX0NPREVHRU5fUklTQ1Y2NCkgfHwgXAorKyAgICBkZWZpbmVk KEpTX0NPREVHRU5fUFBDNjQpCisgICBNT1pfQVNTRVJUKE5vblZvbGF0aWxlUmVncy5oYXMoSGVh cFJlZykpOworICNlbmRpZgorIAorQEAgLTI1NzEsNiArMjU3MywxNSBAQCBib29sIHdhc206Okdl bmVyYXRlQnVpbHRpblRodW5rKE1hY3JvQXNzZW1ibGVyJiBtYXNtLCBBQklGdW5jdGlvblR5cGUg YWJpVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3Rlcjo6RnJvbUNvZGUocmVn SWQgKyAxKSk7CisgICAgICAgICB9CisgICAgICAgfQorKyNlbmRpZgorKyNpZmRlZiBKU19DT0RF R0VOX1BQQzY0CisrICAgICAgLy8gUFBDNjQgMzItYml0IG9wZXJhdGlvbnMgZG8gbm90IHplcm8t ZXh0ZW5kIHRvIDY0IGJpdHMgKHVubGlrZQorKyAgICAgIC8vIHg4Ni02NC9BUk02NC9MQTY0KS4g VGhlIEVMRnYyIEFCSSByZXF1aXJlcyBjYWxsZXJzIHRvIHplcm8vc2lnbi1leHRlbmQKKysgICAg ICAvLyBuYXJyb3cgYXJncy4gV2FzbSBpMzIgdmFsdWVzIG1heSBoYXZlIGdhcmJhZ2UgdXBwZXIg Yml0cyBpbiA2NC1iaXQKKysgICAgICAvLyByZWdpc3RlcnMsIHNvIHplcm8tZXh0ZW5kIHRoZW0g YmVmb3JlIGNhbGxpbmcgQysrIGJ1aWx0aW5zLgorKyAgICAgIGlmIChzZWxmQXJncy5taXJUeXBl KCkgPT0gTUlSVHlwZTo6SW50MzIpIHsKKysgICAgICAgIG1hc20ubW92ZTMyWmVyb0V4dGVuZFRv UHRyKHNlbGZBcmdzLT5ncHIoKSwgc2VsZkFyZ3MtPmdwcigpKTsKKysgICAgICB9CisgI2VuZGlm CisgICAgICAgY29udGludWU7CisgICAgIH0KK0BAIC0yNjU5LDYgKzI2NzAsMjggQEAgc3RhdGlj IGNvbnN0IExpdmVSZWdpc3RlclNldCBSZWdzVG9QcmVzZXJ2ZSgKKyAjICBpZmRlZiBFTkFCTEVf V0FTTV9TSU1ECisgIyAgICBlcnJvciAiaGlnaCBsYW5lcyBvZiBTSU1EIHJlZ2lzdGVycyBuZWVk IHRvIGJlIHNhdmVkIHRvby4iCisgIyAgZW5kaWYKKysjZWxpZiBkZWZpbmVkKEpTX0NPREVHRU5f UFBDNjQpCisrLy8gRXhjbHVkZSByMCAoU2NyYXRjaFJlZ2lzdGVyLCBub3QgYWxsb2NhdGFibGUs IHNwZWNpYWwgYWRkcmVzc2luZyBzZW1hbnRpY3MpLAorKy8vIHIxIChTUCksIHIyIChUT0MgcG9p bnRlciwgcmVzZXJ2ZWQpLCBhbmQgcjEzIChUTFMgcG9pbnRlciwgcmVzZXJ2ZWQpLgorK3N0YXRp YyBjb25zdCBMaXZlUmVnaXN0ZXJTZXQgUmVnc1RvUHJlc2VydmUoCisrICAgIEdlbmVyYWxSZWdp c3RlclNldChSZWdpc3RlcnM6OkFsbE1hc2sgJiB+KCh1aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6 OnIwKSB8CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1 aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6OnIxKSB8CisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCgxKSA8PCBSZWdpc3RlcnM6OnIyKSB8Cisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCgx KSA8PCBSZWdpc3RlcnM6OnIxMykpKSwKKysjICBpZmRlZiBFTkFCTEVfV0FTTV9TSU1ECisrICAg IC8vIFVubGlrZSBBUk02NCwgd2hlcmUgdGhlIHZlY3RvciByZWdpc3RlcnMgYWxpYXMgdGhlIGRv dWJsZXMsIFBQQzY0CisrICAgIC8vIGRvdWJsZXMgbGl2ZSBpbiB0aGUgRlBScyAoVlNSMC0zMSkg d2hpbGUgd2FzbSB2MTI4IHZhbHVlcyBsaXZlIGluIHRoZQorKyAgICAvLyBWUnMgKFZTUjMyLTYz KSAtLSB0d28gZGlzam9pbnQgcGh5c2ljYWwgcG9vbHMsIHNvIGJvdGggbXVzdCBiZQorKyAgICAv LyBwcmVzZXJ2ZWQuIFNhdmluZyBvbmx5IHRoZSBkb3VibGVzIGxvc2VzIHRoZSBlbnRpcmUgbGl2 ZSB2MTI4IHN0YXRlOiBhCisrICAgIC8vIHRyYXAgZmlyaW5nIHdoaWxlIGEgdjEyOCBpcyBsaXZl IChub3RhYmx5IHRoZSBpbnRlcnJ1cHQtY2hlY2sgdHJhcCwKKysgICAgLy8gd2hpY2ggZmlyZXMg Y29uc3RhbnRseSBpbiBob3QgbG9vcHMpIHJlc3VtZXMgd2l0aCB3aGF0ZXZlciB0aGUgQysrCisr ICAgIC8vIGhhbmRsZXIncyBsaWJjIGxlZnQgaW4gdGhlIFZScyAoZS5nLiBnbGliYydzIHZlY3Rv ciBtZW1jcHkgbGVhdmVzIGx2c2wKKysgICAgLy8gYWxpZ25tZW50LWNvbnRyb2wgcGF0dGVybnMg aW4gbG93IFZScykuCisrICAgIEZsb2F0UmVnaXN0ZXJTZXQoRmxvYXRSZWdpc3RlcnM6OkFsbERv dWJsZU1hc2sgfAorKyAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVnaXN0ZXJzOjpBbGxTaW1k MTI4TWFzaykpOworKyMgIGVsc2UKKysgICAgRmxvYXRSZWdpc3RlclNldChGbG9hdFJlZ2lzdGVy czo6QWxsRG91YmxlTWFzaykpOworKyMgIGVuZGlmCisgI2VsaWYgZGVmaW5lZChKU19DT0RFR0VO X0FSTTY0KQorIC8vIFdlIGFzc3VtZSB0aGF0IHRyYXBzIGRvIG5vdCBoYXBwZW4gd2hpbGUgbHIg aXMgbGl2ZS4gVGhpcyBib3RoIGVuc3VyZXMgdGhhdAorIC8vIHRoZSBzaXplIG9mIFJlZ3NUb1By ZXNlcnZlIGlzIGEgbXVsdGlwbGUgb2YgMiAocHJlc2VydmluZyBXYXNtU3RhY2tBbGlnbm1lbnQp CitkaWZmIC0tZ2l0IGEvanMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24uY3BwIGIvanMvc3Jj L3dhc20vV2FzbVN1bW1hcml6ZUluc24uY3BwCitpbmRleCA3YmI0ZjRiN2E3MjUuLjJhZTU1YTFi MWI5ZSAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21TdW1tYXJpemVJbnNuLmNwcAorKysr IGIvanMvc3JjL3dhc20vV2FzbVN1bW1hcml6ZUluc24uY3BwCitAQCAtMTczMSw2ICsxNzMxLDE2 OSBAQCBNYXliZTxUcmFwTWFjaGluZUluc24+IFN1bW1hcml6ZVRyYXBJbnN0cnVjdGlvbihjb25z dCB1aW50OF90KiBpbnNuQWRkcikgeworICAgcmV0dXJuIE5vdGhpbmcoKTsKKyB9CisgCisrLy8g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09IHBwYzY0ID09PT0KKysKKysjICBlbGlmIGRlZmluZWQoSlNfQ09ERUdFTl9QUEM2 NCkKKysKKytNYXliZTxUcmFwTWFjaGluZUluc24+IFN1bW1hcml6ZVRyYXBJbnN0cnVjdGlvbihj b25zdCB1aW50OF90KiBpbnNuQWRkcikgeworKyAgTU9aX0FTU0VSVCgwID09ICh1aW50cHRyX3Qo aW5zbkFkZHIpICYgMykpOworKworKyAgY29uc3QgdWludDMyX3QgaW5zbiA9ICoodWludDMyX3Qq KWluc25BZGRyOworKyAgY29uc3QgdWludDMyX3QgbWFqb3JPcCA9IGluc24gPj4gMjY7CisrICAv LyBYLWZvcm0gc2Vjb25kYXJ5IG9wY29kZTogYml0cyAxMC4uMS4KKysgIGNvbnN0IHVpbnQzMl90 IHhvID0gKGluc24gPj4gMSkgJiAweDNGRjsKKysKKysgIC8vIFBQQ190cmFwID0gMHg3RkUwMDAw OCA9IHR3IDMxLDAsMC4KKysgIGlmIChpbnNuID09IDB4N0ZFMDAwMDgpIHsKKysgICAgcmV0dXJu IFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpPZmZpY2lhbFVEKTsKKysgIH0KKysKKysgIC8vIEQtZm9y bSAvIERTLWZvcm0gbG9hZHMuCisrICBzd2l0Y2ggKG1ham9yT3ApIHsKKysgICAgY2FzZSAzNDog IC8vIGxiegorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDgpOworKyAg ICBjYXNlIDQwOiAgLy8gbGh6CisrICAgIGNhc2UgNDI6ICAvLyBsaGEKKysgICAgICByZXR1cm4g U29tZShUcmFwTWFjaGluZUluc246OkxvYWQxNik7CisrICAgIGNhc2UgMzI6ICAvLyBsd3oKKysg ICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQzMik7CisrICAgIGNhc2UgNTg6 ICAvLyBsZCAoRFM9MCkgLyBsd2EgKERTPTIpCisrICAgICAgaWYgKChpbnNuICYgMykgPT0gMikg eworKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOyAgLy8gbHdh CisrICAgICAgfQorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsg IC8vIGxkCisrICAgIGNhc2UgNDg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g bGZzCisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOworKyAgICBj YXNlIDUwOiAgLy8gbGZkCisrICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2Fk NjQpOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgfQorKworKyAgLy8gRC1mb3Jt IC8gRFMtZm9ybSBzdG9yZXMuCisrICBzd2l0Y2ggKG1ham9yT3ApIHsKKysgICAgY2FzZSAzODog IC8vIHN0YgorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmU4KTsKKysg ICAgY2FzZSA0NDogIC8vIHN0aAorKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6 U3RvcmUxNik7CisrICAgIGNhc2UgMzY6ICAvLyBzdHcKKysgICAgY2FzZSAzNzogIC8vIHN0d3UK KysgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMzIpOworKyAgICBjYXNl IDUyOiAgLy8gc3RmcworKyAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUz Mik7CisrICAgIGNhc2UgNjI6ICAvLyBzdGQgKERTPTApIC8gc3RkdSAoRFM9MSkKKysgICAgICBy ZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOworKyAgICBjYXNlIDU0OiAgLy8g c3RmZAorKyAgICBjYXNlIDU1OiAgLy8gc3RmZHUKKysgICAgICByZXR1cm4gU29tZShUcmFwTWFj aGluZUluc246OlN0b3JlNjQpOworKyAgICBkZWZhdWx0OgorKyAgICAgIGJyZWFrOworKyAgfQor KworKyAgLy8gWC1mb3JtIGluc3RydWN0aW9ucyAobWFqb3Igb3Bjb2RlIDMxKS4KKysgIGlmICht YWpvck9wID09IDMxKSB7CisrICAgIHN3aXRjaCAoeG8pIHsKKysgICAgICAvLyBJbmRleGVkIGxv YWRzLgorKyAgICAgIGNhc2UgODc6ICAvLyBsYnp4CisrICAgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OkxvYWQ4KTsKKysgICAgICBjYXNlIDI3OTogIC8vIGxoengKKysgICAgICBj YXNlIDM0MzogIC8vIGxoYXgKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6 TG9hZDE2KTsKKysgICAgICBjYXNlIDIzOiAgLy8gbHd6eAorKyAgICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOworKyAgICAgIGNhc2UgMjE6ICAvLyBsZHgKKysgICAg ICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6TG9hZDY0KTsKKysgICAgICBjYXNlIDUz NTogIC8vIGxmc3gKKysgICAgICBjYXNlIDg1NTogIC8vIGxmaXdheAorKyAgICAgIGNhc2UgODg3 OiAgLy8gbGZpd3p4CisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQz Mik7CisrICAgICAgY2FzZSA1OTk6ICAvLyBsZmR4CisrICAgICAgICByZXR1cm4gU29tZShUcmFw TWFjaGluZUluc246OkxvYWQ2NCk7CisrICAgICAgY2FzZSA3OTA6ICAvLyBsaGJyeCAoYnl0ZS1y ZXZlcnNlIGhhbGZ3b3JkKQorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpM b2FkMTYpOworKyAgICAgIGNhc2UgNTM0OiAgLy8gbHdicnggKGJ5dGUtcmV2ZXJzZSB3b3JkKQor KyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOworKworKyAgICAg IC8vIEluZGV4ZWQgc3RvcmVzLgorKyAgICAgIGNhc2UgMjE1OiAgLy8gc3RieAorKyAgICAgICAg cmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTgpOworKyAgICAgIGNhc2UgNDA3OiAg Ly8gc3RoeAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpTdG9yZTE2KTsK KysgICAgICBjYXNlIDE1MTogIC8vIHN0d3gKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNo aW5lSW5zbjo6U3RvcmUzMik7CisrICAgICAgY2FzZSAxNDk6ICAvLyBzdGR4CisrICAgICAgICBy ZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOworKyAgICAgIGNhc2UgNjYzOiAg Ly8gc3Rmc3gKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7 CisrICAgICAgY2FzZSA3Mjc6ICAvLyBzdGZkeAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1h Y2hpbmVJbnNuOjpTdG9yZTY0KTsKKysgICAgICBjYXNlIDkxODogIC8vIHN0aGJyeCAoYnl0ZS1y ZXZlcnNlIGhhbGZ3b3JkIHN0b3JlKQorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJ bnNuOjpTdG9yZTE2KTsKKysgICAgICBjYXNlIDY2MjogIC8vIHN0d2JyeCAoYnl0ZS1yZXZlcnNl IHdvcmQgc3RvcmUpCisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3Jl MzIpOworKworKyAgICAgIC8vIFZTWCBTSU1EIGluZGV4ZWQgbG9hZC9zdG9yZSAoWFgxLWZvcm0s IHNhbWUgbWFqb3Igb3Bjb2RlIDMxKS4KKysgICAgICBjYXNlIDI2ODogIC8vIGx4dnggKFBPV0VS OSkKKysgICAgICBjYXNlIDg0NDogIC8vIGx4dmQyeCAoUE9XRVI4KQorKyAgICAgICAgcmV0dXJu IFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMTI4KTsKKysgICAgICBjYXNlIDM5NjogIC8vIHN0 eHZ4IChQT1dFUjkpCisrICAgICAgY2FzZSA5NzI6ICAvLyBzdHh2ZDJ4IChQT1dFUjgpCisrICAg ICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlMTI4KTsKKysKKysgICAgICAv LyBBdG9taWMgKGxvYWQtcmVzZXJ2ZSAvIHN0b3JlLWNvbmRpdGlvbmFsKS4KKysgICAgICBjYXNl IDIwOiAgIC8vIGx3YXJ4CisrICAgICAgY2FzZSA1MjogICAvLyBsYmFyeCAoUE9XRVI3KykKKysg ICAgICBjYXNlIDg0OiAgIC8vIGxkYXJ4CisrICAgICAgY2FzZSAxMTY6ICAvLyBsaGFyeCAoUE9X RVI3KykKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNoaW5lSW5zbjo6QXRvbWljKTsKKysg ICAgICBkZWZhdWx0OgorKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgLy8gc3R3Y3guIChY Tz0xNTAsIFJjPTEpLCBzdGRjeC4gKFhPPTIxNCwgUmM9MSksIHN0YmN4LiAoWE89Njk0LCBSYz0x KQorKyAgICAvLyBhbmQgc3RoY3guIChYTz03MjYsIFJjPTEpIGhhdmUgYml0IDAgc2V0LiBOb3Rl IHhvIGFib3ZlIGFscmVhZHkKKysgICAgLy8gZGlzY2FyZHMgYml0IDAsIHNvIHdlIG5lZWQgYSBz ZXBhcmF0ZSBsb3ctMTEtYml0IG1hdGNoLgorKyAgICBjb25zdCB1aW50MzJfdCB4b1JjID0gaW5z biAmIDB4N0ZGOyAgLy8gYml0cyAxMC4uMAorKyAgICBpZiAoeG9SYyA9PSAoKDE1MCA8PCAxKSB8 IDEpIHx8IHhvUmMgPT0gKCgyMTQgPDwgMSkgfCAxKSB8fAorKyAgICAgICAgeG9SYyA9PSAoKDY5 NCA8PCAxKSB8IDEpIHx8IHhvUmMgPT0gKCg3MjYgPDwgMSkgfCAxKSkgeworKyAgICAgIHJldHVy biBTb21lKFRyYXBNYWNoaW5lSW5zbjo6QXRvbWljKTsKKysgICAgfQorKyAgfQorKworKyAgLy8g UE9XRVIxMCBwcmVmaXhlZCBsb2Fkcy9zdG9yZXMgKG1ham9yIG9wY29kZSAxKS4gVGhlIHRyYXAt c2l0ZSBQQworKyAgLy8gcG9pbnRzIGF0IHRoZSBwcmVmaXggd29yZDsgdGhlIGFjdHVhbCBsb2Fk L3N0b3JlIGtpbmQgaXMgZW5jb2RlZCBpbgorKyAgLy8gdGhlIHN1ZmZpeCB3b3JkIGF0IGluc25B ZGRyICsgNC4gVGhlIDY0LWJ5dGUtYm91bmRhcnkgcnVsZQorKyAgLy8gKGVuc3VyZVByZWZpeGVk QWxpZ25tZW50KSBndWFyYW50ZWVzIHRoZSBzdWZmaXggaXMgaW4gdGhlIHNhbWUgYmxvY2suCisr ICBpZiAobWFqb3JPcCA9PSAxKSB7CisrICAgIGNvbnN0IHVpbnQzMl90IHN1ZmZpeCA9ICoodWlu dDMyX3QqKShpbnNuQWRkciArIDQpOworKyAgICBjb25zdCB1aW50MzJfdCBzdWZmaXhPcDYgPSBz dWZmaXggPj4gMjY7ICAgICAgICAgIC8vIDYtYml0IHN1ZmZpeCBvcAorKyAgICBjb25zdCB1aW50 MzJfdCBzdWZmaXhPcDUgPSBzdWZmaXggPj4gMjc7ICAgICAgICAgIC8vIDUtYml0IHN1ZmZpeCBv cCAocGx4di9wc3R4dikKKysgICAgc3dpdGNoIChzdWZmaXhPcDYpIHsKKysgICAgICBjYXNlIDU3 OiAgLy8gcGxkCisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQ2NCk7 CisrICAgICAgY2FzZSA1MDogIC8vIHBsZmQKKysgICAgICAgIHJldHVybiBTb21lKFRyYXBNYWNo aW5lSW5zbjo6TG9hZDY0KTsKKysgICAgICBjYXNlIDQ4OiAgLy8gcGxmcworKyAgICAgICAgcmV0 dXJuIFNvbWUoVHJhcE1hY2hpbmVJbnNuOjpMb2FkMzIpOworKyAgICAgIGNhc2UgNjE6ICAvLyBw c3RkCisrICAgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OlN0b3JlNjQpOworKyAg ICAgIGNhc2UgNTQ6ICAvLyBwc3RmZAorKyAgICAgICAgcmV0dXJuIFNvbWUoVHJhcE1hY2hpbmVJ bnNuOjpTdG9yZTY0KTsKKysgICAgICBjYXNlIDUyOiAgLy8gcHN0ZnMKKysgICAgICAgIHJldHVy biBTb21lKFRyYXBNYWNoaW5lSW5zbjo6U3RvcmUzMik7CisrICAgICAgZGVmYXVsdDoKKysgICAg ICAgIGJyZWFrOworKyAgICB9CisrICAgIGlmIChzdWZmaXhPcDUgPT0gMjUpIHsgIC8vIHBseHYK KysgICAgICByZXR1cm4gU29tZShUcmFwTWFjaGluZUluc246OkxvYWQxMjgpOworKyAgICB9Cisr ICAgIGlmIChzdWZmaXhPcDUgPT0gMjcpIHsgIC8vIHBzdHh2CisrICAgICAgcmV0dXJuIFNvbWUo VHJhcE1hY2hpbmVJbnNuOjpTdG9yZTEyOCk7CisrICAgIH0KKysgIH0KKysKKysgIHJldHVybiBO b3RoaW5nKCk7CisrfQorKworIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBub25lID09PT0KKyAKKyAjICBlbGlmIGRl ZmluZWQoSlNfQ09ERUdFTl9OT05FKQorZGlmZiAtLWdpdCBhL2pzL3NyYy93YXNtL1dhc21WYWx1 ZS5jcHAgYi9qcy9zcmMvd2FzbS9XYXNtVmFsdWUuY3BwCitpbmRleCBmZGEwOTk2ODUxZTEuLjQ1 ZmZmMjRmYTU4MiAxMDA2NDQKKy0tLSBhL2pzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAKKysrKyBi L2pzL3NyYy93YXNtL1dhc21WYWx1ZS5jcHAKK0BAIC00MzAsNyArNDMwLDcgQEAgYm9vbCBUb1dl YkFzc2VtYmx5VmFsdWVfaTMyKEpTQ29udGV4dCogY3gsIEhhbmRsZVZhbHVlIHZhbCwgaW50MzJf dCogbG9jLAorICAgYm9vbCBvayA9IFRvSW50MzIoY3gsIHZhbCwgbG9jKTsKKyAgIGlmIChvayAm JiBtdXN0V3JpdGU2NCkgeworICNpZiBkZWZpbmVkKEpTX0NPREVHRU5fTUlQUzY0KSB8fCBkZWZp bmVkKEpTX0NPREVHRU5fTE9PTkc2NCkgfHwgXAorLSAgICBkZWZpbmVkKEpTX0NPREVHRU5fUklT Q1Y2NCkKKysgICAgZGVmaW5lZChKU19DT0RFR0VOX1JJU0NWNjQpIHx8IGRlZmluZWQoSlNfQ09E RUdFTl9QUEM2NCkKKyAgICAgbG9jWzFdID0gbG9jWzBdID4+IDMxOworICNlbHNlCisgICAgIGxv Y1sxXSA9IDA7CitkaWZmIC0tZ2l0IGEvbWZidC9Bc3NlcnRpb25zLmggYi9tZmJ0L0Fzc2VydGlv bnMuaAoraW5kZXggYTQzNmQwMTlhMTk3Li40ODg3YWY3ZTc2NzYgMTAwNjQ0CistLS0gYS9tZmJ0 L0Fzc2VydGlvbnMuaAorKysrIGIvbWZidC9Bc3NlcnRpb25zLmgKK0BAIC0yODIsNiArMjgyLDEx IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBNT1pfQ3Jhc2hTZXF1ZW5jZSh2b2lkKiBhQWRkcmVzcywg aW50cHRyX3QgYUxpbmUpIHsKKyAgICAgICAic3QuZCAlMSwlMCwwO1xuIiAgLy8gV3JpdGUgdGhl IGxpbmUgbnVtYmVyIHRvIHRoZSBjcmFzaGluZyBhZGRyZXNzCisgICAgICAgOiAgICAgICAgICAg ICAgICAgIC8vIG5vIG91dHB1dCByZWdpc3RlcnMKKyAgICAgICA6ICJyIihhQWRkcmVzcyksICJy IihhTGluZSkpOworKyMgIGVsaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorKyAgYXNtIHZvbGF0 aWxlKAorKyAgICAgICJzdGQgJTEsMCglMCk7XG4iICAvLyBXcml0ZSB0aGUgbGluZSBudW1iZXIg dG8gdGhlIGNyYXNoaW5nIGFkZHJlc3MKKysgICAgICA6ICAgICAgICAgICAgICAgICAgLy8gbm8g b3V0cHV0IHJlZ2lzdGVycworKyAgICAgIDogInIiKGFBZGRyZXNzKSwgInIiKGFMaW5lKSk7Cisg IyAgZWxzZQorICMgICAgd2FybmluZyBcCisgICAgICAgICAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0 dXJlLCByZXBsYWNlIHRoZSBjb2RlIGJlbG93IHdpdGggYXNzZW1ibHkgc3VpdGFibGUgdG8gY3Jh c2ggdGhlIHByb2Nlc3MiCistLSAKKzIuNTIuMAorCgpkaWZmIC0tZ2l0IGEvZmlyZWZveC5zcGVj IGIvZmlyZWZveC5zcGVjCmluZGV4IDA2YTY5MDAuLmJlOGFiYWYgMTAwNjQ0Ci0tLSBhL2ZpcmVm b3guc3BlYworKysgYi9maXJlZm94LnNwZWMKQEAgLTI4MSw2ICsyODEsMTEgQEAgUGF0Y2g2MDA6 ICAgICAgICBwZ28ucGF0Y2gKIFBhdGNoNjAyOiAgICAgICAgbW96aWxsYS0xNTE2ODAzLnBhdGNo CiBQYXRjaDYwMzogICAgICAgIGZpcmVmb3gtZ2NjLWFsd2F5cy1pbmxpbmUucGF0Y2gKIAorIyBw cGM2NGxlIEpJVAorUGF0Y2g5MDA6ICAgICAgICAwMDAxLUFkZC1WU1gtaW5zdHJ1Y3Rpb25zLWZv ci1TS0lBLnBhdGNoCitQYXRjaDkwMTogICAgICAgIDAwMDItQWRkLVZTWC1pbnN0cnVjdGlvbnMt Zm9yLWxpYndlYnAucGF0Y2gKK1BhdGNoOTAyOiAgICAgICAgMDAwMy1BZGQtUFBDNjRMRS1KSVQt YmFja2VuZC5wYXRjaAorCiAKICVpZiAlez9zeXN0ZW1fbnNzfQogQnVpbGRSZXF1aXJlczogIHBr Z2NvbmZpZyhuc3ByKSA+PSAle25zcHJfdmVyc2lvbn0KQEAgLTYwMSw2ICs2MDYsMTEgQEAgY2F0 ICV7U09VUkNFNDl9IHwgc2VkIC1lICJzfExJQkNMQU5HX1JUX1BMQUNFSE9MREVSfGBwd2RgL3dh c2ktc2RrLTMwL2J1aWxkL3N5c3IKICVlbmRpZgogJXBhdGNoIC1QNjAzIC1wMSAtYiAuaW5saW5l CiAKKyMgcHBjNjRsZSBKSVQKKyVwYXRjaCAtUDkwMCAtcDEKKyVwYXRjaCAtUDkwMSAtcDEKKyVw YXRjaCAtUDkwMiAtcDEKKwogcm0gLWYgLm1vemNvbmZpZwogY3AgJXtTT1VSQ0UxMH0gLm1vemNv bmZpZwogZWNobyAiYWNfYWRkX29wdGlvbnMgLS1lbmFibGUtZGVmYXVsdC10b29sa2l0PWNhaXJv LWd0azMtd2F5bGFuZCIgPj4gLm1vemNvbmZpZwo=