ZGlmZiAtLWdpdCBhL2FwL2FwcC96dGVfY29tbS9hdF9jdGwvc3JjL2F0Y29uZmlnL3BzX25vcm1hbC5jIGIvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfbm9ybWFsLmMKaW5kZXggMmQ0YzZiMS4uMDNkNDNlYiAxMDA3NTUKLS0tIGEvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfbm9ybWFsLmMKKysrIGIvYXAvYXBwL3p0ZV9jb21tL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfbm9ybWFsLmMKQEAgLTExNSw2ICsxMTUsMTQgQEAKIAl2b2lkICpwWzVdID0geyZ0aW1laW5mby50aW1lX3pvbmUsJnRpbWVpbmZvLnNhdl90aW1lLHRlbXAxLHRlbXAyLHRpbWVpbmZvLnVuaXZlcl90aW1lfTsNCiAJaW50IHRpbWVfem9uZSA9IDA7DQogCQ0KKwkvLz4+PnNqLnpoYW5nIGFkZCBAMjAyMy0wOC0xMCBmb3Igc3lzdGltZSBOSVRaIHN5bmMgZW5hYmxlL2Rpc2VuYWJsZS4NCisJaWYoMCAhPSBzeXN0ZW0oInVjaSBnZXQgbHlucV91Y2kubHlucV9zeW5jX3RpbWUubHlucV9tb2RlbV9zeW5jX3RpbWVfZW5hYmxlIHwgZ3JlcCAtRSBcJ14xJFwnIikpDQorCXsNCisJCWF0X3ByaW50KEFUX0VSUiwiem1taV9hdXRvX2FjdDogbml0eiBkaXNlbmFibGVkLiBcbiIpOw0KKwkJcmV0dXJuIEFUX0VORDsNCisJfQ0KKwkvLz4+PnNqLnpoYW5nIGFkZCBAMjAyMy0wOC0xMCBlbmQuDQorDQogICAgIHNjX2NmZ19nZXQoInNudHBfdGltZV9zZXRfbW9kZSIsIG1vZGUsIHNpemVvZihtb2RlKSk7DQogCWlmKHN0cmNtcChtb2RlLCAibWFudWFsIikgPT0gMCkNCiAJew0KZGlmZiAtLWdpdCBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvbGliL2JvYXJkLmMgYi9ib290L2NvbW1vbi9zcmMvbG9hZGVyL2xpYi9ib2FyZC5jCmluZGV4IDA5NDE3YWYuLjZkMzg4OTMgMTAwNzU1Ci0tLSBhL2Jvb3QvY29tbW9uL3NyYy9sb2FkZXIvbGliL2JvYXJkLmMKKysrIGIvYm9vdC9jb21tb24vc3JjL2xvYWRlci9saWIvYm9hcmQuYwpAQCAtMjAsNyArMjAsMTEgQEAKICNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKIAogI2RlZmluZSBGTEFHU19QQVJUSVRJT05fRVJST1IgKDB4MTExMSkgLyq31sf40uyzoyovCi0KKy8veGYubGlAMjAyMzA4MTUgYWRkIGZvciBkb3dubG9hZCB3aXRob3V0IHBvd2Vya2V5IHN0YXJ0IAorI2RlZmluZSBHUElPMF9SRUdfQkFTRSAgICAgIDB4MDAxM0QwMDAKKyNkZWZpbmUgR1BJTzI0X1BTSE9MRAkoMjQpCisjZGVmaW5lIElPX0NGR19CQVNFICgweDAwMTNDMDAwKzB4ODAwKQorLy94Zi5saUAyMDIzMDgxNSBhZGQgZm9yIGRvd25sb2FkIHdpdGhvdXQgcG93ZXJrZXkgZW5kCiB0eXBlZGVmIHNob3J0IChpbml0X2ZuY190KSAodm9pZCk7CiAKIGludCBwcmludF9pbmZvKHZvaWQpCkBAIC0xNTIsNiArMTU2LDIxIEBACiAjaWYgQ0ZHX1BSSU5URgogCXVhcnRfaW5pdCgpOwogI2VuZGlmCisvL3hmLmxpQDIwMjMwODE1IGFkZCBmb3IgZG93bmxvYWQgd2l0aG91dCBwb3dlcmtleSBzdGFydAorI2lmIDEvL3BzaG9sZCBvbgkKKwlhbXRfdmFsdWUgPSByZWFkbChJT19DRkdfQkFTRSsweDQpOworCWFtdF92YWx1ZSAmPSB+KDM8PDI4KTsKKwl3cml0ZWwoYW10X3ZhbHVlLCAoSU9fQ0ZHX0JBU0UrMHg0KSk7CisJLypkaXJlY3Rpb246IG91dCovCisJYW10X3ZhbHVlID0gcmVhZGwoR1BJTzBfUkVHX0JBU0UgKyAoR1BJTzI0X1BTSE9MRC8xNikqMHg0MCk7CisJYW10X3ZhbHVlICY9IH4oMTw8KDI0JTE2KSk7CisJd3JpdGVsKGFtdF92YWx1ZSwgR1BJTzBfUkVHX0JBU0UgKyAoR1BJTzI0X1BTSE9MRC8xNikqMHg0MCk7CisJLypzZXQgb3V0IDEqLworCWFtdF92YWx1ZSA9IHJlYWRsKEdQSU8wX1JFR19CQVNFICsgMHgxOCsgKEdQSU8yNF9QU0hPTEQvMTYpKjB4NDApOworCWFtdF92YWx1ZSB8PSAoMTw8KDI0JTE2KSk7CisJd3JpdGVsKGFtdF92YWx1ZSwgR1BJTzBfUkVHX0JBU0UgKyAweDE4KyAoR1BJTzI0X1BTSE9MRC8xNikqMHg0MCk7CisjZW5kaWYKKy8veGYubGlAMjAyMzA4MTUgYWRkIGZvciBkb3dubG9hZCB3aXRob3V0IHBvd2Vya2V5IGVuZAogCXByaW50X2luZm8oKTsKIAogCS8qIEFmdGVyIHJlc2V0LCBDb3B5IHpsb2FkZXIgZm9yY2VseS4gKi8KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby92ZWhpY2xlX2RjLmNvbmYgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vY29uZi9kaXN0cm8vdmVoaWNsZV9kYy5jb25mCmluZGV4IDVkZTFkYjIuLmQ1YWNjNzcgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby92ZWhpY2xlX2RjLmNvbmYKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL2NvbmYvZGlzdHJvL3ZlaGljbGVfZGMuY29uZgpAQCAtMTYzLDYgKzE2Myw3IEBACiAgICAgICAgIGxpYmx5bnEtcXNlci1uZXR3b3JrIFwKICAgICAgICAgbGlibHlucS1xc2VyLWduc3MgXAogICAgICAgICBsaWJseW5xLXFzZXItZm90YSBcCisgICAgICAgIGxpYmx5bnEtc3lzdGltZSBcCiAJIgogCiB6eGljX2xpYiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTkZJR19URUxfQVBJX1NVUFBPUlQnLCAnUklMJywgJ2xpYnJpbCBsaWJyZWZlcmVuY2UtcmlsJywgJ2xpYnRlbHN2cicsIGQpfSIKQEAgLTIzMSw2ICsyMzIsNyBAQAogICAgICAgICBseW5xLXFzZXItZm90YS1kZW1vIFwKICAgICAgICAgbHlucS1xc2VyLWduc3MtZGVtbyBcCiAgICAgICAgIGx5bnEtcXNlci1uZXR3b3JrLWRlbW8gXAorICAgICAgICBseW5xLXN5c3RpbWUtZGVtbyBcCiAJIgogCiB6eGljX2FwcF9vcGVuICs9ICIke0BiYi51dGlscy5jb250YWlucygnQ09ORklHX1RFTF9BUElfU1VQUE9SVCcsICdSSUwnLCAncmlsZCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vY29uZi9kaXN0cm8vdmVoaWNsZV9kY19yZWYuY29uZiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby92ZWhpY2xlX2RjX3JlZi5jb25mCmluZGV4IGUxYWQ3M2QuLjIzYmFjNjMgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby92ZWhpY2xlX2RjX3JlZi5jb25mCisrKyBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby92ZWhpY2xlX2RjX3JlZi5jb25mCkBAIC0xOTEsNiArMTkxLDggQEAKICAgICAgICAgbGlibHlucS1xc2VyLW5ldHdvcmsgXAogICAgICAgICBsaWJseW5xLXFzZXItZ25zcyBcCiAgICAgICAgIGxpYmx5bnEtcXNlci1mb3RhIFwKKyAgICAgICAgbGlicG93ZXJhbGFybSBcCisgICAgICAgIGxpYmx5bnEtc3lzdGltZSBcCiAJIgogCiB6eGljX2xpYiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTkZJR19URUxfQVBJX1NVUFBPUlQnLCAnUklMJywgJ2xpYnJpbCcsICdsaWJ0ZWxzdnInLCBkKX0iCkBAIC0yNTgsNyArMjYwLDkgQEAKICAgICAgICAgbHlucS1xc2VyLWZvdGEtZGVtbyBcCiAgICAgICAgIGx5bnEtcXNlci1nbnNzLWRlbW8gXAogICAgICAgICBseW5xLXFzZXItbmV0d29yay1kZW1vIFwKLQkiCisgICAgICAgIHBvd2VyYWxhcm0tZGVtbyBcCisgICAgICAgIGx5bnEtc3lzdGltZS1kZW1vIFwKKyAgICAgICAgIgogCiB6eGljX2FwcF9vcGVuICs9ICIke0BiYi51dGlscy5jb250YWlucygnQ09ORklHX1RFTF9BUElfU1VQUE9SVCcsICdSSUwnLCAncmlsZCcsICcnLCBkKX0iCiB6eGljX2FwcF9vcGVuICs9ICIke0BiYi51dGlscy5jb250YWlucygnQ09ORklHX1RFTF9BUElfU1VQUE9SVCcsICdCTCcsICd0ZWwtc3ZyJywgJycsIGQpfSIKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbGlibHlucS1zeXN0aW1lL2xpYmx5bnEtc3lzdGltZS5iYiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbGlibHlucS1zeXN0aW1lL2xpYmx5bnEtc3lzdGltZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTY0YWFkCi0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9saWJseW5xLXN5c3RpbWUvbGlibHlucS1zeXN0aW1lLmJiCkBAIC0wLDAgKzEsNjQgQEAKKyNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2UKKworREVTQ1JJUFRJT04gPSAibGlibHlucS1zeXN0aW1lIgorTElDRU5TRSA9ICJDTE9TRUQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMWUwN2U4ZDg4ZTI2MjYzZTcxZDNhOWUyYWE5YTJmZiIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfUExBVEZPUk0nLCAnVDEwNicsICJsaWJzY3RlbCIsICcnLCBkKX0gbGlibHlucS11Y2kgbGlibHlucS1sb2ciCisjaW5oZXJpdCB3b3Jrb25zcmMKK1dPUktPTlNSQyA9ICIke1RPUERJUn0vLi4vc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS8iCitGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSIke1RPUERJUn0vLi4vc3JjL2x5bnEvbGliLzoiCitTUkNfVVJJID0gIiBcCisgICAgICAgICAgZmlsZTovL2xpYmx5bnEtc3lzdGltZSBcCisgICAgICAgICAgIgorCitTUkMtRElSID0gIiR7U30vLi4vbGlibHlucS1zeXN0aW1lIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKK0JCX0lOQ0xVREVfQUREID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IgorQkJfTERGTEFHU19BREQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLVdsLC0taGFzaC1zdHlsZT1nbnUiCisjUGFyYW1ldGVycyBwYXNzZWQgdG8gZG9fY29tcGlsZSgpCitFWFRSQV9PRU1BS0UgPSAiJ1RBUkdFVF9QTEFURk9STSA9ICR7VEFSR0VUX1BMQVRGT1JNfSciCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9saWJkaXJ9Lyouc28gXAorICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn1cCisgICAgICAgICAgICAgICAke2Jhc2Vfc2JpbmRpcn0gXAorICAgICAgICAgICAgICAgL2V0Yy9kYnVzLTEvc3lzdGVtLmQvIgorRklMRVNfJHtQTn0tZGV2ID0gIi90ZXN0IFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9IgorCitGSUxFU18ke1BOfS1kb2MgPSAiL2RvYyIKKworRklMRVNfJHtQTn0tZGJnID0iJHtiYXNlX2JpbmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICR7YmFzZV9saWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAke2Jhc2Vfc2JpbmRpcn0vLmRlYnVnIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiYWxyZWFkeS1zdHJpcHBlZCIKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJpbnN0YWxsZWQtdnMtc2hpcHBlZCIKKworCisjSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCitkb19jb21waWxlICgpIHsKKwlpZiBbICIke1BBQ0tBR0VfQVJDSH0iID0gImNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24iIF07IHRoZW4KKwkJb2VfcnVubWFrZSBhbGwgLUMgJHtTUkMtRElSfSBST09UPSR7U1RBR0lOR19ESVJfSE9TVH0gT0ZMQUdTPSItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSAtT3MgLW1mcHU9bmVvbi12ZnB2NCAtbWhhcmQtZmxvYXQgLVdsLC0taGFzaC1zdHlsZT1nbnUiCisJZWxpZiBbICIke1BBQ0tBR0VfQVJDSH0iID0gImNvcnRleGE3aGYtbmVvbi12ZnB2NCIgXTsgdGhlbgorCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1PcyAtbWZwdT1uZW9uLXZmcHY0IC1taGFyZC1mbG9hdCAtV2wsLS1oYXNoLXN0eWxlPWdudSIKKwllbGlmIFsgIiR7UEFDS0FHRV9BUkNIfSIgPSAiY29ydGV4YTUzaGYtbmVvbi1mcC1hcm12OCIgXTsgdGhlbgorCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1PcyAtbWZwdT1uZW9uLXZmcHY0IC1taGFyZC1mbG9hdCAtV2wsLS1oYXNoLXN0eWxlPWdudSAtbWhhcmQtZmxvYXQgLW1mcHU9bmVvbi1mcC1hcm12OCAtbWZsb2F0LWFiaT1oYXJkIC1tY3B1PWNvcnRleC1hNTMgLW10dW5lPWNvcnRleC1hNTMiCisJZWxzZQorCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1PcyAtV2wsLS1oYXNoLXN0eWxlPWdudSIKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgLUMgJHtTUkMtRElSfSBST09UPSR7RH0KKwkKKyAgICBpZiBbIC1kICIke1dPUktPTlNSQ30iIF0gOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgICAgIGNwIC1hZiAke1NSQy1ESVJ9L2luY2x1ZGUvICR7RH0ke2luY2x1ZGVkaXJ9LworICAgIGZpIAorfQorCithZGR0YXNrIGJhY2hjbGVhbgorZG9fYmFjaGNsZWFuICgpIHsKKyAgICBvZV9ydW5tYWtlIGNsZWFuCit9CmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2xpYnBvd2VyYWxhcm0vbGlicG93ZXJhbGFybS5iYiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbGlicG93ZXJhbGFybS9saWJwb3dlcmFsYXJtLmJiCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4Njc2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2xpYnBvd2VyYWxhcm0vbGlicG93ZXJhbGFybS5iYgpAQCAtMCwwICsxLDU4IEBACisjaW5oZXJpdCBleHRlcm5hbHNyYyBwYWNrYWdlCitERVNDUklQVElPTiA9ICJsaWJwb3dlcmFsYXJtLnNvICIKK1NFQ1RJT04gPSAiYmFzZSIKKyNMSUNFTlNFID0gIk1vYmlsZXRlayIiCitMSUNFTlNFID0gIkNMT1NFRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWQ3NTk1MzJkMjk1YTRlYzA3MjUwZWRmOTMxY2FlZjgwIgorREVQRU5EUyArPSAiYm9vdGNoYXJ0ICBsaWJseW5xLWxvZyBsaWJzY3RlbCAiCisKKyNpbmhlcml0IHdvcmtvbnNyYworV09SS09OU1JDID0gIiR7VE9QRElSfS8uLi9zcmMvbHlucS9saWIvbGlicG93ZXJhbGFybS8iCisKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9IiR7VE9QRElSfS8uLi9zcmMvbHlucS9saWIvOiIKK1NSQ19VUkkgPSAiIFwKKyAgICAgICAgICBmaWxlOi8vbGlicG93ZXJhbGFybSBcCisgICAgICAgICAgIgorU1JDLURJUiA9ICIke1N9Ly4uL2xpYnBvd2VyYWxhcm0iCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKK0JCX0lOQ0xVREVfQUREID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IgorQkJfTERGTEFHU19BREQgPSAiLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLVdsLC0taGFzaC1zdHlsZT1nbnUiCisKKyNQYXJhbWV0ZXJzIHBhc3NlZCB0byBkb19jb21waWxlKCkKKworRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyBcCisgICAgICAgICAgICAgICAke2Jhc2VfYmluZGlyfVwKKyAgICAgICAgICAgICAgICR7YmFzZV9zYmluZGlyfSIKKworCitGSUxFU18ke1BOfS1kZXYgPSAiL3Rlc3QgXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0iCisKK0ZJTEVTXyR7UE59LWRvYyA9ICIvZG9jIgorCitGSUxFU18ke1BOfS1kYmcgPSIke2Jhc2VfYmluZGlyfS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICR7YmFzZV9zYmluZGlyfS8uZGVidWciCisKK0lOU0FORV9TS0lQXyR7UE59ICs9ICJhbHJlYWR5LXN0cmlwcGVkIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImluc3RhbGxlZC12cy1zaGlwcGVkIgorCisKKyNJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKK2RvX2NvbXBpbGUgKCkgeworCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1PcyAtV2wsLS1oYXNoLXN0eWxlPWdudSAtRFRFTEVQSE9OWVdBUkUiCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIG9lX3J1bm1ha2UgaW5zdGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtEfQorCQorICAgIGlmIFsgLWQgIiR7V09SS09OU1JDfSIgXSA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICAgICAgY3AgLWFmICR7U1JDLURJUn0vaW5jbHVkZS8gJHtEfSR7aW5jbHVkZWRpcn0vCisgICAgZmkgCit9CisKK2FkZHRhc2sgYmFjaGNsZWFuCitkb19iYWNoY2xlYW4gKCkgeworICAgIG9lX3J1bm1ha2UgY2xlYW4KK30KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLWZvdGEtZGVtby9seW5xLXFzZXItZm90YS1kZW1vLmNwcCBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLWZvdGEtZGVtby9maWxlcy9seW5xLXFzZXItZm90YS1kZW1vLmNwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXFzZXItZm90YS1kZW1vL2x5bnEtcXNlci1mb3RhLWRlbW8uY3BwCnJlbmFtZSB0byBjYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1mb3RhLWRlbW8vZmlsZXMvbHlucS1xc2VyLWZvdGEtZGVtby5jcHAKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLWZvdGEtZGVtby9seW5xLXFzZXItZm90YS1kZW1vLmJiIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItZm90YS1kZW1vL2x5bnEtcXNlci1mb3RhLWRlbW8uYmIKaW5kZXggYWQ4YWYyOC4uZDI0YjhiYiAxMDA2NDQKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItZm90YS1kZW1vL2x5bnEtcXNlci1mb3RhLWRlbW8uYmIKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItZm90YS1kZW1vL2x5bnEtcXNlci1mb3RhLWRlbW8uYmIKQEAgLTEsMzYgKzEsMzMgQEAKLSNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2UKLSNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2Ugc3lzdGVtZAotREVTQ1JJUFRJT04gPSAibHlucS1xc2VyLWZvdGEtZGVtbyIKLUxJQ0VOU0UgPSAiQ0xPU0VEIgotTElDRU5TRSA9ICJDTE9TRUQiCi1MSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMWUwN2U4ZDg4ZTI2MjYzZTcxZDNhOWUyYWE5YTJmZiIKLURFUEVORFMgKz0gImxpYmx5bnEtcXNlci1mb3RhIgotI2luaGVyaXQgd29ya29uc3JjCi1XT1JLT05TUkMgPSAiJHtUT1BESVJ9Ly4uL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLWZvdGEtZGVtbyIKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9IiR7VE9QRElSfS8uLi9zcmMvbHlucS9wYWNrYWdlcy9hcHBzOiIKLVNSQ19VUkkgPSAiIFwKLSAgICAgICAgICBmaWxlOi8vbHlucS1xc2VyLWZvdGEtZGVtbyBcCi0gICAgICAgICAgIgorIyBQYWNrYWdlIHN1bW1hcnkKK1NVTU1BUlkgPSAibHlucS1xc2VyLWZvdGEtZGVtbyIKKyMgTGljZW5zZSwgZm9yIGV4YW1wbGUgTUlUCitMSUNFTlNFID0gIk1JVCIKKyMgTGljZW5zZSBjaGVja3N1bSBmaWxlIGlzIGFsd2F5cyByZXF1aXJlZAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKwkJICAKK1NSQ19VUkkgPSAiIGZpbGU6Ly9seW5xLXFzZXItZm90YS1kZW1vLmNwcCIKIAogU1JDLURJUiA9ICIke1N9Ly4uL2x5bnEtcXNlci1mb3RhLWRlbW8iCiBUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKLVNZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0iCisKICNQYXJhbWV0ZXJzIHBhc3NlZCB0byBkb19jb21waWxlKCkKIEVYVFJBX09FTUFLRSA9ICInVEFSR0VUX1BMQVRGT1JNID0gJHtUQVJHRVRfUExBVEZPUk19J1wiCiBFWFRSQV9PRU1BS0UgKz0gIidNT0JJTEVURUtfUklMX0NGRyA9ICR7TU9CSUxFVEVLX1JJTF9DRkd9JyIKIAotRVhUUkFfT0VNQUtFICs9ICInTU9CSUxFVEVLX0ZPVEFfQ0ZHID0gJHtNT0JJTEVURUtfRk9UQV9DRkd9JyIKK0xPQ0FMX0NfSU5DTFVERVMgPSAiLUkuIgorCitMT0NBTF9MSUJTID0gIi1MLiAtbGRsIC1sc3RkYysrIgorCisjSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCitTID0gIiR7V09SS0RJUn0iCiAKICNJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKIGRvX2NvbXBpbGUgKCkgewotCWlmIHRlc3QgIiR7UEFDS0FHRV9BUkNIfSIgPSAiY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiIgfHwgdGVzdCAiJHtQQUNLQUdFX0FSQ0h9IiA9ICJjb3J0ZXhhN2hmLW5lb24tdmZwdjQiOyB0aGVuCi0JCW9lX3J1bm1ha2UgYWxsIC1DICR7U1JDLURJUn0gUk9PVD0ke1NUQUdJTkdfRElSX0hPU1R9IE9GTEFHUz0iLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLW1oYXJkLWZsb2F0IgotCWVsc2UKLQkJb2VfcnVubWFrZSBhbGwgLUMgJHtTUkMtRElSfSBST09UPSR7U1RBR0lOR19ESVJfSE9TVH0gT0ZMQUdTPSItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSIKLQlmaQorCisJJHtDWFh9IC1XYWxsIGx5bnEtcXNlci1mb3RhLWRlbW8uY3BwICR7TE9DQUxfTElCU30gJHtMT0NBTF9DX0lOQ0xVREVTfSAtbyBseW5xLXFzZXItZm90YS1kZW1vCiB9CiAKIGRvX2luc3RhbGwoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LwotCWluc3RhbGwgLW0gMDc1NSAke1NSQy1ESVJ9L2x5bnEtcXNlci1mb3RhLWRlbW8gJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9seW5xLXFzZXItZm90YS1kZW1vICR7RH0ke2JpbmRpcn0vCiB9CmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8vbHlucS1xc2VyLW5ldHdvcmstZGVtby5jcHAgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8vZmlsZXMvbHlucS1xc2VyLW5ldHdvcmstZGVtby5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLW5ldHdvcmstZGVtby9seW5xLXFzZXItbmV0d29yay1kZW1vLmNwcApyZW5hbWUgdG8gY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItbmV0d29yay1kZW1vL2ZpbGVzL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8uY3BwCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8vaW5jbHVkZS9seW5xX3FzZXJfbmV0d29yay5oIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItbmV0d29yay1kZW1vL2ZpbGVzL2x5bnFfcXNlcl9uZXR3b3JrLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGNhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLW5ldHdvcmstZGVtby9pbmNsdWRlL2x5bnFfcXNlcl9uZXR3b3JrLmgKcmVuYW1lIHRvIGNhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLW5ldHdvcmstZGVtby9maWxlcy9seW5xX3FzZXJfbmV0d29yay5oCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8vbHlucS1xc2VyLW5ldHdvcmstZGVtby5iYiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLW5ldHdvcmstZGVtby9seW5xLXFzZXItbmV0d29yay1kZW1vLmJiCmluZGV4IGYyZjFmMDQuLmEzOGMxOTEgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLW5ldHdvcmstZGVtby9seW5xLXFzZXItbmV0d29yay1kZW1vLmJiCisrKyBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLW5ldHdvcmstZGVtby9seW5xLXFzZXItbmV0d29yay1kZW1vLmJiCkBAIC0xLDM1ICsxLDMzIEBACi0jaW5oZXJpdCBleHRlcm5hbHNyYyBwYWNrYWdlCi0jaW5oZXJpdCBleHRlcm5hbHNyYyBwYWNrYWdlIHN5c3RlbWQKLURFU0NSSVBUSU9OID0gImx5bnEtcXNlci1uZXR3b3JrLWRlbW8iCi1MSUNFTlNFID0gIkNMT1NFRCIKLUxJQ0VOU0UgPSAiQ0xPU0VEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjFlMDdlOGQ4OGUyNjI2M2U3MWQzYTllMmFhOWEyZmYiCi0jREVQRU5EUyArPSAibGlibHlucS1xc2VyLWZvdGEiCi0jaW5oZXJpdCB3b3Jrb25zcmMKLVdPUktPTlNSQyA9ICIke1RPUERJUn0vLi4vc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXFzZXItbmV0d29yay1kZW1vIgotRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0iJHtUT1BESVJ9Ly4uL3NyYy9seW5xL3BhY2thZ2VzL2FwcHM6IgotU1JDX1VSSSA9ICIgXAotICAgICAgICAgIGZpbGU6Ly9seW5xLXFzZXItbmV0d29yay1kZW1vIFwKLSAgICAgICAgICAiCisjIFBhY2thZ2Ugc3VtbWFyeQorU1VNTUFSWSA9ICJseW5xLXFzZXItbmV0d29yay1kZW1vIgorIyBMaWNlbnNlLCBmb3IgZXhhbXBsZSBNSVQKK0xJQ0VOU0UgPSAiTUlUIgorIyBMaWNlbnNlIGNoZWNrc3VtIGZpbGUgaXMgYWx3YXlzIHJlcXVpcmVkCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCQkgIAorU1JDX1VSSSA9ICJmaWxlOi8vbHlucV9xc2VyX25ldHdvcmsuaCBmaWxlOi8vbHlucS1xc2VyLW5ldHdvcmstZGVtby5jcHAiCiAKIFNSQy1ESVIgPSAiJHtTfS8uLi9seW5xLXFzZXItbmV0d29yay1kZW1vIgogVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorCiAjUGFyYW1ldGVycyBwYXNzZWQgdG8gZG9fY29tcGlsZSgpCiBFWFRSQV9PRU1BS0UgPSAiJ1RBUkdFVF9QTEFURk9STSA9ICR7VEFSR0VUX1BMQVRGT1JNfSdcIgogRVhUUkFfT0VNQUtFICs9ICInTU9CSUxFVEVLX1JJTF9DRkcgPSAke01PQklMRVRFS19SSUxfQ0ZHfSciCiAKK0xPQ0FMX0NfSU5DTFVERVMgPSAiLUkuIgorCitMT0NBTF9MSUJTID0gIi1MLiAtbGRsIC1sc3RkYysrIgorCisjSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCitTID0gIiR7V09SS0RJUn0iCiAKICNJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKIGRvX2NvbXBpbGUgKCkgewotCWlmIHRlc3QgIiR7UEFDS0FHRV9BUkNIfSIgPSAiY29ydGV4YTdoZi12ZnAtdmZwdjQtbmVvbiIgfHwgdGVzdCAiJHtQQUNLQUdFX0FSQ0h9IiA9ICJjb3J0ZXhhN2hmLW5lb24tdmZwdjQiOyB0aGVuCi0JCW9lX3J1bm1ha2UgYWxsIC1DICR7U1JDLURJUn0gUk9PVD0ke1NUQUdJTkdfRElSX0hPU1R9IE9GTEFHUz0iLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0gLW1oYXJkLWZsb2F0IgotCWVsc2UKLQkJb2VfcnVubWFrZSBhbGwgLUMgJHtTUkMtRElSfSBST09UPSR7U1RBR0lOR19ESVJfSE9TVH0gT0ZMQUdTPSItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSIKLQlmaQorCisJJHtDWFh9IC1XYWxsIGx5bnEtcXNlci1uZXR3b3JrLWRlbW8uY3BwICR7TE9DQUxfTElCU30gJHtMT0NBTF9DX0lOQ0xVREVTfSAtbyBseW5xLXFzZXItbmV0d29yay1kZW1vCiB9CiAKIGRvX2luc3RhbGwoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LwotCWluc3RhbGwgLW0gMDc1NSAke1NSQy1ESVJ9L2x5bnEtcXNlci1uZXR3b3JrLWRlbW8gJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9seW5xLXFzZXItbmV0d29yay1kZW1vICR7RH0ke2JpbmRpcn0vCiB9CmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci12b2ljZS1kZW1vL2x5bnEtcXNlci12b2ljZS1kZW1vLmNwcCBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vZmlsZXMvbHlucS1xc2VyLXZvaWNlLWRlbW8uY3BwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci12b2ljZS1kZW1vL2x5bnEtcXNlci12b2ljZS1kZW1vLmNwcApyZW5hbWUgdG8gY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9maWxlcy9seW5xLXFzZXItdm9pY2UtZGVtby5jcHAKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLXZvaWNlLWRlbW8vaW5jbHVkZS9seW5xLXFzZXItdm9pY2UtZGVtby5oIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9maWxlcy9seW5xLXFzZXItdm9pY2UtZGVtby5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci12b2ljZS1kZW1vL2luY2x1ZGUvbHlucS1xc2VyLXZvaWNlLWRlbW8uaApyZW5hbWUgdG8gY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9maWxlcy9seW5xLXFzZXItdm9pY2UtZGVtby5oCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci12b2ljZS1kZW1vL2x5bnEtcXNlci12b2ljZS1kZW1vLmJiIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9seW5xLXFzZXItdm9pY2UtZGVtby5iYgppbmRleCBlYzExYzEwLi4xZmIwMTQyIDEwMDY0NAotLS0gYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci12b2ljZS1kZW1vL2x5bnEtcXNlci12b2ljZS1kZW1vLmJiCisrKyBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vbHlucS1xc2VyLXZvaWNlLWRlbW8uYmIKQEAgLTEsMzYgKzEsMzMgQEAKLSNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2UKLSNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2Ugc3lzdGVtZAotREVTQ1JJUFRJT04gPSAibHlucS1xc2VyLXZvaWNlLWRlbW8iCi1MSUNFTlNFID0gIkNMT1NFRCIKLUxJQ0VOU0UgPSAiQ0xPU0VEIgotTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjFlMDdlOGQ4OGUyNjI2M2U3MWQzYTllMmFhOWEyZmYiCi1ERVBFTkRTICs9ICJsaWJseW5xLXFzZXItdm9pY2UiCi0jaW5oZXJpdCB3b3Jrb25zcmMKLVdPUktPTlNSQyA9ICIke1RPUERJUn0vLi4vc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXFzZXItdm9pY2UtZGVtbyIKLUZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9IiR7VE9QRElSfS8uLi9zcmMvbHlucS9wYWNrYWdlcy9hcHBzOiIKLVNSQ19VUkkgPSAiIFwKLSAgICAgICAgICBmaWxlOi8vbHlucS1xc2VyLXZvaWNlLWRlbW8gXAotICAgICAgICAgICIKKyMgUGFja2FnZSBzdW1tYXJ5CitTVU1NQVJZID0gImx5bnEtcXNlci1mb3RhLWRlbW8iCisjIExpY2Vuc2UsIGZvciBleGFtcGxlIE1JVAorTElDRU5TRSA9ICJNSVQiCisjIExpY2Vuc2UgY2hlY2tzdW0gZmlsZSBpcyBhbHdheXMgcmVxdWlyZWQKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01JVDttZDU9MDgzNWFkZTY5OGUwYmNmODUwNmVjZGEyZjdiNGYzMDIiCisJCSAgCitTUkNfVVJJID0gImZpbGU6Ly9seW5xLXFzZXItdm9pY2UtZGVtby5oIGZpbGU6Ly9seW5xLXFzZXItdm9pY2UtZGVtby5jcHAiCiAKLVNSQy1ESVIgPSAiJHtTfS8uLi9seW5xLXFzZXItdm9pY2UtZGVtbyIKK1NSQy1ESVIgPSAiJHtTfS8uLi9seW5xLXFzZXItZm90YS1kZW1vIgogVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCi1TWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorCiAjUGFyYW1ldGVycyBwYXNzZWQgdG8gZG9fY29tcGlsZSgpCiBFWFRSQV9PRU1BS0UgPSAiJ1RBUkdFVF9QTEFURk9STSA9ICR7VEFSR0VUX1BMQVRGT1JNfSdcIgogRVhUUkFfT0VNQUtFICs9ICInTU9CSUxFVEVLX1JJTF9DRkcgPSAke01PQklMRVRFS19SSUxfQ0ZHfSciCiAKLUVYVFJBX09FTUFLRSArPSAiJ01PQklMRVRFS19GT1RBX0NGRyA9ICR7TU9CSUxFVEVLX0ZPVEFfQ0ZHfSciCitMT0NBTF9DX0lOQ0xVREVTID0gIi1JLiIKKworTE9DQUxfTElCUyA9ICItTC4gLWxkbCAtbHN0ZGMrKyIKKworI0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorUyA9ICIke1dPUktESVJ9IgogCiAjSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCiBkb19jb21waWxlICgpIHsKLQlpZiB0ZXN0ICIke1BBQ0tBR0VfQVJDSH0iID0gImNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24iIHx8IHRlc3QgIiR7UEFDS0FHRV9BUkNIfSIgPSAiY29ydGV4YTdoZi1uZW9uLXZmcHY0IjsgdGhlbgotCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1taGFyZC1mbG9hdCIKLQllbHNlCi0JCW9lX3J1bm1ha2UgYWxsIC1DICR7U1JDLURJUn0gUk9PVD0ke1NUQUdJTkdfRElSX0hPU1R9IE9GTEFHUz0iLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0iCi0JZmkKKworCSR7Q1hYfSAtV2FsbCBseW5xLXFzZXItdm9pY2UtZGVtby5jcHAgJHtMT0NBTF9MSUJTfSAke0xPQ0FMX0NfSU5DTFVERVN9IC1vIGx5bnEtcXNlci12b2ljZS1kZW1vCiB9CiAKIGRvX2luc3RhbGwoKSB7CiAJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LwotCWluc3RhbGwgLW0gMDc1NSAke1NSQy1ESVJ9L2x5bnEtcXNlci12b2ljZS1kZW1vICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbHlucS1xc2VyLXZvaWNlLWRlbW8gJHtEfSR7YmluZGlyfS8KIH0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1zeXN0aW1lLWRlbW8vbHlucS1zeXN0aW1lLWRlbW8uYmIgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtc3lzdGltZS1kZW1vL2x5bnEtc3lzdGltZS1kZW1vLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMDdhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtc3lzdGltZS1kZW1vL2x5bnEtc3lzdGltZS1kZW1vLmJiCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2UKKyNpbmhlcml0IGV4dGVybmFsc3JjIHBhY2thZ2Ugc3lzdGVtZAorREVTQ1JJUFRJT04gPSAibHlucS1zeXN0aW1lLWRlbW8iCitMSUNFTlNFID0gIkNMT1NFRCIKK0xJQ0VOU0UgPSAiQ0xPU0VEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9YjFlMDdlOGQ4OGUyNjI2M2U3MWQzYTllMmFhOWEyZmYiCitERVBFTkRTICs9ICJsaWJseW5xLXN5c3RpbWUiCisjaW5oZXJpdCB3b3Jrb25zcmMKK1dPUktPTlNSQyA9ICIke1RPUERJUn0vLi4vc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXN5c3RpbWUtZGVtbyIKK0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9IiR7VE9QRElSfS8uLi9zcmMvbHlucS9wYWNrYWdlcy9hcHBzOiIKK1NSQ19VUkkgPSAiIFwKKyAgICAgICAgICBmaWxlOi8vbHlucS1zeXN0aW1lLWRlbW8gXAorICAgICAgICAgICIKKworU1JDLURJUiA9ICIke1N9Ly4uL2x5bnEtc3lzdGltZS1kZW1vIgorVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorI1BhcmFtZXRlcnMgcGFzc2VkIHRvIGRvX2NvbXBpbGUoKQorRVhUUkFfT0VNQUtFID0gIidUQVJHRVRfUExBVEZPUk0gPSAke1RBUkdFVF9QTEFURk9STX0nXCIKK0VYVFJBX09FTUFLRSArPSAiJ01PQklMRVRFS19SSUxfQ0ZHID0gJHtNT0JJTEVURUtfUklMX0NGR30nIgorCitFWFRSQV9PRU1BS0UgKz0gIidNT0JJTEVURUtfRk9UQV9DRkcgPSAke01PQklMRVRFS19GT1RBX0NGR30nIgorCisjSU5ISUJJVF9QQUNLQUdFX1NUUklQID0gIjEiCitkb19jb21waWxlICgpIHsKKwlpZiB0ZXN0ICIke1BBQ0tBR0VfQVJDSH0iID0gImNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24iIHx8IHRlc3QgIiR7UEFDS0FHRV9BUkNIfSIgPSAiY29ydGV4YTdoZi1uZW9uLXZmcHY0IjsgdGhlbgorCQlvZV9ydW5tYWtlIGFsbCAtQyAke1NSQy1ESVJ9IFJPT1Q9JHtTVEFHSU5HX0RJUl9IT1NUfSBPRkxBR1M9Ii0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9IC1taGFyZC1mbG9hdCIKKwllbHNlCisJCW9lX3J1bm1ha2UgYWxsIC1DICR7U1JDLURJUn0gUk9PVD0ke1NUQUdJTkdfRElSX0hPU1R9IE9GTEFHUz0iLS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0iCisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7U1JDLURJUn0vbHlucS1zeXN0aW1lLWRlbW8gJHtEfSR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvcG93ZXJhbGFybS1kZW1vL2ZpbGVzL3Bvd2VyYWxhcm0tZGVtby5jcHAgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL3Bvd2VyYWxhcm0tZGVtby9maWxlcy9wb3dlcmFsYXJtLWRlbW8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE5OTEwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL3Bvd2VyYWxhcm0tZGVtby9maWxlcy9wb3dlcmFsYXJtLWRlbW8uY3BwCkBAIC0wLDAgKzEsMTg2IEBACisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPGRsZmNuLmg+DQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKw0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBpbnQgIGNtZElkeDsNCisgICAgY2hhciAqZnVuY05hbWU7DQorfSBzdF9hcGlfdGVzdF9jYXNlOw0KKyAgICANCisvL2ZvciBzZXJ2ZXIgdGVzdA0KK3N0X2FwaV90ZXN0X2Nhc2UgYXRfYXBpX3Rlc3RjYXNlc1tdID0gDQorew0KKyAgICB7MCwgICAicHJpbnRfaGVscCJ9LA0KKyAgICB7MSwgICAicG93ZXJhbGFybSJ9LA0KKyAgICB7MiwgICAid2FrZWFsYXJtIn0sDQorICAgIHszLCAgICJjYW5jZWxfd2FrZWFsYXJtIn0sDQorICAgIHs0LCAgICJseW5xX3NldF9wb3dlcmFsYXJtIn0sDQorICAgIHs1LCAgICJseW5xX3NldF93YWtlYWxhcm0ifSwNCisgICAgey0xLCAgICBOVUxMfQ0KK307DQorDQorDQoraW50ICgqcG93ZXJhbGFybSkoY2hhciAqYnVmZmVyKTsNCitpbnQgKCp3YWtlYWxhcm0pKGNoYXIgKmJ1ZmZlcik7DQoraW50ICgqY2FuY2VsX3dha2VhbGFybSkoKTsNCitpbnQgKCpseW5xX3NldF9wb3dlcmFsYXJtKSh1bnNpZ25lZCBsb25nIHRpbWVfc2VjKTsNCitpbnQgKCpseW5xX3NldF93YWtlYWxhcm0pKHVuc2lnbmVkIGxvbmcgdGltZV9zZWMpOw0KKw0KK3ZvaWQgKmRsSGFuZGxlX3Bvd2VyYWxhcm0gPSBOVUxMOw0KKw0KKw0KK3ZvaWQgcHJpbnRfaGVscCh2b2lkKQ0KK3sNCisgICAgaW50IGk7DQorICAgIHByaW50ZigiU3VwcG9ydGVkIHRlc3QgY2FzZXM6XG4iKTsNCisgICAgZm9yKGkgPSAwOyA7IGkrKykNCisgICAgew0KKyAgICAgICAgaWYoYXRfYXBpX3Rlc3RjYXNlc1tpXS5jbWRJZHggPT0gLTEpDQorICAgICAgICB7DQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgICBwcmludGYoIiVkOlx0JXNcbiIsIGF0X2FwaV90ZXN0Y2FzZXNbaV0uY21kSWR4LCBhdF9hcGlfdGVzdGNhc2VzW2ldLmZ1bmNOYW1lKTsNCisgICAgfQ0KK30NCisNCitpbnQgbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pDQorew0KKw0KKyAgICBpbnQgZmxhZyA9IDA7IA0KKyAgICBpbnQgY21kSWR4ID0gMDsNCisgICAgcHJpbnRmKCJFbnRlciBtYWluIGZ1bmN0aW9uXG4iKTsNCisgICAgDQorICAgIGNvbnN0IGNoYXIgKmRsSGFuZGxlX1BhdGhfcG93ZXJhbGFybSA9ICIvbGliL2xpYnBvd2VyYWxhcm0uc28iOw0KKyAgICBkbEhhbmRsZV9wb3dlcmFsYXJtID0gZGxvcGVuKGRsSGFuZGxlX1BhdGhfcG93ZXJhbGFybSwgUlRMRF9OT1cpOw0KKyAgICBpZiAoZGxIYW5kbGVfcG93ZXJhbGFybSA9PSBOVUxMKSANCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJkbG9wZW4gZGxIYW5kbGVfZm90YSBmYWlsZWQ6ICVzXG4iLCBkbGVycm9yKCkpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHBvd2VyYWxhcm0gPSAoaW50ICgqKShjaGFyICpidWZmZXIpKWRsc3ltKGRsSGFuZGxlX3Bvd2VyYWxhcm0sICJwb3dlcmFsYXJtIik7DQorICAgIGlmKHBvd2VyYWxhcm0gPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJwb3dlcmFsYXJtIGlzIG51bGxcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgd2FrZWFsYXJtID0gKGludCAoKikoY2hhciAqYnVmZmVyKSlkbHN5bShkbEhhbmRsZV9wb3dlcmFsYXJtLCAid2FrZWFsYXJtIik7DQorICAgIGlmKHdha2VhbGFybSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoIndha2VhbGFybSBpcyBudWxsXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICBseW5xX3NldF9wb3dlcmFsYXJtID0gKGludCAoKikodW5zaWduZWQgbG9uZykpZGxzeW0oZGxIYW5kbGVfcG93ZXJhbGFybSwibHlucV9zZXRfcG93ZXJhbGFybSIpOw0KKyAgICBpZihseW5xX3NldF9wb3dlcmFsYXJtID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHByaW50ZigibHlucV9zZXRfcG93ZXJhbGFybSBpcyBudWxsXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICBseW5xX3NldF93YWtlYWxhcm0gPSAoaW50ICgqKSh1bnNpZ25lZCBsb25nKSlkbHN5bShkbEhhbmRsZV9wb3dlcmFsYXJtLCJseW5xX3NldF93YWtlYWxhcm0iKTsNCisgICAgaWYobHlucV9zZXRfd2FrZWFsYXJtID09IE5VTEwpDQorICAgIHsNCisgICAgICAgIHByaW50ZigibHlucV9zZXRfd2FrZWFsYXJtIGlzIG51bGxcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIA0KKyAgICBjYW5jZWxfd2FrZWFsYXJtID0gKGludCAoKikoKSlkbHN5bShkbEhhbmRsZV9wb3dlcmFsYXJtLCAiY2FuY2VsX3dha2VhbGFybSIpOw0KKyAgICAgaWYoY2FuY2VsX3dha2VhbGFybSA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoImNhbmNlbF93YWtlYWxhcm0gaXMgbnVsbFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcHJpbnRfaGVscCgpOw0KKyAgICB3aGlsZSgxKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoIlxucGxlYXNlIGlucHV0IGNtZCBpbmRleCgtMSBleGl0KTogIik7DQorICAgICAgICBzY2FuZigiJWQiLCAmY21kSWR4KTsNCisgICAgICAgIGlmKGNtZElkeCA9PSAtMSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICAgIHN3aXRjaChjbWRJZHgpDQorICAgICAgICB7ICAgDQorICAgICAgICAgICAgY2FzZSAwOg0KKyAgICAgICAgICAgICAgICBwcmludF9oZWxwKCk7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgIGNhc2UgMToNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgICAgICAgICAgICAgICBjaGFyIHRtcF90aW1lWzMyXSA9IHswfTsNCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiU2V0IHBvd2VyYWxhcm0gdGltZSxlLmc6IDYwIChzZWNvbmRzKVxuIik7DQorICAgICAgICAgICAgICAgICAgICBzY2FuZigiJXMiLHRtcF90aW1lKTsNCisgICAgICAgICAgICAgICAgICAgIHJldCA9IHBvd2VyYWxhcm0odG1wX3RpbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYocmV0ICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJzZXQgcG93ZXJhbGFybSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICBjYXNlIDI6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGludCByZXQgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgY2hhciB0bXBfdGltZVszMl09ezB9Ow0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJTZXQgd2FrZWFsYXJtIHRpbWUgLGUuZzogNjAgKHNlY29uZHMpXG4iKTsNCisgICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlcyIsdG1wX3RpbWUpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gd2FrZWFsYXJtKHRtcF90aW1lKTsNCisgICAgICAgICAgICAgICAgICAgIGlmKHJldCAhPSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Zigic2V0IHBvd2VyYWxhcm0gZmFpbGVkXG4iKTsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICBjYXNlIDM6DQorICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgIGludCByZXQgPSAwOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2FuY2VsX3dha2VhbGFybSgpOw0KKyAgICAgICAgICAgICAgICAgICAgaWYocmV0ICE9IDApDQorICAgICAgICAgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDYW5jZWxfd2FrZWFsYXJtIGZhaWxlZCEhISIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgIGNhc2UgNDoNCisgICAgICAgICAgICAgICAgeyANCisgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IDA7IA0KKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVfc2VjID0gMDsNCisgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJJbnB1dCB0aW1lX3NlYyB5b3Ugd2FudCBwb3dlcmFsYXJtLGUuZzo2MCAoc2Vjb25kcylcbiIpOw0KKyAgICAgICAgICAgICAgICAgICBzY2FuZigiJWx1IiwmdGltZV9zZWMpOw0KKyAgICAgICAgICAgICAgICAgICByZXQgPWx5bnFfc2V0X3Bvd2VyYWxhcm0odGltZV9zZWMpOw0KKyAgICAgICAgICAgICAgICAgICBpZihyZXQgIT0gMCkNCisgICAgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigibHlucV9zZXRfcG93ZXJhbGFybSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgY2FzZSA1Og0KKyAgICAgICAgICAgICAgICB7IA0KKyAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gMDsgDQorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZV9zZWMgPSAwOw0KKyAgICAgICAgICAgICAgICAgICBwcmludGYoIklucHV0IHRpbWVfc2VjIHlvdSB3YW50IHBvd2VyYWxhcm0sZS5nOjYwIChzZWNvbmRzKVxuIik7DQorICAgICAgICAgICAgICAgICAgIHNjYW5mKCIlbHUiLCZ0aW1lX3NlYyk7DQorICAgICAgICAgICAgICAgICAgIHJldCA9bHlucV9zZXRfd2FrZWFsYXJtKHRpbWVfc2VjKTsNCisgICAgICAgICAgICAgICAgICAgaWYocmV0ICE9IDApDQorICAgICAgICAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImx5bnFfc2V0X3dha2VhbGFybSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorDQorfQ0KKw0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvcG93ZXJhbGFybS1kZW1vL3Bvd2VyYWxhcm0tZGVtby5iYiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvcG93ZXJhbGFybS1kZW1vL3Bvd2VyYWxhcm0tZGVtby5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzhkZDBiCi0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9wb3dlcmFsYXJtLWRlbW8vcG93ZXJhbGFybS1kZW1vLmJiCkBAIC0wLDAgKzEsMzMgQEAKKyMgUGFja2FnZSBzdW1tYXJ5CitTVU1NQVJZID0gInBvd2VyYWxhcm0tZGVtbyIKKyMgTGljZW5zZSwgZm9yIGV4YW1wbGUgTUlUCitMSUNFTlNFID0gIk1JVCIKKyMgTGljZW5zZSBjaGVja3N1bSBmaWxlIGlzIGFsd2F5cyByZXF1aXJlZAorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUO21kNT0wODM1YWRlNjk4ZTBiY2Y4NTA2ZWNkYTJmN2I0ZjMwMiIKKwkJICAKK1NSQ19VUkkgPSAiIGZpbGU6Ly9wb3dlcmFsYXJtLWRlbW8uY3BwIgorCitTUkMtRElSID0gIiR7U30vLi4vcG93ZXJhbGFybS1kZW1vIgorVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKKyNQYXJhbWV0ZXJzIHBhc3NlZCB0byBkb19jb21waWxlKCkKK0VYVFJBX09FTUFLRSA9ICInVEFSR0VUX1BMQVRGT1JNID0gJHtUQVJHRVRfUExBVEZPUk19J1wiCitFWFRSQV9PRU1BS0UgKz0gIidNT0JJTEVURUtfUklMX0NGRyA9ICR7TU9CSUxFVEVLX1JJTF9DRkd9JyIKKworTE9DQUxfQ19JTkNMVURFUyA9ICItSS4iCisKK0xPQ0FMX0xJQlMgPSAiLUwuIC1sZGwgLWxzdGRjKysiCisKKyNJTkhJQklUX1BBQ0tBR0VfU1RSSVAgPSAiMSIKK1MgPSAiJHtXT1JLRElSfSIKKworI0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorZG9fY29tcGlsZSAoKSB7CisKKwkke0NYWH0gLVdhbGwgcG93ZXJhbGFybS1kZW1vLmNwcCAke0xPQ0FMX0xJQlN9ICR7TE9DQUxfQ19JTkNMVURFU30gLW8gcG93ZXJhbGFybS1kZW1vCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1N9L3Bvd2VyYWxhcm0tZGVtbyAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL2RhdGEvZGF0YS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvZGF0YS9kYXRhLmNwcAppbmRleCBiODk5MGQyLi42NzM5NjBhIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvZGF0YS9kYXRhLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvZGF0YS9kYXRhLmNwcApAQCAtOTg1LDYgKzk4NSw3IEBACiAgICAgY29uc3QgY2hhciAqYXV0aHR5cGUgPSBhcmd2WzVdOwogICAgIGNvbnN0IGNoYXIgKnBkcF90eXBlID0gYXJndls2XTsKICAgICBjb25zdCBjaGFyICpvcHRpb25hbF9wcm9wZXJ0eSA9ICIiOworICAgIGNvbnN0IGNoYXIgKm5vcm1hbF9wZHAgPSAiMiI7CiAKICAgICBhbmRyb2lkOjpQYXJjZWwgcDsKICAgICBzaXplX3QgcG9zID0gcC5kYXRhUG9zaXRpb24oKTsKQEAgLTk5Nyw3ICs5OTgsMTYgQEAKICAgICB3cml0ZVN0cmluZ1RvUGFyY2VsKHAscGFzc3dvcmQpOwogICAgIHdyaXRlU3RyaW5nVG9QYXJjZWwocCxhdXRodHlwZSk7CiAgICAgd3JpdGVTdHJpbmdUb1BhcmNlbChwLHBkcF90eXBlKTsvL3Byb3RvY29sID09IChaWFcpcGRwX3R5cGUKLSAgICB3cml0ZVN0cmluZ1RvUGFyY2VsKHAsIG9wdGlvbmFsX3Byb3BlcnR5KTsKKyAgICBpZihzdHJjbXAoYXBuLCAiZGVmYXVsdCIpID09IDApCisgICAgeworICAgICAgICB3cml0ZVN0cmluZ1RvUGFyY2VsKHAsIG5vcm1hbF9wZHApOy8vKChjb25zdCBjaGFyICoqKWRhdGEpWzddIHNldCAiMiLvvIx1c2Ugbm9ybWFsX3BkcCBkYXRhY2FsbAorICAgICAgICBSTE9HRCgic2V0dXBEYXRhQ2FsbGFyZ2M6SXQgaXMgbm9ybWFsIHBkcCBkYXRhIGNhbGwiKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd3JpdGVTdHJpbmdUb1BhcmNlbChwLCBvcHRpb25hbF9wcm9wZXJ0eSk7CisgICAgICAgIFJMT0dEKCJzZXR1cERhdGFDYWxsYXJnYzpJdCBpcyBub3Qgbm9ybWFsIHBkcCBkYXRhIGNhbGwiKTsKKyAgICB9CiAgICAgcC5zZXREYXRhUG9zaXRpb24ocG9zKTsKIAogICAgIFJMT0dEKCJzZXR1cERhdGFDYWxsYXJnYzogXG5yYWRpb1RlY2hub2xveTogJXNcbnByb2ZpbGVJZDogJXNcbmFwbjogJXNcbiBcCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1jYWxsL2x5bnFfY2FsbC5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1jYWxsL2x5bnFfY2FsbC5jcHAKaW5kZXggYmVlNmU1ZS4uOTUyNWU3NSAxMDA3NTUKLS0tIGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtY2FsbC9seW5xX2NhbGwuY3BwCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLWNhbGwvbHlucV9jYWxsLmNwcApAQCAtODA4LDcgKzgwOCw2IEBACiAgICAgICAgcmV0dXJuIExZTlFfRV9DT05GTElDVDsNCiAgICAgfSAgICAgIA0KICAgICBseW5xX2NhbGxfaHVuZ3VwX2FsbCgpOyAgDQotICAgIGx5bnFfc2V0X3ZvaWNlX2F1ZGlvX21vZGUoQVVESU9fTU9ERV9DT0RFQyk7DQogICAgIGdfbW9kdWxlX2luaXRfZmxhZyA9IE1PRFVMRV9TV0lUQ0hJTkc7DQogICAgIGx5bnFfY2xvc2VfYWxsX3VyY19zb2NrZXRfdGhyZWFkKCk7DQogICAgIGx5bnFfY2xvc2VfYWxsX3JjX3NvY2tldF90aHJlYWQoKTsgICAgDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtZGF0YS9seW5xX2RhdGEuY3BwIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtZGF0YS9seW5xX2RhdGEuY3BwCmluZGV4IGViNTY2ZjQuLmYzNTU2MmIgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLWRhdGEvbHlucV9kYXRhLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1kYXRhL2x5bnFfZGF0YS5jcHAKQEAgLTk1OCw3ICs5NTgsNyBAQAogICAgIC8veGYubGlAMjAyMzA2MTAgYWRkIGZvciBUMTA2IGRhdGEgc3RhcnQKICAgICAjaWZkZWYgTU9CSUxFVEVLX1RBUkdFVF9QTEFURk9STV9UMTA2CiAgICAgTFlJTkZMT0coIlslc11bJWRdIGNhbGwgbHlucV9zZXR1cF9kYXRhX2NhbGxfc3AiLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7Ci0gICAgZXJyb3IgPSBseW5xX3NldHVwX2RhdGFfY2FsbF9zcF90MTA2KGhhbmRsZSxOVUxMLCJpb3RfZGVmYXVsdCIsTlVMTCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsKKyAgICBlcnJvciA9IGx5bnFfc2V0dXBfZGF0YV9jYWxsX3NwX3QxMDYoaGFuZGxlLCJkZWZhdWx0IiwiaW90X2RlZmF1bHQiLE5VTEwsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CiAgICAgcmV0dXJuIGVycm9yOwogICAgICNlbHNlCiAgICAgLy94Zi5saUAyMDIzMDYxMCBhZGQgZm9yIFQxMDYgZGF0YSBlbmQKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItZGF0YS9seW5xLXFzZXItZGF0YS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLWRhdGEvbHlucS1xc2VyLWRhdGEuY3BwCmluZGV4IDhjYjBkYTMuLmYwMTdlZjYgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItZGF0YS9seW5xLXFzZXItZGF0YS5jcHAKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtcXNlci1kYXRhL2x5bnEtcXNlci1kYXRhLmNwcApAQCAtMTQxLDkgKzE0MSwxNCBAQAogICAgICAgICBub2RlX251bSsrOwogICAgICAgICBzdW1fbm9kZSA9IHN1bV9ub2RlLT5uZXh0OwogICAgIH0KKyAgICBMWUlORkxPRygiYXBuX251bSA9ICVkICIsbm9kZV9udW0pOworICAgIGlmKG5vZGVfbnVtID49IFFTRVJfQVBOX01BWF9MSVNUKQorICAgIHsKKyAgICAgICAgTFlFUlJMT0coImFwbiBudW0gcmVhY2hlZCB0aGUgbWF4Iik7CisgICAgICAgIGdvdG8gRkFJTEVEOworICAgIH0KICAgICB0bXBfbm9kZSA9IHhtbE5ld05vZGUoTlVMTCxCQURfQ0FTVCJhcG4iKTsKICAgICAqYXBuX251bSA9IG5vZGVfbnVtOwotICAgIExZRVJSTE9HKCJhcG5fbnVtJWQgIixub2RlX251bSk7CiAgICAgYnplcm8odGVtcF9idWZmLDEyKTsKICAgICBzbnByaW50Zih0ZW1wX2J1ZmYsc2l6ZW9mKHRlbXBfYnVmZiksIiVkIiwqYXBuX251bSk7CiAgICAgeG1sTmV3UHJvcCh0bXBfbm9kZSxCQURfQ0FTVCJwcm9maWxlX2lkeCIsKHhtbENoYXIgKil0ZW1wX2J1ZmYpOwpAQCAtODczLDQgKzg3OCw0IEBACiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogICAgIHJldHVybiByZXQ7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS9MSUNFTlNFIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYwNWI3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1zeXN0aW1lL0xJQ0VOU0UKQEAgLTAsMCArMSwzMSBAQAorQ29weXJpZ2h0IFN0YXRlbWVudDoKKworVGhpcyBzb2Z0d2FyZS9maXJtd2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uICgiTW9iaWxlVGVrIFNvZnR3YXJlIikgYXJlCitwcm90ZWN0ZWQgdW5kZXIgcmVsZXZhbnQgY29weXJpZ2h0IGxhd3MuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzCitjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IHRvIE1vYmlsZVRlayBJbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLiBXaXRob3V0Cit0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIE1vYmlsZVRlayBpbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLCBhbnkKK3JlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCB1c2Ugb3IgZGlzY2xvc3VyZSBvZiBNb2JpbGVUZWsgU29mdHdhcmUsIGFuZAoraW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiwgaW4gd2hvbGUgb3IgaW4gcGFydCwgc2hhbGwgYmUgc3RyaWN0bHkKK3Byb2hpYml0ZWQuCisKK01vYmlsZVRlayBJbmMuIChDKSAyMDE1LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitCWSBPUEVOSU5HIFRISVMgRklMRSwgUkVDRUlWRVIgSEVSRUJZIFVORVFVSVZPQ0FMTFkgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMKK1RIQVQgVEhFIFNPRlRXQVJFL0ZJUk1XQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTlMgKCJNb2JpbGVUZWsgU09GVFdBUkUiKQorUkVDRUlWRUQgRlJPTSBNb2JpbGVUZWsgQU5EL09SIElUUyBSRVBSRVNFTlRBVElWRVMgQVJFIFBST1ZJREVEIFRPIFJFQ0VJVkVSCitPTiBBTiAiQVMtSVMiIEJBU0lTIE9OTFkuIE1vYmlsZVRlayBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBBTkQgQUxMCitXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OSU5GUklOR0VNRU5ULiBORUlUSEVSIERPRVMgTW9iaWxlVGVrIFBST1ZJREUgQU5ZIFdBUlJBTlRZIFdIQVRTT0VWRVIgV0lUSAorUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUgT0YgQU5ZIFRISVJEIFBBUlRZIFdISUNIIE1BWSBCRSBVU0VEIEJZLAorSU5DT1JQT1JBVEVEIElOLCBPUiBTVVBQTElFRCBXSVRIIFRIRSBNb2JpbGVUZWsgU09GVFdBUkUsIEFORCBSRUNFSVZFUiBBR1JFRVMKK1RPIExPT0sgT05MWSBUTyBTVUNIIFRISVJEIFBBUlRZIEZPUiBBTlkgV0FSUkFOVFkgQ0xBSU0gUkVMQVRJTkcgVEhFUkVUTy4KK1JFQ0VJVkVSIEVYUFJFU1NMWSBBQ0tOT1dMRURHRVMgVEhBVCBJVCBJUyBSRUNFSVZFUidTIFNPTEUgUkVTUE9OU0lCSUxJVFkgVE8KK09CVEFJTiBGUk9NIEFOWSBUSElSRCBQQVJUWSBBTEwgUFJPUEVSIExJQ0VOU0VTIENPTlRBSU5FRCBJTiBNb2JpbGVUZWsKK1NPRlRXQVJFLiBNb2JpbGVUZWsgU0hBTEwgQUxTTyBOT1QgQkUgUkVTUE9OU0lCTEUgRk9SIEFOWSBNb2JpbGVUZWsgU09GVFdBUkUKK1JFTEVBU0VTIE1BREUgVE8gUkVDRUlWRVInUyBTUEVDSUZJQ0FUSU9OIE9SIFRPIENPTkZPUk0gVE8gQSBQQVJUSUNVTEFSCitTVEFOREFSRCBPUiBPUEVOIEZPUlVNLiBSRUNFSVZFUidTIFNPTEUgQU5EIEVYQ0xVU0lWRSBSRU1FRFkgQU5EIE1vYmlsZVRlaydTCitFTlRJUkUgQU5EIENVTVVMQVRJVkUgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUgTW9iaWxlVGVrIFNPRlRXQVJFCitSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwgQVQgTW9iaWxlVGVrJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUKK01vYmlsZVRlayBTT0ZUV0FSRSBBVCBJU1NVRSwgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRQorQ0hBUkdFIFBBSUQgQlkgUkVDRUlWRVIgVE8gTW9iaWxlVGVrIEZPUiBTVUNIIE1vYmlsZVRlayBTT0ZUV0FSRSBBVCBJU1NVRS4KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXN5c3RpbWUvaW5jbHVkZS9seW5xX3N5c3RpbWUuaCBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXN5c3RpbWUvaW5jbHVkZS9seW5xX3N5c3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDFlZGRhCi0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS9pbmNsdWRlL2x5bnFfc3lzdGltZS5oCkBAIC0wLDAgKzEsMTIzIEBACisvKipAZmlsZSBseW5xLXN5c3RpbWUuaA0KKyAqDQorICogQGJyaWVmIFN5bmMgc3lzdGltZSBmb3JtIGVhY2ggdGltZSBzb3VyY2UuDQorICoNCisgKiBAYXV0aG9yIHNqLnpoYW5nDQorICoNCisgKiBAZGF0ZSAyMDIzLTA4LTE0DQorICoNCisgKiBAdmVyc2lvbiBWMS4wDQorICoNCisgKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgTW9iaWxlVGVrDQorICovDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisjaW5jbHVkZSA8dGltZS5oPg0KKyNpbmNsdWRlIDxpbmNsdWRlL2x5bnFfdWNpLmg+DQorDQorI2lmbmRlZiBfTFlOUV9TWVNUSU1FX0hfDQorI2RlZmluZSBfTFlOUV9TWVNUSU1FX0hfDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIg0KK3sNCisjZW5kaWYNCisNCit0eXBlZGVmIHN0cnVjdCB0aW1lX3NvdXJjZV9zdGF0dXMNCit7DQorICAgIGludCBudHA7DQorICAgIGludCBuaXR6Ow0KKyAgICBpbnQgZ25zczsNCit9dGltZV9zcmNfc3RhdHVzX3M7DQorDQorI2lmZGVmIE1PQklMRVRFS19UQVJHRVRfUExBVEZPUk1fVDEwNg0KKw0KKyAgICAvKipAYnJpZWYgU2V0IHRoZSBydGMgdGltZSB0byB0aGUgc3lzdGVtIHRpbWUuDQorICAgICAqDQorICAgICAqIEBwYXJhbSB2b2lkDQorICAgICAqDQorICAgICAqIEByZXR1cm4NCisgICAgICogICAgICAwOnN1Y2Nlc3MNCisgICAgICogICAgICBvdGhlcjpmYWlsdXJlDQorICAgICAqLw0KKyAgICBpbnQgbHlucV9zeW5jX3RpbWVfZnJvbV9ydGModm9pZCk7DQorDQorICAgIC8qKkBicmllZiBTZXQgdGhlIHN5c3RlbSB0aW1lIHRvIHRoZSBydGMgdGltZS4NCisgICAgICoNCisgICAgICogQHBhcmFtIHZvaWQNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBseW5xX3NldF9ydGNfdGltZSh2b2lkKTsNCisNCisgICAgLyoqQGJyaWVmIFF1ZXJ5IHRoZSBydGMgdGltZS4NCisgICAgICoNCisgICAgICogQHBhcmFtIFtPVVRdIHVsc2VjOiBydGMgdGltZSwgc2VjY29uZHMgZnJvbSAxOTAwLjEuMSAwMDowMA0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuDQorICAgICAqICAgICAgMDpzdWNjZXNzDQorICAgICAqICAgICAgb3RoZXI6ZmFpbHVyZQ0KKyAgICAgKi8NCisgICAgaW50IGx5bnFfZ2V0X3J0Y190aW1lKHVuc2lnbmVkIGxvbmcgKnVsc2VjKTsNCisjZW5kaWYNCisNCisgICAgLyoqQGJyaWVmIFF1ZXJ5IHRoZSB0aW1lIHNvdXJjZSBzdGF0dXMgbm93Lg0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gW09VVF0gbnRwLCBuaXR6LCBnbnNzOg0KKyAgICAgKiAgICAgICAgMDogZGlzYWJsZQ0KKyAgICAgKiAgICAgICAgMTogZW5hYmxlDQorICAgICAqDQorICAgICAqIEByZXR1cm4NCisgICAgICogICAgICAwIDogc3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBseW5xX2dldF90aW1lX3NyY19zdGF0dXModGltZV9zcmNfc3RhdHVzX3MgKnRpbWVfc3JjKTsNCisNCisgICAgLyoqQGJyaWVmIFR1cm4gc250cCBvbi9vZmYNCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAwIHNldCBzdWNjZXNzDQorICAgICAqICAgIDEgU05UUF9ESVNFTkFCTEUNCisgICAgICogICAgMiBTTlRQX0FMUkVBRFlfRU5BQkxFDQorICAgICAqLw0KKyAgICBpbnQgbnRwX3N5bmNfdGltZShpbnQgZW5hYmxlKTsNCisNCisgICAgLyoqQGJyaWVmIEVuYWJsZS9EaXNlbmFibGUgc3luYyB0aW1lIGZyb20gTklUWi4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBtb2RlbV90aW1lX2VuYWJsZShpbnQgZW5hYmxlKTsNCisNCisgICAgLyoqQGJyaWVmIEVuYWJsZS9EaXNlbmFibGUgc3luYyB0aW1lIGZyb20gR05TUy4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBnbnNzX3RpbWVfZW5hYmxlKGludCBlbmFibGUpOw0KKw0KKyAgICAvKipAYnJpZWYgVXNlciBzZXQgc3lzdGltZSBtYW51YWxseS4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCB1c2VyX3NldF90aW1lKGNoYXIgKmRhdGUsIGNoYXIgKnRpbWUpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1zeXN0aW1lL2x5bnFfc3lzdGltZS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1zeXN0aW1lL2x5bnFfc3lzdGltZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI3MzUxYgotLS0gL2Rldi9udWxsCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXN5c3RpbWUvbHlucV9zeXN0aW1lLmNwcApAQCAtMCwwICsxLDM4MiBAQAorLyoqQGZpbGUgbHlucS1zeXN0aW1lLmNwcA0KKyAqDQorICogQGJyaWVmIFN5bmMgc3lzdGltZSBmb3JtIGRpZmZlcmVudCB0aW1lIHNvdXJjZS4NCisgKg0KKyAqIEBhdXRob3Igc2ouemhhbmcNCisgKg0KKyAqIEBkYXRlIDIwMjMtMDgtMTUNCisgKg0KKyAqIEB2ZXJzaW9uIFYxLjANCisgKg0KKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSBNb2JpbGVUZWsNCisgKi8NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDx0aW1lLmg+DQorI2luY2x1ZGUgPHVuaXN0ZC5oPg0KKyNpbmNsdWRlIDxpbmNsdWRlL2x5bnFfdWNpLmg+DQorI2luY2x1ZGUgImxpYmxvZy9seW5xX2RlZmxvZy5oIg0KKyNpbmNsdWRlICJseW5xX3N5c3RpbWUuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiDQorew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgVVNFUl9MT0dfVEFHICJMWU5RX1NZU1RJTUUiDQorI2RlZmluZSBMT0dfTEVWRUwgNA0KKw0KKyNkZWZpbmUgTFlOUV9TWU5DX1RJTUVfU0VDVElPTiAibHlucV9zeW5jX3RpbWUiDQorI2RlZmluZSBMWU5RX01PREVNX1RJTUVfS0VZICJseW5xX21vZGVtX3N5bmNfdGltZV9lbmFibGUiDQorI2RlZmluZSBMWU5RX0dOU1NfVElNRV9LRVkgImx5bnFfZ25zc19zeW5jX3RpbWVfZW5hYmxlIg0KKyNkZWZpbmUgQlVGX0xFTiAyNTgNCisjZGVmaW5lIFRJTUVfQlVGIDEwMA0KKyNkZWZpbmUgU1lOQ19USU1FX1NVQ0NFU1MgMA0KKyNkZWZpbmUgTlRQX0FMUkVBRFlfRU5BQkxFIDENCisjZGVmaW5lIE5UUF9BTFJFQURZX0RJU0FCTEUgMg0KKw0KKyNkZWZpbmUgT1BFTl9FUlJPUiA3DQorI2RlZmluZSBFUlJPUl9QQVJBIDgNCisNCisjaWZkZWYgTU9CSUxFVEVLX1RBUkdFVF9QTEFURk9STV9UMTA2DQorI2RlZmluZSBOVFBfUkVTVEFSVF9CVUYgIi9ldGMvaW5pdC5kL3NudHAgcmVzdGFydCINCisjZGVmaW5lIE5UUF9TVE9QX0JVRiAiL2V0Yy9pbml0LmQvc250cCBzdG9wIg0KKyNkZWZpbmUgTlRQX1NUQVJUX0JVRiAiL2V0Yy9pbml0LmQvc250cCBzdGFydCINCisjZGVmaW5lIFBHUkVQX05UUF9EQVJNT04gInBncmVwIC14IC91c3IvYmluL3NudHAiDQorI2RlZmluZSBTRVRfUlRDKCkgbHlucV9zZXRfcnRjX3RpbWUoKQ0KKyNlbHNlDQorI2RlZmluZSBOVFBfUkVTVEFSVF9CVUYgInN5c3RlbWN0bCByZXN0YXJ0IG50cGQiDQorI2RlZmluZSBOVFBfU1RPUF9CVUYgInN5c3RlbWN0bCBzdG9wIG50cGQiDQorI2RlZmluZSBOVFBfU1RBUlRfQlVGICJzeXN0ZW1jdGwgc3RhcnQgbnRwZCINCisjZGVmaW5lIFBHUkVQX05UUF9EQVJNT04gInBncmVwIG50cGQiDQorI2RlZmluZSBTRVRfUlRDKCkgc3lzdGVtKCJod2Nsb2NrIC13IC1mIC9kZXYvcnRjMCIpDQorI2VuZGlmDQorDQorI2lmZGVmIE1PQklMRVRFS19UQVJHRVRfUExBVEZPUk1fVDEwNg0KKyAgICB0eXBlZGVmIGludCAoKnNjX3J0Y190aW1lX2dldF9jYikodW5zaWduZWQgaW50IHNyY19pZCwgdW5zaWduZWQgbG9uZyB1bHNlYyk7DQorZXh0ZXJuIGludCBzY19ydGNfdGltZXJfaW5pdCh2b2lkKTsNCitleHRlcm4gaW50IHNjX3J0Y190aW1lcl91bmluaXQodm9pZCk7DQorZXh0ZXJuIGludCBzY19ydGNfdGltZV9zZXQoaW50IHNyY2lkKTsNCitleHRlcm4gaW50IHNjX3J0Y190aW1lX2dldChpbnQgc3JjaWQsIHNjX3J0Y190aW1lX2dldF9jYiBydGNfbm90aWZ5KTsNCisNCitjaGFyIHN5bmNfZnJvbV9ydGNfY2JfZmxhZyA9IDE7DQorY2hhciBydGNfdGltZV9nZXRfY2JfZmxhZyA9IDE7DQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc19ydGNfc2VjID0gMDsNCisNCitzdGF0aWMgaW50IHN5bmNfZnJvbV9ydGNfY2IodW5zaWduZWQgaW50IHNyY19pZCwgdW5zaWduZWQgbG9uZyB1bHNlYykNCit7DQorICAgIExZTE9HU0VUKExPR19MRVZFTCk7DQorICAgIExZTE9HRUlOSVQoVVNFUl9MT0dfVEFHKTsNCisgICAgTFlEQkdMT0coIlslc11bJWRdIGVudGVyLlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7DQorICAgIHN5bmNfZnJvbV9ydGNfY2JfZmxhZyA9IDE7DQorICAgIHN0cnVjdCB0bSBydGNfdGltZSA9IHswfTsNCisgICAgdGltZV90IHRtcCA9IDA7DQorICAgIGNoYXIgY29tbWFuZFsxMDBdID0gIiI7DQorICAgIHRtcCA9ICh0aW1lX3QpdWxzZWM7DQorICAgIHJ0Y190aW1lID0gKmxvY2FsdGltZSgmdG1wKTsNCisNCisgICAgTFlJTkZMT0coIlJUQyB0aW1lIG5vdyBpczogJWQtJWQtJWQsJWQ6JWQ6JWRcbiIsDQorICAgICAgICAgICAgIHJ0Y190aW1lLnRtX3llYXIgKyAxOTAwLCBydGNfdGltZS50bV9tb24gKyAxLCBydGNfdGltZS50bV9tZGF5LCBydGNfdGltZS50bV9ob3VyLCBydGNfdGltZS50bV9taW4sIHJ0Y190aW1lLnRtX3NlYyk7DQorICAgIHNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwgImRhdGUgLS1zZXQ9XCdAJWx1XCcgIiwgdWxzZWMpOw0KKyAgICBzeXN0ZW0oY29tbWFuZCk7DQorICAgIHN5bmNfZnJvbV9ydGNfY2JfZmxhZyA9IDA7DQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHJ0Y190aW1lX2dldF9jYih1bnNpZ25lZCBpbnQgc3JjX2lkLCB1bnNpZ25lZCBsb25nIHVsc2VjKQ0KK3sNCisgICAgTFlMT0dTRVQoTE9HX0xFVkVMKTsNCisgICAgTFlMT0dFSU5JVChVU0VSX0xPR19UQUcpOw0KKyAgICBMWURCR0xPRygiWyVzXVslZF0gZW50ZXIuXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgcnRjX3RpbWVfZ2V0X2NiX2ZsYWcgPSAxOw0KKyAgICBzX3J0Y19zZWMgPSB1bHNlYzsNCisgICAgc3RydWN0IHRtIHJ0Y190aW1lID0gezB9Ow0KKyAgICB0aW1lX3QgdG1wID0gMDsNCisgICAgdG1wID0gKHRpbWVfdCl1bHNlYzsNCisgICAgcnRjX3RpbWUgPSAqbG9jYWx0aW1lKCZ0bXApOw0KKyAgICBMWUlORkxPRygiUlRDIHRpbWUgbm93IGlzOiAlZC0lZC0lZCwlZDolZDolZFxuIiwNCisgICAgICAgICAgICAgcnRjX3RpbWUudG1feWVhciArIDE5MDAsIHJ0Y190aW1lLnRtX21vbiArIDEsIHJ0Y190aW1lLnRtX21kYXksIHJ0Y190aW1lLnRtX2hvdXIsIHJ0Y190aW1lLnRtX21pbiwgcnRjX3RpbWUudG1fc2VjKTsNCisgICAgcnRjX3RpbWVfZ2V0X2NiX2ZsYWcgPSAwOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQoraW50IGx5bnFfc3luY190aW1lX2Zyb21fcnRjKHZvaWQpDQorew0KKyAgICBMWUxPR1NFVChMT0dfTEVWRUwpOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIExZREJHTE9HKCJbJXNdWyVkXSBlbnRlci5cbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIGludCBzcmNpZCA9IC0xOw0KKyAgICBpbnQgaSA9IDA7DQorICAgIGlmICgoc3JjaWQgPSBzY19ydGNfdGltZXJfaW5pdCgpKSA8PSAwKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygicnRjX3RpbWVyX2RlbW86cnRjX3RpbWVyX2luaXQgZmFpbCFcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldCA9IHNjX3J0Y190aW1lX2dldChzcmNpZCwgc3luY19mcm9tX3J0Y19jYik7DQorICAgIGlmIChyZXQgIT0gMCkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coInNjX3J0Y190aW1lX2dldCBmYWlsZWQgIVxuIik7DQorICAgICAgICBzY19ydGNfdGltZXJfdW5pbml0KCk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgLy8gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbmlzaCBleGVjdXRpbmcuIEJ1dCA1IHNlY29uZHMgdG9wcy4NCisgICAgZm9yIChpID0gMjU7IGkgPiAwOyBpLS0pDQorICAgIHsNCisgICAgICAgIGlmIChzeW5jX2Zyb21fcnRjX2NiX2ZsYWcgPT0gMCkNCisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIHVzbGVlcCgyMDAwMDApOw0KKyAgICB9DQorDQorICAgIGlmIChzeW5jX2Zyb21fcnRjX2NiX2ZsYWcgIT0gMCkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coInJ0Y19nZXRfdGltZV9jYiBmYWlsZWRcbiIpOw0KKyAgICAgICAgc2NfcnRjX3RpbWVyX3VuaW5pdCgpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIExZSU5GTE9HKCJzeW5jIGZyb20gcnRjIHN1Y2Nlc3NcbiIpOw0KKyAgICByZXQgPSBzY19ydGNfdGltZXJfdW5pbml0KCk7DQorICAgIGlmICgwICE9IHJldCkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coInVuaW5pdCBmYWlsZWQgXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICByZXR1cm4gMDsNCit9DQorDQoraW50IGx5bnFfc2V0X3J0Y190aW1lKHZvaWQpDQorew0KKyAgICBMWUxPR1NFVChMT0dfTEVWRUwpOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIExZREJHTE9HKCJbJXNdWyVkXSBlbnRlci5cbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIGludCBzcmNpZCA9IC0xOw0KKyAgICBpZiAoKHNyY2lkID0gc2NfcnRjX3RpbWVyX2luaXQoKSkgPD0gMCkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coInJ0Y190aW1lcl9kZW1vOnJ0Y190aW1lcl9pbml0IGZhaWwhXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICByZXQgPSBzY19ydGNfdGltZV9zZXQoc3JjaWQpOw0KKyAgICBpZiAocmV0ICE9IDApDQorICAgIHsNCisgICAgICAgIExZRVJSTE9HKCJzY19ydGNfdGltZV9zZXQgZmFpbGVkICFcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldCA9IHNjX3J0Y190aW1lcl91bmluaXQoKTsNCisgICAgaWYgKDAgIT0gcmV0KQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygidW5pbml0IGZhaWxlZCBcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbHlucV9nZXRfcnRjX3RpbWUodW5zaWduZWQgbG9uZyAqdWxzZWMpDQorew0KKyAgICBMWUxPR1NFVChMT0dfTEVWRUwpOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIExZREJHTE9HKCJbJXNdWyVkXSBlbnRlci5cbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOw0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIGludCBzcmNpZCA9IC0xOw0KKyAgICBpbnQgaSA9IDA7DQorICAgIGlmIChOVUxMID09IHVsc2VjKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygiTlVMTCBwYXJhbWV0ZXIhXG4iKTsNCisgICAgICAgIHJldHVybiBFUlJPUl9QQVJBOw0KKyAgICB9DQorICAgIGlmICgoc3JjaWQgPSBzY19ydGNfdGltZXJfaW5pdCgpKSA8PSAwKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygicnRjX3RpbWVyX2RlbW86cnRjX3RpbWVyX2luaXQgZmFpbCFcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldCA9IHNjX3J0Y190aW1lX2dldChzcmNpZCwgcnRjX3RpbWVfZ2V0X2NiKTsNCisgICAgaWYgKHJldCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygic2NfcnRjX3RpbWVfZ2V0IGZhaWxlZCAhXG4iKTsNCisgICAgICAgIHNjX3J0Y190aW1lcl91bmluaXQoKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICAvLyBXYWl0IGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmluaXNoIGV4ZWN1dGluZy4gQnV0IDUgc2Vjb25kcyB0b3BzLg0KKyAgICBmb3IgKGkgPSAyNTsgaSA+IDA7IGktLSkNCisgICAgew0KKyAgICAgICAgaWYgKHJ0Y190aW1lX2dldF9jYl9mbGFnID09IDApDQorICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICB1c2xlZXAoMjAwMDAwKTsNCisgICAgfQ0KKyAgICBpZiAocnRjX3RpbWVfZ2V0X2NiX2ZsYWcgIT0gMCkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coInJ0Y19nZXRfdGltZV9jYiBmYWlsZWRcbiIpOw0KKyAgICAgICAgc2NfcnRjX3RpbWVyX3VuaW5pdCgpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgICp1bHNlYyA9IHNfcnRjX3NlYzsNCisgICAgcmV0ID0gc2NfcnRjX3RpbWVyX3VuaW5pdCgpOw0KKyAgICBpZiAoMCAhPSByZXQpDQorICAgIHsNCisgICAgICAgIExZRVJSTE9HKCJ1bmluaXQgZmFpbGVkIFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfQ0KKyNlbmRpZg0KKw0KK2ludCBseW5xX2dldF90aW1lX3NyY19zdGF0dXModGltZV9zcmNfc3RhdHVzX3MgKnRpbWVfc3JjKQ0KK3sNCisgICAgTFlMT0dTRVQoTE9HX0xFVkVMKTsNCisgICAgTFlMT0dFSU5JVChVU0VSX0xPR19UQUcpOw0KKyAgICBMWURCR0xPRygiWyVzXVslZF0gZW50ZXIuXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgY2hhciBuaXR6X2VuYWJsZVs4XSA9ICIiOw0KKyAgICBjaGFyIGduc3NfZW5hYmxlWzhdID0gIiI7DQorICAgIGNoYXIgYnVmW0JVRl9MRU5dID0gIiI7DQorICAgIGlmIChOVUxMID09IHRpbWVfc3JjKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygiTlVMTCBwYXJhbWV0ZXIhXG4iKTsNCisgICAgICAgIHJldHVybiBFUlJPUl9QQVJBOw0KKyAgICB9DQorICAgIC8vIGdldCBudHAgc3RhdHVzLg0KKyAgICBpbnQgcmV0ID0gc3lzdGVtKFBHUkVQX05UUF9EQVJNT04pOw0KKyAgICBpZiAoMCA9PSByZXQpDQorICAgIHsNCisgICAgICAgIHRpbWVfc3JjLT5udHAgPSAxOw0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgdGltZV9zcmMtPm50cCA9IDA7DQorICAgIH0NCisNCisgICAgLy8gZ2V0IG5pdHogc3RhdHVzDQorICAgIHNwcmludGYoYnVmLCAiJXMuJXMuJXMiLCBMWU5RX1VDSV9GSUxFLCBMWU5RX1NZTkNfVElNRV9TRUNUSU9OLCBMWU5RX01PREVNX1RJTUVfS0VZKTsNCisgICAgbHlucV91Y2lfZ2V0KGJ1Ziwgbml0el9lbmFibGUpOw0KKyAgICB0aW1lX3NyYy0+bml0eiA9IGF0b2kobml0el9lbmFibGUpOw0KKw0KKyAgICAvLyBnZXQgZ25zcyBzdGF0dXMNCisgICAgc3ByaW50ZihidWYsICIlcy4lcy4lcyIsIExZTlFfVUNJX0ZJTEUsIExZTlFfU1lOQ19USU1FX1NFQ1RJT04sIExZTlFfR05TU19USU1FX0tFWSk7DQorICAgIGx5bnFfdWNpX2dldChidWYsIGduc3NfZW5hYmxlKTsNCisgICAgdGltZV9zcmMtPmduc3MgPSBhdG9pKGduc3NfZW5hYmxlKTsNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK2NvbnN0IGNoYXIgKmx5bnFfcmVhZF92ZXJzaW9uKCkNCit7DQorICAgIHJldHVybiAiU1lTVElNRV9WMS4wIjsNCit9DQorDQoraW50IHVzZXJfc2V0X3RpbWUoY2hhciAqZGF0ZSwgY2hhciAqdGltZSkNCit7DQorICAgIExZTE9HU0VUKExPR19MRVZFTCk7DQorICAgIExZTE9HRUlOSVQoVVNFUl9MT0dfVEFHKTsNCisgICAgTFlEQkdMT0coIlslc11bJWRdIGVudGVyLlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7DQorICAgIGNoYXIgY21kX2J1ZltUSU1FX0JVRl0gPSAiIjsNCisgICAgaWYgKE5VTEwgPT0gZGF0ZSB8fCBOVUxMID09IHRpbWUpDQorICAgIHsNCisgICAgICAgIExZRVJSTE9HKCJOVUxMIHBhcmFtZXRlciFcbiIpOw0KKyAgICAgICAgcmV0dXJuIEVSUk9SX1BBUkE7DQorICAgIH0NCisNCisgICAgLy8gc2V0IHN5c3RpbWUNCisgICAgc25wcmludGYoY21kX2J1Ziwgc2l6ZW9mKGNtZF9idWYpLCAiZGF0ZSAtcyAlcyslcyIsIGRhdGUsIHRpbWUpOw0KKyAgICBzeXN0ZW0oY21kX2J1Zik7DQorDQorICAgIC8vIHNldCBSVEMgYnkgbWFjcm9mdW5jdGlvbg0KKyAgICBTRVRfUlRDKCk7DQorICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbnRwX3N5bmNfdGltZShpbnQgZW5hYmxlKQ0KK3sNCisgICAgTFlMT0dTRVQoTE9HX0xFVkVMKTsNCisgICAgTFlMT0dFSU5JVChVU0VSX0xPR19UQUcpOw0KKyAgICBMWURCR0xPRygiWyVzXVslZF0gZW50ZXIuXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgaWYgKGVuYWJsZSAhPSAwICYmIGVuYWJsZSAhPSAxKQ0KKyAgICB7DQorICAgICAgICBMWUVSUkxPRygiUGFyYW1ldGVyIGVycm9yISBPbmx5IDAvMSBhbGxvd2VkLlxuIik7DQorICAgICAgICByZXR1cm4gRVJST1JfUEFSQTsNCisgICAgfQ0KKyAgICBpbnQgcmV0ID0gc3lzdGVtKFBHUkVQX05UUF9EQVJNT04pOw0KKyAgICBpZiAoMCA9PSByZXQpDQorICAgIHsNCisgICAgICAgIGlmIChlbmFibGUpDQorICAgICAgICB7DQorICAgICAgICAgICAgc3lzdGVtKE5UUF9SRVNUQVJUX0JVRik7DQorICAgICAgICAgICAgcmV0dXJuIE5UUF9BTFJFQURZX0VOQUJMRTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBzeXN0ZW0oTlRQX1NUT1BfQlVGKTsNCisgICAgICAgICAgICByZXR1cm4gU1lOQ19USU1FX1NVQ0NFU1M7DQorICAgICAgICB9DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBpZiAoZW5hYmxlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8vIE9ubHkgb25lIHRpbWUgc291cmNlIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91c2x5Lg0KKyAgICAgICAgICAgIG1vZGVtX3RpbWVfZW5hYmxlKDApOw0KKyAgICAgICAgICAgIGduc3NfdGltZV9lbmFibGUoMCk7DQorICAgICAgICAgICAgc3lzdGVtKE5UUF9TVEFSVF9CVUYpOw0KKyAgICAgICAgICAgIHJldHVybiBTWU5DX1RJTUVfU1VDQ0VTUzsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICByZXR1cm4gTlRQX0FMUkVBRFlfRElTQUJMRTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCisNCitpbnQgbW9kZW1fdGltZV9lbmFibGUoaW50IGVuYWJsZSkNCit7DQorICAgIExZTE9HU0VUKExPR19MRVZFTCk7DQorICAgIExZTE9HRUlOSVQoVVNFUl9MT0dfVEFHKTsNCisgICAgTFlEQkdMT0coIlslc11bJWRdIGVudGVyLlxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7DQorICAgIGNoYXIgYnVmW0JVRl9MRU5dID0gIiI7DQorICAgIGludCByZXQgPSAwOw0KKyAgICBpZiAoZW5hYmxlICE9IDAgJiYgZW5hYmxlICE9IDEpDQorICAgIHsNCisgICAgICAgIExZRVJSTE9HKCJQYXJhbWV0ZXIgZXJyb3IhIE9ubHkgMC8xIGFsbG93ZWQuXG4iKTsNCisgICAgICAgIHJldHVybiBFUlJPUl9QQVJBOw0KKyAgICB9DQorICAgIGlmIChlbmFibGUpDQorICAgIHsNCisgICAgICAgIC8vIE9ubHkgb25lIHRpbWUgc291cmNlIGlzIGFsbG93ZWQgdG8gcnVuIHNpbXVsdGFuZW91c2x5Lg0KKyAgICAgICAgbnRwX3N5bmNfdGltZSgwKTsNCisgICAgICAgIGduc3NfdGltZV9lbmFibGUoMCk7DQorICAgIH0NCisgICAgc3ByaW50ZihidWYsICIlcy4lcy4lcz0lZCIsIExZTlFfVUNJX0ZJTEUsIExZTlFfU1lOQ19USU1FX1NFQ1RJT04sIExZTlFfTU9ERU1fVElNRV9LRVksIGVuYWJsZSk7DQorICAgIHJldCA9IGx5bnFfdWNpX3NldChidWYpOw0KKyAgICBpZiAocmV0ID09IDQpDQorICAgICAgICByZXQgPSAwOw0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgZ25zc190aW1lX2VuYWJsZShpbnQgZW5hYmxlKQ0KK3sNCisgICAgTFlMT0dTRVQoTE9HX0xFVkVMKTsNCisgICAgTFlMT0dFSU5JVChVU0VSX0xPR19UQUcpOw0KKyAgICBMWURCR0xPRygiWyVzXVslZF0gZW50ZXIuXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsNCisgICAgY2hhciBidWZbQlVGX0xFTl0gPSAiIjsNCisgICAgaW50IHJldCA9IDA7DQorICAgIGlmIChlbmFibGUgIT0gMCAmJiBlbmFibGUgIT0gMSkNCisgICAgew0KKyAgICAgICAgTFlFUlJMT0coIlBhcmFtZXRlciBlcnJvciEgT25seSAwLzEgYWxsb3dlZC5cbiIpOw0KKyAgICAgICAgcmV0dXJuIEVSUk9SX1BBUkE7DQorICAgIH0NCisgICAgaWYgKGVuYWJsZSkNCisgICAgew0KKyAgICAgICAgLy8gT25seSBvbmUgdGltZSBzb3VyY2UgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzbHkuDQorICAgICAgICBudHBfc3luY190aW1lKDApOw0KKyAgICAgICAgbW9kZW1fdGltZV9lbmFibGUoMCk7DQorICAgIH0NCisgICAgc3ByaW50ZihidWYsICIlcy4lcy4lcz0lZCIsIExZTlFfVUNJX0ZJTEUsIExZTlFfU1lOQ19USU1FX1NFQ1RJT04sIExZTlFfR05TU19USU1FX0tFWSwgZW5hYmxlKTsNCisgICAgcmV0ID0gbHlucV91Y2lfc2V0KGJ1Zik7DQorICAgIGlmIChyZXQgPT0gNCkNCisgICAgICAgIHJldCA9IDA7DQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1zeXN0aW1lL21ha2VmaWxlIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTgzMTVmCi0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtc3lzdGltZS9tYWtlZmlsZQpAQCAtMCwwICsxLDc1IEBACitTSEVMTCA9IC9iaW4vc2gNCitSTSA9IHJtIC1mDQorDQorTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIFwNCisgICAgICAgICAgICAgICAgLXN0ZD1nbnUrKzE0IFwNCisgICAgICAgICAgICAgICAgLWcgLU9zIFwNCisgICAgICAgICAgICAgICAgLWZsdG8gXA0KKyAgICAgICAgICAgICAgICAtZlBJQyBcDQorICAgICAgICAgICAgICAgIC1mcGVybWlzc2l2ZSBcDQorDQoraWZlcSAoJChzdHJpcCAkKFRBUkdFVF9QTEFURk9STSkpLCBUMTA2KQ0KK0xPQ0FMX0NGTEFHUyArPSAtREJJTkRFUl9JUENfMzJCSVQ9MSAtREhBVkVfRU5ESUFOX0ggLURIQVZFX1BUSFJFQURTIC1ESEFWRV9TWVNfVUlPX0ggLURIQVZFX1BPU0lYX0ZJTEVNQVAgLURIQVZFX1NUUkxDUFkgLURIQVZFX1BSQ1RMIC1ESEFWRV9NRU1TRVQxNiAtREhBVkVfTUVNU0VUMzIgLURBTkRST0lEX1NNUD0wIA0KK2VuZGlmDQorDQoraWZlcSAoJChzdHJpcCAkKFRBUkdFVF9QTEFURk9STSkpLCBUMTA2KQ0KK0xPQ0FMX0NGTEFHUyArPSAtRE1PQklMRVRFS19UQVJHRVRfUExBVEZPUk1fVDEwNg0KK2VuZGlmDQorDQorTE9DQUxfQ0ZMQUdTICs9ICQoQ0ZMQUdTKQ0KKyQod2FybmluZyAjIyMjIyMjIyMjIyMjIyMjIyByb2NrIFJPT1Q6ICQoUk9PVCksaW5jbHVkZWRpcjokKGluY2x1ZGVkaXIpLCkNCisNCitMT0NBTF9QQVRIICAgPSAuDQorDQorTE9DQUxfQ19JTkNMVURFUyA9IFwNCisgIC1JLiBcDQorICAtSSQoTE9DQUxfUEFUSCkvaW5jbHVkZSBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2xvZ2dlciBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2xpYmxvZyBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpIFwNCisNCisNCitMT0NBTF9MSUJTIDo9IFwNCisgICAgLUwuIFwNCisgICAgLWxkbCBcDQorICAgIC1sc3RkYysrIFwNCisgICAgLWxwdGhyZWFkIFwNCisgICAgLWxzY3RlbCBcDQorICAgIC1sbHlucS11Y2kgXA0KKyAgICAtbGx5bnEtbG9nIFwNCisNCisNCitTT1VSQ0VTID0gJCh3aWxkY2FyZCAqLmNwcCkNCisNCitFWEVDVVRBQkxFID0gbGlibHlucS1zeXN0aW1lLnNvDQorDQorT0JKRUNUUz0kKFNPVVJDRVM6LmNwcD0ubykNCisNCisuUEhPTlk6IGJ1aWxkIGNsZWFuIGluc3RhbGwgcGFja19yb290ZnMgDQorDQorYWxsOiBidWlsZA0KKyQoRVhFQ1VUQUJMRSk6ICQoT0JKRUNUUykNCisJJChDWFgpIC1zaGFyZWQgLVdsLC0tbm8tdW5kZWZpbmVkICQoT0JKRUNUUykgJChMT0NBTF9MSUJTKSAkKExPQ0FMX0NGTEFHUykgJChMT0NBTF9DX0lOQ0xVREVTKSAtbyAkQA0KKw0KKyUubyA6ICUuY3BwDQorCSQoQ1hYKSAkKExPQ0FMX0NfSU5DTFVERVMpICQoTE9DQUxfQ0ZMQUdTKSAkKExPQ0FMX0xJQlMpIC1vICRAIC1jICQ8IA0KKw0KK2J1aWxkOiAgJChFWEVDVVRBQkxFKQ0KKwkkKHdhcm5pbmcgIyMjIyMjIyMjIyBidWlsZCAkKEVYRUNVVEFCTEUpICAjIyMjIyMjIyMjKQ0KKw0KK2luc3RhbGw6DQorCW1rZGlyIC1wICQoUk9PVCkkKGJhc2VfbGliZGlyKS8NCisJaW5zdGFsbCAkKEVYRUNVVEFCTEUpICQoUk9PVCkkKGJhc2VfbGliZGlyKS8NCisJbWtkaXIgLXAgJChST09UKSQoaW5jbHVkZWRpcikvJChOQU1FKS9zZGsNCisNCitwYWNrX3Jvb3RmczoNCisJbWtkaXIgLXAgJChQQUNLX0lOSVRSQU1GU19UTykkKGJhc2VfbGliZGlyKS8NCisJY3AgLWFmICQoRVhFQ1VUQUJMRSkgJChQQUNLX0lOSVRSQU1GU19UTykkKGJhc2VfbGliZGlyKS8NCisJJChDUk9TUylzdHJpcCAkKFBBQ0tfSU5JVFJBTUZTX1RPKSQoYmFzZV9saWJkaXIpLyQoRVhFQ1VUQUJMRSkNCisJbWtkaXIgLXAgJChQQUNLX1RPKSQoYmFzZV9saWJkaXIpLw0KKwljcCAtYWYgJChFWEVDVVRBQkxFKSAkKFBBQ0tfVE8pJChiYXNlX2xpYmRpcikvDQorCSQoQ1JPU1Mpc3RyaXAgJChQQUNLX1RPKSQoYmFzZV9saWJkaXIpLyQoRVhFQ1VUQUJMRSkNCisuUEhPTlk6IGNsZWFuDQorY2xlYW46DQorCSQoUk0pICQoT0JKRUNUUykgJChFWEVDVVRBQkxFKQ0KKw0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXVjaS9seW5xX3VjaS5jb25maWcgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS11Y2kvbHlucV91Y2kuY29uZmlnCmluZGV4IDNhYzUwMWQuLmY3N2ZkMzcgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXVjaS9seW5xX3VjaS5jb25maWcKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtdWNpL2x5bnFfdWNpLmNvbmZpZwpAQCAtOSw3ICs5LDggQEAKICAgICAgICAgb3B0aW9uIGdhdGV3YXkgJzE5Mi4xNjguMTEuMScNCiANCiBjb25maWcgIGx5bnFfc3luY190aW1lX3J3ICAnbHlucV9zeW5jX3RpbWUnDQotDQorICAgICAgICBvcHRpb24gbHlucV9tb2RlbV9zeW5jX3RpbWVfZW5hYmxlICcwJw0KKyAgICAgICAgb3B0aW9uIGx5bnFfZ25zc19zeW5jX3RpbWVfZW5hYmxlICcwJw0KIGNvbmZpZyAgbHlucV9hdXRvc3VzcGVuZCAgJ2x5bnFfYXV0b3N1c3BlbmQnDQogICAgICAgICBvcHRpb24gYXV0b19lbmFibGUgJzAnDQogICAgICAgICBvcHRpb24gZGVidWcgJzEnDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYnBvd2VyYWxhcm0vTElDRU5TRSBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FjMjI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL0xJQ0VOU0UKQEAgLTAsMCArMSwzMSBAQAorQ29weXJpZ2h0IFN0YXRlbWVudDoKKworVGhpcyBzb2Z0d2FyZS9maXJtd2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uICgiTWVkaWFUZWsgU29mdHdhcmUiKSBhcmUKK3Byb3RlY3RlZCB1bmRlciByZWxldmFudCBjb3B5cmlnaHQgbGF3cy4gVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMKK2NvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgdG8gTW9iaWxldGVrIEluYy4gYW5kL29yIGl0cyBsaWNlbnNvcnMuIFdpdGhvdXQKK3RoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgTW9iaWxldGVrIGluYy4gYW5kL29yIGl0cyBsaWNlbnNvcnMsIGFueQorcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHVzZSBvciBkaXNjbG9zdXJlIG9mIE1lZGlhVGVrIFNvZnR3YXJlLCBhbmQKK2luZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4sIGluIHdob2xlIG9yIGluIHBhcnQsIHNoYWxsIGJlIHN0cmljdGx5Citwcm9oaWJpdGVkLgorCitNb2JpbGV0ZWsgSW5jLiAoQykgMjAxNS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQlkgT1BFTklORyBUSElTIEZJTEUsIFJFQ0VJVkVSIEhFUkVCWSBVTkVRVUlWT0NBTExZIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTCitUSEFUIFRIRSBTT0ZUV0FSRS9GSVJNV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT05TICgiTW9iaWxldGVrIFNPRlRXQVJFIikKK1JFQ0VJVkVEIEZST00gTU9CSUxFVEVLIEFORC9PUiBJVFMgUkVQUkVTRU5UQVRJVkVTIEFSRSBQUk9WSURFRCBUTyBSRUNFSVZFUgorT04gQU4gIkFTLUlTIiBCQVNJUyBPTkxZLiBNT0JJTEVURUsgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgQU5EIEFMTAorV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTklORlJJTkdFTUVOVC4gTkVJVEhFUiBET0VTIE1PQklMRVRFSyBQUk9WSURFIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIFdJVEgKK1JFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFIE9GIEFOWSBUSElSRCBQQVJUWSBXSElDSCBNQVkgQkUgVVNFRCBCWSwKK0lOQ09SUE9SQVRFRCBJTiwgT1IgU1VQUExJRUQgV0lUSCBUSEUgTU9CSUxFVEVLIFNPRlRXQVJFLCBBTkQgUkVDRUlWRVIgQUdSRUVTCitUTyBMT09LIE9OTFkgVE8gU1VDSCBUSElSRCBQQVJUWSBGT1IgQU5ZIFdBUlJBTlRZIENMQUlNIFJFTEFUSU5HIFRIRVJFVE8uCitSRUNFSVZFUiBFWFBSRVNTTFkgQUNLTk9XTEVER0VTIFRIQVQgSVQgSVMgUkVDRUlWRVInUyBTT0xFIFJFU1BPTlNJQklMSVRZIFRPCitPQlRBSU4gRlJPTSBBTlkgVEhJUkQgUEFSVFkgQUxMIFBST1BFUiBMSUNFTlNFUyBDT05UQUlORUQgSU4gTU9CSUxFVEVLCitTT0ZUV0FSRS4gTU9CSUxFVEVLIFNIQUxMIEFMU08gTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgTU9CSUxFVEVLIFNPRlRXQVJFCitSRUxFQVNFUyBNQURFIFRPIFJFQ0VJVkVSJ1MgU1BFQ0lGSUNBVElPTiBPUiBUTyBDT05GT1JNIFRPIEEgUEFSVElDVUxBUgorU1RBTkRBUkQgT1IgT1BFTiBGT1JVTS4gUkVDRUlWRVInUyBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIEFORCBNT0JJTEVURUsnUworRU5USVJFIEFORCBDVU1VTEFUSVZFIExJQUJJTElUWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIE1FRElBVEVLIFNPRlRXQVJFCitSRUxFQVNFRCBIRVJFVU5ERVIgV0lMTCBCRSwgQVQgTU9CSUxFVEVLJ1MgT1BUSU9OLCBUTyBSRVZJU0UgT1IgUkVQTEFDRSBUSEUKK01PQklMRVRFSyBTT0ZUV0FSRSBBVCBJU1NVRSwgT1IgUkVGVU5EIEFOWSBTT0ZUV0FSRSBMSUNFTlNFIEZFRVMgT1IgU0VSVklDRQorQ0hBUkdFIFBBSUQgQlkgUkVDRUlWRVIgVE8gTU9CSUxFVEVLIEZPUiBTVUNIIE1PQklMRVRFSyBTT0ZUV0FSRSBBVCBJU1NVRS4KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL2luY2x1ZGUvbGlicG93ZXJhbGFybS5oIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYnBvd2VyYWxhcm0vaW5jbHVkZS9saWJwb3dlcmFsYXJtLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQxOTFhNgotLS0gL2Rldi9udWxsCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL2luY2x1ZGUvbGlicG93ZXJhbGFybS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiANCisqIEBicmllZjogICBub25lDQorKiBAZGV0YWlsczogIGFkZCBsaWJwb3dlcmFsYXJtIGFwaQ0KKyogQGF1dGhvcjogICBsLnlhbmcNCisqIEBkYXRlOiAgICAgMjAyMy44LjIxDQorKiBAdmVyc2lvbjogIFYxLjANCisqIEBjb3B5cmlnaHTvvJpDb3B5cmlnaHQgKGMpIE1vYmlsZVRlayANCisqDQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KKw0KKyNpZm5kZWYgX0xZTlFfUE9XRVJBTEFSTV8NCisjZGVmaW5lIF9MWU5RX1BPV0VSQUxBUk1fDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorICAgIGV4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KK3NzaXplX3QgcG93ZXJhbGFybShjaGFyICogYnVmZmVyKTsNCitzc2l6ZV90IHdha2VhbGFybShjaGFyICpidWZmZXIpOw0KK3NzaXplX3QgY2FuY2VsX3dha2VhbGFybSh2b2lkKTsNCitpbnQgbHlucV9zZXRfd2FrZWFsYXJtKHVuc2lnbmVkIGxvbmcgIHRpbWVfc2VjKTsNCitpbnQgbHlucV9zZXRfcG93ZXJhbGFybSh1bnNpZ25lZCBsb25nIHRpbWVfc2VjKTsNCisNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmDQorDQorDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYnBvd2VyYWxhcm0vbGlicG93ZXJhbGFybS5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlicG93ZXJhbGFybS9saWJwb3dlcmFsYXJtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NDVlMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYnBvd2VyYWxhcm0vbGlicG93ZXJhbGFybS5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiANCisqIEBicmllZjogICAgbm9uZQ0KKyogQGRldGFpbHM6ICAgICAgQWRkICB3YWtlYWxybSBhbmQgcG93ZXJhbGFybSBhcGkgY29kZSANCisqIEBhdXRob3I6ICAgIGwueWFuZw0KKyogQGRhdGU6ICAgIDIwMjMuOC4xNw0KKyogQHZlcnNpb246ICAgIFYxLjANCisqIEBjb3B5cmlnaHTvvJogICAgQ29weXJpZ2h0IChjKSBNb2JpbGVUZWsgDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisjaW5jbHVkZTxzdGRpby5oPg0KKyNpbmNsdWRlPHN0ZGxpYi5oPg0KKyNpbmNsdWRlPHVuaXN0ZC5oPg0KKyNpbmNsdWRlPHN0ZGJvb2wuaD4NCisjaW5jbHVkZTxsb2cvbG9nLmg+DQorI2luY2x1ZGUgImxpYmxvZy9seW5xX2RlZmxvZy5oIg0KKyNpbmNsdWRlIDxpbmNsdWRlL2xpYnBvd2VyYWxhcm0uaD4NCisjaW5jbHVkZSA8cHRocmVhZC5oPg0KKw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKw0KKyNkZWZpbmUgVVNFUl9MT0dfVEFHICJMWU5RX1BPV0VSQUxBUk0iDQorDQorDQorc3RhdGljIGludCB3a19ydGNfaWQgPSAxOw0KK3N0YXRpYyBpbnQgcHdfcnRjX2lkID0gMjsNCitzdGF0aWMgaW50IHdrX3NyY2lkID0gMDsNCisNCit0eXBlZGVmIGludCAoKnNjX3J0Y190aW1lcl9leHBfY2IpKHVuc2lnbmVkIGludCBzcmNfaWQsIGludCBydGNfaWQpOw0KK2V4dGVybiBpbnQgc2NfcnRjX3RpbWVyX2luaXQodm9pZCk7DQorZXh0ZXJuIGludCBzY19ydGNfdGltZXJfdW5pbml0KHZvaWQgKTsNCitleHRlcm4gaW50IHNjX3J0Y190aW1lcl9hZGQoaW50IHNyY2lkLCBpbnQgcnRjX2lkLCB1bnNpZ25lZCBsb25nIHVsU2VjLCBzY19ydGNfdGltZXJfZXhwX2NiIHJ0Y19ub3RpZnkpOw0KK2V4dGVybiBpbnQgc2NfcnRjX3RpbWVyX2RlbChpbnQgc3JjaWQsIGludCBydGNfaWQpOw0KKw0KKw0KKw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogQGJyaWVmOnNjX3J0Y190aW1lcl9hZGRfY2INCisqIEBwYXJhbSBjb3VudCBbSU5dOnNyY19pZCwgcnRjX2lkLA0KKyogQHBhcmFtIHN1bSBbT1VUXTpOQQ0KKyogQHJldHVybiA6MA0KKyogQHRvZG86DQorKiBAc2VlOk5BDQorKiBAd2FybmluZzoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW50IHNjX3J0Y190aW1lcl9hZGRfY2IodW5zaWduZWQgaW50IHNyY19pZCwgaW50IHJ0Y19pZCkNCit7DQorICAgIHJldHVybiAwOw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEBicmllZjpTZXQgd2FrZWFsYXJtIHRpbWUNCisqIEBwYXJhbSBjb3VudCBbSU5dOmJ1ZmZlciwNCisqIEBwYXJhbSBzdW0gW09VVF06TkENCisqIEByZXR1cm4gOnN1Y2Nlc3MgMCwgZmFpbGVkIC0xDQorKiBAdG9kbzoNCisqIEBzZWU6TkENCisqIEB3YXJuaW5nOg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitzc2l6ZV90IHdha2VhbGFybShjaGFyICpidWZmZXIpDQorew0KKyAgICB1bnNpZ25lZCBsb25nICB0aW1lX3NlYyA9IDA7DQorICAgIGludCByZXQgPSAwOw0KKyAgICANCisgICAgTFlMT0dTRVQoTE9HX0lORk8pOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIA0KKyAgICBpZihidWZmZXIgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgTFlJTkZMT0coIkJhZCBpbnB1dCBwYXJhbWV0ZXIsZXhpdCEhISEiKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB0aW1lX3NlYyA9IGF0b2xsKGJ1ZmZlcik7DQorICAgIA0KKyAgICBMWUlORkxPRygiU2V0ICB3YWtlYWxhcm0gICAlbHUgc2Vjb25kcyAiLHRpbWVfc2VjKTsNCisgICAgd2tfc3JjaWQgPSBzY19ydGNfdGltZXJfaW5pdCgpOw0KKyAgICBpZiAod2tfc3JjaWQgPD0gMCkNCisgICAgew0KKyAgICAgICAgTFlJTkZMT0coInJ0Y190aW1lcl9pbml0IGZhaWwhIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0ID0gc2NfcnRjX3RpbWVyX2FkZCh3a19zcmNpZCwgd2tfcnRjX2lkLCB0aW1lX3NlYywgc2NfcnRjX3RpbWVyX2FkZF9jYik7DQorICAgIGlmKHJldCA8IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJBZGQgIHJ0YyB0aW1lciBmYWlsZWQhISEhIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgDQorICAgIExZSU5GTE9HKCJTZXQgd2FrZWFsYXJtIHN1Y2Nlc3MgISEhIik7DQorDQorICAgIHJldCA9IHNjX3J0Y190aW1lcl91bmluaXQoKTsNCisgICAgaWYocmV0ICE9IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJEZWluaXQgZmFpbGVkIik7DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiAwOw0KKw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEBicmllZjpzZXQgcG93ZXJhbGFybSB0aW1lIA0KKyogQHBhcmFtIGNvdW50IFtJTl06YnVmZmVyLA0KKyogQHBhcmFtIHN1bSBbT1VUXTpOQQ0KKyogQHJldHVybiA6c3VjY2VzcyAwLCBmYWlsZWQgLTENCisqIEB0b2RvOg0KKyogQHNlZTpOQQ0KKyogQHdhcm5pbmc6DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3NzaXplX3QgcG93ZXJhbGFybShjaGFyICpidWZmZXIpDQorew0KKyAgICBpbnQgc3JjaWQgPSAwOw0KKyAgICB1bnNpZ25lZCBsb25nICB0aW1lX3NlYyA9IDA7DQorICAgIGludCByZXQgPSAwOw0KKyAgICANCisgICAgTFlMT0dTRVQoTE9HX0lORk8pOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIA0KKyAgICBpZihidWZmZXIgPT0gTlVMTCkNCisgICAgew0KKyAgICAgICAgTFlJTkZMT0coIkJhZCBpbnB1dCBwYXJhbWV0ZXIsZXhpdCEhISEiKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICB0aW1lX3NlYyA9IGF0b2xsKGJ1ZmZlcik7DQorICAgIA0KKyAgICBMWUlORkxPRygiU2V0IHBvd2VyYWxhcm0gJWx1IHNlY29uZHMiLHRpbWVfc2VjKTsNCisgICAgc3JjaWQgPSBzY19ydGNfdGltZXJfaW5pdCgpOw0KKyAgICBpZiAoc3JjaWQgPD0gMCkNCisgICAgew0KKyAgICAgICAgTFlJTkZMT0coInJ0Y190aW1lcl9pbml0IGZhaWwhIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0ID0gc2NfcnRjX3RpbWVyX2FkZChzcmNpZCwgcHdfcnRjX2lkLCB0aW1lX3NlYywgc2NfcnRjX3RpbWVyX2FkZF9jYik7DQorICAgIGlmKHJldCA8IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJBZGQgIHJ0YyB0aW1lciBmYWlsZWQhISEhIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgDQorICAgIExZSU5GTE9HKCJTZXQgcG93ZXJhbGFybSBzdWNjZXNzICEhISIpOw0KKw0KKyAgICByZXQgPSBzY19ydGNfdGltZXJfdW5pbml0KCk7DQorICAgIGlmKHJldCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBMWUlORkxPRygiRGVpbml0IGZhaWxlZCIpOw0KKyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gMDsNCisNCit9DQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEBicmllZjpjYW5jZWxfd2FrZWFsYXJtLA0KKyogQHBhcmFtIGNvdW50IFtJTl06dm9pZA0KKyogQHBhcmFtIHN1bSBbT1VUXTpOQQ0KKyogQHJldHVybiA6c3VjY2VzcyAwLCBmYWlsZWQgLTENCisqIEB0b2RvOg0KKyogQHNlZTpOQQ0KKyogQHdhcm5pbmc6DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorc3NpemVfdCBjYW5jZWxfd2FrZWFsYXJtKHZvaWQpDQorew0KKyAgICBpbnQgcmV0ID0gMDsNCisNCisgICAgTFlJTkZMT0coIkVudGVyIGNhbmNlbF93YWtlYWxhcm0gIik7DQorICAgIHJldCA9IHNjX3J0Y190aW1lcl9kZWwod2tfc3JjaWQsIHdrX3J0Y19pZCk7DQorICAgIGlmKHJldCA8IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJEZWwgd2FrZWFsYXJtIGZhaWxlZCEhISIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KKyAgICANCit9DQorDQorDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorKiBAYnJpZWY6bHlucV9zZXRfcG93ZXJhbGFybQ0KKyogQHBhcmFtIGNvdW50IFtJTl06dW5zaWduZWQgbG9uZyB0aW1lX3NlYw0KKyogQHBhcmFtIHN1bSBbT1VUXTpOQQ0KKyogQHJldHVybiA6c3VjY2VzcyAwLCBmYWlsZWQgLTENCisqIEB0b2RvOg0KKyogQHNlZTpOQQ0KKyogQHdhcm5pbmc6DQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK2ludCAgbHlucV9zZXRfcG93ZXJhbGFybSh1bnNpZ25lZCBsb25nIHRpbWVfc2VjKQ0KK3sNCisgICAgTFlMT0dTRVQoTE9HX0lORk8pOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIGludCByZXQgPSAwOw0KKyAgICBpbnQgc3JjaWQgPSAwOw0KKyAgICBMWUlORkxPRygibHlucV9zZXRfcG93ZXJhbGFybSAlbHUgc2Vjb25kcyIsdGltZV9zZWMpOw0KKyAgICBzcmNpZCA9IHNjX3J0Y190aW1lcl9pbml0KCk7DQorICAgIGlmIChzcmNpZCA8PSAwKQ0KKyAgICB7DQorICAgICAgICBMWUlORkxPRygicnRjX3RpbWVyX2luaXQgZmFpbCEiKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICByZXQgPSBzY19ydGNfdGltZXJfYWRkKHNyY2lkLCBwd19ydGNfaWQsIHRpbWVfc2VjLCBzY19ydGNfdGltZXJfYWRkX2NiKTsNCisgICAgaWYocmV0IDwgMCkNCisgICAgew0KKyAgICAgICAgTFlJTkZMT0coIkFkZCAgcnRjIHRpbWVyIGZhaWxlZCEhISEiKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICANCisgICAgTFlJTkZMT0coIlNldCBwb3dlcmFsYXJtIHN1Y2Nlc3MgISEhIik7DQorDQorICAgIHJldCA9IHNjX3J0Y190aW1lcl91bmluaXQoKTsNCisgICAgaWYocmV0ICE9IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJEZWluaXQgZmFpbGVkIik7DQorICAgIH0NCisgICAgDQorICAgIHJldHVybiAwOw0KKw0KK30NCisNCisNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqIEBicmllZjpseW5xX3NldF93YWtlYWxhcm0NCisqIEBwYXJhbSBjb3VudCBbSU5dOnVuc2lnbmVkIGxvbmcgIHRpbWVfc2VjDQorKiBAcGFyYW0gc3VtIFtPVVRdOk5BDQorKiBAcmV0dXJuIDpzdWNjZXNzIDAsIGZhaWxlZCAtMQ0KKyogQHRvZG86DQorKiBAc2VlOk5BDQorKiBAd2FybmluZzoNCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoraW50IGx5bnFfc2V0X3dha2VhbGFybSh1bnNpZ25lZCBsb25nICB0aW1lX3NlYykNCit7DQorICAgIGludCByZXQgPSAwOw0KKyAgICANCisgICAgTFlMT0dTRVQoTE9HX0lORk8pOw0KKyAgICBMWUxPR0VJTklUKFVTRVJfTE9HX1RBRyk7DQorICAgIA0KKyAgICBMWUlORkxPRygibHlucV9zZXRfd2FrZWFsYXJtICAgJWx1IHNlY29uZHMgIix0aW1lX3NlYyk7DQorICAgIHdrX3NyY2lkID0gc2NfcnRjX3RpbWVyX2luaXQoKTsNCisgICAgaWYgKHdrX3NyY2lkIDw9IDApDQorICAgIHsNCisgICAgICAgIExZSU5GTE9HKCJydGNfdGltZXJfaW5pdCBmYWlsISIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldCA9IHNjX3J0Y190aW1lcl9hZGQod2tfc3JjaWQsIHdrX3J0Y19pZCwgdGltZV9zZWMsIHNjX3J0Y190aW1lcl9hZGRfY2IpOw0KKyAgICBpZihyZXQgPCAwKQ0KKyAgICB7DQorICAgICAgICBMWUlORkxPRygiQWRkICBydGMgdGltZXIgZmFpbGVkISEhISIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIA0KKyAgICBMWUlORkxPRygiU2V0IHdha2VhbGFybSBzdWNjZXNzICEhISIpOw0KKw0KKyAgICByZXQgPSBzY19ydGNfdGltZXJfdW5pbml0KCk7DQorICAgIGlmKHJldCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBMWUlORkxPRygiRGVpbml0IGZhaWxlZCEhISIpOw0KKyAgICB9DQorICAgIA0KKyAgICByZXR1cm4gMDsNCisNCit9DQorDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL21ha2VmaWxlIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYnBvd2VyYWxhcm0vbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmM2OTE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJwb3dlcmFsYXJtL21ha2VmaWxlCkBAIC0wLDAgKzEsNzUgQEAKK1NIRUxMID0gL2Jpbi9zaA0KK1JNID0gcm0gLWYNCisNCitMT0NBTF9DRkxBR1MgOj0gLVdhbGwgXA0KKyAgICAgICAgICAgICAgICAtc3RkPWdudSsrMTQgXA0KKyAgICAgICAgICAgICAgICAtZyAtT3MgXA0KKyAgICAgICAgICAgICAgICAtZmx0byBcDQorICAgICAgICAgICAgICAgIC1mUElDIFwNCisgICAgICAgICAgICAgICAgLWZwZXJtaXNzaXZlIFwNCisgICAgDQorICAgICAgICAgICAgICAgIA0KKyANCitpZmVxICgkKHN0cmlwICQoVEFSR0VUX1BMQVRGT1JNKSksIFQxMDYpDQorTE9DQUxfQ0ZMQUdTICs9IC1EQklOREVSX0lQQ18zMkJJVD0xIC1ESEFWRV9FTkRJQU5fSCAtREhBVkVfUFRIUkVBRFMgLURIQVZFX1NZU19VSU9fSCAtREhBVkVfUE9TSVhfRklMRU1BUCAtREhBVkVfU1RSTENQWSAtREhBVkVfUFJDVEwgLURIQVZFX01FTVNFVDE2IC1ESEFWRV9NRU1TRVQzMiAtREFORFJPSURfU01QPTANCitlbmRpZg0KKw0KKw0KKyQod2FybmluZyAjIyMjIyMjIyMjIyMjIyMjIyByb2NrIFJPT1Q6ICQoUk9PVCksaW5jbHVkZWRpcjokKGluY2x1ZGVkaXIpLCkNCisNCitMT0NBTF9QQVRIICAgPSAuDQorDQorTE9DQUxfQ19JTkNMVURFUyA9IFwNCisgIC1JLiBcDQorICAtSSQoTE9DQUxfUEFUSCkvaW5jbHVkZSBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2xvZ2dlciBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2xpYmxvZyBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2dsaWItMi4wIFwNCisgIC1JJChST09UKSQobGliZGlyKS9nbGliLTIuMC9pbmNsdWRlIFwNCisgIC1JJChST09UKSQoaW5jbHVkZWRpcikgIFwNCisNCisNCisNCitMT0NBTF9MSUJTIDo9IFwNCisgICAgLUwuIFwNCisgICAgLWxkbCBcDQorICAgIC1sc3RkYysrIFwNCisgICAgLWxseW5xLWxvZyBcDQorCS1sc2N0ZWwgXA0KKw0KKw0KK1NPVVJDRVMgPSAkKHdpbGRjYXJkICouY3BwKQ0KKw0KK0VYRUNVVEFCTEUgPSBsaWJwb3dlcmFsYXJtLnNvDQorDQorT0JKRUNUUz0kKFNPVVJDRVM6LmNwcD0ubykNCisNCisNCisuUEhPTlk6IGJ1aWxkIGNsZWFuIGluc3RhbGwgcGFja19yb290ZnMgDQorDQorYWxsOiBidWlsZA0KKyQoRVhFQ1VUQUJMRSk6ICQoT0JKRUNUUykNCisJJChDWFgpIC1zaGFyZWQgLVdsLC0tbm8tdW5kZWZpbmVkICQoT0JKRUNUUykgJChMT0NBTF9MSUJTKSAkKExPQ0FMX0NGTEFHUykgJChMT0NBTF9DX0lOQ0xVREVTKSAtbyAkQA0KKw0KKyUubyA6ICUuY3BwDQorCSQoQ1hYKSAkKExPQ0FMX0NfSU5DTFVERVMpICQoTE9DQUxfQ0ZMQUdTKSAkKExPQ0FMX0xJQlMpIC1vICRAIC1jICQ8IA0KKw0KK2J1aWxkOiAgJChFWEVDVVRBQkxFKQ0KKwkkKHdhcm5pbmcgIyMjIyMjIyMjIyBidWlsZCAkKEVYRUNVVEFCTEUpICAjIyMjIyMjIyMjKQ0KKw0KK2luc3RhbGw6DQorCW1rZGlyIC1wICQoUk9PVCkkKGJhc2VfbGliZGlyKS8NCisJaW5zdGFsbCAkKEVYRUNVVEFCTEUpICQoUk9PVCkkKGJhc2VfbGliZGlyKS8NCisJbWtkaXIgLXAgJChST09UKSQoaW5jbHVkZWRpcikvJChOQU1FKS9zZGsNCisNCitwYWNrX3Jvb3RmczoNCisJbWtkaXIgLXAgJChQQUNLX0lOSVRSQU1GU19UTykkKGJhc2VfbGliZGlyKS8NCisJY3AgLWFmICQoRVhFQ1VUQUJMRSkgJChQQUNLX0lOSVRSQU1GU19UTykkKGJhc2VfbGliZGlyKS8NCisJJChDUk9TUylzdHJpcCAkKFBBQ0tfSU5JVFJBTUZTX1RPKSQoYmFzZV9saWJkaXIpLyQoRVhFQ1VUQUJMRSkNCisJbWtkaXIgLXAgJChQQUNLX1RPKSQoYmFzZV9saWJkaXIpLw0KKwljcCAtYWYgJChFWEVDVVRBQkxFKSAkKFBBQ0tfVE8pJChiYXNlX2xpYmRpcikvDQorCSQoQ1JPU1Mpc3RyaXAgJChQQUNLX1RPKSQoYmFzZV9saWJkaXIpLyQoRVhFQ1VUQUJMRSkNCisuUEhPTlk6IGNsZWFuDQorY2xlYW46DQorCSQoUk0pICQoT0JKRUNUUykgJChFWEVDVVRBQkxFKQ0KKw0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLWZvdGEtZGVtby9tYWtlZmlsZSBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLWZvdGEtZGVtby9tYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2E2ZDIzZi4uMDAwMDAwMAotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci1mb3RhLWRlbW8vbWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1TSEVMTCA9IC9iaW4vc2gNCi1STSA9IHJtIC1mDQotDQotTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIFwNCi0gICAgICAgICAgICAgICAgLXN0ZD1nbnUrKzE0IFwNCi0gICAgICAgICAgICAgICAgLWcgLU9zIFwNCi0gICAgICAgICAgICAgICAgLWZsdG8gXA0KLSAgICAgICAgICAgICAgICAtZlBJQyBcDQotICAgIA0KLSAgICAgICAgICAgICAgICANCi0gDQotaWZlcSAoJChzdHJpcCAkKFRBUkdFVF9QTEFURk9STSkpLCBUMTA2KQ0KLUxPQ0FMX0NGTEFHUyArPSAtREJJTkRFUl9JUENfMzJCSVQ9MSAtREhBVkVfRU5ESUFOX0ggLURIQVZFX1BUSFJFQURTIC1ESEFWRV9TWVNfVUlPX0ggLURIQVZFX1BPU0lYX0ZJTEVNQVAgLURIQVZFX1NUUkxDUFkgLURIQVZFX1BSQ1RMIC1ESEFWRV9NRU1TRVQxNiAtREhBVkVfTUVNU0VUMzIgLURBTkRST0lEX1NNUD0wDQotZW5kaWYNCi0NCi1MT0NBTF9DRkxBR1MgKz0gLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkNCi0NCi0kKHdhcm5pbmcgIyMjIyMjIyMjIyMjIyMjIyMgcm9jayBST09UOiAkKFJPT1QpLGluY2x1ZGVkaXI6JChpbmNsdWRlZGlyKSwpDQotDQotTE9DQUxfUEFUSCAgID0gLg0KLQ0KLUxPQ0FMX0NfSU5DTFVERVMgPSBcDQotICAtSS4gXA0KLSAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUgXA0KLSAgLUkkKFJPT1QpJChpbmNsdWRlZGlyKS9sb2dnZXIgXA0KLSAgLUkkKFJPT1QpJChpbmNsdWRlZGlyKS9saWJsb2cgXA0KLSAgLUkkKFJPT1QpJChpbmNsdWRlZGlyKS9nbGliLTIuMCBcDQotICAtSSQoUk9PVCkkKGxpYmRpcikvZ2xpYi0yLjAvaW5jbHVkZSBcDQotICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpICBcDQotDQotDQotDQotTE9DQUxfTElCUyA6PSBcDQotICAgIC1MLiBcDQotICAgIC1sZGwgXA0KLSAgICAtbHN0ZGMrKyBcDQotDQotU09VUkNFUyA9IGx5bnEtcXNlci1mb3RhLWRlbW8uY3BwDQotDQotRVhFQ1VUQUJMRSA9IGx5bnEtcXNlci1mb3RhLWRlbW8NCi0NCi1PQkpFQ1RTPSQoU09VUkNFUzouY3BwPS5vKQ0KLQ0KLU9CSkVDVFNfVE9PTD0kKFNPVVJDRVNfVE9PTDouY3BwPS5vKQ0KLWFsbDogJChFWEVDVVRBQkxFKSANCi0NCi0kKEVYRUNVVEFCTEUpOiAkKE9CSkVDVFMpDQotCSQoQ1hYKSAkKE9CSkVDVFMpICQoTE9DQUxfTElCUykgJChMT0NBTF9DRkxBR1MpICQoTE9DQUxfQ19JTkNMVURFUykgLW8gJEANCi0NCi0lLm8gOiAlLmNwcA0KLQkkKENYWCkgJChMT0NBTF9DX0lOQ0xVREVTKSAkKExPQ0FMX0NGTEFHUykgJChMT0NBTF9MSUJTKSAtbyAkQCAtYyAkPCANCi0NCi0uUEhPTlk6IGNsZWFuDQotY2xlYW46DQotCSQoUk0pICQoT0JKRUNUUykgJChFWEVDVVRBQkxFKQ0KLQkkKFJNKSAkKE9CSkVDVFNfVE9PTCkgJChFWEVDVVRBQkxFKQ0KLQ0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLW5ldHdvcmstZGVtby9tYWtlZmlsZSBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1xc2VyLW5ldHdvcmstZGVtby9tYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTc1NTU3Yi4uMDAwMDAwMAotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci1uZXR3b3JrLWRlbW8vbWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi1TSEVMTCA9IC9iaW4vc2gNCi1STSA9IHJtIC1mDQotDQotTE9DQUxfQ0ZMQUdTIDo9IC1XYWxsIFwNCi0gICAgICAgICAgICAgICAgLXN0ZD1nbnUrKzE0IFwNCi0gICAgICAgICAgICAgICAgLWcgLU9zIFwNCi0gICAgICAgICAgICAgICAgLWZsdG8gXA0KLSAgICAgICAgICAgICAgICAtZlBJQyBcDQotICAgIA0KLSAgICAgICAgICAgICAgICANCi0gDQotaWZlcSAoJChzdHJpcCAkKFRBUkdFVF9QTEFURk9STSkpLCBUMTA2KQ0KLUxPQ0FMX0NGTEFHUyArPSAtREJJTkRFUl9JUENfMzJCSVQ9MSAtREhBVkVfRU5ESUFOX0ggLURIQVZFX1BUSFJFQURTIC1ESEFWRV9TWVNfVUlPX0ggLURIQVZFX1BPU0lYX0ZJTEVNQVAgLURIQVZFX1NUUkxDUFkgLURIQVZFX1BSQ1RMIC1ESEFWRV9NRU1TRVQxNiAtREhBVkVfTUVNU0VUMzIgLURBTkRST0lEX1NNUD0wDQotZW5kaWYNCi0NCi1MT0NBTF9DRkxBR1MgKz0gLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkNCi0NCi0kKHdhcm5pbmcgIyMjIyMjIyMjIyMjIyMjIyMgcm9jayBST09UOiAkKFJPT1QpLGluY2x1ZGVkaXI6JChpbmNsdWRlZGlyKSwpDQotDQotTE9DQUxfUEFUSCAgID0gLg0KLQ0KLUxPQ0FMX0NfSU5DTFVERVMgPSBcDQotICAtSS4gXA0KLSAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUvIFwNCi0gIC1JJChST09UKSQoaW5jbHVkZWRpcikvbGlibG9nIFwNCi0NCi0NCi0NCi0NCi1MT0NBTF9MSUJTIDo9IFwNCi0gICAgLUwuIFwNCi0gICAgLWxkbCBcDQotICAgIC1sc3RkYysrIFwNCi0NCi1TT1VSQ0VTID0gbHlucS1xc2VyLW5ldHdvcmstZGVtby5jcHANCi0NCi1FWEVDVVRBQkxFID0gbHlucS1xc2VyLW5ldHdvcmstZGVtbw0KLQ0KLU9CSkVDVFM9JChTT1VSQ0VTOi5jcHA9Lm8pDQotDQotT0JKRUNUU19UT09MPSQoU09VUkNFU19UT09MOi5jcHA9Lm8pDQotYWxsOiAkKEVYRUNVVEFCTEUpIA0KLQ0KLSQoRVhFQ1VUQUJMRSk6ICQoT0JKRUNUUykNCi0JJChDWFgpICQoT0JKRUNUUykgJChMT0NBTF9MSUJTKSAkKExPQ0FMX0NGTEFHUykgJChMT0NBTF9DX0lOQ0xVREVTKSAtbyAkQA0KLQ0KLSUubyA6ICUuY3BwDQotCSQoQ1hYKSAkKExPQ0FMX0NfSU5DTFVERVMpICQoTE9DQUxfQ0ZMQUdTKSAkKExPQ0FMX0xJQlMpIC1vICRAIC1jICQ8IA0KLQ0KLS5QSE9OWTogY2xlYW4NCi1jbGVhbjoNCi0JJChSTSkgJChPQkpFQ1RTKSAkKEVYRUNVVEFCTEUpDQotCSQoUk0pICQoT0JKRUNUU19UT09MKSAkKEVYRUNVVEFCTEUpDQotDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXN5c3RpbWUtZGVtby9seW5xX3N5c3RpbWVfZGVtby5jcHAgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtc3lzdGltZS1kZW1vL2x5bnFfc3lzdGltZV9kZW1vLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGZmZmNmCi0tLSAvZGV2L251bGwKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXN5c3RpbWUtZGVtby9seW5xX3N5c3RpbWVfZGVtby5jcHAKQEAgLTAsMCArMSwyNTIgQEAKKy8qKkBGaWxlIGx5bnEtc3lzdGltZS1kZW1vLmNwcA0KKyAqDQorICogQEJyaWVmIEFzIGEgZXhhbXBsZSBmb3IgbGlibHlucS1zeXN0aW1lLg0KKyAqDQorICogQEF1dGhvciBzai56aGFuZw0KKyAqDQorICogQERhdGUgMjAyMy0wOC0xNQ0KKyAqDQorICogQFZlcnNpb24gVjEuMA0KKyAqDQorICogQGNvcHlyaWdodCBDb3B5cmlnaHQgKGMpIE1vYmlsZVRlaw0KKyAqLw0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxkbGZjbi5oPg0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8c3RkbGliLmg+DQorI2luY2x1ZGUgPHRpbWUuaD4NCisNCit0eXBlZGVmIHN0cnVjdCB0aW1lX3NvdXJjZV9zdGF0dXMNCit7DQorICAgIGludCBudHA7DQorICAgIGludCBuaXR6Ow0KKyAgICBpbnQgZ25zczsNCit9IHRpbWVfc3JjX3N0YXR1c19zOw0KKw0KKyNpZmRlZiBNT0JJTEVURUtfVEFSR0VUX1BMQVRGT1JNX1QxMDYNCitpbnQgKCpseW5xX3N5bmNfdGltZV9mcm9tX3J0Yykodm9pZCk7DQoraW50ICgqbHlucV9zZXRfcnRjX3RpbWUpKHZvaWQpOw0KK2ludCAoKmx5bnFfZ2V0X3J0Y190aW1lKSh1bnNpZ25lZCBsb25nICp1bHNlYyk7DQorDQorI2VuZGlmDQordm9pZCAqZGxIYW5kbGVfc3lzdGltZSA9IE5VTEw7DQoraW50ICgqbW9kZW1fdGltZV9lbmFibGUpKGludCBlbmFibGUpOw0KK2ludCAoKmduc3NfdGltZV9lbmFibGUpKGludCBlbmFibGUpOw0KK2ludCAoKm50cF9zeW5jX3RpbWUpKGludCBlbmFibGUpOw0KK2ludCAoKnVzZXJfc2V0X3RpbWUpKGNoYXIgKmRhdGUsIGNoYXIgKnRpbWUpOw0KK2ludCAoKmx5bnFfZ2V0X3RpbWVfc3JjX3N0YXR1cykodGltZV9zcmNfc3RhdHVzX3MgKnRpbWVfc3JjKTsNCisNCitpbnQgbHlucV9udHBfc3luY19kZW1vKGludCBhcmdjLCBjaGFyICphcmd2W10pDQorew0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIGlmIChhcmdjICE9IDMpDQorICAgIHsNCisgICAgICAgIHByaW50ZigiUGFyYW1ldGVyIG51bWJlciB3cm9uZyAhXG4iKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgbnRwX3N5bmNfdGltZSA9IChpbnQgKCopKGludCBlbmFibGUpKWRsc3ltKGRsSGFuZGxlX3N5c3RpbWUsICJudHBfc3luY190aW1lIik7DQorICAgIGlmIChOVUxMID09IG50cF9zeW5jX3RpbWUpDQorICAgIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGRsc3ltIGZ1bmN0aW9uIG50cF9zeW5jX3RpbWUgOiAlc1xuIiwgZGxlcnJvcigpKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0ID0gbnRwX3N5bmNfdGltZShhdG9pKGFyZ3ZbMl0pKTsNCisgICAgc3dpdGNoIChyZXQpDQorICAgIHsNCisgICAgY2FzZSAwOg0KKyAgICAgICAgcHJpbnRmKCJzZXQgc3VjY2VzcyFcbiIpOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgMToNCisgICAgICAgIHByaW50ZigiTlRQX0FMUkVBRFlfRU5BQkxFIVxuIik7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSAyOg0KKyAgICAgICAgcHJpbnRmKCJOVFBfQUxSRUFEWV9ESVNFTkFCTEUhXG4iKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnJlYWs7DQorICAgIH0NCisgICAgcmV0dXJuIHJldDsNCit9DQorDQoraW50IGx5bnFfbW9kZW1fc3luY19kZW1vKGludCBhcmdjLCBjaGFyICphcmd2W10pDQorew0KKyAgICBpbnQgcmV0ID0gLTE7DQorICAgIGlmIChhcmdjICE9IDMpDQorICAgIHsNCisgICAgICAgIHByaW50ZigiUGFyYW1ldGVyIG51bWJlciB3cm9uZyAhXG4iKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgbW9kZW1fdGltZV9lbmFibGUgPSAoaW50ICgqKShpbnQgZW5hYmxlKSlkbHN5bShkbEhhbmRsZV9zeXN0aW1lLCAibW9kZW1fdGltZV9lbmFibGUiKTsNCisgICAgaWYgKE5VTEwgPT0gbW9kZW1fdGltZV9lbmFibGUpDQorICAgIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGRsc3ltIGZ1bmN0aW9uIG1vZGVtX3RpbWVfZW5hYmxlOiAlc1xuIiwgZGxlcnJvcigpKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0ID0gbW9kZW1fdGltZV9lbmFibGUoYXRvaShhcmd2WzJdKSk7DQorICAgIHByaW50ZigicmV0ID0gJWRcbiIsIHJldCk7DQorICAgIGlmIChyZXQgIT0gMCAmJiByZXQgIT0gNCkNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJtb2RlbV90aW1lX2VuYWJsZSBmYWlsZWQgIVxuIik7DQorICAgICAgICBkbGNsb3NlKGRsSGFuZGxlX3N5c3RpbWUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgbHlucV9nbnNzX3N5bmNfZGVtbyhpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KK3sNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBpZiAoYXJnYyAhPSAzKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoIlBhcmFtZXRlciBudW1iZXIgd3JvbmcgIVxuIik7DQorICAgICAgICBkbGNsb3NlKGRsSGFuZGxlX3N5c3RpbWUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIGduc3NfdGltZV9lbmFibGUgPSAoaW50ICgqKShpbnQgZW5hYmxlKSlkbHN5bShkbEhhbmRsZV9zeXN0aW1lLCAiZ25zc190aW1lX2VuYWJsZSIpOw0KKyAgICBpZiAoTlVMTCA9PSBnbnNzX3RpbWVfZW5hYmxlKQ0KKyAgICB7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBkbHN5bSBmdW5jdGlvbiBnbnNzX3RpbWVfZW5hYmxlOiAlc1xuIiwgZGxlcnJvcigpKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0ID0gZ25zc190aW1lX2VuYWJsZShhdG9pKGFyZ3ZbMl0pKTsNCisgICAgcHJpbnRmKCJyZXQgPSAlZFxuIiwgcmV0KTsNCisgICAgaWYgKHJldCAhPSAwICYmIHJldCAhPSA0KQ0KKyAgICB7DQorICAgICAgICBwcmludGYoImduc3NfdGltZV9lbmFibGUgZmFpbGVkICFcbiIpOw0KKyAgICAgICAgZGxjbG9zZShkbEhhbmRsZV9zeXN0aW1lKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgbHlucV91c2VyX3NldF90aW1lX2RlbW8oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCit7DQorICAgIGludCByZXQgPSAtMTsNCisgICAgaWYgKGFyZ2MgIT0gNCkNCisgICAgew0KKyAgICAgICAgcHJpbnRmKCJQYXJhbWV0ZXIgbnVtYmVyIHdyb25nICFcbiIpOw0KKyAgICAgICAgZGxjbG9zZShkbEhhbmRsZV9zeXN0aW1lKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICB1c2VyX3NldF90aW1lID0gKGludCAoKikoY2hhciAqZGF0ZSwgY2hhciAqdGltZSkpZGxzeW0oZGxIYW5kbGVfc3lzdGltZSwgInVzZXJfc2V0X3RpbWUiKTsNCisgICAgaWYgKE5VTEwgPT0gdXNlcl9zZXRfdGltZSkNCisgICAgew0KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZGxzeW0gZnVuY3Rpb24gdXNlcl9zZXRfdGltZTogJXNcbiIsIGRsZXJyb3IoKSk7DQorICAgICAgICBkbGNsb3NlKGRsSGFuZGxlX3N5c3RpbWUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHJldCA9IHVzZXJfc2V0X3RpbWUoYXJndlsyXSwgYXJndlszXSk7DQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBseW5xX2dldF90aW1lX3NyY19zdGF0dXNfZGVtbyhpbnQgYXJnX2MsIGNoYXIgKmFyZ192W10pDQorew0KKyAgICBseW5xX2dldF90aW1lX3NyY19zdGF0dXMgPSAoaW50ICgqKSh0aW1lX3NyY19zdGF0dXNfcyAqdGltZV9zcmMpKWRsc3ltKGRsSGFuZGxlX3N5c3RpbWUsICJseW5xX2dldF90aW1lX3NyY19zdGF0dXMiKTsNCisgICAgaWYgKE5VTEwgPT0gbHlucV9nZXRfdGltZV9zcmNfc3RhdHVzKQ0KKyAgICB7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBkbHN5bSBmdW5jdGlvbiBseW5xX2dldF90aW1lX3NyY19zdGF0dXMgOiAlc1xuIiwgZGxlcnJvcigpKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgdGltZV9zcmNfc3RhdHVzX3MgdGltZV9zcmMgPSB7MH07DQorICAgIGx5bnFfZ2V0X3RpbWVfc3JjX3N0YXR1cygmdGltZV9zcmMpOw0KKyAgICBwcmludGYoInRpbWUgc291cmNlIHN0YXR1cyBhcmUgOlxubnRwPSVkXG5uaXR6PSVkXG5nbnNzPSVkXG4iLCB0aW1lX3NyYy5udHAsIHRpbWVfc3JjLm5pdHosIHRpbWVfc3JjLmduc3MpOw0KKyAgICByZXR1cm4gMDsNCit9DQorDQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCit7DQorICAgIGludCByZXQgPSAtMTsNCisgICAgY2hhciAqY21kID0gYXJndlsxXTsNCisgICAgcHJpbnRmKCJlbnRlciBseW5xX3N5c3RpbWVfZGVtbyBcbiIpOw0KKyAgICBkbEhhbmRsZV9zeXN0aW1lID0gZGxvcGVuKCIvbGliL2xpYmx5bnEtc3lzdGltZS5zbyIsIFJUTERfTk9XKTsNCisgICAgaWYgKCFkbEhhbmRsZV9zeXN0aW1lKQ0KKyAgICB7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGxpYnJhcnk6ICVzXG4iLCBkbGVycm9yKCkpOw0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCisNCisgICAgaWYgKGNtZCA9PSBOVUxMKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoIk5vIGNvbW1hbmQgcmVjZWl2ZWQhXG4iKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gMTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChzdHJjbXAoY21kLCAibnRwIikgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0ID0gbHlucV9udHBfc3luY19kZW1vKGFyZ2MsIGFyZ3YpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKHN0cmNtcChjbWQsICJuaXR6IikgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0ID0gbHlucV9tb2RlbV9zeW5jX2RlbW8oYXJnYywgYXJndik7DQorICAgIH0NCisgICAgZWxzZSBpZiAoc3RyY21wKGNtZCwgImduc3MiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXQgPSBseW5xX2duc3Nfc3luY19kZW1vKGFyZ2MsIGFyZ3YpOw0KKyAgICB9DQorICAgIGVsc2UgaWYgKHN0cmNtcChjbWQsICJ1c2VyIikgPT0gMCkNCisgICAgew0KKyAgICAgICAgcmV0ID0gbHlucV91c2VyX3NldF90aW1lX2RlbW8oYXJnYywgYXJndik7DQorICAgIH0NCisjaWZkZWYgTU9CSUxFVEVLX1RBUkdFVF9QTEFURk9STV9UMTA2DQorICAgIGVsc2UgaWYgKHN0cmNtcChjbWQsICJzeW5jX3J0YyIpID09IDApDQorICAgIHsNCisgICAgICAgIGx5bnFfc3luY190aW1lX2Zyb21fcnRjID0gKGludCAoKikodm9pZCkpZGxzeW0oZGxIYW5kbGVfc3lzdGltZSwgImx5bnFfc3luY190aW1lX2Zyb21fcnRjIik7DQorICAgICAgICBpZiAoTlVMTCA9PSBseW5xX3N5bmNfdGltZV9mcm9tX3J0YykNCisgICAgICAgIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBkbHN5bSBmdW5jdGlvbiBseW5xX3N5bmNfdGltZV9mcm9tX3J0YyA6ICVzXG4iLCBkbGVycm9yKCkpOw0KKyAgICAgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0ID0gbHlucV9zeW5jX3RpbWVfZnJvbV9ydGMoKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChzdHJjbXAoY21kLCAicnRjX3NldCIpID09IDApDQorICAgIHsNCisgICAgICAgIGx5bnFfc2V0X3J0Y190aW1lID0gKGludCAoKikodm9pZCkpZGxzeW0oZGxIYW5kbGVfc3lzdGltZSwgImx5bnFfc2V0X3J0Y190aW1lIik7DQorICAgICAgICBpZiAoTlVMTCA9PSBseW5xX3NldF9ydGNfdGltZSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBkbHN5bSBmdW5jdGlvbiBseW5xX3NldF9ydGNfdGltZSA6ICVzXG4iLCBkbGVycm9yKCkpOw0KKyAgICAgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0ID0gbHlucV9zZXRfcnRjX3RpbWUoKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmIChzdHJjbXAoY21kLCAicnRjX2dldCIpID09IDApDQorICAgIHsNCisgICAgICAgIGx5bnFfZ2V0X3J0Y190aW1lID0gKGludCAoKikodW5zaWduZWQgbG9uZyAqdWxzZWMpKWRsc3ltKGRsSGFuZGxlX3N5c3RpbWUsICJseW5xX2dldF9ydGNfdGltZSIpOw0KKyAgICAgICAgaWYgKE5VTEwgPT0gbHlucV9nZXRfcnRjX3RpbWUpDQorICAgICAgICB7DQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZGxzeW0gZnVuY3Rpb24gbHlucV9nZXRfcnRjX3RpbWUgOiAlc1xuIiwgZGxlcnJvcigpKTsNCisgICAgICAgICAgICBkbGNsb3NlKGRsSGFuZGxlX3N5c3RpbWUpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZV9yZXQ7DQorICAgICAgICByZXQgPSBseW5xX2dldF9ydGNfdGltZSgmdGltZV9yZXQpOw0KKyAgICAgICAgdGltZV90IHRwID0gKHRpbWVfdCl0aW1lX3JldDsNCisgICAgICAgIGNoYXIgKnJ0Y190aW1lID0gY3RpbWUoJnRwKTsNCisgICAgICAgIHByaW50ZigicnRjX3RpbWUgc2Vjb25kcyA9ICVsdVxuIiwgdGltZV9yZXQpOw0KKyAgICAgICAgcHJpbnRmKCJydGMgdGltZSA9ICVzXG4iLCBydGNfdGltZSk7DQorICAgIH0NCisjZW5kaWYNCisgICAgZWxzZSBpZiAoc3RyY21wKGNtZCwgInNyY19zdGF0dXMiKSA9PSAwKQ0KKyAgICB7DQorICAgICAgICByZXQgPSBseW5xX2dldF90aW1lX3NyY19zdGF0dXNfZGVtbyhhcmdjLCBhcmd2KTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIHByaW50ZigiY29tbWFuZCB3cm9uZyAhXG4iKTsNCisgICAgICAgIGRsY2xvc2UoZGxIYW5kbGVfc3lzdGltZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgaWYgKDAgIT0gcmV0KQ0KKyAgICB7DQorICAgICAgICBwcmludGYoInJldCA9ICVkXG4gQ29tbWFuZCBleGVjdXRpb24gZmFpbHVyZS5cbiIsIHJldCk7DQorICAgIH0NCisgICAgZGxjbG9zZShkbEhhbmRsZV9zeXN0aW1lKTsNCisgICAgcmV0dXJuIHJldDsNCit9DQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXFzZXItdm9pY2UtZGVtby9tYWtlZmlsZSBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1zeXN0aW1lLWRlbW8vbWFrZWZpbGUKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXFzZXItdm9pY2UtZGVtby9tYWtlZmlsZQpyZW5hbWUgdG8gY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvcGFja2FnZXMvYXBwcy9seW5xLXN5c3RpbWUtZGVtby9tYWtlZmlsZQppbmRleCAxNjRhNTc1Li44OTBmODVhIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9wYWNrYWdlcy9hcHBzL2x5bnEtcXNlci12b2ljZS1kZW1vL21ha2VmaWxlCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL3BhY2thZ2VzL2FwcHMvbHlucS1zeXN0aW1lLWRlbW8vbWFrZWZpbGUKQEAgLTExLDYgKzExLDEwIEBACiBMT0NBTF9DRkxBR1MgKz0gLURCSU5ERVJfSVBDXzMyQklUPTEgLURIQVZFX0VORElBTl9IIC1ESEFWRV9QVEhSRUFEUyAtREhBVkVfU1lTX1VJT19IIC1ESEFWRV9QT1NJWF9GSUxFTUFQIC1ESEFWRV9TVFJMQ1BZIC1ESEFWRV9QUkNUTCAtREhBVkVfTUVNU0VUMTYgLURIQVZFX01FTVNFVDMyIC1EQU5EUk9JRF9TTVA9MA0KIGVuZGlmDQogDQoraWZlcSAoJChzdHJpcCAkKFRBUkdFVF9QTEFURk9STSkpLCBUMTA2KQ0KK0xPQ0FMX0NGTEFHUyArPSAtRE1PQklMRVRFS19UQVJHRVRfUExBVEZPUk1fVDEwNg0KK2VuZGlmDQorDQogTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tZXJyb3I9Zm9ybWF0LXNlY3VyaXR5DQogDQogTE9DQUxfUEFUSCAgID0gLg0KQEAgLTE4LDggKzIyLDkgQEAKIExPQ0FMX0NfSU5DTFVERVMgPSBcDQogICAtSS4gXA0KICAgLUkkKExPQ0FMX1BBVEgpL2luY2x1ZGUvIFwNCi0gIC1JJChST09UKSQoaW5jbHVkZWRpcikvbGlibG9nIFwNCi0gIC1JJChST09UKSQoaW5jbHVkZWRpcikvbGliY2FsbCBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpLyBcDQorICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2luY2x1ZGUvIFwNCisNCiANCiANCiBMT0NBTF9MSUJTIDo9IFwNCkBAIC0yNywxMSArMzIsMTMgQEAKICAgICAtbGRsIFwNCiAgICAgLWxzdGRjKysgXA0KICAgICAtbHB0aHJlYWQgXA0KKyAgICAtbGx5bnEtc3lzdGltZSBcDQogDQogDQotU09VUkNFUyA9IGx5bnEtcXNlci12b2ljZS1kZW1vLmNwcA0KIA0KLUVYRUNVVEFCTEUgPSBseW5xLXFzZXItdm9pY2UtZGVtbw0KK1NPVVJDRVMgPSBseW5xX3N5c3RpbWVfZGVtby5jcHANCisNCitFWEVDVVRBQkxFID0gbHlucS1zeXN0aW1lLWRlbW8NCiANCiBPQkpFQ1RTPSQoU09VUkNFUzouY3BwPS5vKQ0KIA0KZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS96eGljX2FwcF9vcGVuL3BsYXRmb3JtL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfbm9ybWFsLmMgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvenhpY19hcHBfb3Blbi9wbGF0Zm9ybS9hdF9jdGwvc3JjL2F0Y29uZmlnL3BzX25vcm1hbC5jCmluZGV4IGY3YmVjYWEuLmNhYWMyM2UgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS96eGljX2FwcF9vcGVuL3BsYXRmb3JtL2F0X2N0bC9zcmMvYXRjb25maWcvcHNfbm9ybWFsLmMKKysrIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vYXRfY3RsL3NyYy9hdGNvbmZpZy9wc19ub3JtYWwuYwpAQCAtMTE1LDYgKzExNSwxNCBAQAogCXZvaWQgKnBbNV0gPSB7JnRpbWVpbmZvLnRpbWVfem9uZSwmdGltZWluZm8uc2F2X3RpbWUsdGVtcDEsdGVtcDIsdGltZWluZm8udW5pdmVyX3RpbWV9Ow0KIAlpbnQgdGltZV96b25lID0gMDsNCiAJDQorCS8vPj4+c2ouemhhbmcgYWRkIEAyMDIzLTA4LTEwIGZvciBzeXN0aW1lIE5JVFogc3luYyBlbmFibGUvZGlzZW5hYmxlLg0KKwlpZigwICE9IHN5c3RlbSgidWNpIGdldCBseW5xX3VjaS5seW5xX3N5bmNfdGltZS5seW5xX21vZGVtX3N5bmNfdGltZV9lbmFibGUgfCBncmVwIC1FIFwnXjEkXCciKSkNCisJew0KKwkJYXRfcHJpbnQoQVRfRVJSLCJ6bW1pX2F1dG9fYWN0OiBuaXR6IGRpc2VuYWJsZWQuIFxuIik7DQorCQlyZXR1cm4gQVRfRU5EOw0KKwl9DQorCS8vPj4+c2ouemhhbmcgYWRkIEAyMDIzLTA4LTEwIGVuZC4NCisNCiAgICAgc2NfY2ZnX2dldCgic250cF90aW1lX3NldF9tb2RlIiwgbW9kZSwgc2l6ZW9mKG1vZGUpKTsNCiAJaWYoc3RyY21wKG1vZGUsICJtYW51YWwiKSA9PSAwKQ0KIAl7DQpkaWZmIC0tZ2l0IGEvZXNka19wYXRjaC9saW51eF9iYi5kaWZmIGIvZXNka19wYXRjaC9saW51eF9iYi5kaWZmCmluZGV4IGI0YmM0ZjkuLmQ2OGFlYjUgMTAwNjQ0Ci0tLSBhL2VzZGtfcGF0Y2gvbGludXhfYmIuZGlmZgorKysgYi9lc2RrX3BhdGNoL2xpbnV4X2JiLmRpZmYKQEAgLTEsMjAgKzEsMTkgQEAKIGRpZmYgLS1naXQgYS9saW51eC16eGljXzUuMTAuYmIgYi9saW51eC16eGljXzUuMTAuYmIKLW9sZCBtb2RlIDEwMDY0NAotbmV3IG1vZGUgMTAwNzU1Ci1pbmRleCAyOTk0MmY0Li40YjEwZTFjCitpbmRleCBhYmFkZDliLi5hOGM3ZjY1IDEwMDc1NQogLS0tIGEvbGludXgtenhpY181LjEwLmJiCiArKysgYi9saW51eC16eGljXzUuMTAuYmIKLUBAIC00LDE1ICs0LDE1IEBAIFBWICAgICAgPSAiJHtMSU5VWF9WRVJTSU9OfSIKK0BAIC00LDE2ICs0LDE2IEBAIFBWICAgICAgPSAiJHtMSU5VWF9WRVJTSU9OfSIKICBMSUNFTlNFID0gIkdQTHYyIgogIExJQ19GSUxFU19DSEtTVU0gPz0gImZpbGU6Ly9DT1BZSU5HO21kNT02YmM1MzhlZDViZDlhN2ZjOTM5ODA4NmFlZGNkN2U0NiIKICBMSU5VWF9WRVJTSU9OICAgID89ICI1LjEwLjE1NiIKIC0KLStCU1BESVIgPSAiJHtUT1BESVJ9Ly4uL3Vwc3RyZWFtLyIKKytCU1BESVIgPSAiJHtUT1BESVJ9Ly4uL3Vwc3RyZWFtIgogICNwdWIgaW5jbHVkZQogLWluY2x1ZGUgJHtCU1BESVJ9L3NvdXJjZXMvbWV0YS16eGljL2NvbmYvcHViLmluYwogK2luY2x1ZGUgJHtUT1BESVJ9L2xheWVycy9tZXRhLXp4aWMvY29uZi9wdWJfZXNkay5pbmMKICAKICBERVBFTkRTICs9ICJrZXJuLXRvb2xzLW5hdGl2ZSIKKyBERVBFTkRTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnZG0tdmVyaXR5JywnenN0ZC1uYXRpdmUnLCcnLGQpfSIKICBpbmhlcml0IGtlcm5lbCAgc2l0ZWluZm8gIAogIAogIEVYVFJBX09FTUFLRV9hcHBlbmQgPSAiIExPQURBRERSPSR7S0VSTkVMX0xPQURBRERSfSBFWFRSQV9DRkxBR1M9JyR7WlhJQ19FWFRSQV9DRkxBR1N9JyAiCkBAIC0yMywzICsyMiwxMSBAQAogICMgUFJfQ09ORklHX2NwZSA9ICJsaW51eC01XzEwLWNwZS0ke0JPT1RfQ1RMfS1kZWZjb25maWciCiAgIyBQUl9DT05GSUdfdjJ4ID0gImxpbnV4LTVfMTAtdjJ4LSR7Qk9PVF9DVEx9LWRlZmNvbmZpZyIKICBQUl9DT05GSUdfdmVoaWNsZV9kYyA9ICJsaW51eC01XzEwLXZlaGljbGVfZGMtJHtCT09UX0NUTH0tZGVmY29uZmlnIgorQEAgLTYxLDcgKzYxLDcgQEAga2VybmVsX2RvX2NvbmZpZ3VyZSgpIHsKKyAKKyBmYWtlcm9vdCBkb19jcGlvICgpIHsKKyAJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2RtLXZlcml0eScsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCistCQljcCAgLXYgICR7QlNQRElSfS9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vY29uZi9kaXN0cm8vZG0tdmVyaXR5LyR7S0VSTkVMX0lOSVRSQU1GU19DUElPfSAgICR7Qn0vCisrCQljcCAgLXYgICR7QlNQRElSfS8uLi9lc2RrL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9jb25mL2Rpc3Ryby9kbS12ZXJpdHkvJHtLRVJORUxfSU5JVFJBTUZTX0NQSU99ICAgJHtCfS8KKyAJZmkKKyB9CmRpZmYgLS1naXQgYS9lc2RrX3BhdGNoL21rX2VzZGsuc2ggYi9lc2RrX3BhdGNoL21rX2VzZGsuc2gKaW5kZXggNTAzN2Q3Ni4uNzVhMTEyZSAxMDA3NTUKLS0tIGEvZXNka19wYXRjaC9ta19lc2RrLnNoCisrKyBiL2VzZGtfcGF0Y2gvbWtfZXNkay5zaApAQCAtMyw3ICszLDcgQEAKIGRlc3RfZGlyX3JlbGF0aXZlPSQxCiBpbnRhbGxfZGlyPSQocHdkKQogCi1jaG1vZCBhK3ggLi92ZWhpY2xlX2RjLWdsaWJjLXg4Nl82NC16eGljLWltYWdlLWFybXY3YS16eDI5NzUyMHYzLXRvb2xjaGFpbi1leHQtMS4wLnNoCitjaG1vZCBhK3ggLi92ZWhpY2xlX2RjX3JlZi1nbGliYy14ODZfNjQtenhpYy1pbWFnZS1hcm12N2EtengyOTc1MjB2My10b29sY2hhaW4tZXh0LTEuMC5zaAogbWtkaXIgJHtkZXN0X2Rpcl9yZWxhdGl2ZX0KIGNkICQxCiBkZXN0X2Rpcj0kKHB3ZCkKQEAgLTEyLDcgKzEyLDcgQEAKIAllY2hvICJJbnB1dCBpbnZhaWxkIHBhdGggZm9yIGZvbGRlcnMgdG8gaW5zdGFsbFxuIgogCWV4aXQgMQogZmkKLS4vdmVoaWNsZV9kYy1nbGliYy14ODZfNjQtenhpYy1pbWFnZS1hcm12N2EtengyOTc1MjB2My10b29sY2hhaW4tZXh0LTEuMC5zaCAtZCAke2Rlc3RfZGlyfS9lc2RrCisuL3ZlaGljbGVfZGNfcmVmLWdsaWJjLXg4Nl82NC16eGljLWltYWdlLWFybXY3YS16eDI5NzUyMHYzLXRvb2xjaGFpbi1leHQtMS4wLnNoIC1kICR7ZGVzdF9kaXJ9L2VzZGsKIHRhciAtenh2ZiB1cHN0cmVhbS50YXIuZ3ogLUMgJGRlc3RfZGlyCiBsbiAtcyAke2Rlc3RfZGlyfS91cHN0cmVhbS90b29scyAke2Rlc3RfZGlyfS9lc2RrCiBjcCBsaW51eF9iYi5kaWZmICR7ZGVzdF9kaXJ9L2VzZGsvbGF5ZXJzL21ldGEtenhpYy9yZWNpcGVzLWtlcm5lbC9saW51eC8K