ZGlmZiAtLWdpdCBhL2FwL2FwcC96dGVfY29tbS96dGVfbWFpbmN0cmwvbmV0ZGV2X3Byb2MuYyBiL2FwL2FwcC96dGVfY29tbS96dGVfbWFpbmN0cmwvbmV0ZGV2X3Byb2MuYwppbmRleCBmN2MwOTU0Li4xNWIzYzBlIDEwMDc1NQotLS0gYS9hcC9hcHAvenRlX2NvbW0venRlX21haW5jdHJsL25ldGRldl9wcm9jLmMKKysrIGIvYXAvYXBwL3p0ZV9jb21tL3p0ZV9tYWluY3RybC9uZXRkZXZfcHJvYy5jCkBAIC0yNDAyLDcgKzI0MDIsMTEgQEAKIAkJZGVmd2FuX2NoYW5nZSA9IDE7CiAKIAkvL8r9vt3PyM2oo6y689f2xuTL+8Xk1sOjrNei0uK14zogt8C78Me9tszKsbzkxNq/ycTczrTJ+tCnCisvL3hmLmxpQDIwMjQwMzI3IG1vZGlmeSBmb3IgVDEwNkJVRy01Nzggc3RhcnQKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCiAJaWYgKGRlZndhbl9jaGFuZ2UpCisjZW5kaWYKKy8veGYubGlAMjAyNDAzMjcgbW9kaWZ5IGZvciBUMTA2QlVHLTU3OCBlbmQKIAkJc3lzdGVtX2NtZF9leCgibmF0LnNoIik7CiAJZGVmd2FuX3NldChkZWZ3YW5faWYpOwogCmRpZmYgLS1naXQgYS9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci12b2ljZS1kZW1vL2ZpbGVzL2x5bnEtcXNlci12b2ljZS1kZW1vLmNwcCBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vZmlsZXMvbHlucS1xc2VyLXZvaWNlLWRlbW8uY3BwCmluZGV4IGQ2ZGRhZjEuLjQxYzVjOTcgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vZmlsZXMvbHlucS1xc2VyLXZvaWNlLWRlbW8uY3BwCisrKyBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vZmlsZXMvbHlucS1xc2VyLXZvaWNlLWRlbW8uY3BwCkBAIC0yNCwxMiArMjQsMTQgQEAKICAgICB7MywgICAicXNlcl92b2ljZV9jYWxsX2Fuc3dlciJ9LA0KICAgICB7NCwgICAicXNlcl92b2ljZV9zZXRfc3BlZWNoX3ZvbHVtZSJ9LA0KICAgICB7NSwgICAicXNlcl92b2ljZV9nZXRfc3BlZWNoX3ZvbHVtZSJ9LA0KLSAgICB7NiwgICAicXNlcl92b2ljZV9zZXRfZHRtZiJ9LA0KKyAgICB7NiwgICAicXNlcl92b2ljZV9zZXRfZHRtZiJ9LCAgICANCisjaWZkZWYgRUNBTExfU1VQUE9SVA0KKyAgICB7NywgICAicXNlcl92b2ljZV9zZXRfdGVzdF9udW0ifSwNCisgICAgezgsICAgInFzZXJfdm9pY2VfZmFzdF9lY2FsbCJ9LA0KKyNlbmRpZg0KICAgICB7LTEsICAgIE5VTEx9DQogfTsNCiANCi0NCi0NCiB0eXBlZGVmIHVpbnQzMl90IHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZTsNCiANCiANCkBAIC01MCw2ICs1MiwzNyBAQAogaW50ICgqcXNlcl92b2ljZV9nZXRfc3BlZWNoX3ZvbHVtZSkoaW50ICp2b2x1bWUpOw0KIGludCAoKnFzZXJfdm9pY2Vfc2V0X2R0bWYpKGNvbnN0IGNoYXIgY2FsbG51bSk7DQogDQorI2lmZGVmIEVDQUxMX1NVUFBPUlQNCitpbnQgKCpxc2VyX3ZvaWNlX3NldF90ZXN0X251bSkodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiAgICAgICBoX3ZvaWNlLEVfUVNFUl9WT0lDRV9FQ0FMTF9TRVRfVFlQRV9UIHR5cGUsIGNvbnN0IGNoYXIgKnRlc3RfbnVtLCBpbnQgdGVzdF9udW1fbGVuZ3RoKTsNCitpbnQgKCpxc2VyX3ZvaWNlX2Zhc3RfZWNhbGwpKHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZSogICAgICAgaF92b2ljZSwNCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxfaWQsDQorICAgICAgICAgICAgICAgICAgICAgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0NBVEVHT1JZX1QgY2F0LA0KKyAgICAgICAgICAgICAgICAgICAgICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9WQVJJQU5UX1QgdmFyaWFudCwNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyLCANCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRkcl9sZW5ndGgsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZF9kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2RfbGVuZ3RoKTsgLy9tc2RfbGVuZ3RoIHNob3VsZCA8PSBRU0VSX01TRF9NQVhfTEVOR1RIDQoraW50ICgqcXNlcl92b2ljZV9zZXRfbXNkKShpbnQgY2FsbGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2RfZGF0YSwgaW50IG1zZF9sZW5ndGgpOyAvL21zZF9sZW5ndGggc2hvdWxkIDw9IFFTRVJfTVNEX01BWF9MRU5HVEgNCitpbnQgKCpxc2VyX3ZvaWNlX2FkZF9lY2FsbF9pbmRoYW5kbGVyKSh2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUqICAgICAgICAgIGhfdm9pY2UsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTRVJfRUNhbGxfSW5kSGFuZGxlckZ1bmNfdCAgIGhhbmRsZXJQdHIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICBjb250ZXh0UHRyKTsNCisNCitzdGF0aWMgdm9pZCB5a192b2ljZV9lY2FsbF9jYl9mdW5jKGludCAgICAgICAgIGNhbGxpZCwgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRJQ0FUSU9OX1QgaW5kLCB2b2lkKiBjb250ZXh0UHRyKQ0KK3sgICANCisgICAgdW5zaWduZWQgY2hhciBtc2RfZGF0YVtRU0VSX01TRF9NQVhfTEVOR1RIXT17MSwxLDIsMiwzLDMsNCw0fTsNCisNCisgICAgcHJpbnRmKCIjIyMjIyMjIyMgQ2FsbCBpZD0lZCwgZXZlbnQ9JWQhICAjIyMjIyNcbiIsIGNhbGxpZCwgaW5kKTsNCisgICAgDQorICAgIGlmKGluZCA9PSBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1NFTkRJTkdfU1RBUlRfSU5fVk9JQ0UgfHwgaW5kID09IEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfUFNBUF9DQUxMQkFDS19TVEFSVCkNCisgICAgew0KKyAgICAgICAgLypjdXN0b21lciBzaG91bGQgY29uc3RydWN0IG1zZCBpbmNsdWRpbmcgR1BTIGRhdGEsIGhlcmUgdXNlIG1zZF9kYXRhIGZvciBpbGx1c3RyYXRlLCovDQorICAgICAgICBxc2VyX3ZvaWNlX3NldF9tc2QoY2FsbGlkLG1zZF9kYXRhLDgpOyAgICAgICAgICAgICAgICANCisgICAgfQ0KK30NCisNCisjZW5kaWYNCisNCisNCiB2b2lkICpkbEhhbmRsZV9jYWxsID0gTlVMTDsNCiANCiBzdGF0aWMgdm9pZCB5a192b2ljZV9jYWxsX2NiX2Z1bmMoaW50ICAgICAgICAgICAgICAgICAgICAgY2FsbF9pZCwNCkBAIC02Miw2ICs5NSw4IEBACiAgICAgcHJpbnRmKCIjIyMjIyMjIyMgQ2FsbCBpZD0lZCwgUGhvbmVOdW06JXMsIGV2ZW50PSVzISAgIyMjIyMjXG4iLCBjYWxsX2lkLCBwaG9uZV9udW0sIGNhbGxfc3RhdGVbc3RhdGVdKTsNCiB9DQogDQorDQorDQogdm9pZCBwcmludF9oZWxwKHZvaWQpDQogew0KICAgICBpbnQgaTsNCkBAIC03Niw2ICsxMTEsOCBAQAogICAgIH0NCiB9DQogDQorDQorDQogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKmFyZ3ZbXSkNCiB7DQogICAgIGludCBjbWRJZHggPSAwOw0KQEAgLTE2NCw2ICsyMDEsMzYgQEAKICAgICAgICAgICAgIHByaW50ZigicXNlcl92b2ljZV9zZXRfZHRtZiBub3QgZGVmaW5lZCBvciBleHBvcnRlZCBpbiAlc1xuIiwgbHlucUxpYlBhdGhfQ2FsbCk7DQogICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICB9DQorDQorI2lmZGVmIEVDQUxMX1NVUFBPUlQNCisgICAgcXNlcl92b2ljZV9mYXN0X2VjYWxsID0gKGludCAoKikodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiwgaW50KiwgRV9RU0VSX1ZPSUNFX0VDQUxMX0NBVEVHT1JZX1QsIEVfUVNFUl9WT0lDRV9FQ0FMTF9WQVJJQU5UX1QsIGNvbnN0IGNoYXIqLCBpbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBpbnQpKWRsc3ltKGRsSGFuZGxlX2NhbGwsInFzZXJfdm9pY2VfZmFzdF9lY2FsbCIpOw0KKyAgICBpZihxc2VyX3ZvaWNlX2Zhc3RfZWNhbGwgPT0gTlVMTCkgICAgDQorICAgIHsNCisgICAgICAgICAgICBwcmludGYoInFzZXJfdm9pY2VfZmFzdF9lY2FsbCBub3QgZGVmaW5lZCBvciBleHBvcnRlZCBpbiAlc1xuIiwgbHlucUxpYlBhdGhfQ2FsbCk7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHFzZXJfdm9pY2Vfc2V0X3Rlc3RfbnVtID0gKGludCAoKikodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiwgRV9RU0VSX1ZPSUNFX0VDQUxMX1NFVF9UWVBFX1QsIGNvbnN0IGNoYXIqICwgaW50KSlkbHN5bShkbEhhbmRsZV9jYWxsLCJxc2VyX3ZvaWNlX3NldF90ZXN0X251bSIpOw0KKyAgICBpZihxc2VyX3ZvaWNlX3NldF90ZXN0X251bSA9PSBOVUxMKSAgICANCisgICAgew0KKyAgICAgICAgICAgIHByaW50ZigicXNlcl92b2ljZV9zZXRfdGVzdF9udW0gbm90IGRlZmluZWQgb3IgZXhwb3J0ZWQgaW4gJXNcbiIsIGx5bnFMaWJQYXRoX0NhbGwpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgfSAgICANCisNCisgICAgcXNlcl92b2ljZV9zZXRfbXNkID0gKGludCAoKikoaW50ICwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQpKWRsc3ltKGRsSGFuZGxlX2NhbGwsInFzZXJfdm9pY2Vfc2V0X21zZCIpOw0KKyAgICBpZihxc2VyX3ZvaWNlX3NldF9tc2QgPT0gTlVMTCkgICAgDQorICAgIHsNCisgICAgICAgIHByaW50ZigicXNlcl92b2ljZV9zZXRfbXNkIG5vdCBkZWZpbmVkIG9yIGV4cG9ydGVkIGluICVzXG4iLCBseW5xTGliUGF0aF9DYWxsKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBxc2VyX3ZvaWNlX2FkZF9lY2FsbF9pbmRoYW5kbGVyID0gKGludCAoKikodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiBoX3ZvaWNlLCBRU0VSX0VDYWxsX0luZEhhbmRsZXJGdW5jX3QsIHZvaWQqKSlkbHN5bShkbEhhbmRsZV9jYWxsLCJxc2VyX3ZvaWNlX2FkZF9lY2FsbF9pbmRoYW5kbGVyIik7DQorICAgIGlmKHFzZXJfdm9pY2VfYWRkX2VjYWxsX2luZGhhbmRsZXIgPT0gTlVMTCkgICAgDQorICAgIHsNCisgICAgICAgICAgICBwcmludGYoInFzZXJfdm9pY2VfYWRkX2VjYWxsX2luZGhhbmRsZXIgbm90IGRlZmluZWQgb3IgZXhwb3J0ZWQgaW4gJXNcbiIsIGx5bnFMaWJQYXRoX0NhbGwpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyNlbmRpZg0KICAgICANCiAgICAgcmV0ID0gcXNlcl92b2ljZV9jYWxsX2NsaWVudF9pbml0KCZoX3ZvaWNlKTsNCiAgICAgaWYocmV0ICE9IDAgKQ0KQEAgLTE3OSw2ICsyNDYsMTQgQEAKICAgICAgICAgcmV0dXJuIC0xOw0KICAgICB9DQogDQorI2lmZGVmIEVDQUxMX1NVUFBPUlQNCisgICAgcmV0ID0gcXNlcl92b2ljZV9hZGRfZWNhbGxfaW5kaGFuZGxlcigmaF92b2ljZSwgeWtfdm9pY2VfZWNhbGxfY2JfZnVuYywgTlVMTCk7DQorICAgIGlmKHJldCAhPSAwKQ0KKyAgICB7DQorICAgICAgICBwcmludGYoInFzZXJfdm9pY2VfYWRkX2VjYWxsX2luZGhhbmRsZXIgRkFJTFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisjZW5kaWYNCiANCiAgICAgcHJpbnRfaGVscCgpOw0KICAgICB3aGlsZSgxKQ0KQEAgLTI3MCw3ICszNDUsMzkgQEAKICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCisjaWZkZWYgRUNBTExfU1VQUE9SVA0KKyAgICAgICAgICAgIGNhc2UgNzoNCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBjaGFyIFBob25lTnVtWzMyXSA9IHswfTsgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBwcmludGYoInBsZWFzZSBpbnB1dCB0ZXN0IHBob25lIG51bWJlcjogXG4iKTsNCisgICAgICAgICAgICAgICAgc2NhbmYoIiVzIiwgUGhvbmVOdW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgcmV0ID0gcXNlcl92b2ljZV9zZXRfdGVzdF9udW0oJmhfdm9pY2UsIEVfUVNFUl9WT0lDRV9FQ0FMTF9TRVRfTlVNQkVSLCBQaG9uZU51bSwgc3RybGVuKFBob25lTnVtKSsxKTsNCisgICAgICAgICAgICAgICAgcHJpbnRmKCJxc2VyX3ZvaWNlX3NldF90ZXN0X251bSByZXQgPSAlZFxuIiwgcmV0KTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfSAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGNhc2UgODoNCisgICAgICAgICAgICB7ICAgDQorICAgICAgICAgICAgICAgIGludCBjYWxsX2lkID0gLTE7DQorICAgICAgICAgICAgICAgIGludCBjYXQ7DQorICAgICAgICAgICAgICAgIGludCB2YXI7DQorICAgICAgICAgICAgICAgIGludCBsZW5ndGg7DQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgIG1zZFtRU0VSX01TRF9NQVhfTEVOR1RIXT17MH07DQorDQorICAgICAgICAgICAgICAgIHByaW50ZigicGxlYXNlIGlucHV0IGVjYWxsIGNhdDogMCBtYW51YWwsIDEgYXV0b1xuIik7DQorICAgICAgICAgICAgICAgIHNjYW5mKCIlZCIsICZjYXQpOw0KKyAgICAgICAgICAgICAgICBwcmludGYoInBsZWFzZSBpbnB1dCBlY2FsbCB0eXBlOiAwIHRlc3QsIDEgZW1lcmdlbmN5XG4iKTsNCisgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwgJnZhcik7DQorICAgICAgICAgICAgICAgIHByaW50ZigicGxlYXNlIGlucHV0IG1zZCBjb250ZW50IGxlbmd0aCAobWF4IGxlbmd0aCBpcyAxNDApXG4iKTsNCisgICAgICAgICAgICAgICAgc2NhbmYoIiVkIiwgJmxlbmd0aCk7DQorICAgICAgICAgICAgICAgIHByaW50ZigicGxlYXNlIGlucHV0ICVkIHVuc2lnbmVkIGNoYXIgKDAtMjU1KTpcbiIsIGxlbmd0aCk7ICANCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeyAgDQorICAgICAgICAgICAgICAgICAgICBzY2FuZigiJWhodSIsICZtc2RbaV0pOyANCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgcmV0ID0gcXNlcl92b2ljZV9mYXN0X2VjYWxsKCZoX3ZvaWNlLCAmY2FsbF9pZCwgKEVfUVNFUl9WT0lDRV9FQ0FMTF9DQVRFR09SWV9UKSBjYXQsIChFX1FTRVJfVk9JQ0VfRUNBTExfVkFSSUFOVF9UKSB2YXIsICJudWxsIiw1LG1zZCxsZW5ndGgpOw0KKyAgICAgICAgICAgICAgICBwcmludGYoInFzZXJfdm9pY2VfZmFzdF9lY2FsbCByZXQgPSAlZCwgY2FsbCBpZCBpcyAlZFxuIiwgcmV0LCBjYWxsX2lkKTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfSAgICAgICAgICAgIA0KKyNlbmRpZg0KICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgIHByaW50X2hlbHAoKTsNCiAgICAgICAgICAgICAgICAgYnJlYWs7DQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9maWxlcy9seW5xLXFzZXItdm9pY2UtZGVtby5oIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9maWxlcy9seW5xLXFzZXItdm9pY2UtZGVtby5oCmluZGV4IDc5OTc3YjkuLjgyYmYzODggMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vZmlsZXMvbHlucS1xc2VyLXZvaWNlLWRlbW8uaAorKysgYi9jYXAvengyOTc1MjB2My9zb3VyY2VzL21ldGEtenhpYy1jdXN0b20vcmVjaXBlcy1seW5xL2x5bnEtcXNlci12b2ljZS1kZW1vL2ZpbGVzL2x5bnEtcXNlci12b2ljZS1kZW1vLmgKQEAgLTI5LDMgKzI5LDY5IEBACiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmNvbnRleHRQdHINCiApOw0KIA0KKw0KKyNpZmRlZiBFQ0FMTF9TVVBQT1JUDQorDQorI2RlZmluZSBRU0VSX01TRF9NQVhfTEVOR1RIICAxNDANCisNCit0eXBlZGVmIGVudW17IA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfU0VUX05VTUJFUiA9IDAsICAgICAvKiBTZXQgTnVtYmVyICovDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9TRVRfVVJJID0gMSwgICAgICAvKiBTZXQgVXJpICovICAgDQorfUVfUVNFUl9WT0lDRV9FQ0FMTF9TRVRfVFlQRV9UOyANCisNCit0eXBlZGVmIGVudW17DQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9DQVRfTUFOVUFMID0gMCwgICAgICAvKiBNYW51YWwgRW1lcmdlbmN5IGVDYWxsICovDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9DQVRfQVVUTyA9IDEsICAgICAvKiAgQXV0b21hdGljIEVtZXJnZW5jeSBlQ2FsbCAqLw0KK31FX1FTRVJfVk9JQ0VfRUNBTExfQ0FURUdPUllfVDsNCisNCisNCit0eXBlZGVmIGVudW17DQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9URVNUID0gMCwgICAgIC8qIFRlc3QgZUNhbGwgKi8NCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0VNRVJHRU5DWSA9IDEsICAgICAgLyogRW1lcmdlbmN5IGVDYWxsICovDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9SRUNPTkZJRyA9IDIsICAgICAvKiAgUmVjb25maWd1cmF0aW9uIGVDYWxsICovDQorfUVfUVNFUl9WT0lDRV9FQ0FMTF9WQVJJQU5UX1Q7DQorDQordHlwZWRlZiBlbnVtew0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1NFTkRJTkdfU1RBUlQgPSAxLA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1NFTkRJTkdfTVNEID0gMiwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9MTEFDS19SRUNFSVZFRCA9IDMsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfQUxBQ0tfUE9TSVRJVkVfUkVDRUlWRUQgPSA0LA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FMQUNLX0NMRUFSRE9XTl9SRUNFSVZFRCA9IDUsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfREFJTElORyA9IDksDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfQUxFUlRJTkcgPSAxMCwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9BQ1RJVkUgPSAxMSwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9ESVNDT05ORUNURUQgPSAxMiwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfQUNUSVZFID0gMTMsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX0RJU0NPTk5FQ1RFRCA9IDE0LA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FCTk9STUFMX0hBTkdVUD0xNSwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfTVNEX0FDSyA9IDIwLA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0lNU19VUERBVEVfTVNEID0gMjEsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX0lOX0JBTkRfVFJBTlNGRVIgPSAyMiwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfTVNEX05BQ0sgPSAyMywNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfU1JWQ0MgPSAyNCwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9PTkxZX0RFUkVHSVNUUkFUSU9OID0gMzEsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfTUFZX0RFUkVHSVNURVIgPSAzMiwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9QU0FQX0NBTExCQUNLX1NUQVJUID0gNDAsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfUFNBUF9DQUxMQkFDS19JTVNfVVBEQVRFX01TRCA9IDQxLA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1NFTkRJTkdfU1RBUlRfSU5fVk9JQ0U9ODAwMCwgICAgDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfVDJfVElNRVJfT1VUID0gOTAwMCwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9UNV9USU1FUl9PVVQgPSA5MDAxLA0KKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1Q2X1RJTUVSX09VVCA9IDkwMDIsDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfVDdfVElNRVJfT1VUID0gOTAwMywNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9SRURJQUxfVElNRVJfT1VUID0gOTAwNCwgICAgDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfQVVUT19BTlNfVElNRVJfT1VUID0gOTAwNSwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9BVVRPX0FOU19JTVNfVElNRVJfT1VUID0gOTAwNiwNCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9VTlNQRUNJRklFRCA9IDB4ZmZmZiwNCit9RV9RU0VSX1ZPSUNFX0VDQUxMX0lORElDQVRJT05fVDsNCisNCit0eXBlZGVmIHZvaWQgKCpRU0VSX0VDYWxsX0luZEhhbmRsZXJGdW5jX3QpDQorKA0KKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBjYWxsaWQsICAgDQorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRJQ0FUSU9OX1QgaW5kLA0KKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqY29udGV4dFB0cg0KKyk7DQorDQorDQorDQorI2VuZGlmDQorDQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9seW5xLXFzZXItdm9pY2UtZGVtby5iYiBiL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vbHlucS1xc2VyLXZvaWNlLWRlbW8uYmIKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxZmIwMTQyLi40ODBkNDJmCi0tLSBhL2NhcC96eDI5NzUyMHYzL3NvdXJjZXMvbWV0YS16eGljLWN1c3RvbS9yZWNpcGVzLWx5bnEvbHlucS1xc2VyLXZvaWNlLWRlbW8vbHlucS1xc2VyLXZvaWNlLWRlbW8uYmIKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc291cmNlcy9tZXRhLXp4aWMtY3VzdG9tL3JlY2lwZXMtbHlucS9seW5xLXFzZXItdm9pY2UtZGVtby9seW5xLXFzZXItdm9pY2UtZGVtby5iYgpAQCAtMjQsNyArMjQsNyBAQAogI0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgogZG9fY29tcGlsZSAoKSB7CiAKLQkke0NYWH0gLVdhbGwgbHlucS1xc2VyLXZvaWNlLWRlbW8uY3BwICR7TE9DQUxfTElCU30gJHtMT0NBTF9DX0lOQ0xVREVTfSAtbyBseW5xLXFzZXItdm9pY2UtZGVtbworCSR7Q1hYfSAtV2FsbCBseW5xLXFzZXItdm9pY2UtZGVtby5jcHAgJHtMT0NBTF9MSUJTfSAtREVDQUxMX1NVUFBPUlQgJHtMT0NBTF9DX0lOQ0xVREVTfSAtbyBseW5xLXFzZXItdm9pY2UtZGVtbyAKIH0KIAogZG9faW5zdGFsbCgpIHsKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItdm9pY2UvaW5jbHVkZS9seW5xLXFzZXItdm9pY2UuaCBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItdm9pY2UvaW5jbHVkZS9seW5xLXFzZXItdm9pY2UuaAppbmRleCAxZmIwZTAxLi44ZGU0OTdhIDEwMDc1NQotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLXZvaWNlL2luY2x1ZGUvbHlucS1xc2VyLXZvaWNlLmgKKysrIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtcXNlci12b2ljZS9pbmNsdWRlL2x5bnEtcXNlci12b2ljZS5oCkBAIC0xMTYsNiArMTE2LDgzIEBACiAKIAogKi8KKworI2lmZGVmIEVDQUxMX1NVUFBPUlQKKworI2RlZmluZSBRU0VSX01TRF9NQVhfTEVOR1RIICAxNDAKKwordHlwZWRlZiBlbnVteyAKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfU0VUX05VTUJFUiA9IDAsICAgICAvKiBTZXQgTnVtYmVyICovCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX1NFVF9VUkkgPSAxLCAgICAgIC8qIFNldCBVcmkgKi8gICAKK31FX1FTRVJfVk9JQ0VfRUNBTExfU0VUX1RZUEVfVDsgCisKK3R5cGVkZWYgZW51bXsKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfQ0FUX01BTlVBTCA9IDAsICAgICAgLyogTWFudWFsIEVtZXJnZW5jeSBlQ2FsbCAqLworICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9DQVRfQVVUTyA9IDEsICAgICAvKiAgQXV0b21hdGljIEVtZXJnZW5jeSBlQ2FsbCAqLworfUVfUVNFUl9WT0lDRV9FQ0FMTF9DQVRFR09SWV9UOworCisKK3R5cGVkZWYgZW51bXsKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfVEVTVCA9IDAsICAgICAvKiBUZXN0IGVDYWxsICovCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0VNRVJHRU5DWSA9IDEsICAgICAgLyogRW1lcmdlbmN5IGVDYWxsICovCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX1JFQ09ORklHID0gMiwgICAgIC8qICBSZWNvbmZpZ3VyYXRpb24gZUNhbGwgKi8KK31FX1FTRVJfVk9JQ0VfRUNBTExfVkFSSUFOVF9UOworCit0eXBlZGVmIGVudW17CisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9TRU5ESU5HX1NUQVJUID0gMSwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1NFTkRJTkdfTVNEID0gMiwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0xMQUNLX1JFQ0VJVkVEID0gMywKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FMQUNLX1BPU0lUSVZFX1JFQ0VJVkVEID0gNCwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FMQUNLX0NMRUFSRE9XTl9SRUNFSVZFRCA9IDUsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9EQUlMSU5HID0gOSwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FMRVJUSU5HID0gMTAsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9BQ1RJVkUgPSAxMSwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0RJU0NPTk5FQ1RFRCA9IDEyLAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX0FDVElWRSA9IDEzLAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX0RJU0NPTk5FQ1RFRCA9IDE0LAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfQUJOT1JNQUxfSEFOR1VQPTE1LAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX01TRF9BQ0sgPSAyMCwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0lNU19VUERBVEVfTVNEID0gMjEsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfSU5fQkFORF9UUkFOU0ZFUiA9IDIyLAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfSU1TX01TRF9OQUNLID0gMjMsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9JTVNfU1JWQ0MgPSAyNCwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX09OTFlfREVSRUdJU1RSQVRJT04gPSAzMSwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX01BWV9ERVJFR0lTVEVSID0gMzIsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9QU0FQX0NBTExCQUNLX1NUQVJUID0gNDAsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9QU0FQX0NBTExCQUNLX0lNU19VUERBVEVfTVNEID0gNDEsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9TRU5ESU5HX1NUQVJUX0lOX1ZPSUNFPTgwMDAsICAgIAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfVDJfVElNRVJfT1VUID0gOTAwMCwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1Q1X1RJTUVSX09VVCA9IDkwMDEsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9UNl9USU1FUl9PVVQgPSA5MDAyLAorICAgIEVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRfVDdfVElNRVJfT1VUID0gOTAwMywKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1JFRElBTF9USU1FUl9PVVQgPSA5MDA0LCAgICAKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX0FVVE9fQU5TX1RJTUVSX09VVCA9IDkwMDUsCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORF9BVVRPX0FOU19JTVNfVElNRVJfT1VUID0gOTAwNiwKKyAgICBFX1FTRVJfVk9JQ0VfRUNBTExfSU5EX1VOU1BFQ0lGSUVEID0gMHhmZmZmLAorfUVfUVNFUl9WT0lDRV9FQ0FMTF9JTkRJQ0FUSU9OX1Q7CisKK3R5cGVkZWYgdm9pZCAoKlFTRVJfRUNhbGxfSW5kSGFuZGxlckZ1bmNfdCkKKygKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBjYWxsaWQsICAgCisgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0lORElDQVRJT05fVCBpbmQsCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmNvbnRleHRQdHIKKyk7CisKK2ludCBxc2VyX3ZvaWNlX3NldF90ZXN0X251bSh2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUqICAgICAgIGhfdm9pY2UsRV9RU0VSX1ZPSUNFX0VDQUxMX1NFVF9UWVBFX1QgdHlwZSwgY29uc3QgY2hhciAqdGVzdF9udW0sIGludCB0ZXN0X251bV9sZW5ndGgpOworaW50IHFzZXJfdm9pY2VfZmFzdF9lY2FsbCh2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUqICAgICAgIGhfdm9pY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgKmNhbGxfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICBFX1FTRVJfVk9JQ0VfRUNBTExfQ0FURUdPUllfVCBjYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBFX1FTRVJfVk9JQ0VfRUNBTExfVkFSSUFOVF9UIHZhcmlhbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGRyX2xlbmd0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptc2RfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtc2RfbGVuZ3RoKTsgIC8vbXNkX2xlbmd0aCBzaG91bGQgPD0gUVNFUl9NU0RfTUFYX0xFTkdUSAoraW50IHFzZXJfdm9pY2Vfc2V0X21zZCggaW50IGNhbGxpZCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNkX2RhdGEsIGludCBtc2RfbGVuZ3RoKTsgLy8gbXNkX2xlbmd0aCBzaG91bGQgPD0gUVNFUl9NU0RfTUFYX0xFTkdUSAoraW50IHFzZXJfdm9pY2VfYWRkX2VjYWxsX2luZGhhbmRsZXIodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiAgICAgICAgICBoX3ZvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTRVJfRUNhbGxfSW5kSGFuZGxlckZ1bmNfdCAgIGhhbmRsZXJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRQdHIpOworCisjZW5kaWYKICAgICAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtcXNlci12b2ljZS9seW5xLXFzZXItdm9pY2UuY3BwIGIvY2FwL3p4Mjk3NTIwdjMvc3JjL2x5bnEvbGliL2xpYmx5bnEtcXNlci12b2ljZS9seW5xLXFzZXItdm9pY2UuY3BwCmluZGV4IGQzMmE2OWUuLjdkNjg2OTUgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItdm9pY2UvbHlucS1xc2VyLXZvaWNlLmNwcAorKysgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLXZvaWNlL2x5bnEtcXNlci12b2ljZS5jcHAKQEAgLTE5LDYgKzE5LDExIEBACiAjZGVmaW5lIE1JTl9WT0xVTUUgMAogI2RlZmluZSBNQVhfVk9MVU1FIDUKIAorI2lmZGVmIEVDQUxMX1NVUFBPUlQKK3N0YXRpYyBwdGhyZWFkX3Qgc19seW5xX2VjYWxsX3RpZCA9IC0xOworc3RhdGljIFFTRVJfRUNhbGxfSW5kSGFuZGxlckZ1bmNfdCAgIHNfZWNhbGxfY2IgPSBOVUxMOworc3RhdGljIGludCBzX2VjYWxsX3RocmVhZF9zdGF0dXMgPSAwOworI2VuZGlmCiAKIHN0YXRpYyBwdGhyZWFkX3Qgc19seW5xX3ZvaWNlX3RpZCA9IC0xOwogc3RhdGljIFFTRVJfVm9pY2VDYWxsX1N0YXRlSGFuZGxlckZ1bmNfdCAgIHNfdm9pY2VfY2IgPSBOVUxMOwpAQCAtMTEyLDYgKzExNywyNCBAQAogICAgICAgICBMWUVSUkxPRygiaW5pdCBmaXJzdCIpOwogICAgICAgICByZXR1cm4gUkVTVUxUX0VSUk9SOwogICAgIH0KKworCisjaWZkZWYgRUNBTExfU1VQUE9SVCAgICAKKyAgICBzX2VjYWxsX3RocmVhZF9zdGF0dXMgPSAwOworCisgICAgaWYoc19seW5xX2VjYWxsX3RpZCE9LTEpCisgICAgeworICAgICAgICBpbnQgcmV0ID0gcHRocmVhZF9jYW5jZWwoc19seW5xX2VjYWxsX3RpZCk7CisgICAgICAgIExZSU5GTE9HKCJwdGhyZWFkIGNhbmNlbCB3YWl0aW5nIHVyYyB0aHJlYWQsIHJldCA9ICVkIixyZXQpOyAgICAgICAgICAgIAorICAKKyAgICAgICAgcmV0ID0gcHRocmVhZF9qb2luKHNfbHlucV9lY2FsbF90aWQsTlVMTCk7CisgICAgICAgIExZSU5GTE9HKCJwdGhyZWFkIGpvaW4gd2FpdGluZyB1cmMgdGhyZWFkIHJldCA9ICVkIixyZXQpOworICAgICAgICBzX2x5bnFfZWNhbGxfdGlkID0tMTsKKyAgICB9CisJCisgICAgc19lY2FsbF9jYj1OVUxMOworI2VuZGlmCisKICAgICByZXR1cm4gbHlucV9kZWluaXRfY2FsbCgpOwogfQogCkBAIC0yMzUsNSArMjU4LDg5IEBACiAKIH0KIAorI2lmZGVmIEVDQUxMX1NVUFBPUlQKK2ludCBxc2VyX3ZvaWNlX2Zhc3RfZWNhbGwodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiAgICAgICBoX3ZvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICpjYWxsX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX0NBVEVHT1JZX1QgY2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgRV9RU0VSX1ZPSUNFX0VDQUxMX1ZBUklBTlRfVCB2YXJpYW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYWRkciwgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRkcl9sZW5ndGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNkX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbXNkX2xlbmd0aCkKK3sgCisgICAgaWYoaF92b2ljZSA9PSBOVUxMIHx8ICgqaF92b2ljZSkgPT0gMCApCisgICAgeworICAgICAgICBMWUVSUkxPRygiJXMgaW5wdXQgZXJyb3IiLCBfX2Z1bmNfXyk7CisgICAgICAgIHJldHVybiBSRVNVTFRfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIGx5bnFfZmFzdF9lY2FsbChjYWxsX2lkLChMWU5RX0VDYWxsX0NhdGVnb3J5KSBjYXQsKExZTlFfRUNhbGxfVmFyaWFudCkgdmFyaWFudCxhZGRyLGFkZHJfbGVuZ3RoLG1zZF9kYXRhLG1zZF9sZW5ndGgpOworfQorCitpbnQgcXNlcl92b2ljZV9zZXRfdGVzdF9udW0odm9pY2VfY2xpZW50X2hhbmRsZV90eXBlKiAgICAgICBoX3ZvaWNlLEVfUVNFUl9WT0lDRV9FQ0FMTF9TRVRfVFlQRV9UIHR5cGUsIGNvbnN0IGNoYXIgKnRlc3RfbnVtLCBpbnQgdGVzdF9udW1fbGVuZ3RoKQoreworICAgIGlmKGhfdm9pY2UgPT0gTlVMTCB8fCAoKmhfdm9pY2UpID09IDAgKQorICAgIHsKKyAgICAgICAgTFlFUlJMT0coIiVzIGlucHV0IGVycm9yIiwgX19mdW5jX18pOworICAgICAgICByZXR1cm4gUkVTVUxUX0VSUk9SOworICAgIH0gICAgICAgICAgICAgIAorCisgICAgcmV0dXJuIGx5bnFfc2V0X3Rlc3RfbnVtKChMWU5RX0VDYWxsX1NldF9UeXBlKSB0eXBlLCB0ZXN0X251bSwgdGVzdF9udW1fbGVuZ3RoKTsKK30KKworaW50IHFzZXJfdm9pY2Vfc2V0X21zZChpbnQgY2FsbGlkLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2RfZGF0YSwgaW50IG1zZF9sZW5ndGgpCit7ICAgICAgICAgICAKKyAgICByZXR1cm4gbHlucV9zZXRfbXNkKGNhbGxpZCwgbXNkX2RhdGEsIG1zZF9sZW5ndGgpOworfQorCit2b2lkICplY2FsbF90aHJlYWRfcmVjdih2b2lkICpjb250ZXh0KQoreworICAgIGludCBoYW5kbGUgPSAwOworICAgIExZTlFfRUNhbGxfSW5kaWNhdGlvbiBlQ2FsbF9JbmRpY2F0aW9uOworICAgIHdoaWxlIChzX2VjYWxsX3RocmVhZF9zdGF0dXMpCisgICAgeworICAgICAgICBseW5xX3dhaXRfZWNhbGxfaW5kaWNhdGlvbigmaGFuZGxlLCAmZUNhbGxfSW5kaWNhdGlvbik7CisgICAgICAgIGlmKHNfZWNhbGxfdGhyZWFkX3N0YXR1cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfSAgICAgICAKKyAgICAgICAKKyAgICAgICAgaWYgKHNfZWNhbGxfY2IgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgc19lY2FsbF9jYigmaGFuZGxlLChFX1FTRVJfVk9JQ0VfRUNBTExfSU5ESUNBVElPTl9UKSBlQ2FsbF9JbmRpY2F0aW9uLGNvbnRleHQpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitpbnQgcXNlcl92b2ljZV9hZGRfZWNhbGxfaW5kaGFuZGxlcih2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUqICAgICAgICAgIGhfdm9pY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVNFUl9FQ2FsbF9JbmRIYW5kbGVyRnVuY190ICAgaGFuZGxlclB0ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRQdHIpCit7CisgICAgaWYoaF92b2ljZSA9PSBOVUxMIHx8ICgqaF92b2ljZSkgPT0gMCB8fCBoYW5kbGVyUHRyPT0gTlVMTCkKKyAgICB7CisgICAgICAgIExZRVJSTE9HKCJpbnB1dCBlcnJvciIpOworICAgICAgICByZXR1cm4gUkVTVUxUX0VSUk9SOworICAgIH0KKyAgICBpZiAoc19lY2FsbF9jYiAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgTFlFUlJMT0coIlRoZSBleGlzdGluZyBzdGF0ZSBoYW5kbGUgZG9lcyBub3QgbmVlZCB0byBiZSBhZGRlZCIpOworICAgICAgICByZXR1cm4gUkVTVUxUX0VSUk9SOworICAgIH0KKyAgICBzX2VjYWxsX2NiID0gaGFuZGxlclB0cjsKKyAgICBzX2VjYWxsX3RocmVhZF9zdGF0dXMgPSAxOworICAgIGludCBydCA9IHB0aHJlYWRfY3JlYXRlKCZzX2x5bnFfZWNhbGxfdGlkLCBOVUxMLCBlY2FsbF90aHJlYWRfcmVjdiwgY29udGV4dFB0cik7CisgICAgaWYocnQgPCAwKQorICAgIHsKKyAgICAgICAgTFlEQkdMT0coInFzZXJfdm9pY2VfY2FsbF9hZGRzdGF0ZWhhbmRsZXIgcHRocmVhZF9jcmVhdGUgZXJyb3IhISFcbiIpOworICAgICAgICBzX2VjYWxsX2NiID0gTlVMTDsKKyAgICAgICAgc19lY2FsbF90aHJlYWRfc3RhdHVzID0gMDsKKyAgICAgICAgc19seW5xX2VjYWxsX3RpZCA9IC0xOworICAgICAgICByZXR1cm4gUkVTVUxUX0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gUkVTVUxUX09LOworfQorI2VuZGlmCisKIERFRklORV9MWU5RX0xJQl9MT0coTFlOUV9RU0VSX0NBTEwpCiAKZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItdm9pY2UvbWFrZWZpbGUgYi9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLXZvaWNlL21ha2VmaWxlCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYjViN2QzNi4uMjQxY2RlYwotLS0gYS9jYXAvengyOTc1MjB2My9zcmMvbHlucS9saWIvbGlibHlucS1xc2VyLXZvaWNlL21ha2VmaWxlCisrKyBiL2NhcC96eDI5NzUyMHYzL3NyYy9seW5xL2xpYi9saWJseW5xLXFzZXItdm9pY2UvbWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiAgICAgICAgICAgICAgICAgLWZsdG8gXAogICAgICAgICAgICAgICAgIC1mUElDIFwKICAgICAgICAgICAgICAgICAtZnBlcm1pc3NpdmUgXAorICAgICAgICAgICAgICAgIC1ERUNBTExfU1VQUE9SVCBcCiAKIAogCg==