ZGlmZiAtLWdpdCBhL2c0MDEzMDIvcHJvamVjdC9nNDAxMzAyLnV2b3B0IGIvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKaW5kZXggYzcyNzg5MC4uYzkxMjE2OCAxMDA2NDQKLS0tIGEvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKKysrIGIvZzQwMTMwMi9wcm9qZWN0L2c0MDEzMDIudXZvcHQKQEAgLTc1OSwxMCArNzU5LDEwIEBACiAgICAgICA8RmlsZVR5cGU+MTwvRmlsZVR5cGU+CiAgICAgICA8dHZFeHA+MDwvdHZFeHA+CiAgICAgICA8Rm9jdXM+MDwvRm9jdXM+Ci0gICAgICA8Q29sdW1uTnVtYmVyPjM0PC9Db2x1bW5OdW1iZXI+CisgICAgICA8Q29sdW1uTnVtYmVyPjA8L0NvbHVtbk51bWJlcj4KICAgICAgIDx0dkV4cE9wdERsZz4wPC90dkV4cE9wdERsZz4KLSAgICAgIDxUb3BMaW5lPjU5MjwvVG9wTGluZT4KLSAgICAgIDxDdXJyZW50TGluZT42MDc8L0N1cnJlbnRMaW5lPgorICAgICAgPFRvcExpbmU+Mzk0PC9Ub3BMaW5lPgorICAgICAgPEN1cnJlbnRMaW5lPjQwMTwvQ3VycmVudExpbmU+CiAgICAgICA8YkRhdmUyPjA8L2JEYXZlMj4KICAgICAgIDxQYXRoV2l0aEZpbGVOYW1lPi4uXC4uXHN1cHdpc2RvbVxzcF9jb25zdW1lLmM8L1BhdGhXaXRoRmlsZU5hbWU+CiAgICAgICA8RmlsZW5hbWVXaXRob3V0UGF0aD5zcF9jb25zdW1lLmM8L0ZpbGVuYW1lV2l0aG91dFBhdGg+CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuYyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCmluZGV4IGU1MmVjMGYuLmM4NjY5MGEgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCisrKyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5jCkBAIC04MCw3ICs4MCwxNSBAQAogICB3aGlsZShzaXplLS0gPiAwKQogICB7CiAgICAgc3BfdW5wYWNrX3ZhbHVlKCZ1bnBhY2ssJmZpZWxkKTsKLSAgICBpZihJU19LRVkoUEtfSU5UX1dBVEVSTElNSVQsZmllbGQua2V5KSkKKyAgICBpZihJU19LRVkoUEtfSU5UX1BFUk1JVCwgZmllbGQua2V5KSkKKyAgICB7CisgICAgICBjYXJkLT5wZXJtaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgIH0KKyAgICBlbHNlIGlmKElTX0tFWShQS19TVFJfTElNSVRNU0csIGZpZWxkLmtleSkpCisgICAgeworICAgICAgTUVNQ1BZKGNhcmQtPmxpbWl0bXNnLCBmaWVsZC52YWwuc3RydmFsLCBmaWVsZC5zdHJsZW4pOworICAgIH0KKyAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfV0FURVJMSU1JVCxmaWVsZC5rZXkpKQogICAgIHsKICAgICAgIGNhcmQtPndhdGVybGltaXQgPSBmaWVsZC52YWwuaW50dmFsOwogICAgIH0KQEAgLTI3MCw3ICsyNzgsMTEgQEAKICAgd2hpbGUoc2l6ZS0tID4gMCkKICAgewogICAgIHNwX3VucGFja192YWx1ZSgmdW5wYWNrLCZmaWVsZCk7Ci0gICAgaWYoSVNfS0VZKFBLX0lOVF9DT0JJTExOTywgZmllbGQua2V5KSkKKyAgICBpZihJU19LRVkoUEtfSU5UX1BFUk1JVCwgZmllbGQua2V5KSkKKyAgICB7CisgICAgICBjYXJkLT5wZXJtaXQgPSBmaWVsZC52YWwuaW50dmFsOworICAgIH0KKyAgICBlbHNlIGlmKElTX0tFWShQS19JTlRfQ09CSUxMTk8sIGZpZWxkLmtleSkpCiAgICAgewogICAgICAgY2FyZC0+Y29iaWxsbm8gPSBmaWVsZC52YWwuaW50dmFsOwogICAgIH0KQEAgLTI5NCw2ICszMDYsMTAgQEAKICAgICB7CiAgICAgICBjYXJkLT5mZWVwYXJhLmZlZV91bml0ID0gZmllbGQudmFsLmludHZhbDsKICAgICB9CisgICAgZWxzZSBpZihJU19LRVkoUEtfSU5UX1dBVEVSTElNSVQsIGZpZWxkLmtleSkpCisgICAgeworICAgICAgY2FyZC0+d2F0ZXJsaW1pdCA9IGZpZWxkLnZhbC5pbnR2YWw7CisgICAgfQogICB9CiAgIHJldHVybiByZXNwLnJldGNvZGU7CiB9CkBAIC01NTgsMjMgKzU3NCwxNiBAQAogICBpZih0aWNrZXIgLSBwb3MtPmxhc3RfY29tbV9zdGF0dXMuc2VuZHRpbWUgPiBDT01NX1dBSVRfVElNRSkKICAgewogICAgIGlmKHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPT0gMCB8fCBwb3MtPmRldmxvZ2luLmxvZ2luX2ZsYWcgPT0gMAotCQl8fCB0aWNrZXIgLSBwb3MtPmRldmxvZ2luLmxhc3RfbG9naW5fdGlja2VyID4gREVMQVlfVElNRTYwcyozMCkKKyAgICAgICAgfHwgdGlja2VyIC0gcG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlciA+IERFTEFZX1RJTUU2MHMqMzApCiAgICAgewotICAgICAgaWYodGlja2VyIC0gcG9zLT5kZXZsb2dpbi5sYXN0X2xvZ2luX3RpY2tlciA+IERFTEFZX1RJTUU2MHMqNjApCi0gICAgICB7CiAgICAgICAgIHBvcy0+ZGV2bG9naW4ubGFzdF9sb2dpbl90aWNrZXIgPSB0aWNrZXI7CiAgICAgICAgIHNwX2FzeW5jX2VxdWlwbWVudF9sb2dpbihwb3MpOwotICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmKHRpY2tlciA8IHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlcgotICAgICAgICAgICAgfHwgcG9zLT5oZWFydGJlYXQubGFzdF9oZWFydGJlYXRfdGlja2VyID09IDAKLSAgICAgICAgICAgIHx8IHRpY2tlciAtIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA+IERFTEFZX1RJTUUxNXMqMikKKyAgICBpZihwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIgPT0gMAorICAgICAgICB8fCB0aWNrZXIgLSBwb3MtPmhlYXJ0YmVhdC5sYXN0X2hlYXJ0YmVhdF90aWNrZXIgPiBERUxBWV9USU1FNjBzKQogICAgIHsKLSAgICAgIGlmKHRpY2tlciAtIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA+IERFTEFZX1RJTUU2MHMpCi0gICAgICB7CiAgICAgICAgIHBvcy0+aGVhcnRiZWF0Lmxhc3RfaGVhcnRiZWF0X3RpY2tlciA9IHRpY2tlcjsKICAgICAgICAgc3BfYXN5bmNfaGVhcnRiZWF0KHBvcyk7Ci0gICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29tbXVuaWNhdGUuaCBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCmluZGV4IGRhNDIyZjMuLjMyNThlZmYgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb21tdW5pY2F0ZS5oCkBAIC03OSw2ICs3OSw4IEBACiAjZGVmaW5lIFBLX0lOVF9BVVRIU1RBVFVTCQkJIjE1IgogI2RlZmluZSBQS19JTlRfUEFZU1RBVFVTCQkJIjE2IgogI2RlZmluZSBQS19JTlRfRkVFU1RBUlQJCQkJIjE3IgorI2RlZmluZSBQS19JTlRfUEVSTUlUCQkJCSIxOCIKKyNkZWZpbmUgUEtfU1RSX0xJTUlUTVNHCQkJCSIxOSIKIAogI2RlZmluZSBTUF9DTURfVVBHUkFERSAweDIwICAgICAgICAgCS8v1NrP38n9vLYKICNkZWZpbmUgU1BfQ01EX1RSQU5TRFRMX0FDQ09VTlQgMHgyMiAgICAvL7zH1cvB98uuCmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uZmlnLmggYi9zdXB3aXNkb20vc3BfY29uZmlnLmgKaW5kZXggYjU3YTA1Yi4uOTQ4ZTg2YSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbmZpZy5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb25maWcuaApAQCAtMjM0LDYgKzIzNCw4IEBACiAKICAgdWludDggd2F0ZXJsaW1pdDsJCS8vtaW0zrP2y67Jz8/eo6gxMDBtbKOpCiAgIHVpbnQzMiBjb2JpbGxubzsJCS8vvbvS17aptaWx4LrFLEJDRMLrCisgIHVpbnQ4CXBlcm1pdDsJCQkvL8rHt/HUytDtz/u30aOsMC3UytDto6wxLbK71MrQ7QorICB1aW50OCBsaW1pdG1zZ1s0NV07CQkvL8/e1sbP+7fR0MXPogogICBzcF9xcmNvZGVfdCBxcmNvZGU7CS8vtv7OrMLrCiAgIHNwX2ZlZXBhcmFfdCBmZWVwYXJhOwogfSBzcF9jYXJkX3Q7CmRpZmYgLS1naXQgYS9zdXB3aXNkb20vc3BfY29uc3RhbnQuaCBiL3N1cHdpc2RvbS9zcF9jb25zdGFudC5oCmluZGV4IDMwODFmYzAuLmE3ZGQ5NWIgMTAwNjQ0Ci0tLSBhL3N1cHdpc2RvbS9zcF9jb25zdGFudC5oCisrKyBiL3N1cHdpc2RvbS9zcF9jb25zdGFudC5oCkBAIC01NCw1ICs1NCw3IEBACiAjZGVmaW5lIFNUQVRVU19LRUVQT1BFTgkJCQkJMQkvL7Ojv6q/qAogI2RlZmluZSBTVEFUVVNfQ0xPU0VECQkJCQkwCS8vyKHP+7Ojv6q/qAogCisjZGVmaW5lIFJDX0xJTUlUX0NPTlNVTVBUSU9OCQkJNzAJLy/P3tbGz/u30QorCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYyBiL3N1cHdpc2RvbS9zcF9jb25zdW1lLmMKaW5kZXggNDA1MmJmZC4uNzM3YjI1YSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2NvbnN1bWUuYworKysgYi9zdXB3aXNkb20vc3BfY29uc3VtZS5jCkBAIC0yODYsMjUgKzI4NiwxMCBAQAogICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHVpbnQxNiBkb193b3JrX2NoZWNrKGNvbnN0IHNwX3Bvc190KiBwb3MpCi17Ci0gIC8vxdC2z8/7t9G98LbuyOe5+7Tz09oyMLvy1d/BrND4z/u30bOsuf0y0KHKsaOs1PLNo9a5s/bLrgotICBpZihwb3MtPnB1cmNoYXNlLnVzZWRfbnVtID49IDEwMDAgfHwgcG9zLT5wdXJjaGFzZS5wYWlkX3N1bSA+PSAxMDAwKQotICB7Ci0gICAgcmV0dXJuIFJDX0NBUkRfVElNRU9VVDsKLSAgfQotICByZXR1cm4gMDsKLX0KLQogc3RhdGljIHVpbnQxNiBkb193b3JrKHNwX3Bvc190KiBwb3MsIHNwX2NhcmRfdCogY2FyZCkKIHsKICAgdWludDE2IHJldCA9IDA7CiAgIHNwX3ZhbHZlX29uKCk7Ci0gIHJldCA9IGRvX3dvcmtfY2hlY2socG9zKTsKLSAgaWYocmV0KQotICB7Ci0gICAgcmV0dXJuIHJldDsKLSAgfQogICAvL7zGy+PP+7fRvfC27gogICByZXQgPSBzcF9jYWxjX3BheWFtdF9ieV9mbG93c2Vuc29yKHBvcywgY2FyZCk7CiAgIGlmKHJldCkKQEAgLTQ2OCw3ICs0NTMsNyBAQAogICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19TVE9QUEVEOwogICAgIGJyZWFrOwogICBjYXNlIENBUkRXT1JLU1RBVFVTX1NUT1BQRUQ6Ci0gICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX05PTkU7CisgICAgZGlzcF9oaW50X2luZm8ocG9zLCAix+uwzr+oIiwgREVMQVlfVElNRTJzKTsKICAgICBicmVhazsKICAgY2FzZSBDQVJEV09SS1NUQVRVU19GRUVDQVJEX1dPUktJTkc6CiAgICAgaWYoTUVNQ01QKHBvcy0+Y2FyZFN0YXRlLnNuciwgY2FyZC0+Y2FyZHBoeWlkLCA0KSAhPSAwKQpAQCAtNDc2LDExICs0NjEsOSBAQAogICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX05PTkU7CiAgICAgICBicmVhazsKICAgICB9Ci0gICAgLy9zaG93X21lbnVfb3B0aW9ucygpOwogICAgIGJyZWFrOwogICBjYXNlIENBUkRXT1JLU1RBVFVTX0VSUk9SOgogICAgIGRvX2Vycm9yKHBvcywgY2FyZFdvcmtTdGF0ZS0+ZXJyY29kZSk7Ci0gICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX05PTkU7CiAgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAgRGVsYXlfbXMoREVMQVlfVElNRTIwMG1zKTsKQEAgLTY1NywxOSArNjQwLDI3IEBACiAgICAgYnJlYWs7CiAgIGNhc2UgQ0FSRFdPUktTVEFUVVNfUkVBRFk6CiAgICAgQ0FSRC5xcmNvZGUubm93dGltZSA9IHNwX2dldF90aWNrZXIoKTsKLSAgICBpZigoQ0FSRC5xcmNvZGUubm93dGltZSAtIENBUkQucXJjb2RlLnN0YXJ0dGltZSkgPiBDQVJELnFyY29kZS52YWxpZHRpbWUpCisgICAgaWYoKENBUkQucXJjb2RlLm5vd3RpbWUgLSBDQVJELnFyY29kZS5zdGFydHRpbWUpIDwgQ0FSRC5xcmNvZGUudmFsaWR0aW1lKkRFTEFZX1RJTUUxcykKICAgICB7CiAgICAgICBzaG93X2hvbWUocG9zKTsKICAgICAgIHNob3dfaG9tZV9xcmNvZGUoQ0FSRC5xcmNvZGUucXJjb2RlX3VybCk7Ci0gICAgICBpZihDQVJELnFyY29kZS5ub3d0aW1lIC0gdGljayA+IERFTEFZX1RJTUUzcykKKyAgICAgIGlmKENBUkQucXJjb2RlLm5vd3RpbWUgLSB0aWNrID4gREVMQVlfVElNRTJzKQogICAgICAgewogICAgICAgICB0aWNrID0gQ0FSRC5xcmNvZGUubm93dGltZTsKICAgICAgICAgcmV0ID0gc3BfcXJjb2RlX3F1ZXJ5KHBvcywgJkNBUkQpOwogICAgICAgICBpZighcmV0ICYmIENBUkQucXJjb2RlLmF1dGhzdGF0dXMpCiAgICAgICAgIHsKLSAgICAgICAgICBkb19zdGFydChwb3MpOwotICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmxhc3Rfc3RhdGUgPSBjYXJkV29ya1N0YXRlLT5jdXJyZW50X3N0YXRlOwotICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19XT1JLSU5HOworICAgICAgICAgIGlmKENBUkQucGVybWl0KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmVycmNvZGUgPSBSQ19MSU1JVF9DT05TVU1QVElPTjsKKyAgICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGRvX3N0YXJ0KHBvcyk7CisgICAgICAgICAgICBjYXJkV29ya1N0YXRlLT5sYXN0X3N0YXRlID0gY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZTsKKyAgICAgICAgICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19XT1JLSU5HOworICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgfQogICAgIH0KQEAgLTY5Miw2ICs2ODMsMTEgQEAKICAgICAgIGNhcmRXb3JrU3RhdGUtPmN1cnJlbnRfc3RhdGUgPSBDQVJEV09SS1NUQVRVU19FUlJPUjsKICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpZihwb3MtPnB1cmNoYXNlLnBhaWRfbnVtID4gQ0FSRC53YXRlcmxpbWl0KQorICAgIHsKKyAgICAgIGRpc3BfaGludF9pbmZvKHBvcywgItLRtO+1pbTOs/bLrsnPz94iLCBERUxBWV9USU1FMnMpOworICAgICAgY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZSA9IENBUkRXT1JLU1RBVFVTX1NUT1BQSU5HOworICAgIH0KICAgICBjYXJkV29ya1N0YXRlLT5sYXN0X3N0YXRlID0gY2FyZFdvcmtTdGF0ZS0+Y3VycmVudF9zdGF0ZTsKICAgICBjYXJkV29ya1N0YXRlLT5wYXVzZV90aWNrID0gc3BfZ2V0X3RpY2tlcigpOwogICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYyBiL3N1cHdpc2RvbS9zcF9kaXNwbGF5LmMKaW5kZXggNjc2ZTI3ZC4uODYwYTQ1MSAxMDA2NDQKLS0tIGEvc3Vwd2lzZG9tL3NwX2Rpc3BsYXkuYworKysgYi9zdXB3aXNkb20vc3BfZGlzcGxheS5jCkBAIC0xNjIsMTIwICsxNjIsMTI0IEBACiAgIHN3aXRjaChlcnJjb2RlKQogICB7CiAgIGNhc2UgUkNfUFNBTV9FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIlNBTbi0zrvKp7DcIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICJTQU24tM67yqew3CIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfTE9HSU46Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgItHp1qTD2NS/yqew3CIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAi0enWpMPY1L/Kp7DcIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9SRUFEOgotICAgIHNwcmludGYobXNnLCIlcyIsICK2wb+oyqew3CIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAitsG/qMqnsNwiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX1dSSVRFOgotICAgIHNwcmludGYobXNnLCIlcyIsICLQtL+oyqew3CIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAi0LS/qMqnsNwiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19GTEFTSF9FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIkZMQVNI0uyzoyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiRkxBU0jS7LOjIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfSEFSRFdBUkVfRVJSOgotICAgIHNwcmludGYobXNnLCIlcyIsICK5zLz+0uyzoyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiucy8/tLss6MiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19GTEFTSF9OT19SSUdIVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiRkxBU0jP3tbGIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICJGTEFTSM/e1sYiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJEX05PUklHSFQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIr+ozt7IqM/eIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK/qM7eyKjP3iIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfRVhQSVJFRDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiv6jS0bn9xtoiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIr+o0tG5/cbaIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9MT1NUOgotICAgIHNwcmludGYobXNnLCIlcyIsICK/qNLRy/i2qCIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiv6jS0cv4tqgiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DQVJETk9fRVhDRVBUOgotICAgIHNwcmludGYobXNnLCIlcyIsICK/qNLss6MiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIr+o0uyzoyIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRfVElNRU9VVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiyrnTw8yrvsMiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsq508PMq77DIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSREJBTF9FWENFUFQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgItPgtu7S7LOjIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLT4Lbu0uyzoyIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0NBUkRCQUxfTEFDSzoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAix+vBqrv6z/u30SIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAix+vBqrv6z/u30SIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0RFVlBIWUlEX05PVFNFVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAizrTJ6NbDu/q6xSIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAizrTJ6NbDu/q6xSIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0ZFRVJBVEVfTk9UU0VUOgotICAgIHNwcmludGYobXNnLCIlcyIsICLOtMno1sO30cLKIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLOtMno1sO30cLKIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfREVWX09GRkxJTkVfRVJST1I6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIsnosbjN0bv6zKu+wyIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiyeixuM3Ru/rMq77DIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfVFJBTlNEVExfRlVMTDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAiwffLrtLRwvoiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsH3y67S0cL6Iik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfRklMRTA5X0NSQ19FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIjA5Q1JDtO3O8yIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiMDlDUkO07c7zIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfRklMRTEwX0NSQ19FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIjEwQ1JDtO3O8yIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiMTBDUkO07c7zIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9JTlZBTElEOgotICAgIHNwcmludGYobXNnLCIlcyIsICLO3tCnv6giKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIs7e0Ke/qCIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX0ZFRU5VTV9FUlJPUjoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAit9HCyrj2yv207c7zIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK30cLKuPbK/bTtzvMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19OT1RTVVBQT1JUOgotICAgIHNwcmludGYobXNnLCIlcyIsICKyu9ans9YiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrK71qez1iIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX05PVF9TQU1FX0NBUkQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIrK7zay/qCIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAisrvNrL+oIik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUkNfTU9ERV9OT1RfU1VQUE9SVDoKLSAgICBzcHJpbnRmKG1zZywiJXMiLCAixKPKvbK71qez1iIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAixKPKvbK71qez1iIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX1VQRFBST0dfRVJSOgotICAgIHNwcmludGYobXNnLCIlcyIsICLJ/by2yqew3CIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiyf28tsqnsNwiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19DT05GUEFSQV9DUkNfRVJSOgotICAgIHNwcmludGYobXNnLCIlcyIsICLF5NbDQ1JDtO3O8yIpOworICAgIHNwcmludGYobXNnLCAiJXMiLCAixeTWw0NSQ7TtzvMiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19UUkFOU0RUTF9OT19FUlI6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIsH3y666xdLss6MiKTsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsH3y666xdLss6MiKTsKICAgICBicmVhazsKICAgY2FzZSBSQ19ERVZJQ0VOT19PVVQ6Ci0gICAgc3ByaW50Zihtc2csIiVzIiwgIrv6usW5/bTzIik7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK7+rrFuf208yIpOwogICAgIGJyZWFrOwogICBjYXNlIFJDX1FSQ09ERV9GQUlMVVJFOgotICAJc3ByaW50Zihtc2csIiVzIiwgIrb+zqzC67vxyKHKp7DcIik7Ci0JYnJlYWs7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK2/s6swuu78cihyqew3CIpOworICAgIGJyZWFrOwogICBjYXNlIFJDX1FSQ09ERV9USU1FT1VUOgotICAJc3ByaW50Zihtc2csIiVzIiwgIrb+zqzC67OsyrEiKTsKLQlicmVhazsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIrb+zqzC67OsyrEiKTsKKyAgICBicmVhazsKICAgY2FzZSBSQ19RUkNPREVfUVVFUllfRkFJTDoKLSAgCXNwcmludGYobXNnLCIlcyIsICK2/s6swuvIz9akyqew3CIpOwotCWJyZWFrOworICAgIHNwcmludGYobXNnLCAiJXMiLCAitv7OrMLryM/WpMqnsNwiKTsKKyAgICBicmVhazsKICAgY2FzZSBSQ19ERVZfTk9UX0xPR0lOOgotICAJc3ByaW50Zihtc2csIiVzIiwgIsnosbjOtMeptb0iKTsKLQlicmVhazsKKyAgICBzcHJpbnRmKG1zZywgIiVzIiwgIsnosbjOtMeptb0iKTsKKyAgICBicmVhazsKICAgY2FzZSBSQ19ERVZfRkFVTFQ6Ci0gIAlzcHJpbnRmKG1zZywiJXMiLCAiyeixuNLJy8a5ytXPIik7Ci0JYnJlYWs7CisgICAgc3ByaW50Zihtc2csICIlcyIsICLJ6LG40snLxrnK1c8iKTsKKyAgICBicmVhazsKICAgY2FzZSBSQ19ERVZfTk9TRVRfRkxPV1NFTlNPUl9VTklUOgotICAJc3ByaW50Zihtc2csIiVzIiwgIsH3wb+8xsvjtaXOu860yejWwyIpOwotCWJyZWFrOworICAgIHNwcmludGYobXNnLCAiJXMiLCAiwffBv7zGy+O1pc67zrTJ6NbDIik7CisgICAgYnJlYWs7CiAgIGNhc2UgUkNfQ0FSRF9BVVRIRU5USUNBVElPTjoKLSAgCXNwcmludGYobXNnLCIlcyIsICK/qMjP1qTKp7DcIik7Ci0JYnJlYWs7CisgICAgc3ByaW50Zihtc2csICIlcyIsICK/qMjP1qTKp7DcIik7CisgICAgYnJlYWs7CisgIGNhc2UgUkNfTElNSVRfQ09OU1VNUFRJT046CisgICAgc3ByaW50Zihtc2csICIlcyIsICK4w9PDu6exu8/e1sbP+7fRIik7CisgICAgYnJlYWs7CiAgIGRlZmF1bHQ6CiAgICAgc3ByaW50Zihtc2csIrTtzvPC6z0weCUwNHgiLGVycmNvZGUpOwogICB9CiAgIGRpc3BfaGludF9pbmZvX3R3byhwb3MsaGludCxtc2csREVMQVlfVElNRTNzKTsKIH0KIAotdm9pZCBkaXNwX2hpbnRfaW5mb190aHJlZShzcF9wb3NfdCogcG9zLGNvbnN0IGNoYXIqIG1zZzEsY29uc3QgY2hhciogbXNnMixjb25zdCBjaGFyKiBtc2czLHVpbnQzMiBtcykKK3ZvaWQgZGlzcF9oaW50X2luZm9fdGhyZWUoc3BfcG9zX3QqIHBvcyxjb25zdCBjaGFyKiBtc2cxLGNvbnN0IGNoYXIqIG1zZzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1zZzMsdWludDMyIG1zKQogewogICBzaG93X3RpdGxlKCk7CiAgIHNob3dfYm90dG9tKHBvcyk7Cg==